summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorh-east <h.east.727@gmail.com>2024-09-26 16:01:57 +0200
committerChristian Brabandt <cb@256bit.org>2024-09-26 16:01:57 +0200
commit25876a6cdd439054d0b3f920ccca0a435481de15 (patch)
tree121944ed52448915568da7b5c08b27481babb2a7
parentd9af78b9450362847b344f8dc0f68d015b428d03 (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.c2
-rw-r--r--src/ex_getln.c27
-rw-r--r--src/proto/ex_getln.pro1
-rw-r--r--src/testdir/test_cmdline.vim11
-rw-r--r--src/version.c2
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,