forked from aniani/vim
patch 9.0.0200: cursor wrong if 'nowrap' and two right aligned text props
Problem: cursor in a wrong positoin if 'wrap' is off and using two right aligned text props in one line. Solution: Count an extra line for a right aligned text property after a below or right aligned text property. (issue #10909)
This commit is contained in:
parent
f0ccfa474a
commit
8f369fb1ab
@ -3,7 +3,9 @@
|
||||
|t|w|o| @56
|
||||
|a+0&#ffff4012|n|o|t|h|e|r| +0&#ffffff0@52
|
||||
|O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@46
|
||||
|t|h|r|e>e| @54
|
||||
|t|h|r|e>e| @41|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d
|
||||
| +0&#ffffff0@41|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d
|
||||
|f+0&#ffffff0|o|u|r| @55
|
||||
|~+0#4040ff13&| @58
|
||||
|~| @58
|
||||
|~| @58
|
||||
|
@ -3,7 +3,9 @@
|
||||
| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|w|o| @51
|
||||
| +0#0000e05#a8a8a8255@4|a+0#0000000#ffff4012|n|o|t|h|e|r| +0&#ffffff0@47
|
||||
| +0#0000e05#a8a8a8255@4|O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@41
|
||||
| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e>e| @49
|
||||
| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e>e| @36|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d
|
||||
| +0#0000e05#a8a8a8255@4| +0#0000000#ffffff0@36|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d
|
||||
| +0#0000e05#a8a8a8255@4|f+0#0000000#ffffff0|o|u|r| @50
|
||||
|~+0#4040ff13&| @58
|
||||
|~| @58
|
||||
|~| @58
|
||||
|
12
src/testdir/dumps/Test_prop_with_text_after_nowrap_3.dump
Normal file
12
src/testdir/dumps/Test_prop_with_text_after_nowrap_3.dump
Normal file
@ -0,0 +1,12 @@
|
||||
| +0#0000e05#a8a8a8255@4|o+0#0000000#ffffff0|n|e| +0&#ffd7ff255|A|f|t|e|r| |t|h|e| |t|e|x|t| +0&#ffffff0@26|r+0&#ffd7ff255|i|g|h|t| |h|e|r|e
|
||||
| +0#0000e05#a8a8a8255@4| +0#ffffff16#e000002|B|e|l|o|w| |t|h|e| |l|i|n|e| | +0#0000000#ffffff0@38
|
||||
| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|w|o| @51
|
||||
| +0#0000e05#a8a8a8255@4|a+0#0000000#ffff4012|n|o|t|h|e|r| +0&#ffffff0@47
|
||||
| +0#0000e05#a8a8a8255@4|O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@41
|
||||
| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e@1| @36|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d
|
||||
| +0#0000e05#a8a8a8255@4| +0#0000000#ffffff0@36|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d
|
||||
| +0#0000e05#a8a8a8255@4|f+0#0000000#ffffff0|o|u>r| @50
|
||||
|~+0#4040ff13&| @58
|
||||
|~| @58
|
||||
|~| @58
|
||||
| +0#0000000&@41|4|,|4| @10|A|l@1|
|
@ -2743,7 +2743,7 @@ func Test_props_with_text_after_nowrap()
|
||||
|
||||
let lines =<< trim END
|
||||
set nowrap
|
||||
call setline(1, ['one', 'two', 'three'])
|
||||
call setline(1, ['one', 'two', 'three', 'four'])
|
||||
call prop_type_add('belowprop', #{highlight: 'ErrorMsg'})
|
||||
call prop_type_add('anotherprop', #{highlight: 'Search'})
|
||||
call prop_type_add('someprop', #{highlight: 'DiffChange'})
|
||||
@ -2752,15 +2752,21 @@ func Test_props_with_text_after_nowrap()
|
||||
call prop_add(2, 0, #{type: 'belowprop', text: 'One More Here', text_align: 'below'})
|
||||
call prop_add(1, 0, #{type: 'someprop', text: 'right here', text_align: 'right'})
|
||||
call prop_add(1, 0, #{type: 'someprop', text: ' After the text', text_align: 'after'})
|
||||
normal G$
|
||||
normal 3G$
|
||||
|
||||
call prop_add(3, 0, #{type: 'anotherprop', text: 'right aligned', text_align: 'right'})
|
||||
call prop_add(3, 0, #{type: 'anotherprop', text: 'also right aligned', text_align: 'right'})
|
||||
END
|
||||
call writefile(lines, 'XscriptPropsAfterNowrap')
|
||||
let buf = RunVimInTerminal('-S XscriptPropsAfterNowrap', #{rows: 10, cols: 60})
|
||||
let buf = RunVimInTerminal('-S XscriptPropsAfterNowrap', #{rows: 12, cols: 60})
|
||||
call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_1', {})
|
||||
|
||||
call term_sendkeys(buf, ":set signcolumn=yes foldcolumn=3\<CR>")
|
||||
call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_2', {})
|
||||
|
||||
call term_sendkeys(buf, "j")
|
||||
call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_3', {})
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('XscriptPropsAfterNowrap')
|
||||
endfunc
|
||||
|
@ -590,6 +590,8 @@ get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change)
|
||||
|
||||
/*
|
||||
* Return the number of text properties with "below" alignment in line "lnum".
|
||||
* A "right" aligned property also goes below after a "below" or other "right"
|
||||
* aligned property.
|
||||
*/
|
||||
int
|
||||
prop_count_below(buf_T *buf, linenr_T lnum)
|
||||
@ -599,14 +601,25 @@ prop_count_below(buf_T *buf, linenr_T lnum)
|
||||
int result = 0;
|
||||
textprop_T prop;
|
||||
int i;
|
||||
int next_right_goes_below = FALSE;
|
||||
|
||||
if (count == 0)
|
||||
return 0;
|
||||
for (i = 0; i < count; ++i)
|
||||
{
|
||||
mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop));
|
||||
if (prop.tp_col == MAXCOL && (prop.tp_flags & TP_FLAG_ALIGN_BELOW))
|
||||
++result;
|
||||
if (prop.tp_col == MAXCOL)
|
||||
{
|
||||
if ((prop.tp_flags & TP_FLAG_ALIGN_BELOW)
|
||||
|| (next_right_goes_below
|
||||
&& (prop.tp_flags & TP_FLAG_ALIGN_RIGHT)))
|
||||
{
|
||||
next_right_goes_below = TRUE;
|
||||
++result;
|
||||
}
|
||||
else if (prop.tp_flags & TP_FLAG_ALIGN_RIGHT)
|
||||
next_right_goes_below = TRUE;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -735,6 +735,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
200,
|
||||
/**/
|
||||
199,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user