1
0
forked from aniani/vim

patch 9.0.0163: text property not adjusted for text inserted with "p"

Problem:    Text property not adjusted for text inserted with "p".
Solution:   Adjust column and length of text properties.
This commit is contained in:
Bram Moolenaar
2022-08-07 14:55:14 +01:00
parent 73c3842fa5
commit ecb00c7b61
3 changed files with 34 additions and 1 deletions

View File

@@ -2101,6 +2101,8 @@ do_put(
STRMOVE(ptr, oldp + col); STRMOVE(ptr, oldp + col);
ml_replace(lnum, newp, FALSE); ml_replace(lnum, newp, FALSE);
inserted_bytes(lnum, col, totlen);
// compute the byte offset for the last character // compute the byte offset for the last character
first_byte_off = mb_head_off(newp, ptr - 1); first_byte_off = mb_head_off(newp, ptr - 1);
@@ -2128,7 +2130,6 @@ do_put(
++curwin->w_cursor.col; ++curwin->w_cursor.col;
else else
curwin->w_cursor.col -= first_byte_off; curwin->w_cursor.col -= first_byte_off;
changed_bytes(lnum, col);
} }
else else
{ {

View File

@@ -658,6 +658,36 @@ func Test_prop_open_line()
set bs& set bs&
endfunc endfunc
func Test_prop_put()
new
let expected = SetupOneLine() " 'xonex xtwoxx'
let @a = 'new'
" insert just after the prop
normal 03l"ap
" insert inside the prop
normal 02l"ap
" insert just before the prop
normal 0"ap
call assert_equal('xnewonnewenewx xtwoxx', getline(1))
let expected[0].col += 3
let expected[0].length += 3
let expected[1].col += 9
call assert_equal(expected, prop_list(1))
" Visually select 4 chars in the prop and put "AB" to replace them
let @a = 'AB'
normal 05lv3l"ap
call assert_equal('xnewoABenewx xtwoxx', getline(1))
let expected[0].length -= 2
let expected[1].col -= 2
call assert_equal(expected, prop_list(1))
call DeletePropTypes()
bwipe!
endfunc
func Test_prop_clear() func Test_prop_clear()
new new
call AddPropTypes() call AddPropTypes()

View File

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