forked from aniani/vim
patch 9.0.0199: cursor position wrong with two right-aligned virtual texts
Problem: Cursor position wrong with two right-aligned virtual texts. Solution: Add the padding for right-alignment. (issue #10906)
This commit is contained in:
parent
cfeb8a584b
commit
f0ccfa474a
@ -1181,6 +1181,7 @@ win_lbr_chartabsize(
|
|||||||
if (tp->tp_col == MAXCOL)
|
if (tp->tp_col == MAXCOL)
|
||||||
{
|
{
|
||||||
int below = (tp->tp_flags & TP_FLAG_ALIGN_BELOW);
|
int below = (tp->tp_flags & TP_FLAG_ALIGN_BELOW);
|
||||||
|
int right = (tp->tp_flags & TP_FLAG_ALIGN_RIGHT);
|
||||||
int wrap = (tp->tp_flags & TP_FLAG_WRAP);
|
int wrap = (tp->tp_flags & TP_FLAG_WRAP);
|
||||||
int len = (int)STRLEN(p);
|
int len = (int)STRLEN(p);
|
||||||
int n_used = len;
|
int n_used = len;
|
||||||
@ -1193,10 +1194,19 @@ win_lbr_chartabsize(
|
|||||||
cells = textprop_size_after_trunc(wp,
|
cells = textprop_size_after_trunc(wp,
|
||||||
below, added, p, &n_used);
|
below, added, p, &n_used);
|
||||||
}
|
}
|
||||||
// right-aligned does not really matter here, same as
|
|
||||||
// "after"
|
|
||||||
if (below)
|
if (below)
|
||||||
cells += wp->w_width - (vcol + size) % wp->w_width;
|
cells += wp->w_width - (vcol + size) % wp->w_width;
|
||||||
|
else if (right)
|
||||||
|
{
|
||||||
|
len = wp->w_width - vcol % wp->w_width;
|
||||||
|
if (len > cells + size)
|
||||||
|
// add the padding for right-alignment
|
||||||
|
cells = len - size;
|
||||||
|
else if (len == 0)
|
||||||
|
// padding to right-align in the next line
|
||||||
|
cells += cells > wp->w_width ? 0
|
||||||
|
:wp->w_width - cells;
|
||||||
|
}
|
||||||
#ifdef FEAT_LINEBREAK
|
#ifdef FEAT_LINEBREAK
|
||||||
no_sbr = TRUE; // don't use 'showbreak' now
|
no_sbr = TRUE; // don't use 'showbreak' now
|
||||||
#endif
|
#endif
|
||||||
|
8
src/testdir/dumps/Test_prop_right_align_twice_1.dump
Normal file
8
src/testdir/dumps/Test_prop_right_align_twice_1.dump
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|s+0&#ffffff0|o|m|e| |t|e|x|t| |s|o|m|e| |t|e|x|t| |s|o|m|e| |t|e|x|t| |s|o|m|e| |t|e|x|t| +0&#ffd7ff255|n|o|t|h|i|n|g| |h|e|r|e| +0&#ffffff0@12|S+0#ffffff16#e000002|o|m|e| |e|r@1|o|r
|
||||||
|
| +0#0000000#ffffff0@61|A+0#ffffff16#e000002|n|o|t|h|e|r| |e|r@1|o|r
|
||||||
|
|l+0#0000000#ffffff0|i|n|e| |t|w>o| @66
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
| +0#0000000&@56|2|,|8| @10|A|l@1|
|
8
src/testdir/dumps/Test_prop_right_align_twice_2.dump
Normal file
8
src/testdir/dumps/Test_prop_right_align_twice_2.dump
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|s+0&#ffffff0|o|m|e| |m|o|r|e| |t|e|x|t|s|o|m|e| |t|e|x|t| |s|o|m|e| |t|e|x|t| |s|o|m|e| |t|e|x|t| |s|o|m|e| |t|e|x|t| +0&#ffd7ff255|n|o|t|h|i|n|g| |h|e|r|e|S+0#ffffff16#e000002|o|m|e| |e|r@1|o
|
||||||
|
|r| +0#0000000#ffffff0@60|A+0#ffffff16#e000002|n|o|t|h|e|r| |e|r@1|o|r
|
||||||
|
|l+0#0000000#ffffff0|i|n|e| |t|w>o| @66
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
| +0#0000000&@56|2|,|8| @10|A|l@1|
|
@ -2538,6 +2538,29 @@ func Test_prop_inserts_text_highlight()
|
|||||||
call delete('XscriptPropsWithHighlight')
|
call delete('XscriptPropsWithHighlight')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_props_with_text_right_align_twice()
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
call setline(1, ["some text some text some text some text", 'line two'])
|
||||||
|
call prop_type_add( 'MyErrorText', #{ highlight: 'ErrorMsg' } )
|
||||||
|
call prop_type_add( 'MyPadding', #{ highlight: 'DiffChange' } )
|
||||||
|
call prop_add( 1, 0, #{ type: 'MyPadding', text: ' nothing here', text_wrap: 'wrap'} )
|
||||||
|
call prop_add( 1, 0, #{ type: 'MyErrorText', text: 'Some error', text_wrap: 'wrap', text_align: 'right' } )
|
||||||
|
call prop_add( 1, 0, #{ type: 'MyErrorText', text: 'Another error', text_wrap: 'wrap', text_align: 'right' } )
|
||||||
|
normal G$
|
||||||
|
END
|
||||||
|
call writefile(lines, 'XscriptPropsRightAlign')
|
||||||
|
let buf = RunVimInTerminal('-S XscriptPropsRightAlign', #{rows: 8})
|
||||||
|
call VerifyScreenDump(buf, 'Test_prop_right_align_twice_1', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "ggisome more text\<Esc>G$")
|
||||||
|
call VerifyScreenDump(buf, 'Test_prop_right_align_twice_2', {})
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('XscriptPropsRightAlign')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_props_with_text_after()
|
func Test_props_with_text_after()
|
||||||
CheckRunVimInTerminal
|
CheckRunVimInTerminal
|
||||||
|
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
199,
|
||||||
/**/
|
/**/
|
||||||
198,
|
198,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user