Patch 9.0.0210
Problem: 'list' mode does not work properly with virtual text.
Solution: Show the "$" at the right position. (closes #10913)
Files: src/drawline.c, src/charset.c, src/testdir/test_textprop.vim,
src/testdir/dumps/Test_prop_insert_list_mode_1.dump,
src/testdir/dumps/Test_prop_insert_list_mode_2.dump,
src/testdir/dumps/Test_prop_insert_list_mode_3.dump
*** ../vim-9.0.0209/src/drawline.c 2022-08-14 16:50:39.016238231 +0100
--- src/drawline.c 2022-08-14 19:32:30.911965273 +0100
***************
*** 1640,1645 ****
--- 1640,1652 ----
: bcol >= text_props[text_prop_next].tp_col - 1))
{
if (text_props[text_prop_next].tp_col == MAXCOL
+ && *ptr == NUL && wp->w_p_list && lcs_eol_one > 0)
+ {
+ // first display the '$' after the line
+ text_prop_follows = TRUE;
+ break;
+ }
+ if (text_props[text_prop_next].tp_col == MAXCOL
|| bcol <= text_props[text_prop_next].tp_col - 1
+ text_props[text_prop_next].tp_len)
text_prop_idxs[text_props_active++] = text_prop_next;
***************
*** 1755,1760 ****
--- 1762,1777 ----
? wlv.col == 0 || !wp->w_p_wrap
: n_used < wlv.n_extra))
added = 0;
+
+ // With 'nowrap' add one to show the
+ // "extends" character if needed (it
+ // doesn't show it the text just fits).
+ if (!wp->w_p_wrap
+ && n_used < wlv.n_extra
+ && wp->w_lcs_chars.ext != NUL
+ && wp->w_p_list)
+ ++n_used;
+
// add 1 for NUL, 2 for when '…' is used
l = alloc(n_used + added + 3);
if (l != NULL)
***************
*** 2728,2743 ****
{
// In virtualedit, visual selections may extend
// beyond end of line.
! if (area_highlighting && virtual_active()
! && tocol != MAXCOL && wlv.vcol < tocol)
! wlv.n_extra = 0;
! else
! {
wlv.p_extra = at_end_str;
! wlv.n_extra = 1;
! wlv.c_extra = NUL;
! wlv.c_final = NUL;
! }
}
if (wp->w_p_list && wp->w_lcs_chars.eol > 0)
c = wp->w_lcs_chars.eol;
--- 2745,2754 ----
{
// In virtualedit, visual selections may extend
// beyond end of line.
! if (!(area_highlighting && virtual_active()
! && tocol != MAXCOL && wlv.vcol < tocol))
wlv.p_extra = at_end_str;
! wlv.n_extra = 0;
}
if (wp->w_p_list && wp->w_lcs_chars.eol > 0)
c = wp->w_lcs_chars.eol;
***************
*** 3218,3225 ****
#endif
wlv.col == wp->w_width - 1)
&& (*ptr != NUL
! || (wp->w_p_list && lcs_eol_one > 0)
! || (wlv.n_extra && (wlv.c_extra != NUL
|| *wlv.p_extra != NUL))))
{
c = wp->w_lcs_chars.ext;
--- 3229,3236 ----
#endif
wlv.col == wp->w_width - 1)
&& (*ptr != NUL
! || lcs_eol_one > 0
! || (wlv.n_extra > 0 && (wlv.c_extra != NUL
|| *wlv.p_extra != NUL))))
{
c = wp->w_lcs_chars.ext;
*** ../vim-9.0.0209/src/charset.c 2022-08-14 13:28:36.223224725 +0100
--- src/charset.c 2022-08-14 19:09:01.117048599 +0100
***************
*** 1186,1191 ****
--- 1186,1196 ----
int len = (int)STRLEN(p);
int n_used = len;
+ // The "$" for 'list' mode will go between the EOL and
+ // the text prop, account for that.
+ if (wp->w_p_list && wp->w_lcs_chars.eol != NUL)
+ ++vcol;
+
// Keep in sync with where textprop_size_after_trunc()
// is called in win_line().
if (!wrap)
*** ../vim-9.0.0209/src/testdir/test_textprop.vim 2022-08-14
16:36:16.674056502 +0100
--- src/testdir/test_textprop.vim 2022-08-14 19:34:49.203850417 +0100
***************
*** 2969,2972 ****
--- 2969,3002 ----
call delete('XscriptPropsStartIncl')
endfunc
+ func Test_insert_text_list_mode()
+ CheckRunVimInTerminal
+
+ let lines =<< trim END
+ vim9script
+ setline(1, ['This is a line with quite a bit of text here.',
+ 'second line', 'third line'])
+ set list listchars+=extends:»
+ prop_type_add('Prop1', {highlight: 'Error'})
+ prop_add(1, 0, {
+ type: 'Prop1',
+ text: 'The quick brown fox jumps over the lazy dog',
+ text_align: 'right'
+ })
+ END
+ call writefile(lines, 'XscriptPropsListMode')
+ let buf = RunVimInTerminal('-S XscriptPropsListMode', #{rows: 8, cols: 60})
+ call term_sendkeys(buf, "ggj")
+ call VerifyScreenDump(buf, 'Test_prop_insert_list_mode_1', {})
+
+ call term_sendkeys(buf, ":set nowrap\<CR>")
+ call VerifyScreenDump(buf, 'Test_prop_insert_list_mode_2', {})
+
+ call term_sendkeys(buf, "ggd32l")
+ call VerifyScreenDump(buf, 'Test_prop_insert_list_mode_3', {})
+
+ call StopVimInTerminal(buf)
+ call delete('XscriptPropsListMode')
+ endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-9.0.0209/src/testdir/dumps/Test_prop_insert_list_mode_1.dump
2022-08-14 19:36:40.195760255 +0100
--- src/testdir/dumps/Test_prop_insert_list_mode_1.dump 2022-08-14
19:34:51.703848367 +0100
***************
*** 0 ****
--- 1,8 ----
+ |T+0&#ffffff0|h|i|s| |i|s| |a| |l|i|n|e| |w|i|t|h| |q|u|i|t|e| |a| |b|i|t|
|o|f| |t|e|x|t| |h|e|r|e|.|$+0#4040ff13&|T+0#ffffff16#ff404010|h|e| |q|u|i|c|k|
|b|r|o|…
+ >s+0#0000000#ffffff0|e|c|o|n|d| |l|i|n|e|$+0#4040ff13&| +0#0000000&@47
+ |t|h|i|r|d| |l|i|n|e|$+0#4040ff13&| +0#0000000&@48
+ |~+0#4040ff13&| @58
+ |~| @58
+ |~| @58
+ |~| @58
+ | +0#0000000&@41|2|,|1| @10|A|l@1|
*** ../vim-9.0.0209/src/testdir/dumps/Test_prop_insert_list_mode_2.dump
2022-08-14 19:36:40.199760252 +0100
--- src/testdir/dumps/Test_prop_insert_list_mode_2.dump 2022-08-14
19:34:52.855847425 +0100
***************
*** 0 ****
--- 1,8 ----
+ |T+0&#ffffff0|h|i|s| |i|s| |a| |l|i|n|e| |w|i|t|h| |q|u|i|t|e| |a| |b|i|t|
|o|f| |t|e|x|t| |h|e|r|e|.|$+0#4040ff13&|T+0#ffffff16#ff404010|h|e| |q|u|i|c|k|
|b|r|o|»+0#4040ff13#ffffff0
+ >s+0#0000000&|e|c|o|n|d| |l|i|n|e|$+0#4040ff13&| +0#0000000&@47
+ |t|h|i|r|d| |l|i|n|e|$+0#4040ff13&| +0#0000000&@48
+ |~+0#4040ff13&| @58
+ |~| @58
+ |~| @58
+ |~| @58
+ |:+0#0000000&|s|e|t| |n|o|w|r|a|p| @30|2|,|1| @10|A|l@1|
*** ../vim-9.0.0209/src/testdir/dumps/Test_prop_insert_list_mode_3.dump
2022-08-14 19:36:40.203760248 +0100
--- src/testdir/dumps/Test_prop_insert_list_mode_3.dump 2022-08-14
19:34:54.003846485 +0100
***************
*** 0 ****
--- 1,8 ----
+ >o+0&#ffffff0|f| |t|e|x|t| |h|e|r|e|.|$+0#4040ff13&|
+0#0000000&@2|T+0#ffffff16#ff404010|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x|
|j|u|m|p|s| |o|v|e|r| |t|h|e| |l|a|z|y| |d|o|g
+ |s+0#0000000#ffffff0|e|c|o|n|d| |l|i|n|e|$+0#4040ff13&| +0#0000000&@47
+ |t|h|i|r|d| |l|i|n|e|$+0#4040ff13&| +0#0000000&@48
+ |~+0#4040ff13&| @58
+ |~| @58
+ |~| @58
+ |~| @58
+ |:+0#0000000&|s|e|t| |n|o|w|r|a|p| @30|1|,|1| @10|A|l@1|
*** ../vim-9.0.0209/src/version.c 2022-08-14 16:50:39.016238231 +0100
--- src/version.c 2022-08-14 18:20:23.001065150 +0100
***************
*** 737,738 ****
--- 737,740 ----
{ /* Add new patch number below this line */
+ /**/
+ 210,
/**/
--
[clop clop]
GUARD #1: Halt! Who goes there?
ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of
Camelot. King of the Britons, defeator of the Saxons, sovereign of
all England!
GUARD #1: Pull the other one!
The Quest for the Holy Grail (Monty Python)
/// 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/20220814183811.52D161C0CD2%40moolenaar.net.