patch 8.2.4947: text properties not adjusted when accepting spell suggestion
Problem: Text properties not adjusted when accepting spell suggestion. Solution: Adjust text properties when text changes. (closes #10414)
This commit is contained in:
@ -2913,6 +2913,9 @@ ex_spellrepall(exarg_T *eap UNUSED)
|
|||||||
STRCAT(p, line + curwin->w_cursor.col + STRLEN(repl_from));
|
STRCAT(p, line + curwin->w_cursor.col + STRLEN(repl_from));
|
||||||
ml_replace(curwin->w_cursor.lnum, p, FALSE);
|
ml_replace(curwin->w_cursor.lnum, p, FALSE);
|
||||||
changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col);
|
changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col);
|
||||||
|
if (curbuf->b_has_textprop && addlen != 0)
|
||||||
|
adjust_prop_columns(curwin->w_cursor.lnum,
|
||||||
|
curwin->w_cursor.col, addlen, APC_SUBSTITUTE);
|
||||||
|
|
||||||
if (curwin->w_cursor.lnum != prev_lnum)
|
if (curwin->w_cursor.lnum != prev_lnum)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -681,6 +681,8 @@ spell_suggest(int count)
|
|||||||
p = alloc(STRLEN(line) - stp->st_orglen + stp->st_wordlen + 1);
|
p = alloc(STRLEN(line) - stp->st_orglen + stp->st_wordlen + 1);
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
{
|
{
|
||||||
|
int len_diff = stp->st_wordlen - stp->st_orglen;
|
||||||
|
|
||||||
c = (int)(sug.su_badptr - line);
|
c = (int)(sug.su_badptr - line);
|
||||||
mch_memmove(p, line, c);
|
mch_memmove(p, line, c);
|
||||||
STRCPY(p + c, stp->st_word);
|
STRCPY(p + c, stp->st_word);
|
||||||
@ -698,6 +700,9 @@ spell_suggest(int count)
|
|||||||
curwin->w_cursor.col = c;
|
curwin->w_cursor.col = c;
|
||||||
|
|
||||||
changed_bytes(curwin->w_cursor.lnum, c);
|
changed_bytes(curwin->w_cursor.lnum, c);
|
||||||
|
if (curbuf->b_has_textprop && len_diff != 0)
|
||||||
|
adjust_prop_columns(curwin->w_cursor.lnum, c, len_diff,
|
||||||
|
APC_SUBSTITUTE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -1889,4 +1889,49 @@ func Test_prop_find_prev_on_same_line()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_prop_spell()
|
||||||
|
new
|
||||||
|
set spell
|
||||||
|
call AddPropTypes()
|
||||||
|
|
||||||
|
call setline(1, ["helo world", "helo helo helo"])
|
||||||
|
call prop_add(1, 1, #{type: 'one', length: 4})
|
||||||
|
call prop_add(1, 6, #{type: 'two', length: 5})
|
||||||
|
call prop_add(2, 1, #{type: 'three', length: 4})
|
||||||
|
call prop_add(2, 6, #{type: 'three', length: 4})
|
||||||
|
call prop_add(2, 11, #{type: 'three', length: 4})
|
||||||
|
|
||||||
|
" The first prop over 'helo' increases its length after the word is corrected
|
||||||
|
" to 'Hello', the second one is shifted to the right.
|
||||||
|
let expected = [
|
||||||
|
\ {'id': 0, 'col': 1, 'type_bufnr': 0, 'end': 1, 'type': 'one',
|
||||||
|
\ 'length': 5, 'start': 1},
|
||||||
|
\ {'id': 0, 'col': 7, 'type_bufnr': 0, 'end': 1, 'type': 'two',
|
||||||
|
\ 'length': 5, 'start': 1}
|
||||||
|
\ ]
|
||||||
|
call feedkeys("z=1\<CR>", 'xt')
|
||||||
|
|
||||||
|
call assert_equal('Hello world', getline(1))
|
||||||
|
call assert_equal(expected, prop_list(1))
|
||||||
|
|
||||||
|
" Repeat the replacement done by z=
|
||||||
|
spellrepall
|
||||||
|
|
||||||
|
let expected = [
|
||||||
|
\ {'id': 0, 'col': 1, 'type_bufnr': 0, 'end': 1, 'type': 'three',
|
||||||
|
\ 'length': 5, 'start': 1},
|
||||||
|
\ {'id': 0, 'col': 7, 'type_bufnr': 0, 'end': 1, 'type': 'three',
|
||||||
|
\ 'length': 5, 'start': 1},
|
||||||
|
\ {'id': 0, 'col': 13, 'type_bufnr': 0, 'end': 1, 'type': 'three',
|
||||||
|
\ 'length': 5, 'start': 1}
|
||||||
|
\ ]
|
||||||
|
call assert_equal('Hello Hello Hello', getline(2))
|
||||||
|
call assert_equal(expected, prop_list(2))
|
||||||
|
|
||||||
|
call DeletePropTypes()
|
||||||
|
set spell&
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
|||||||
@ -746,6 +746,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 */
|
||||||
|
/**/
|
||||||
|
4947,
|
||||||
/**/
|
/**/
|
||||||
4946,
|
4946,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user