summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2021-07-28 16:51:53 +0200
committerBram Moolenaar <Bram@vim.org>2021-07-28 16:51:53 +0200
commiteaf3f36168f85c8e0ab7083cd996b9fbe937045d (patch)
tree7ec14ec4c431cda36ecada140c2552edb92fc4ae
parent6868634abd6a49b2dfd3a994a6da7d5911457a37 (diff)
downloadvim-git-eaf3f36168f85c8e0ab7083cd996b9fbe937045d.tar.gz
patch 8.2.3236: mode() does not indicate using CTRL-O in Select modev8.2.3236
Problem: mode() does not indicate using CTRL-O in Select mode. Solution: Use "vs" and similar. (closes #8640)
-rw-r--r--runtime/doc/eval.txt4
-rw-r--r--src/globals.h2
-rw-r--r--src/misc1.c4
-rw-r--r--src/normal.c1
-rw-r--r--src/testdir/test_functions.vim10
-rw-r--r--src/version.c2
6 files changed, 22 insertions, 1 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index d5f5e8de5..d99c398a7 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -7978,6 +7978,10 @@ mode([expr]) Return a string that indicates the current mode.
s Select by character
S Select by line
CTRL-S Select blockwise
+ vs Visual by character using |v_CTRL-O| from
+ Select mode
+ Vs Visual by line using |v_CTRL-O| from Select mode
+ CTRL-Vs Visual blockwise using |v_CTRL-O| from Select mode
i Insert
ic Insert mode completion |compl-generic|
ix Insert mode |i_CTRL-X| completion
diff --git a/src/globals.h b/src/globals.h
index 529901437..ebf236b00 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -882,6 +882,8 @@ EXTERN int VIsual_active INIT(= FALSE);
// whether Visual mode is active
EXTERN int VIsual_select INIT(= FALSE);
// whether Select mode is active
+EXTERN int restart_VIsual_select INIT(= 0);
+ // restart Select mode when next cmd finished
EXTERN int VIsual_reselect;
// whether to restart the selection after a
// Select mode mapping or menu
diff --git a/src/misc1.c b/src/misc1.c
index 7d7f022f1..9708502ca 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -652,7 +652,11 @@ f_mode(typval_T *argvars, typval_T *rettv)
if (VIsual_select)
buf[0] = VIsual_mode + 's' - 'v';
else
+ {
buf[0] = VIsual_mode;
+ if (restart_VIsual_select)
+ buf[1] = 's';
+ }
}
else if (State == HITRETURN || State == ASKMORE || State == SETWSIZE
|| State == CONFIRM)
diff --git a/src/normal.c b/src/normal.c
index 74c76b2d2..0e1e11801 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -15,7 +15,6 @@
#include "vim.h"
static int VIsual_mode_orig = NUL; // saved Visual mode
-static int restart_VIsual_select = 0;
#ifdef FEAT_EVAL
static void set_vcount_ca(cmdarg_T *cap, int *set_prevcount);
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index 6f2797c49..de2db41f2 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -746,6 +746,7 @@ func Test_mode()
set complete=.
inoremap <F2> <C-R>=Save_mode()<CR>
+ xnoremap <F2> <Cmd>call Save_mode()<CR>
normal! 3G
exe "normal i\<F2>\<Esc>"
@@ -857,6 +858,14 @@ func Test_mode()
call assert_equal("\<C-S>", mode(1))
call feedkeys("\<Esc>", 'xt')
+ " v_CTRL-O
+ exe "normal gh\<C-O>\<F2>\<Esc>"
+ call assert_equal("v-vs", g:current_modes)
+ exe "normal gH\<C-O>\<F2>\<Esc>"
+ call assert_equal("V-Vs", g:current_modes)
+ exe "normal g\<C-H>\<C-O>\<F2>\<Esc>"
+ call assert_equal("\<C-V>-\<C-V>s", g:current_modes)
+
call feedkeys(":echo \<C-R>=Save_mode()\<C-U>\<CR>", 'xt')
call assert_equal('c-c', g:current_modes)
call feedkeys("gQecho \<C-R>=Save_mode()\<CR>\<CR>vi\<CR>", 'xt')
@@ -867,6 +876,7 @@ func Test_mode()
bwipe!
iunmap <F2>
+ xunmap <F2>
set complete&
endfunc
diff --git a/src/version.c b/src/version.c
index ea232c37b..ed3d516e1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3236,
+/**/
3235,
/**/
3234,