diff options
-rw-r--r-- | runtime/doc/eval.txt | 4 | ||||
-rw-r--r-- | src/globals.h | 2 | ||||
-rw-r--r-- | src/misc1.c | 4 | ||||
-rw-r--r-- | src/normal.c | 1 | ||||
-rw-r--r-- | src/testdir/test_functions.vim | 10 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |