Mercurial > vim
changeset 32194:baafb135b0cb v9.0.1428
patch 9.0.1428: cursor in wrong position when leaving insert mode
Commit: https://github.com/vim/vim/commit/c174c2e58c9e24a75b189e01143e6d057b84e96e
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Mar 25 20:06:49 2023 +0000
patch 9.0.1428: cursor in wrong position when leaving insert mode
Problem: Cursor in wrong position when leaving insert mode.
Solution: Update the w_valid flags. Position the cursor also when not
redrawing. (closes #12137)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 25 Mar 2023 21:15:05 +0100 |
parents | 36885921be18 |
children | 4bdd2f85a64f |
files | src/edit.c src/main.c src/testdir/dumps/Test_edit_ctlr_r_failed_1.dump src/testdir/test_edit.vim src/version.c |
diffstat | 5 files changed, 31 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/edit.c +++ b/src/edit.c @@ -3688,6 +3688,7 @@ ins_esc( else { --curwin->w_cursor.col; + curwin->w_valid &= ~(VALID_WCOL|VALID_VIRTCOL); // Correct cursor for multi-byte character. if (has_mbyte) mb_adjust_cursor();
--- a/src/main.c +++ b/src/main.c @@ -305,7 +305,7 @@ main params.want_full_screen = FALSE; /* - * When certain to start the GUI, don't check capabilities of terminal. + * When certain to start the GUI, don't check terminal capabilities. * For GTK we can't be sure, but when started from the desktop it doesn't * make sense to try using a terminal. */ @@ -1290,7 +1290,11 @@ main_loop( * update cursor and redraw. */ if (skip_redraw || exmode_active) + { skip_redraw = FALSE; + setcursor(); + cursor_on(); + } else if (do_redraw || stuff_empty()) { #ifdef FEAT_GUI
new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_edit_ctlr_r_failed_1.dump @@ -0,0 +1,6 @@ +>:+0&#ffffff0| @58 +|~+0#4040ff13&| @58 +|~| @58 +|~| @58 +|~| @58 +| +0#0000000&@59
--- a/src/testdir/test_edit.vim +++ b/src/testdir/test_edit.vim @@ -5,6 +5,7 @@ if exists("+t_kD") endif source check.vim +source screendump.vim " Needed for testing basic rightleft: Test_edit_rightleft source view_util.vim @@ -1957,6 +1958,22 @@ func Test_edit_insert_reg() close! endfunc +" Test for positioning cursor after CTRL-R expression failed +func Test_edit_ctrl_r_failed() + CheckRunVimInTerminal + + let buf = RunVimInTerminal('', #{rows: 6, cols: 60}) + + " trying to insert a dictionary produces an error + call term_sendkeys(buf, "i\<C-R>={}\<CR>") + + " ending Insert mode should put the cursor back on the ':' + call term_sendkeys(buf, ":\<Esc>") + call VerifyScreenDump(buf, 'Test_edit_ctlr_r_failed_1', {}) + + call StopVimInTerminal(buf) +endfunc + " When a character is inserted at the last position of the last line in a " window, the window contents should be scrolled one line up. If the top line " is part of a fold, then the entire fold should be scrolled up.