patch 9.1.0507: hard to detect cursor movement in the command line

Commit: 
https://github.com/vim/vim/commit/d09521476f41dd8dbddb25b7acd0b299f9bf94d3
Author: Shougo Matsushita <shougo.ma...@gmail.com>
Date:   Thu Jun 20 22:05:16 2024 +0200

    patch 9.1.0507: hard to detect cursor movement in the command line
    
    Problem:  hard to detect cursor movement in the command line
    Solution: Add the CursorMovedC autocommand
              (Shougo Matsushita)
    
    closes: #15040
    
    Signed-off-by: Shougo Matsushita <shougo.ma...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 037f89c4c..27ab2c73c 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 9.1.  Last change: 2024 May 05
+*autocmd.txt*   For Vim version 9.1.  Last change: 2024 Jun 20
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -379,6 +379,7 @@ Name                        triggered by ~
 |CursorHold|           the user doesn't press a key for a while
 |CursorHoldI|          the user doesn't press a key for a while in Insert mode
 |CursorMoved|          the cursor was moved in Normal mode
+|CursorMovedC|         the cursor was moved in the |Command-line|
 |CursorMovedI|         the cursor was moved in Insert mode
 
 |WinNewPre|            before creating a new window
@@ -748,6 +749,13 @@ CursorMoved                        After the cursor was 
moved in Normal or Visual
                                Careful: This is triggered very often, don't
                                do anything that the user does not expect or
                                that is slow.
+                                                       *CursorMovedC*
+CursorMovedC                   After the cursor was moved in the command
+                               line. Be careful not to mess up the
+                               command line, it may cause Vim to lock up.
+                               <afile> is set to a single character,
+                               indicating the type of command-line.
+                               |cmdwin-char|
                                                        *CursorMovedI*
 CursorMovedI                   After the cursor was moved in Insert mode.
                                Not triggered when the popup menu is visible.
diff --git a/runtime/doc/tags b/runtime/doc/tags
index ae8320520..4dd25ba21 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4063,6 +4063,7 @@ CursorHold-example        windows.txt     
/*CursorHold-example*
 CursorHoldI    autocmd.txt     /*CursorHoldI*
 CursorIM       mbyte.txt       /*CursorIM*
 CursorMoved    autocmd.txt     /*CursorMoved*
+CursorMovedC   autocmd.txt     /*CursorMovedC*
 CursorMovedI   autocmd.txt     /*CursorMovedI*
 D      change.txt      /*D*
 DOS    os_dos.txt      /*DOS*
diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index e33b8fa70..d50e0e8fa 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -1,4 +1,4 @@
-*version9.txt*  For Vim version 9.1.  Last change: 2024 Jun 19
+*version9.txt*  For Vim version 9.1.  Last change: 2024 Jun 20
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -41591,6 +41591,7 @@ Functions: ~
 
 Autocommands: ~
 
+|CursorMovedC|         after the cursor was moved in the comamnd-line
 |SessionWritePost|     after writing the session file |:mksession|
 |TermResponseAll|      after the terminal response to |t_RV| and others is
                        received
diff --git a/src/autocmd.c b/src/autocmd.c
index 8380f8a04..e60eac794 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -120,6 +120,7 @@ static keyvalue_T event_tab[] = {
     KEYVALUE_ENTRY(EVENT_CURSORHOLD, "CursorHold"),
     KEYVALUE_ENTRY(EVENT_CURSORHOLDI, "CursorHoldI"),
     KEYVALUE_ENTRY(EVENT_CURSORMOVED, "CursorMoved"),
+    KEYVALUE_ENTRY(EVENT_CURSORMOVEDC, "CursorMovedC"),
     KEYVALUE_ENTRY(EVENT_CURSORMOVEDI, "CursorMovedI"),
     KEYVALUE_ENTRY(EVENT_DIFFUPDATED, "DiffUpdated"),
     KEYVALUE_ENTRY(EVENT_DIRCHANGED, "DirChanged"),
@@ -2250,6 +2251,7 @@ apply_autocmds_group(
                || event == EVENT_CMDLINECHANGED
                || event == EVENT_CMDLINEENTER
                || event == EVENT_CMDLINELEAVE
+               || event == EVENT_CURSORMOVEDC
                || event == EVENT_CMDWINENTER
                || event == EVENT_CMDWINLEAVE
                || event == EVENT_CMDUNDEFINED
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 3444a0e86..481b450dc 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1586,6 +1586,7 @@ getcmdline_int(
     int                res;
     int                save_msg_scroll = msg_scroll;
     int                save_State = State;     // remember State when called
+    int                save_cmdspos = ccline.cmdspos;
     int                some_key_typed = FALSE; // one of the keys was typed
     // mouse drag and release events are ignored, unless they are
     // preceded with a mouse down event
@@ -2473,6 +2474,10 @@ getcmdline_int(
  * (Sorry for the goto's, I know it is ugly).
  */
 cmdline_not_changed:
