patch 9.1.0049: Make "[Command Line]" a special buffer name

Commit: 
https://github.com/vim/vim/commit/1fb41032060df09ca2640dc49541f11062f6dfaa
Author: Sean Dewar <seande...@users.noreply.github.com>
Date:   Wed Aug 16 17:15:05 2023 +0100

    patch 9.1.0049: Make "[Command Line]" a special buffer name
    
    Problem:  E95 is possible if a buffer called "[Command Line]" already
              exists when opening the cmdwin. This can also happen if the
              cmdwin's buffer could not be deleted when closing.
    
    Solution: Un-name the cmdwin buffer, and give it a special name instead,
              similar to what's done for quickfix buffers and for unnamed
              prompt and scratch buffers. As a result, BufFilePre/Post are
              no longer fired when opening the cmdwin. Add a "command" key
              to the dictionary returned by getbufinfo() to differentiate
              the cmdwin buffer instead. (Sean Dewar)
    
    NOTE: This is technically a breaking change... maybe this needs a different
    solution? (Or maybe this issue can be ignored...)
    
    A GitHub search reveals some plugins expect the old behaviour. However, 
many of
    those plugins also do not seem to account for the string being translated, 
so
    they are subtly broken anyway (not withstanding the fact that you can call 
any
    old buffer "[Command Line]" too...)
    
    closes: #12819
    
    Signed-off-by: Sean Dewar <seande...@users.noreply.github.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 1236703fc..9b706ba20 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt*  For Vim version 9.1.  Last change: 2024 Jan 13
+*builtin.txt*  For Vim version 9.1.  Last change: 2024 Jan 23
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -3244,6 +3244,8 @@ getbufinfo([{dict}])
                        bufnr           Buffer number.
                        changed         TRUE if the buffer is modified.
                        changedtick     Number of changes made to the buffer.
+                       command         TRUE if the buffer belongs to the
+                                       command-line window |cmdwin|.
                        hidden          TRUE if the buffer is hidden.
                        lastused        Timestamp in seconds, like
                                        |localtime()|, when the buffer was
diff --git a/src/buffer.c b/src/buffer.c
index 64e492647..62c396a53 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5936,6 +5936,8 @@ buf_spname(buf_T *buf)
 #endif
        if (buf->b_fname != NULL)
            return buf->b_fname;
+       if (buf == cmdwin_buf)
+           return (char_u *)_("[Command Line]");
 #ifdef FEAT_JOB_CHANNEL
        if (bt_prompt(buf))
            return (char_u *)_("[Prompt]");
diff --git a/src/evalbuffer.c b/src/evalbuffer.c
index e611c52e4..6ec734d37 100644
--- a/src/evalbuffer.c
+++ b/src/evalbuffer.c
@@ -653,6 +653,7 @@ get_buffer_info(buf_T *buf)
     dict_add_number(dict, "changedtick", CHANGEDTICK(buf));
     dict_add_number(dict, "hidden",
                            buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0);
+    dict_add_number(dict, "command", buf == cmdwin_buf);
 
     // Get a reference to buffer variables
     dict_add_dict(dict, "variables", buf->b_vars);
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 139bb6fa2..1731d2952 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4537,9 +4537,6 @@ open_cmdwin(void)
     }
     cmdwin_buf = curbuf;
 
-    apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
-    (void)setfname(curbuf, (char_u *)_("[Command Line]"), NULL, TRUE);
-    apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
     set_option_value_give_err((char_u *)"bt",
                                            0L, (char_u *)"nofile", OPT_LOCAL);
     curbuf->b_p_ma = TRUE;
diff --git a/src/testdir/test_cmdwin.vim b/src/testdir/test_cmdwin.vim
index 494c8065f..33a266262 100644
--- a/src/testdir/test_cmdwin.vim
+++ b/src/testdir/test_cmdwin.vim
@@ -569,4 +569,18 @@ func Test_cmdwin_interrupted()
   delfunc CheckInterrupted
 endfunc
 
+func Test_cmdwin_existing_bufname()
+  func CheckName()
+    call assert_equal(1, getbufinfo('')[0].command)
+    call assert_equal(0, getbufinfo('[Command Line]')[0].command)
+    call assert_match('#a\s*"\[Command Line\]"', execute('ls'))
+    call assert_match('%a\s*"\[Command Line\]"', execute('ls'))
+  endfunc
+
+  file [Command Line]
+  call feedkeys("q::call CheckName()\<CR>:q\<CR>", 'ntx')
+  0file
+  delfunc CheckName
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index 0fd53b501..fb9c3ded5 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -3158,7 +3158,7 @@ func Test_normal50_commandline()
   CheckFeature cmdline_hist
 
   func! DoTimerWork(id)
-    call assert_equal('[Command Line]', bufname(''))
+    call assert_equal(1, getbufinfo('')[0].command)
 
     " should fail, with E11, but does fail with E23?
     "call feedkeys("\<c-^>", 'tm')
diff --git a/src/version.c b/src/version.c
index 63ef3632f..2a54c4794 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 */
+/**/
+    49,
 /**/
     48,
 /**/

-- 
-- 
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/E1rSOoR-009hfB-Hd%40256bit.org.

Raspunde prin e-mail lui