0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.1.0225: mode() does not indicate using CTRL-O from Insert mode

Problem:    Mode() does not indicate using CTRL-O from Insert mode.
Solution:   Add "niI", "niR" and "niV" to mode() result. (closes #3000)
This commit is contained in:
Bram Moolenaar
2018-07-29 15:34:26 +02:00
parent 91f84f6e11
commit 612cc3888b
4 changed files with 51 additions and 26 deletions

View File

@@ -6226,6 +6226,9 @@ mode([expr]) Return a string that indicates the current mode.
n Normal, Terminal-Normal
no Operator-pending
niI Normal using |i_CTRL-O| in |Insert-mode|
niR Normal using |i_CTRL-O| in |Replace-mode|
niV Normal using |i_CTRL-O| in |Virtual-Replace-mode|
v Visual by character
V Visual by line
CTRL-V Visual blockwise
@@ -6250,6 +6253,9 @@ mode([expr]) Return a string that indicates the current mode.
This is useful in the 'statusline' option or when used
with |remote_expr()| In most other places it always returns
"c" or "n".
Note that in the future more modes and more specific modes may
be added. It's better not to compare the whole string but only
the leading character(s).
Also see |visualmode()|.
mzeval({expr}) *mzeval()*

View File

@@ -8366,10 +8366,9 @@ f_mkdir(typval_T *argvars, typval_T *rettv)
static void
f_mode(typval_T *argvars, typval_T *rettv)
{
char_u buf[3];
char_u buf[4];
buf[1] = NUL;
buf[2] = NUL;
vim_memset(buf, 0, sizeof(buf));
if (time_for_testing == 93784)
{
@@ -8435,6 +8434,12 @@ f_mode(typval_T *argvars, typval_T *rettv)
buf[0] = 'n';
if (finish_op)
buf[1] = 'o';
else if (restart_edit == 'I' || restart_edit == 'R'
|| restart_edit == 'V')
{
buf[1] = 'i';
buf[2] = restart_edit;
}
}
/* Clear out the minor mode when the argument is not a non-zero number or

View File

@@ -464,6 +464,18 @@ func Test_mode()
call assert_equal('n', mode(0))
call assert_equal('n', mode(1))
" i_CTRL-O
exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>"
call assert_equal("n-niI", g:current_modes)
" R_CTRL-O
exe "normal R\<C-O>:call Save_mode()\<Cr>\<Esc>"
call assert_equal("n-niR", g:current_modes)
" gR_CTRL-O
exe "normal gR\<C-O>:call Save_mode()\<Cr>\<Esc>"
call assert_equal("n-niV", g:current_modes)
" How to test operator-pending mode?
call feedkeys("v", 'xt')

View File

@@ -798,6 +798,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
225,
/**/
224,
/**/