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

patch 8.1.0707: text property columns are not adjusted for changed indent

Problem:    Text property columns are not adjusted for changed indent.
Solution:   Adjust text properties.
This commit is contained in:
Bram Moolenaar
2019-01-08 23:07:24 +01:00
parent e12bab3144
commit 663bc89bbb
3 changed files with 47 additions and 6 deletions

View File

@@ -411,24 +411,29 @@ set_indent(
} }
mch_memmove(s, p, (size_t)line_len); mch_memmove(s, p, (size_t)line_len);
/* Replace the line (unless undo fails). */ // Replace the line (unless undo fails).
if (!(flags & SIN_UNDO) || u_savesub(curwin->w_cursor.lnum) == OK) if (!(flags & SIN_UNDO) || u_savesub(curwin->w_cursor.lnum) == OK)
{ {
ml_replace(curwin->w_cursor.lnum, newline, FALSE); ml_replace(curwin->w_cursor.lnum, newline, FALSE);
if (flags & SIN_CHANGED) if (flags & SIN_CHANGED)
changed_bytes(curwin->w_cursor.lnum, 0); changed_bytes(curwin->w_cursor.lnum, 0);
/* Correct saved cursor position if it is in this line. */
// Correct saved cursor position if it is in this line.
if (saved_cursor.lnum == curwin->w_cursor.lnum) if (saved_cursor.lnum == curwin->w_cursor.lnum)
{ {
if (saved_cursor.col >= (colnr_T)(p - oldline)) if (saved_cursor.col >= (colnr_T)(p - oldline))
/* cursor was after the indent, adjust for the number of // cursor was after the indent, adjust for the number of
* bytes added/removed */ // bytes added/removed
saved_cursor.col += ind_len - (colnr_T)(p - oldline); saved_cursor.col += ind_len - (colnr_T)(p - oldline);
else if (saved_cursor.col >= (colnr_T)(s - newline)) else if (saved_cursor.col >= (colnr_T)(s - newline))
/* cursor was in the indent, and is now after it, put it back // cursor was in the indent, and is now after it, put it back
* at the start of the indent (replacing spaces with TAB) */ // at the start of the indent (replacing spaces with TAB)
saved_cursor.col = (colnr_T)(s - newline); saved_cursor.col = (colnr_T)(s - newline);
} }
#ifdef FEAT_TEXT_PROP
adjust_prop_columns(curwin->w_cursor.lnum, (colnr_T)(p - oldline),
ind_len - (colnr_T)(p - oldline));
#endif
retval = TRUE; retval = TRUE;
} }
else else

View File

@@ -342,6 +342,40 @@ func Test_prop_substitute()
bwipe! bwipe!
endfunc endfunc
func Test_prop_change_indent()
call prop_type_add('comment', {'highlight': 'Directory'})
new
call setline(1, [' xxx', 'yyyyy'])
call prop_add(2, 2, {'length': 2, 'type': 'comment'})
let expect = {'col': 2, 'length': 2, 'type': 'comment', 'start': 1, 'end': 1, 'id': 0}
call assert_equal([expect], prop_list(2))
set shiftwidth=3
normal 2G>>
call assert_equal(' yyyyy', getline(2))
let expect.col += 3
call assert_equal([expect], prop_list(2))
normal 2G==
call assert_equal(' yyyyy', getline(2))
let expect.col = 6
call assert_equal([expect], prop_list(2))
call prop_clear(2)
call prop_add(2, 2, {'length': 5, 'type': 'comment'})
let expect.col = 2
let expect.length = 5
call assert_equal([expect], prop_list(2))
normal 2G<<
call assert_equal(' yyyyy', getline(2))
let expect.length = 2
call assert_equal([expect], prop_list(2))
set shiftwidth&
call prop_type_delete('comment')
endfunc
" Setup a three line prop in lines 2 - 4. " Setup a three line prop in lines 2 - 4.
" Add short props in line 1 and 5. " Add short props in line 1 and 5.
func Setup_three_line_prop() func Setup_three_line_prop()

View File

@@ -799,6 +799,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 */
/**/
707,
/**/ /**/
706, 706,
/**/ /**/