Patch 9.0.1277

3 views
Skip to first unread message

Bram Moolenaar

unread,
Feb 4, 2023, 5:59:20 AM2/4/23
to vim...@googlegroups.com

Patch 9.0.1277
Problem: Cursor may move with autocmd in Visual mode.
Solution: Restore "VIsual_active" before calling check_cursor().
(closes #11939)
Files: src/autocmd.c, src/testdir/test_functions.vim


*** ../vim-9.0.1276/src/autocmd.c 2023-01-09 19:04:19.296528376 +0000
--- src/autocmd.c 2023-02-04 10:57:32.179779507 +0000
***************
*** 1695,1700 ****
--- 1695,1701 ----
globaldir = aco->globaldir;

// the buffer contents may have changed
+ VIsual_active = aco->save_VIsual_active;
check_cursor();
if (curwin->w_topline > curbuf->b_ml.ml_line_count)
{
***************
*** 1741,1754 ****
curwin = save_curwin;
curbuf = curwin->w_buffer;
prevwin = win_find_by_id(aco->save_prevwin_id);
// In case the autocommand moves the cursor to a position that
// does not exist in curbuf.
check_cursor();
}
}

- check_cursor(); // just in case lines got deleted
VIsual_active = aco->save_VIsual_active;
if (VIsual_active)
check_pos(curbuf, &VIsual);
}
--- 1742,1757 ----
curwin = save_curwin;
curbuf = curwin->w_buffer;
prevwin = win_find_by_id(aco->save_prevwin_id);
+
// In case the autocommand moves the cursor to a position that
// does not exist in curbuf.
+ VIsual_active = aco->save_VIsual_active;
check_cursor();
}
}

VIsual_active = aco->save_VIsual_active;
+ check_cursor(); // just in case lines got deleted
if (VIsual_active)
check_pos(curbuf, &VIsual);
}
*** ../vim-9.0.1276/src/testdir/test_functions.vim 2023-01-02 11:59:22.352412451 +0000
--- src/testdir/test_functions.vim 2023-02-04 10:53:32.716093809 +0000
***************
*** 1648,1654 ****

func Test_setbufvar_options()
" This tests that aucmd_prepbuf() and aucmd_restbuf() properly restore the
! " window layout.
call assert_equal(1, winnr('$'))
split dummy_preview
resize 2
--- 1648,1654 ----

func Test_setbufvar_options()
" This tests that aucmd_prepbuf() and aucmd_restbuf() properly restore the
! " window layout and cursor position.
call assert_equal(1, winnr('$'))
split dummy_preview
resize 2
***************
*** 1662,1672 ****
--- 1662,1681 ----
execute 'belowright vertical split #' . dummy_buf
call assert_equal(wh, winheight(0))
let dum1_id = win_getid()
+ call setline(1, 'foo')
+ normal! V$
+ call assert_equal(4, col('.'))
+ call setbufvar('dummy_preview', '&buftype', 'nofile')
+ call assert_equal(4, col('.'))

wincmd h
let wh = winheight(0)
+ call setline(1, 'foo')
+ normal! V$
+ call assert_equal(4, col('.'))
let dummy_buf = bufnr('dummy_buf2', v:true)
eval 'nofile'->setbufvar(dummy_buf, '&buftype')
+ call assert_equal(4, col('.'))
execute 'belowright vertical split #' . dummy_buf
call assert_equal(wh, winheight(0))

*** ../vim-9.0.1276/src/version.c 2023-02-03 12:28:00.303287569 +0000
--- src/version.c 2023-02-04 10:55:10.319967376 +0000
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 1277,
/**/

--
From "know your smileys":
:-X My lips are sealed

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages