Patch 9.0.0714
Problem:    With 'nowrap' two virtual text below not displayed correctly.
Solution:   Set text_prop_follows before continuing.  Correct for number
            column. (closes #11333)
Files:      src/drawline.c, src/testdir/test_textprop.vim,
            src/testdir/dumps/Test_text_below_nowrap_1.dump


*** ../vim-9.0.0713/src/drawline.c      2022-10-09 21:53:35.319363028 +0100
--- src/drawline.c      2022-10-10 15:36:35.450833662 +0100
***************
*** 578,584 ****
        int     *n_used_ptr)
  {
      int       space = (flags & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_ABOVE))
!                                                        ? wp->w_width : added;
      int len = (int)STRLEN(text);
      int strsize = 0;
      int n_used;
--- 578,584 ----
        int     *n_used_ptr)
  {
      int       space = (flags & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_ABOVE))
!                                      ? wp->w_width - win_col_off(wp) : added;
      int len = (int)STRLEN(text);
      int strsize = 0;
      int n_used;
***************
*** 634,639 ****
--- 634,641 ----
      int           strsize = vim_strsize(*p_extra);
      int           cells = wrap ? strsize : textprop_size_after_trunc(wp,
                             tp->tp_flags, before, padding, *p_extra, &n_used);
+     int           cont_on_next_line = below && col_with_padding > 
win_col_off(wp)
+                                                             && !wp->w_p_wrap;
  
      if (wrap || right || above || below || padding > 0 || n_used < *n_extra)
      {
***************
*** 736,742 ****
                *n_attr = mb_charlen(*p_extra);
                if (above)
                    *n_attr -= padding + after;
!               *n_attr_skip = before + padding + skip_add;
            }
        }
      }
--- 738,748 ----
                *n_attr = mb_charlen(*p_extra);
                if (above)
                    *n_attr -= padding + after;
! 
!               // Add "skip_add" when starting a new line or wrapping,
!               // n_attr_skip will then be decremented in the number column.
!               *n_attr_skip = before + padding
!                           + (cont_on_next_line || before > 0 ? skip_add : 0);
            }
        }
      }
***************
*** 1917,1922 ****
--- 1923,1929 ----
                                                           -text_prop_id - 1];
                        int         above = (tp->tp_flags
                                                        & TP_FLAG_ALIGN_ABOVE);
+                       int         bail_out = FALSE;
  
                        // reset the ID in the copy to avoid it being used
                        // again
***************
*** 2003,2009 ****
                                        break;
                                    }
                                    win_line_start(wp, &wlv, TRUE);
!                                   continue;
                                }
                            }
                        }
--- 2010,2016 ----
                                        break;
                                    }
                                    win_line_start(wp, &wlv, TRUE);
!                                   bail_out = TRUE;
                                }
                            }
                        }
***************
*** 2017,2022 ****
--- 2024,2033 ----
                            && (wp->w_p_wrap
                                   || (text_props[other_tpi].tp_flags
                               & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_RIGHT)));
+ 
+                       if (bail_out)
+                           // starting a new line for "below"
+                           continue;
                    }
                }
                else if (text_prop_next < text_prop_count
*** ../vim-9.0.0713/src/testdir/test_textprop.vim       2022-10-09 
21:53:35.319363028 +0100
--- src/testdir/test_textprop.vim       2022-10-10 15:25:02.855273591 +0100
***************
*** 3241,3246 ****
--- 3241,3275 ----
    call StopVimInTerminal(buf)
  endfunc
  
+ func Test_text_below_nowrap()
+   CheckRunVimInTerminal
+ 
+   let lines =<< trim END
+       vim9script
+       setline(1, ['first line', 'second line '->repeat(50), 'third', 
'fourth'])
+       set nowrap number
+       prop_type_add('theprop', {highlight: 'DiffChange'})
+       prop_add(1, 0, {
+           type: 'theprop',
+           text: 'one below the text '->repeat(5),
+           text_align: 'below',
+           text_padding_left: 2,
+       })
+       prop_add(1, 0, {
+           type: 'theprop',
+           text: 'two below the text '->repeat(5),
+           text_align: 'below',
+           text_padding_left: 2,
+       })
+       normal 2Gw
+   END
+   call writefile(lines, 'XTextBelowNowrap', 'D')
+   let buf = RunVimInTerminal('-S XTextBelowNowrap', #{rows: 8, cols: 60})
+   call VerifyScreenDump(buf, 'Test_text_below_nowrap_1', {})
+ 
+   call StopVimInTerminal(buf)
+ endfunc
+ 
  func Test_insert_text_change_arg()
    CheckRunVimInTerminal
  
*** ../vim-9.0.0713/src/testdir/dumps/Test_text_below_nowrap_1.dump     
2022-10-10 15:38:56.177419195 +0100
--- src/testdir/dumps/Test_text_below_nowrap_1.dump     2022-10-10 
15:25:29.755256980 +0100
***************
*** 0 ****
--- 1,8 ----
+ | +0#af5f00255#ffffff0@1|1| |f+0#0000000&|i|r|s|t| |l|i|n|e| @45
+ | +0#af5f00255&@3| +0#0000000&@1|o+0&#ffd7ff255|n|e| |b|e|l|o|w| |t|h|e| 
|t|e|x|t| |o|n|e| |b|e|l|o|w| |t|h|e| |t|e|x|t| |o|n|e| |b|e|l|o|w| |t|h|e| |t|e
+ | +0#af5f00255#ffffff0@3| +0#0000000&@1|t+0&#ffd7ff255|w|o| |b|e|l|o|w| 
|t|h|e| |t|e|x|t| |t|w|o| |b|e|l|o|w| |t|h|e| |t|e|x|t| |t|w|o| |b|e|l|o|w| 
|t|h|e| |t|e
+ | +0#af5f00255#ffffff0@1|2| |s+0#0000000&|e|c|o|n|d| >l|i|n|e| |s|e|c|o|n|d| 
|l|i|n|e| |s|e|c|o|n|d| |l|i|n|e| |s|e|c|o|n|d| |l|i|n|e| |s|e|c|o|n|d| |l
+ | +0#af5f00255&@1|3| |t+0#0000000&|h|i|r|d| @50
+ | +0#af5f00255&@1|4| |f+0#0000000&|o|u|r|t|h| @49
+ |~+0#4040ff13&| @58
+ | +0#0000000&@41|2|,|8| @10|A|l@1| 
*** ../vim-9.0.0713/src/version.c       2022-10-10 13:46:09.977158083 +0100
--- src/version.c       2022-10-10 15:38:44.741523005 +0100
***************
*** 701,702 ****
--- 701,704 ----
  {   /* Add new patch number below this line */
+ /**/
+     714,
  /**/

-- 
A computer programmer is a device for turning requirements into
undocumented features.  It runs on cola, pizza and Dilbert cartoons.
                                        Bram Moolenaar

 /// 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/20221010144059.E3A341C5296%40moolenaar.net.

Raspunde prin e-mail lui