changeset 33146:351d2bbfe921 v9.0.1855

patch 9.0.1855: mode() doesn't indicate command line for terminal Commit: https://github.com/vim/vim/commit/71ebf3bacaa22c841d9a8cb050c52fb21ac0970a Author: h-east <h.east.727@gmail.com> Date: Sun Sep 3 17:12:55 2023 +0200 patch 9.0.1855: mode() doesn't indicate command line for terminal Problem: mode() doesn't indicate command line for terminal Solution: make it return 'ct' for command-line from Terminal mode closes: #6265 closes: #13017 closes: #13018 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: h-east <h.east.727@gmail.com>
author Christian Brabandt <cb@256bit.org>
date Sun, 03 Sep 2023 17:30:03 +0200
parents 97b3a859483b
children 288d4aa3e263
files runtime/doc/builtin.txt src/misc1.c src/testdir/test_functions.vim src/version.c
diffstat 4 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -6408,6 +6408,7 @@ mode([expr])	Return a string that indica
 		   Rvc	    Virtual Replace mode completion |compl-generic|
 		   Rvx	    Virtual Replace mode |i_CTRL-X| completion
 		   c	    Command-line editing
+		   ct	    Command-line editing via Terminal-Job mode
 		   cv	    Vim Ex mode |gQ|
 		   ce	    Normal Ex mode |Q|
 		   r	    Hit-enter prompt
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -664,7 +664,11 @@ get_mode(char_u *buf)
     }
 #ifdef FEAT_TERMINAL
     else if (term_use_loop())
+    {
+	if (State & MODE_CMDLINE)
+	    buf[i++] = 'c';
 	buf[i++] = 't';
+    }
 #endif
     else if (VIsual_active)
     {
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -935,9 +935,19 @@ func Test_mode()
 
   if has('terminal')
     term
+    " Terminal-Job mode
+    call assert_equal('t', mode())
+    call assert_equal('t', mode(1))
+    call feedkeys("\<C-W>:echo \<C-R>=Save_mode()\<C-U>\<CR>", 'xt')
+    call assert_equal("c-ct", g:current_modes)
+    call feedkeys("\<Esc>", 'xt')
+
+    " Terminal-Normal mode
     call feedkeys("\<C-W>N", 'xt')
     call assert_equal('n', mode())
     call assert_equal('nt', mode(1))
+    call feedkeys(":echo \<C-R>=Save_mode()\<C-U>\<CR>", 'xt')
+    call assert_equal("c-c", g:current_modes)
     call feedkeys("aexit\<CR>", 'xt')
   endif
 
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1855,
+/**/
     1854,
 /**/
     1853,