0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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)
This commit is contained in:
Bram Moolenaar 2023-03-25 20:06:49 +00:00
parent 1f76138ff1
commit c174c2e58c
5 changed files with 31 additions and 1 deletions

View File

@ -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();

View File

@ -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

View File

@ -0,0 +1,6 @@
>:+0&#ffffff0| @58
|~+0#4040ff13&| @58
|~| @58
|~| @58
|~| @58
| +0#0000000&@59

View File

@ -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.

View File

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