patch 9.1.0084: Visual hl wrong when it ends before multibyte 'showbreak'

Commit: 
https://github.com/vim/vim/commit/df23d7f4bd7546f3152ea003856525591218565b
Author: zeertzjq <zeert...@outlook.com>
Date:   Fri Feb 9 18:14:12 2024 +0100

    patch 9.1.0084: Visual hl wrong when it ends before multibyte 'showbreak'
    
    Problem:  Visual hl wrong when it ends before multibyte 'showbreak'.
              (lacygoil)
    Solution: Use vcol_sbr instead of adding n_extra.
              (zeertzjq)
    
    fixes: #11272
    closes: #13996
    
    Signed-off-by: zeertzjq <zeert...@outlook.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/drawline.c b/src/drawline.c
index f6c01d597..0f3400f9d 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -589,7 +589,7 @@ handle_showbreak_and_filler(win_T *wp, winlinevars_T *wlv)
        // Correct end of highlighted area for 'showbreak',
        // required when 'linebreak' is also set.
        if (wlv->tocol == wlv->vcol)
-           wlv->tocol += wlv->n_extra;
+           wlv->tocol = wlv->vcol_sbr;
        // combine 'showbreak' with 'wincolor'
        wlv->char_attr = hl_combine_attr(wlv->win_attr, HL_ATTR(HLF_AT));
 #  ifdef FEAT_SYN_HL
diff --git a/src/testdir/dumps/Test_visual_ends_before_showbreak.dump 
b/src/testdir/dumps/Test_visual_ends_before_showbreak.dump
new file mode 100644
index 000000000..ee809bab5
--- /dev/null
+++ b/src/testdir/dumps/Test_visual_ends_before_showbreak.dump
@@ -0,0 +1,6 @@
+|x+0&#ffffff0@4| @69
+|↪+0#4040ff13&| |y+0#0000001#a8a8a8255@68> +0#0000000#ffffff0| 
+0#0000001#a8a8a8255@2
+|↪+0#4040ff13#ffffff0| |z+0#0000000&@3| @68
+|~+0#4040ff13&| @73
+|~| @73
+|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@34|7|0| @7|1|,|7|6|-|1|4|7| 
@5|A|l@1| 
diff --git a/src/testdir/test_listlbr_utf8.vim 
b/src/testdir/test_listlbr_utf8.vim
index 1bbbd2d2a..313ff30cc 100644
--- a/src/testdir/test_listlbr_utf8.vim
+++ b/src/testdir/test_listlbr_utf8.vim
@@ -9,6 +9,7 @@ CheckFeature conceal
 CheckFeature signs
 
 source view_util.vim
+source screendump.vim
 
 func s:screen_lines(lnum, width) abort
   return ScreenLines(a:lnum, a:width)
@@ -358,4 +359,24 @@ func Test_unprintable_char_on_wrap_column()
   call s:close_windows()
 endfunc
 
+" Test that Visual selection is drawn correctly when 'linebreak' is set and
+" selection ends before multibyte 'showbreak'.
+func Test_visual_ends_before_showbreak()
+  CheckScreendump
+
+  let lines =<< trim END
+      vim9script
+      &wrap = true
+      &linebreak = true
+      &showbreak = '↪ '
+      ['xxxxx ' .. 'y'->repeat(&columns - 6) .. ' zzzz']->setline(1)
+      normal! wvel
+  END
+  call writefile(lines, 'XvisualEndsBeforeShowbreak', 'D')
+  let buf = RunVimInTerminal('-S XvisualEndsBeforeShowbreak', #{rows: 6})
+  call VerifyScreenDump(buf, 'Test_visual_ends_before_showbreak', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index e0f30f232..d961085f6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    84,
 /**/
     83,
 /**/

-- 
-- 
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 vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1rYUhR-005Sxr-Kg%40256bit.org.

Raspunde prin e-mail lui