mirror of
https://github.com/vim/vim.git
synced 2025-09-10 22:33:40 -04:00
patch 9.0.0297: cursor position wrong after right aligned virtual text
Problem: Cursor position wrong after right aligned virtual text. (Iizuka Masashi) Solution: Take the width of the column offset into account. (closes #10997) Also fix virtual text positioning.
This commit is contained in:
parent
35a4fbc5d0
commit
c8bf59e9b2
@ -1187,7 +1187,8 @@ win_lbr_chartabsize(
|
|||||||
|
|
||||||
for (i = 0; i < cts->cts_text_prop_count; ++i)
|
for (i = 0; i < cts->cts_text_prop_count; ++i)
|
||||||
{
|
{
|
||||||
textprop_T *tp = cts->cts_text_props + i;
|
textprop_T *tp = cts->cts_text_props + i;
|
||||||
|
int col_off = win_col_off(wp);
|
||||||
|
|
||||||
// Watch out for the text being deleted. "cts_text_props" is a
|
// Watch out for the text being deleted. "cts_text_props" is a
|
||||||
// copy, the text prop may actually have been removed from the line.
|
// copy, the text prop may actually have been removed from the line.
|
||||||
@ -1209,7 +1210,7 @@ win_lbr_chartabsize(
|
|||||||
int n_extra = (int)STRLEN(p);
|
int n_extra = (int)STRLEN(p);
|
||||||
|
|
||||||
cells = text_prop_position(wp, tp,
|
cells = text_prop_position(wp, tp,
|
||||||
(vcol + size) % wp->w_width,
|
(vcol + size) % (wp->w_width - col_off) + col_off,
|
||||||
&n_extra, &p, NULL, NULL);
|
&n_extra, &p, NULL, NULL);
|
||||||
#ifdef FEAT_LINEBREAK
|
#ifdef FEAT_LINEBREAK
|
||||||
no_sbr = TRUE; // don't use 'showbreak' now
|
no_sbr = TRUE; // don't use 'showbreak' now
|
||||||
|
@ -302,6 +302,7 @@ text_prop_position(
|
|||||||
int padding = tp->tp_col == MAXCOL && tp->tp_len > 1
|
int padding = tp->tp_col == MAXCOL && tp->tp_len > 1
|
||||||
? tp->tp_len - 1 : 0;
|
? tp->tp_len - 1 : 0;
|
||||||
int col_with_padding = vcol + (below ? 0 : padding);
|
int col_with_padding = vcol + (below ? 0 : padding);
|
||||||
|
int col_off = 0;
|
||||||
int room = wp->w_width - col_with_padding;
|
int room = wp->w_width - col_with_padding;
|
||||||
int added = room;
|
int added = room;
|
||||||
int n_used = *n_extra;
|
int n_used = *n_extra;
|
||||||
@ -324,7 +325,8 @@ text_prop_position(
|
|||||||
if (right && (wrap || room < PROP_TEXT_MIN_CELLS))
|
if (right && (wrap || room < PROP_TEXT_MIN_CELLS))
|
||||||
{
|
{
|
||||||
// right-align on next line instead of wrapping if possible
|
// right-align on next line instead of wrapping if possible
|
||||||
added = wp->w_width - strsize + room;
|
col_off = win_col_off(wp) + win_col_off2(wp);
|
||||||
|
added = wp->w_width - col_off - strsize + room;
|
||||||
if (added < 0)
|
if (added < 0)
|
||||||
added = 0;
|
added = 0;
|
||||||
else
|
else
|
||||||
@ -386,7 +388,7 @@ text_prop_position(
|
|||||||
*p_extra = l;
|
*p_extra = l;
|
||||||
*n_extra = n_used + added + padding;
|
*n_extra = n_used + added + padding;
|
||||||
*n_attr = mb_charlen(*p_extra);
|
*n_attr = mb_charlen(*p_extra);
|
||||||
*n_attr_skip = added + padding;
|
*n_attr_skip = added + padding + col_off;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
src/testdir/dumps/Test_prop_right_align_twice_3.dump
Normal file
8
src/testdir/dumps/Test_prop_right_align_twice_3.dump
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
| +0#0000e05#a8a8a8255@1|s+0#0000000#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| +0&#ffffff0@6
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@62|S+0#ffffff16#e000002|o|m|e| |e|r@1|o|r
|
||||||
|
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@59|A+0#ffffff16#e000002|n|o|t|h|e|r| |e|r@1|o|r
|
||||||
|
| +0#0000e05#a8a8a8255@1|l+0#0000000#ffffff0|i|n|e| |t|w>o| @64
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
| +0#0000000&@56|2|,|8| @10|A|l@1|
|
@ -2574,11 +2574,11 @@ func Test_props_with_text_right_align_twice()
|
|||||||
|
|
||||||
let lines =<< trim END
|
let lines =<< trim END
|
||||||
call setline(1, ["some text some text some text some text", 'line two'])
|
call setline(1, ["some text some text some text some text", 'line two'])
|
||||||
call prop_type_add( 'MyErrorText', #{ highlight: 'ErrorMsg' } )
|
call prop_type_add('MyErrorText', #{ highlight: 'ErrorMsg'})
|
||||||
call prop_type_add( 'MyPadding', #{ highlight: 'DiffChange' } )
|
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: '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: 'Some error', text_wrap: 'wrap', text_align: 'right'})
|
||||||
call prop_add( 1, 0, #{ type: 'MyErrorText', text: 'Another 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$
|
normal G$
|
||||||
END
|
END
|
||||||
call writefile(lines, 'XscriptPropsRightAlign')
|
call writefile(lines, 'XscriptPropsRightAlign')
|
||||||
@ -2588,6 +2588,9 @@ func Test_props_with_text_right_align_twice()
|
|||||||
call term_sendkeys(buf, "ggisome more text\<Esc>G$")
|
call term_sendkeys(buf, "ggisome more text\<Esc>G$")
|
||||||
call VerifyScreenDump(buf, 'Test_prop_right_align_twice_2', {})
|
call VerifyScreenDump(buf, 'Test_prop_right_align_twice_2', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":set signcolumn=yes\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_prop_right_align_twice_3', {})
|
||||||
|
|
||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
call delete('XscriptPropsRightAlign')
|
call delete('XscriptPropsRightAlign')
|
||||||
endfunc
|
endfunc
|
||||||
|
@ -707,6 +707,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 */
|
||||||
|
/**/
|
||||||
|
297,
|
||||||
/**/
|
/**/
|
||||||
296,
|
296,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user