]> granicus.if.org Git - vim/commitdiff
patch 9.0.0157: 'showbreak' displayed below truncated "after" text prop v9.0.0157
authorBram Moolenaar <Bram@vim.org>
Sat, 6 Aug 2022 20:03:53 +0000 (21:03 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 6 Aug 2022 20:03:53 +0000 (21:03 +0100)
Problem:    'showbreak' displayed below truncated "after" text prop.
Solution:   Suppress 'showbreak' when "after" prop doesn't wrap.

src/charset.c
src/drawline.c
src/testdir/dumps/Test_prop_with_text_after_below_trunc_1.dump [new file with mode: 0644]
src/testdir/test_textprop.vim
src/version.c

index b245bd763edb5a0ededacbf3a5d280c5c9748192..27213e93a94d7e19a68f244d30d22d49b687fc0e 100644 (file)
@@ -1094,6 +1094,7 @@ win_lbr_chartabsize(
     int                tab_corr = (*s == TAB);
     int                n;
     char_u     *sbr;
+    int                no_sbr = FALSE;
 #endif
 
 #if defined(FEAT_PROP_POPUP)
@@ -1155,7 +1156,7 @@ win_lbr_chartabsize(
                    if (tp->tp_col == MAXCOL)
                    {
                        int below = (tp->tp_flags & TP_FLAG_ALIGN_BELOW);
-                       int     wrap = (tp->tp_flags & TP_FLAG_WRAP);
+                       int wrap = (tp->tp_flags & TP_FLAG_WRAP);
                        int len = (int)STRLEN(p);
                        int n_used = len;
 
@@ -1168,6 +1169,9 @@ win_lbr_chartabsize(
                        // "after"
                        if (below)
                            cells += wp->w_width - (vcol + size) % wp->w_width;
+#ifdef FEAT_LINEBREAK
+                       no_sbr = TRUE;  // don't use 'showbreak' now
+#endif
                    }
                    cts->cts_cur_text_width += cells;
                    size += cells;
@@ -1242,7 +1246,7 @@ win_lbr_chartabsize(
      * Do not use 'showbreak' at the NUL after the text.
      */
     added = 0;
-    sbr = c == NUL ? empty_option : get_showbreak_value(wp);
+    sbr = (c == NUL || no_sbr) ? empty_option : get_showbreak_value(wp);
     if ((*sbr != NUL || wp->w_p_bri) && wp->w_p_wrap && vcol != 0)
     {
        colnr_T sbrlen = 0;
index 6024bad29c82318733ed6b571ada44e2bf8b7ba8..26b52d3b1777f377595824702b6771e65bc46f73 100644 (file)
@@ -1722,7 +1722,7 @@ win_line(
                                // don't combine char attr after EOL
                                text_prop_flags &= ~PT_FLAG_COMBINE;
 #ifdef FEAT_LINEBREAK
-                           if (below || right)
+                           if (below || right || !wrap)
                            {
                                // no 'showbreak' before "below" text property
                                // or after "right" text property
diff --git a/src/testdir/dumps/Test_prop_with_text_after_below_trunc_1.dump b/src/testdir/dumps/Test_prop_with_text_after_below_trunc_1.dump
new file mode 100644 (file)
index 0000000..e254ac0
--- /dev/null
@@ -0,0 +1,8 @@
+|o+0&#ffffff0|n|a|s|d|f| |a|s|d|f| |a|s|d|f| |a|s|d|f| |a|s|d| |f|a|s| |d|f|t+0#e000e06&|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x| |j|u|m|p|s| |o|…
+|t|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| +0#0000000&@16
+|t|w>o| @56
+|~+0#4040ff13&| @58
+|~| @58
+|~| @58
+|~| @58
+|"+0#0000000&|f|o@1|b|a|r|"| |[|N|e|w|]| @27|2|,|3| @10|A|l@1| 
index 2c59f6488d227341222a1710cdf56891d1b5cbd9..484cb3cea43e7b68e7ca0002fa85123dda7ad4d7 100644 (file)
@@ -2336,6 +2336,35 @@ func Test_props_with_text_after()
   call delete('XscriptPropsWithTextAfter')
 endfunc
 
+func Test_props_with_text_after_below_trunc()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+      vim9script
+      edit foobar
+      set showbreak=+++
+      setline(1, ['onasdf asdf asdf asdf asd fas df', 'two'])
+      prop_type_add('test', {highlight: 'Special'})
+      prop_add(1, 0, {
+          type: 'test',
+          text: 'the quick brown fox jumps over the lazy dog',
+          text_align: 'after'
+      })
+      prop_add(1, 0, {
+          type: 'test',
+          text: 'the quick brown fox jumps over the lazy dog',
+          text_align: 'below'
+      })
+      normal G$
+  END
+  call writefile(lines, 'XscriptPropsAfterTrunc')
+  let buf = RunVimInTerminal('-S XscriptPropsAfterTrunc', #{rows: 8, cols: 60})
+  call VerifyScreenDump(buf, 'Test_prop_with_text_after_below_trunc_1', {})
+
+  call StopVimInTerminal(buf)
+  call delete('XscriptPropsAfterTrunc')
+endfunc
+
 func Test_props_with_text_after_joined()
   CheckRunVimInTerminal
 
index 196f3e68ab68f845909a5bbcb29e99435e0e5cca..667b6071bd9dedf18450949992dd58746e6c1d58 100644 (file)
@@ -735,6 +735,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    157,
 /**/
     156,
 /**/