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:
21
src/eval.c
21
src/eval.c
@@ -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;
|
||||
|
Reference in New Issue
Block a user