Patch 9.0.0199
Problem: Cursor position wrong with two right-aligned virtual texts.
Solution: Add the padding for right-alignment. (issue #10906)
Files: src/charset.c, src/testdir/test_textprop.vim,
src/testdir/dumps/Test_prop_right_align_twice_1.dump,
src/testdir/dumps/Test_prop_right_align_twice_2.dump
*** ../vim-9.0.0198/src/charset.c 2022-08-09 18:24:58.594059458 +0100
--- src/charset.c 2022-08-13 16:25:56.450008425 +0100
***************
*** 1181,1186 ****
--- 1181,1187 ----
if (tp->tp_col == MAXCOL)
{
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 len = (int)STRLEN(p);
int n_used = len;
***************
*** 1193,1202 ****
cells = textprop_size_after_trunc(wp,
below, added, p, &n_used);
}
- // right-aligned does not really matter here, same as
- // "after"
if (below)
cells += wp->w_width - (vcol + size) % wp->w_width;
#ifdef FEAT_LINEBREAK
no_sbr = TRUE; // don't use 'showbreak' now
#endif
--- 1194,1212 ----
cells = textprop_size_after_trunc(wp,
below, added, p, &n_used);
}
if (below)
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
no_sbr = TRUE; // don't use 'showbreak' now
#endif
*** ../vim-9.0.0198/src/testdir/test_textprop.vim 2022-08-12
13:05:27.567326156 +0100
--- src/testdir/test_textprop.vim 2022-08-13 16:27:18.897764856 +0100
***************
*** 2538,2543 ****
--- 2538,2566 ----
call delete('XscriptPropsWithHighlight')
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()
CheckRunVimInTerminal
*** ../vim-9.0.0198/src/testdir/dumps/Test_prop_right_align_twice_1.dump
2022-08-13 16:29:51.481316569 +0100
--- src/testdir/dumps/Test_prop_right_align_twice_1.dump 2022-08-13
16:27:24.761747569 +0100
***************
*** 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|
*** ../vim-9.0.0198/src/testdir/dumps/Test_prop_right_align_twice_2.dump
2022-08-13 16:29:51.485316557 +0100
--- src/testdir/dumps/Test_prop_right_align_twice_2.dump 2022-08-13
16:27:25.917744164 +0100
***************
*** 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|
*** ../vim-9.0.0198/src/version.c 2022-08-13 14:09:40.979749238 +0100
--- src/version.c 2022-08-13 15:53:52.416551964 +0100
***************
*** 737,738 ****
--- 737,740 ----
{ /* Add new patch number below this line */
+ /**/
+ 199,
/**/
--
Luxury. We used to have to get out of the lake at three o'clock in the
morning, clean the lake, eat a handful of hot gravel, go to work at the
mill every day for tuppence a month, come home, and Dad would beat us
around the head and neck with a broken bottle, if we were LUCKY!
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20220813154158.2DC771C0D6D%40moolenaar.net.