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

patch 8.2.4734: getcharpos() may change a mark position

Problem:    getcharpos() may change a mark position.
Solution:   Copy the mark position. (closes #10148)
This commit is contained in:
Bram Moolenaar
2022-04-11 13:05:16 +01:00
parent 4232dff815
commit 3caf1cce2b
3 changed files with 21 additions and 12 deletions

View File

@@ -5636,34 +5636,35 @@ var2fpos(
name = tv_get_string_chk(varp);
if (name == NULL)
return NULL;
pos.lnum = 0;
if (name[0] == '.' && (!in_vim9script() || name[1] == NUL))
{
// cursor
pos = curwin->w_cursor;
if (charcol)
pos.col = buf_byteidx_to_charidx(curbuf, pos.lnum, pos.col);
return &pos;
}
if (name[0] == 'v' && name[1] == NUL) // Visual start
else if (name[0] == 'v' && name[1] == NUL)
{
// Visual start
if (VIsual_active)
pos = VIsual;
else
pos = curwin->w_cursor;
if (charcol)
pos.col = buf_byteidx_to_charidx(curbuf, pos.lnum, pos.col);
return &pos;
}
if (name[0] == '\'' && (!in_vim9script()
else if (name[0] == '\'' && (!in_vim9script()
|| (name[1] != NUL && name[2] == NUL)))
{
// mark
pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum);
if (pp == NULL || pp == (pos_T *)-1 || pp->lnum <= 0)
return NULL;
pos = *pp;
}
if (pos.lnum != 0)
{
if (charcol)
pp->col = buf_byteidx_to_charidx(curbuf, pp->lnum, pp->col);
return pp;
pos.col = buf_byteidx_to_charidx(curbuf, pos.lnum, pos.col);
return &pos;
}
pos.coladd = 0;