From 72406a4bd2896915b6f541e26d41521a59b1f846 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 2 Oct 2021 16:34:55 +0100 Subject: patch 8.2.3461: cannot distinguish Normal and Terminal-Normal mode Problem: Cannot distinguish Normal and Terminal-Normal mode. Solution: Make mode() return "nt" for Terminal-Normal mode. (issue #8856) --- runtime/doc/eval.txt | 3 ++- src/misc1.c | 4 ++++ src/testdir/test_functions.vim | 8 ++++++++ src/version.c | 2 ++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 00ba2e41b..43aae40d4 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -8061,7 +8061,7 @@ mode([expr]) Return a string that indicates the current mode. returned, otherwise only the first letter is returned. Also see |state()|. - n Normal, Terminal-Normal + n Normal no Operator-pending nov Operator-pending (forced characterwise |o_v|) noV Operator-pending (forced linewise |o_V|) @@ -8070,6 +8070,7 @@ mode([expr]) Return a string that indicates the current mode. 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| + nt Terminal-Normal (insert goes to Terminal-Job mode) v Visual by character V Visual by line CTRL-V Visual blockwise diff --git a/src/misc1.c b/src/misc1.c index 1dd07f906..b4a4a8cc7 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -712,6 +712,10 @@ f_mode(typval_T *argvars, typval_T *rettv) buf[1] = 'i'; buf[2] = restart_edit; } +#ifdef FEAT_TERMINAL + else if (term_in_normal_mode()) + buf[1] = 't'; +#endif } // Clear out the minor mode when the argument is not a non-zero number or diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index 9a4b5975f..e8762aa6c 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -874,6 +874,14 @@ func Test_mode() call assert_equal('c-ce', g:current_modes) " How to test Ex mode? + if has('terminal') + term + call feedkeys("\N", 'xt') + call assert_equal('n', mode()) + call assert_equal('nt', mode(1)) + call feedkeys("aexit\", 'xt') + endif + bwipe! iunmap xunmap diff --git a/src/version.c b/src/version.c index 9331e3492..57865cded 100644 --- a/src/version.c +++ b/src/version.c @@ -757,6 +757,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3461, /**/ 3460, /**/ -- cgit v1.2.1