patch 9.1.0742: getcmdprompt() implementation can be improved

Commit: 
https://github.com/vim/vim/commit/25876a6cdd439054d0b3f920ccca0a435481de15
Author: h-east <h.east....@gmail.com>
Date:   Thu Sep 26 16:01:57 2024 +0200

    patch 9.1.0742: getcmdprompt() implementation can be improved
    
    Problem:  getcmdprompt() implementation can be improved
    Solution: Improve and simplify it (h-east)
    
    closes: #15743
    
    Signed-off-by: h-east <h.east....@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/evalfunc.c b/src/evalfunc.c
index 7c096a261..67104eaf2 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 61f8379df..ef7ca9186 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);
@@ -4235,24 +4231,6 @@ f_getcmdline(typval_T *argvars UNUSED, typval_T *rettv)
     rettv->vval.v_string = get_cmdline_str();
 }
 
-/*
- * 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
  */
@@ -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, '
');
diff --git a/src/proto/ex_getln.pro b/src/proto/ex_getln.pro
index 8cf75b7d3..1ab3b1cca 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 17717d2ab..708f211c6 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
Message2
Ans?")' .. "\<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 72e443aa0..f127fa12e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    742,
 /**/
     741,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1stpGp-009zvs-VO%40256bit.org.

Raspunde prin e-mail lui