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:
parent
1f76138ff1
commit
c174c2e58c
@ -3688,6 +3688,7 @@ ins_esc(
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
--curwin->w_cursor.col;
|
--curwin->w_cursor.col;
|
||||||
|
curwin->w_valid &= ~(VALID_WCOL|VALID_VIRTCOL);
|
||||||
// Correct cursor for multi-byte character.
|
// Correct cursor for multi-byte character.
|
||||||
if (has_mbyte)
|
if (has_mbyte)
|
||||||
mb_adjust_cursor();
|
mb_adjust_cursor();
|
||||||
|
@ -305,7 +305,7 @@ main
|
|||||||
params.want_full_screen = FALSE;
|
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
|
* For GTK we can't be sure, but when started from the desktop it doesn't
|
||||||
* make sense to try using a terminal.
|
* make sense to try using a terminal.
|
||||||
*/
|
*/
|
||||||
@ -1290,7 +1290,11 @@ main_loop(
|
|||||||
* update cursor and redraw.
|
* update cursor and redraw.
|
||||||
*/
|
*/
|
||||||
if (skip_redraw || exmode_active)
|
if (skip_redraw || exmode_active)
|
||||||
|
{
|
||||||
skip_redraw = FALSE;
|
skip_redraw = FALSE;
|
||||||
|
setcursor();
|
||||||
|
cursor_on();
|
||||||
|
}
|
||||||
else if (do_redraw || stuff_empty())
|
else if (do_redraw || stuff_empty())
|
||||||
{
|
{
|
||||||
#ifdef FEAT_GUI
|
#ifdef FEAT_GUI
|
||||||
|
6
src/testdir/dumps/Test_edit_ctlr_r_failed_1.dump
Normal file
6
src/testdir/dumps/Test_edit_ctlr_r_failed_1.dump
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
>:+0&#ffffff0| @58
|
||||||
|
|~+0#4040ff13&| @58
|
||||||
|
|~| @58
|
||||||
|
|~| @58
|
||||||
|
|~| @58
|
||||||
|
| +0#0000000&@59
|
@ -5,6 +5,7 @@ if exists("+t_kD")
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
source check.vim
|
source check.vim
|
||||||
|
source screendump.vim
|
||||||
|
|
||||||
" Needed for testing basic rightleft: Test_edit_rightleft
|
" Needed for testing basic rightleft: Test_edit_rightleft
|
||||||
source view_util.vim
|
source view_util.vim
|
||||||
@ -1957,6 +1958,22 @@ func Test_edit_insert_reg()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
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
|
" 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
|
" 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.
|
" is part of a fold, then the entire fold should be scrolled up.
|
||||||
|
@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1428,
|
||||||
/**/
|
/**/
|
||||||
1427,
|
1427,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user