patch 9.1.0185: 'wincolor' hl missing with 'rightleft', "below" virttext, 
'nowrap'

Commit: 
https://github.com/vim/vim/commit/f6272551bdae3f265b6948a4155b079c37fe110f
Author: zeertzjq <[email protected]>
Date:   Sun Mar 17 10:01:47 2024 +0100

    patch 9.1.0185: 'wincolor' hl missing with 'rightleft', "below" virttext, 
'nowrap'
    
    Problem:  'wincolor' highlight missing with 'rightleft', "below" virtual
              text and 'nowrap'.
    Solution: Handle 'rightleft' in draw_screen_line() (zeertzjq).
    
    closes: #14216
    
    Signed-off-by: zeertzjq <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/src/drawline.c b/src/drawline.c
index e73d5b1b6..cc1bed6b1 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -886,6 +886,7 @@ draw_screen_line(win_T *wp, winlinevars_T *wlv)
 {
 #ifdef FEAT_SYN_HL
     long       v;
+    int                wcol;
 
     // Highlight 'cursorcolumn' & 'colorcolumn' past end of the line.
     if (wp->w_p_wrap)
@@ -893,9 +894,14 @@ draw_screen_line(win_T *wp, winlinevars_T *wlv)
     else
        v = wp->w_leftcol;
 
+    wcol =
+# ifdef FEAT_RIGHTLEFT
+       wp->w_p_rl ? wp->w_width - wlv->col - 1 :
+# endif
+       wlv->col;
     // check if line ends before left margin
-    if (wlv->vcol < v + wlv->col - win_col_off(wp))
-       wlv->vcol = v + wlv->col - win_col_off(wp);
+    if (wlv->vcol < v + wcol - win_col_off(wp))
+       wlv->vcol = v + wcol - win_col_off(wp);
 # ifdef FEAT_CONCEAL
     // Get rid of the boguscols now, we want to draw until the right
     // edge for 'cursorcolumn'.
@@ -918,11 +924,7 @@ draw_screen_line(win_T *wp, winlinevars_T *wlv)
 # ifdef LINE_ATTR
                || wlv->line_attr != 0
 # endif
-               || wlv->win_attr != 0)
-# ifdef FEAT_RIGHTLEFT
-           && !wp->w_p_rl
-# endif
-           )
+               || wlv->win_attr != 0))
     {
        int     rightmost_vcol = 0;
        int     i;
@@ -935,13 +937,16 @@ draw_screen_line(win_T *wp, winlinevars_T *wlv)
                if (rightmost_vcol < wlv->color_cols[i])
                    rightmost_vcol = wlv->color_cols[i];
 
-       while (wlv->col < wp->w_width)
+       while (
+# ifdef FEAT_RIGHTLEFT
+               wp->w_p_rl ? (wlv->col >= 0) :
+# endif
+               (wlv->col < wp->w_width))
        {
            ScreenLines[wlv->off] = ' ';
            if (enc_utf8)
                ScreenLinesUC[wlv->off] = 0;
-           ScreenCols[wlv->off] = wlv->vcol;
-           ++wlv->col;
+
            if (wlv->draw_color_col)
                wlv->draw_color_col = advance_color_col(
                                                   VCOL_HLC, &wlv->color_cols);
@@ -956,7 +961,20 @@ draw_screen_line(win_T *wp, winlinevars_T *wlv)
                attr = hl_combine_attr(attr, HL_ATTR(HLF_CUC));
            else if (wlv->draw_color_col && VCOL_HLC == *wlv->color_cols)
                attr = hl_combine_attr(attr, HL_ATTR(HLF_MC));
-           ScreenAttrs[wlv->off++] = attr;
+           ScreenAttrs[wlv->off] = attr;
+           ScreenCols[wlv->off] = wlv->vcol;
+# ifdef FEAT_RIGHTLEFT
+           if (wp->w_p_rl)
+           {
+               --wlv->off;
+               --wlv->col;
+           }
+           else
+# endif
+           {
+               ++wlv->off;
+               ++wlv->col;
+           }
 
            if (VCOL_HLC >= rightmost_vcol
 # ifdef LINE_ATTR
diff --git a/src/testdir/dumps/Test_prop_wincolor_9.dump 
b/src/testdir/dumps/Test_prop_wincolor_9.dump
new file mode 100644
index 000000000..7b26974ac
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_wincolor_9.dump
@@ -0,0 +1,8 @@
+| +8&#af5f00255@29| +8&#ffd7d7255| +8&#af5f00255@1> @12|e|r|e|h| |t|x|e|t| 
|e|m|o|s
+| @51|W+8&#5fd7ff255|O|L|E|B| +8&#af5f00255@2
+| +0&#ffd7ff255@29| +0&#ffd7d7255| +0&#ffd7ff255@1| 
+0&#e0e0e08|e+0&#ffd7ff255|r|e|h| |t|x|e|t| |r|e|g|n|o|l| |h|c|u|m| |e|m|o|s
+| @29| +0&#ffd7d7255| +0&#ffd7ff255@1| +0&#e0e0e08| 
+0&#ffd7ff255@3|R+0&#ffff4012|E|T|F|A| +0&#ffd7ff255@2|e|r|e|h| |t|x|e|t| 
|e|r|o|m
+| +0#4040ff13&@58|~
+| @58|~
+| @58|~
+|:+0#0000000#ffffff0| @40|1|,|1|5|-|2|7| @6|A|l@1| 
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 993a64d3b..c88b5477a 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -4535,6 +4535,11 @@ func Test_textprop_with_wincolor()
   call term_sendkeys(buf, 'k')
   call VerifyScreenDump(buf, 'Test_prop_wincolor_8', {})
 
+  if has('rightleft')
+    call term_sendkeys(buf, ":set rightleft\<CR>:\<CR>")
+    call VerifyScreenDump(buf, 'Test_prop_wincolor_9', {})
+  endif
+
   call StopVimInTerminal(buf)
 endfunc
 
diff --git a/src/version.c b/src/version.c
index 5d768c178..07bed4f30 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 */
+/**/
+    185,
 /**/
     184,
 /**/

-- 
-- 
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/E1rlmbh-006o2Z-T2%40256bit.org.

Raspunde prin e-mail lui