Mercurial > vim
changeset 33842:68de519bab0a v9.0.2133
patch 9.0.2133: Cannot detect overstrike mode in Cmdline mode
Commit: https://github.com/vim/vim/commit/d1c3ef1f47c87d1da056c56564e1985fe6f2931d
Author: Sam-programs <None>
Date: Mon Nov 27 22:22:51 2023 +0100
patch 9.0.2133: Cannot detect overstrike mode in Cmdline mode
Problem: Cannot detect overstrike mode in Cmdline mode
Solution: Make mode() return "cr" for overstrike
closes: #13569
Signed-off-by: Sam-programs <None>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 27 Nov 2023 22:30:07 +0100 |
parents | e0f5afd8121b |
children | dc37b35ded98 |
files | runtime/doc/builtin.txt src/ex_getln.c src/misc1.c src/testdir/dumps/Test_mode_1.dump src/testdir/dumps/Test_mode_2.dump src/testdir/test_functions.vim src/version.c |
diffstat | 7 files changed, 51 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -6413,7 +6413,9 @@ mode([expr]) Return a string that indica Rvx Virtual Replace mode |i_CTRL-X| completion c Command-line editing ct Command-line editing via Terminal-Job mode + cr Command-line while in overstrike mode |c_<Insert>| cv Vim Ex mode |gQ| + cvr Vim Ex while in overstrike mode |c_<Insert>| ce Normal Ex mode |Q| r Hit-enter prompt rm The -- more -- prompt
--- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -2050,6 +2050,9 @@ getcmdline_int( #ifdef CURSOR_SHAPE ui_cursor_shape(); // may show different cursor shape #endif + may_trigger_modechanged(); + status_redraw_curbuf(); + redraw_statuslines(); goto cmdline_not_changed; case Ctrl_HAT: @@ -3169,8 +3172,6 @@ redraw: return (char_u *)line_ga.ga_data; } -# if defined(MCH_CURSOR_SHAPE) || defined(FEAT_GUI) \ - || defined(FEAT_MOUSESHAPE) || defined(PROTO) /* * Return TRUE if ccline.overstrike is on. */ @@ -3180,6 +3181,8 @@ cmdline_overstrike(void) return ccline.overstrike; } +# if defined(MCH_CURSOR_SHAPE) || defined(FEAT_GUI) \ + || defined(FEAT_MOUSESHAPE) || defined(PROTO) /* * Return TRUE if the cursor is at the end of the cmdline. */
--- a/src/misc1.c +++ b/src/misc1.c @@ -720,6 +720,8 @@ get_mode(char_u *buf) buf[i++] = 'v'; else if (exmode_active == EXMODE_NORMAL) buf[i++] = 'e'; + if ((State & MODE_CMDLINE) && cmdline_overstrike()) + buf[i++] = 'r'; } else {
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_mode_1.dump @@ -0,0 +1,12 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|c+3#0000000&| @73 +|:+0&&> @73
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_mode_2.dump @@ -0,0 +1,12 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|c+3#0000000&|r| @72 +|:+0&&> @73
--- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -916,8 +916,12 @@ func Test_mode() call feedkeys(":echo \<C-R>=Save_mode()\<C-U>\<CR>", 'xt') call assert_equal('c-c', g:current_modes) + call feedkeys(":\<insert>\<C-r>=Save_mode()\<CR>",'xt') + call assert_equal("c-cr", g:current_modes) call feedkeys("gQecho \<C-R>=Save_mode()\<CR>\<CR>vi\<CR>", 'xt') call assert_equal('c-cv', g:current_modes) + call feedkeys("gQ\<insert>\<C-r>=Save_mode()\<CR>",'xt') + call assert_equal("c-cvr", g:current_modes) call feedkeys("Qcall Save_mode()\<CR>vi\<CR>", 'xt') call assert_equal('c-ce', g:current_modes) " How to test Ex mode? @@ -935,6 +939,18 @@ func Test_mode() call assert_equal('n-niR', g:current_modes) execute "normal! gR\<C-o>g@l\<Esc>" call assert_equal('n-niV', g:current_modes) + " Test statusline updates for overstike mode + if CanRunVimInTerminal() + let buf = RunVimInTerminal('', {'rows': 12}) + call term_sendkeys(buf, ":set laststatus=2 statusline=%!mode(1)\<CR>") + call term_sendkeys(buf, ":") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_mode_1', {}) + call term_sendkeys(buf, "\<insert>") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_mode_2', {}) + call StopVimInTerminal(buf) + endif if has('terminal') term