+        // Trigger CursorMovedC autocommands.
+        if (ccline.cmdspos != save_cmdspos)
+           trigger_cmd_autocmd(cmdline_type, EVENT_CURSORMOVEDC);
+
 #ifdef FEAT_SEARCH_EXTRA
        if (!is_state.incsearch_postponed)
            continue;
@@ -2484,8 +2489,8 @@ cmdline_changed:
        if (is_state.winid != curwin->w_id)
            init_incsearch_state(&is_state);
 #endif
+       // Trigger CmdlineChanged autocommands.
        if (trigger_cmdlinechanged)
-           // Trigger CmdlineChanged autocommands.
            trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
 
 #ifdef FEAT_SEARCH_EXTRA
@@ -4315,6 +4320,10 @@ set_cmdline_pos(
        new_cmdpos = 0;
     else
        new_cmdpos = pos;
+
+    // Trigger CursorMovedC autocommands.
+    trigger_cmd_autocmd(get_cmdline_type(), EVENT_CURSORMOVEDC);
+
     return 0;
 }
 
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index c9f257a87..faa0f9771 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -2096,6 +2096,21 @@ func Test_Cmdline()
   au! CmdlineEnter
   au! CmdlineLeave
   let &shellslash = save_shellslash
+
+  au! CursorMovedC : let g:pos = getcmdpos()
+  let g:pos = 0
+  call feedkeys(":hello\<Left>\<ESC>", 'xt')
+  call assert_equal(5, g:pos)
+  call feedkeys(":12345678\<C-R>=setcmdpos(3)\<CR>\<ESC>", 'xt')
+  call assert_equal(3, g:pos)
+  au! CursorMovedC
+
+  " CursorMovedC changes the cursor position.
+  au! CursorMovedC : let g:pos = getcmdpos() | call setcmdpos(getcmdpos()-1)
+  let g:pos = 0
+  call feedkeys(":hello\<Left>\<ESC>", 'xt')
+  call assert_equal(5, g:pos)
+  au! CursorMovedC
 endfunc
 
 " Test for BufWritePre autocommand that deletes or unloads the buffer.
diff --git a/src/version.c b/src/version.c
index 9d40d8fde..da82b3683 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 */
+/**/
+    507,
 /**/
     506,
 /**/
diff --git a/src/vim.h b/src/vim.h
index e70323937..a80f84484 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1361,6 +1361,7 @@ enum auto_event
     EVENT_CURSORHOLD,          // cursor in same position for a while
     EVENT_CURSORHOLDI,         // idem, in Insert mode
     EVENT_CURSORMOVED,         // cursor was moved
+    EVENT_CURSORMOVEDC,                // cursor was moved in Command line mode
     EVENT_CURSORMOVEDI,                // cursor was moved in Insert mode
     EVENT_DIFFUPDATED,         // after diffs were updated
     EVENT_DIRCHANGED,          // after user changed directory

-- 
-- 
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/E1sKOBU-007Vss-NH%40256bit.org.

Raspunde prin e-mail lui