On Mi, 22 Sep 2021, Christian Brabandt wrote:
> > On Mi, 22 Sep 2021, Yegappan Lakshmanan wrote: > > > Hi Christian, > > > > On Fri, Sep 3, 2021 at 11:14 AM Christian Brabandt <[email protected]> wrote: > > > > > > > > > On Fr, 03 Sep 2021, Bram Moolenaar wrote: > > > > > > > > > > > > > Thanks for creating this test. > > > > > > There is another check for n_extra becoming negative, and if I > > > > > > comment it > > > > > > out no test fails. > > > > > > Perhaps you can manage to write a test for that one too? > > > > > > This is in line 1215 of src/drawline.c > > > > > > > > > > > > > > > I created a test that exercises this line. But I ran into some bugs. > > > > > If you source the following script: > > > > > > > > > > ------------------------------------------------------------------------------------- > > > > > 10new > > > > > 20vnew > > > > > call setline(1, repeat('aa ', 200)) > > > > > setlocal breakindent breakindentopt=shift:4 linebreak showbreak=>> > > > > > setlocal number > > > > > set cpo+=n > > > > > normal 12gj > > > > > redraw! > > > > > normal $ > > > > > redraw! > > > > > > > > > > ------------------------------------------------------------------------------------- > > > > > > > > > > You will see that the cursor is positioned a few characters before > > > > > the end > > > > > of the line and it cannot be moved to the end of the line. Also, if > > > > > you move > > > > > the cursor to the left by pressing "h" quite a few times (to cause the > > > > > screen > > > > > to scroll down), you will see the cursor can be positioned on the > > > > > 'showbreak' characters. > > > > > > > > It looks like this happens because the " >>" in the first line is not > > > > counted, thus when w_skipcol is non-zero. It's also strange that there > > > > is a space before ">>". Perhaps Christian knows what needs to change to > > > > fix this. > > > > > > I'll have a look. > > > > > > > Should I open a Github issue to track this? > > Hi Yegappan, > you can. I just don't have much spare time to debug such screen-logic. I found that time yesterday. I think the following patch should fix it. However I am not completely sure that this is the best way to do it. I also need some more time to thoroughly test it. I will do this later and submit a proper PR with your testcase. diff --git a/src/charset.c b/src/charset.c index fcaeedf75..953319af5 100644 --- a/src/charset.c +++ b/src/charset.c @@ -1090,6 +1090,16 @@ win_lbr_chartabsize( colnr_T sbrlen = 0; int numberwidth = win_col_off(wp); + // long line that does not fit in the window + // need to adjust for leading sbr value + if (wp->w_skipcol && + wp->w_p_wrap && + col >= wp->w_skipcol && + *sbr != NUL && + col <= wp->w_skipcol + wp->w_width + - win_col_off(wp) - MB_CHARLEN(sbr)) + col -= (colnr_T)MB_CHARLEN(sbr); + numberextra = numberwidth; col += numberextra + mb_added; if (col >= (colnr_T)wp->w_width) Best, Christian -- -- 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/20210923070105.GB3729843%40256bit.org.
