0
0
mirror of https://github.com/vim/vim.git synced 2025-09-27 04:14:06 -04:00

patch 8.1.0998: getcurpos() unexpectedly changes "curswant"

Problem:    getcurpos() unexpectedly changes "curswant".
Solution:   Save and restore "curswant". (closes #4069)
This commit is contained in:
Bram Moolenaar
2019-03-07 11:25:32 +01:00
parent d5a5886ce9
commit 19a66858a5
3 changed files with 27 additions and 4 deletions

View File

@@ -5474,9 +5474,23 @@ getpos_both(
(varnumber_T)0);
if (getcurpos)
{
int save_set_curswant = curwin->w_set_curswant;
colnr_T save_curswant = curwin->w_curswant;
colnr_T save_virtcol = curwin->w_virtcol;
update_curswant();
list_append_number(l, curwin->w_curswant == MAXCOL ?
(varnumber_T)MAXCOL : (varnumber_T)curwin->w_curswant + 1);
// Do not change "curswant", as it is unexpected that a get
// function has a side effect.
if (save_set_curswant)
{
curwin->w_set_curswant = save_set_curswant;
curwin->w_curswant = save_curswant;
curwin->w_virtcol = save_virtcol;
curwin->w_valid &= ~VALID_VIRTCOL;
}
}
}
else

View File

@@ -1,8 +1,4 @@
" Tests for various Visual mode.
if !has('visual')
finish
endif
func Test_block_shift_multibyte()
" Uses double-wide character.
@@ -397,3 +393,14 @@ func Test_Visual_paragraph_textobject()
bwipe!
endfunc
func Test_curswant_not_changed()
new
call setline(1, ['one', 'two'])
au InsertLeave * call getcurpos()
call feedkeys("gg0\<C-V>jI123 \<Esc>j", 'xt')
call assert_equal([0, 2, 1, 0, 1], getcurpos())
bwipe!
au! InsertLeave
endfunc

View File

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