mirror of
https://github.com/vim/vim
synced 2025-07-16 09:12:00 +00:00
patch 9.1.0430: getregionpos() doesn't handle one char selection
Problem: getregionpos() doesn't handle one char selection. Solution: Handle startspaces differently when is_oneChar is set. Also add a test for an exclusive charwise selection with multibyte chars (zeertzjq) closes: #14825 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
95ff39f8e3
commit
52a6f34887
@ -5793,7 +5793,6 @@ f_getregionpos(typval_T *argvars, typval_T *rettv)
|
||||
|
||||
for (lnum = p1.lnum; lnum <= p2.lnum; lnum++)
|
||||
{
|
||||
struct block_def bd;
|
||||
pos_T ret_p1, ret_p2;
|
||||
|
||||
if (region_type == MLINE)
|
||||
@ -5805,11 +5804,28 @@ f_getregionpos(typval_T *argvars, typval_T *rettv)
|
||||
}
|
||||
else
|
||||
{
|
||||
struct block_def bd;
|
||||
|
||||
if (region_type == MBLOCK)
|
||||
block_prep(&oa, &bd, lnum, FALSE);
|
||||
else
|
||||
charwise_block_prep(p1, p2, &bd, lnum, inclusive);
|
||||
if (bd.startspaces > 0)
|
||||
|
||||
if (bd.is_oneChar) // selection entirely inside one char
|
||||
{
|
||||
if (region_type == MBLOCK)
|
||||
{
|
||||
ret_p1.col = bd.textcol;
|
||||
ret_p1.coladd = bd.start_char_vcols
|
||||
- (bd.start_vcol - oa.start_vcol);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret_p1.col = p1.col + 1;
|
||||
ret_p1.coladd = p1.coladd;
|
||||
}
|
||||
}
|
||||
else if (bd.startspaces > 0)
|
||||
{
|
||||
ret_p1.col = bd.textcol;
|
||||
ret_p1.coladd = bd.start_char_vcols - bd.startspaces;
|
||||
@ -5819,7 +5835,13 @@ f_getregionpos(typval_T *argvars, typval_T *rettv)
|
||||
ret_p1.col = bd.textcol + 1;
|
||||
ret_p1.coladd = 0;
|
||||
}
|
||||
if (bd.endspaces > 0)
|
||||
|
||||
if (bd.is_oneChar) // selection entirely inside one char
|
||||
{
|
||||
ret_p2.col = ret_p1.col;
|
||||
ret_p2.coladd = ret_p1.coladd + bd.startspaces;
|
||||
}
|
||||
else if (bd.endspaces > 0)
|
||||
{
|
||||
ret_p2.col = bd.textcol + bd.textlen + 1;
|
||||
ret_p2.coladd = bd.endspaces;
|
||||
|
Reference in New Issue
Block a user