mirror of
https://github.com/neovim/neovim.git
synced 2025-10-02 07:58:35 +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:
@@ -1604,13 +1604,20 @@ void edit_putchar(int c, bool highlight)
|
||||
}
|
||||
}
|
||||
|
||||
// Return the effective prompt for the current buffer.
|
||||
char_u *prompt_text(void)
|
||||
/// Return the effective prompt for the specified buffer.
|
||||
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) {
|
||||
return (char_u *)"% ";
|
||||
}
|
||||
return curbuf->b_prompt_text;
|
||||
if (buf->b_prompt_text == NULL) {
|
||||
return (char_u *)"% ";
|
||||
}
|
||||
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.
|
||||
|
@@ -251,6 +251,7 @@ return {
|
||||
pow={args=2},
|
||||
prevnonblank={args=1},
|
||||
printf={args=varargs(1)},
|
||||
prompt_getprompt={args=1},
|
||||
prompt_setcallback={args={2, 2}},
|
||||
prompt_setinterrupt={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;
|
||||
}
|
||||
|
||||
/// "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
|
||||
static void f_prompt_setprompt(typval_T *argvars,
|
||||
typval_T *rettv, FunPtr fptr)
|
||||
|
@@ -156,4 +156,40 @@ func Test_prompt_buffer_edit()
|
||||
call assert_equal(0, prompt_setprompt([], ''))
|
||||
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
|
||||
|
Reference in New Issue
Block a user