diff options
author | h-east <h.east.727@gmail.com> | 2024-09-26 16:01:57 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-09-26 16:01:57 +0200 |
commit | 25876a6cdd439054d0b3f920ccca0a435481de15 (patch) | |
tree | 121944ed52448915568da7b5c08b27481babb2a7 | |
parent | d9af78b9450362847b344f8dc0f68d015b428d03 (diff) |
patch 9.1.0742: getcmdprompt() implementation can be improvedv9.1.0742
Problem: getcmdprompt() implementation can be improved
Solution: Improve and simplify it (h-east)
closes: #15743
Signed-off-by: h-east <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r-- | src/evalfunc.c | 2 | ||||
-rw-r--r-- | src/ex_getln.c | 27 | ||||
-rw-r--r-- | src/proto/ex_getln.pro | 1 | ||||
-rw-r--r-- | src/testdir/test_cmdline.vim | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 15 insertions, 28 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 7c096a261e..67104eaf2c 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -3780,8 +3780,6 @@ f_confirm(typval_T *argvars UNUSED, typval_T *rettv UNUSED) message = tv_get_string_chk(&argvars[0]); if (message == NULL) error = TRUE; - else - set_prompt(message); if (argvars[1].v_type != VAR_UNKNOWN) { buttons = tv_get_string_buf_chk(&argvars[1], buf); diff --git a/src/ex_getln.c b/src/ex_getln.c index 61f8379df5..ef7ca9186d 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -30,7 +30,6 @@ static cmdline_info_T ccline; #ifdef FEAT_EVAL static int new_cmdpos; // position set by set_cmdline_pos() -static char_u current_prompt[CMDBUFFSIZE + 1] = ""; #endif static int extra_char = NUL; // extra character to display when redrawing @@ -50,9 +49,6 @@ static void alloc_cmdbuff(int len); static void draw_cmdline(int start, int len); static void save_cmdline(cmdline_info_T *ccp); static void restore_cmdline(cmdline_info_T *ccp); -#ifdef FEAT_EVAL -static char_u *get_prompt(void); -#endif static int cmdline_paste(int regname, int literally, int remcr); static void redrawcmdprompt(void); static int ccheck_abbr(int); @@ -4236,24 +4232,6 @@ f_getcmdline(typval_T *argvars UNUSED, typval_T *rettv) } /* - * Get current command line prompt. - */ - static char_u * -get_prompt(void) -{ - return current_prompt; -} - -/* - * Set current command line prompt. - */ - void -set_prompt(char_u* str) -{ - vim_strncpy(current_prompt, str, sizeof(current_prompt) - 1); -} - -/* * "getcmdpos()" function */ void @@ -4272,7 +4250,8 @@ f_getcmdprompt(typval_T *argvars UNUSED, typval_T *rettv) { cmdline_info_T *p = get_ccline_ptr(); rettv->v_type = VAR_STRING; - rettv->vval.v_string = p != NULL ? vim_strsave(get_prompt()) : NULL; + rettv->vval.v_string = p != NULL && p->cmdprompt != NULL ? + vim_strsave(p->cmdprompt) : NULL; } /* @@ -4898,8 +4877,6 @@ get_user_input( cmd_silent = FALSE; // Want to see the prompt. if (prompt != NULL) { - set_prompt(prompt); - // Only the part of the message after the last NL is considered as // prompt for the command line p = vim_strrchr(prompt, '\n'); diff --git a/src/proto/ex_getln.pro b/src/proto/ex_getln.pro index 8cf75b7d36..1ab3b1ccaf 100644 --- a/src/proto/ex_getln.pro +++ b/src/proto/ex_getln.pro @@ -40,7 +40,6 @@ void f_setcmdline(typval_T *argvars, typval_T *rettv); void f_setcmdpos(typval_T *argvars, typval_T *rettv); int get_cmdline_firstc(void); int get_list_range(char_u **str, int *num1, int *num2); -void set_prompt(char_u* str); char *did_set_cedit(optset_T *args); int is_in_cmdwin(void); char_u *script_get(exarg_T *eap, char_u *cmd); diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 17717d2ab8..708f211c69 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -1650,6 +1650,17 @@ func Test_getcmdtype_getcmdprompt() call feedkeys(":call input('Answer?')\<CR>a\<CR>\<ESC>", "xt") call assert_equal('Answer?', g:cmdprompt) call assert_equal('', getcmdprompt()) + call feedkeys(":\<CR>\<ESC>", "xt") + call assert_equal('', g:cmdprompt) + call assert_equal('', getcmdprompt()) + + let str = "C" .. repeat("c", 1023) .. "xyz" + call feedkeys(":call input('" .. str .. "')\<CR>\<CR>\<ESC>", "xt") + call assert_equal(str, g:cmdprompt) + + call feedkeys(':call input("Msg1\nMessage2\nAns?")' .. "\<CR>b\<CR>\<ESC>", "xt") + call assert_equal('Ans?', g:cmdprompt) + call assert_equal('', getcmdprompt()) augroup test_CmdlineEnter au! diff --git a/src/version.c b/src/version.c index 72e443aa00..f127fa12ea 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 742, +/**/ 741, /**/ 740, |