mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
vim-patch:8.2.1588: cannot read back the prompt of a prompt buffer
Problem: Cannot read back the prompt of a prompt buffer. Solution: Add prompt_getprompt(). (Ben Jackson, closes vim/vim#6851)077cc7aa0e
Updated prompt_getprompt() doc tocb80aa2d53
and removed mention of method syntax usage (not supported by Nvim).
This commit is contained in:
@@ -2309,6 +2309,7 @@ perleval({expr}) any evaluate |perl| expression
|
|||||||
pow({x}, {y}) Float {x} to the power of {y}
|
pow({x}, {y}) Float {x} to the power of {y}
|
||||||
prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
|
prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
|
||||||
printf({fmt}, {expr1}...) String format text
|
printf({fmt}, {expr1}...) String format text
|
||||||
|
prompt_getprompt({buf}) String get prompt text
|
||||||
prompt_setcallback({buf}, {expr}) none set prompt callback function
|
prompt_setcallback({buf}, {expr}) none set prompt callback function
|
||||||
prompt_setinterrupt({buf}, {text}) none set prompt interrupt function
|
prompt_setinterrupt({buf}, {text}) none set prompt interrupt function
|
||||||
prompt_setprompt({buf}, {text}) none set prompt text
|
prompt_setprompt({buf}, {text}) none set prompt text
|
||||||
@@ -6746,6 +6747,13 @@ printf({fmt}, {expr1} ...) *printf()*
|
|||||||
of "%" items. If there are not sufficient or too many
|
of "%" items. If there are not sufficient or too many
|
||||||
arguments an error is given. Up to 18 arguments can be used.
|
arguments an error is given. Up to 18 arguments can be used.
|
||||||
|
|
||||||
|
prompt_getprompt({buf}) *prompt_getprompt()*
|
||||||
|
Returns the effective prompt text for buffer {buf}. {buf} can
|
||||||
|
be a buffer name or number. See |prompt-buffer|.
|
||||||
|
|
||||||
|
If the buffer doesn't exist or isn't a prompt buffer, an empty
|
||||||
|
string is returned.
|
||||||
|
|
||||||
prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
|
prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
|
||||||
Set prompt callback for buffer {buf} to {expr}. When {expr}
|
Set prompt callback for buffer {buf} to {expr}. When {expr}
|
||||||
is an empty string the callback is removed. This has only
|
is an empty string the callback is removed. This has only
|
||||||
|
@@ -978,6 +978,7 @@ Tags: *tag-functions*
|
|||||||
settagstack() modify the tag stack of a window
|
settagstack() modify the tag stack of a window
|
||||||
|
|
||||||
Prompt Buffer: *promptbuffer-functions*
|
Prompt Buffer: *promptbuffer-functions*
|
||||||
|
prompt_getprompt() get the effective prompt text for a buffer
|
||||||
prompt_setcallback() set prompt callback for a buffer
|
prompt_setcallback() set prompt callback for a buffer
|
||||||
prompt_setinterrupt() set interrupt callback for a buffer
|
prompt_setinterrupt() set interrupt callback for a buffer
|
||||||
prompt_setprompt() set the prompt text for a buffer
|
prompt_setprompt() set the prompt text for a buffer
|
||||||
|
@@ -1604,13 +1604,20 @@ void edit_putchar(int c, bool highlight)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the effective prompt for the current buffer.
|
/// Return the effective prompt for the specified buffer.
|
||||||
char_u *prompt_text(void)
|
char_u *buf_prompt_text(const buf_T *const buf)
|
||||||
|
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
|
||||||
{
|
{
|
||||||
if (curbuf->b_prompt_text == NULL) {
|
if (buf->b_prompt_text == NULL) {
|
||||||
return (char_u *)"% ";
|
return (char_u *)"% ";
|
||||||
}
|
}
|
||||||
return curbuf->b_prompt_text;
|
return buf->b_prompt_text;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the effective prompt for the current buffer.
|
||||||
|
char_u *prompt_text(void) FUNC_ATTR_WARN_UNUSED_RESULT
|
||||||
|
{
|
||||||
|
return buf_prompt_text(curbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepare for prompt mode: Make sure the last line has the prompt text.
|
// Prepare for prompt mode: Make sure the last line has the prompt text.
|
||||||
|
@@ -251,6 +251,7 @@ return {
|
|||||||
pow={args=2},
|
pow={args=2},
|
||||||
prevnonblank={args=1},
|
prevnonblank={args=1},
|
||||||
printf={args=varargs(1)},
|
printf={args=varargs(1)},
|
||||||
|
prompt_getprompt={args=1},
|
||||||
prompt_setcallback={args={2, 2}},
|
prompt_setcallback={args={2, 2}},
|
||||||
prompt_setinterrupt={args={2, 2}},
|
prompt_setinterrupt={args={2, 2}},
|
||||||
prompt_setprompt={args={2, 2}},
|
prompt_setprompt={args={2, 2}},
|
||||||
|
@@ -6491,6 +6491,26 @@ static void f_prompt_setinterrupt(typval_T *argvars,
|
|||||||
buf->b_prompt_interrupt= interrupt_callback;
|
buf->b_prompt_interrupt= interrupt_callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// "prompt_getprompt({buffer})" function
|
||||||
|
void f_prompt_getprompt(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||||
|
FUNC_ATTR_NONNULL_ALL
|
||||||
|
{
|
||||||
|
// return an empty string by default, e.g. it's not a prompt buffer
|
||||||
|
rettv->v_type = VAR_STRING;
|
||||||
|
rettv->vval.v_string = NULL;
|
||||||
|
|
||||||
|
buf_T *const buf = tv_get_buf_from_arg(&argvars[0]);
|
||||||
|
if (buf == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bt_prompt(buf)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rettv->vval.v_string = vim_strsave(buf_prompt_text(buf));
|
||||||
|
}
|
||||||
|
|
||||||
// "prompt_setprompt({buffer}, {text})" function
|
// "prompt_setprompt({buffer}, {text})" function
|
||||||
static void f_prompt_setprompt(typval_T *argvars,
|
static void f_prompt_setprompt(typval_T *argvars,
|
||||||
typval_T *rettv, FunPtr fptr)
|
typval_T *rettv, FunPtr fptr)
|
||||||
|
@@ -156,4 +156,40 @@ func Test_prompt_buffer_edit()
|
|||||||
call assert_equal(0, prompt_setprompt([], ''))
|
call assert_equal(0, prompt_setprompt([], ''))
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_prompt_buffer_getbufinfo()
|
||||||
|
new
|
||||||
|
call assert_equal('', prompt_getprompt('%'))
|
||||||
|
call assert_equal('', prompt_getprompt(bufnr('%')))
|
||||||
|
let another_buffer = bufnr('%')
|
||||||
|
|
||||||
|
set buftype=prompt
|
||||||
|
call assert_equal('% ', prompt_getprompt('%'))
|
||||||
|
call prompt_setprompt( bufnr( '%' ), 'This is a test: ' )
|
||||||
|
call assert_equal('This is a test: ', prompt_getprompt('%'))
|
||||||
|
|
||||||
|
call prompt_setprompt( bufnr( '%' ), '' )
|
||||||
|
" Nvim doesn't support method call syntax yet.
|
||||||
|
" call assert_equal('', '%'->prompt_getprompt())
|
||||||
|
call assert_equal('', prompt_getprompt('%'))
|
||||||
|
|
||||||
|
call prompt_setprompt( bufnr( '%' ), 'Another: ' )
|
||||||
|
call assert_equal('Another: ', prompt_getprompt('%'))
|
||||||
|
let another = bufnr('%')
|
||||||
|
|
||||||
|
new
|
||||||
|
|
||||||
|
call assert_equal('', prompt_getprompt('%'))
|
||||||
|
call assert_equal('Another: ', prompt_getprompt(another))
|
||||||
|
|
||||||
|
" Doesn't exist
|
||||||
|
let buffers_before = len( getbufinfo() )
|
||||||
|
call assert_equal('', prompt_getprompt( bufnr('$') + 1))
|
||||||
|
call assert_equal(buffers_before, len( getbufinfo()))
|
||||||
|
|
||||||
|
" invalid type
|
||||||
|
call assert_fails('call prompt_getprompt({})', 'E728:')
|
||||||
|
|
||||||
|
%bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Reference in New Issue
Block a user