diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/ex_docmd.c | 1 | ||||
| -rw-r--r-- | src/nvim/screen.c | 24 | ||||
| -rw-r--r-- | src/nvim/testdir/test_breakindent.vim | 5 | ||||
| -rw-r--r-- | src/nvim/testdir/test_listlbr.vim | 16 | ||||
| -rw-r--r-- | src/nvim/testdir/test_listlbr_utf8.vim | 34 | ||||
| -rw-r--r-- | src/nvim/version.c | 4 | 
6 files changed, 69 insertions, 15 deletions
| diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 29788a9865..6e7938046a 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -7690,6 +7690,7 @@ static void ex_redraw(exarg_T *eap)    RedrawingDisabled = 0;    p_lz = FALSE; +  validate_cursor();    update_topline();    update_screen(eap->forceit ? CLEAR :        VIsual_active ? INVERTED : diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 3d558bdbdd..27701c4643 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -2112,16 +2112,16 @@ win_line (      bool nochange                    /* not updating for changed text */  )  { -  int col;                              /* visual column on screen */ -  unsigned off;                         /* offset in ScreenLines/ScreenAttrs */ -  int c = 0;                            /* init for GCC */ -  long vcol = 0;                        /* virtual column (for tabs) */ +  int col = 0;                          // visual column on screen +  unsigned off;                         // offset in ScreenLines/ScreenAttrs +  int c = 0;                            // init for GCC +  long vcol = 0;                        // virtual column (for tabs)    long vcol_sbr = -1;                   // virtual column after showbreak -  long vcol_prev = -1;                  /* "vcol" of previous character */ -  char_u      *line;                    /* current line */ -  char_u      *ptr;                     /* current position in "line" */ -  int row;                              /* row in the window, excl w_winrow */ -  int screen_row;                       /* row on the screen, incl w_winrow */ +  long vcol_prev = -1;                  // "vcol" of previous character +  char_u      *line;                    // current line +  char_u      *ptr;                     // current position in "line" +  int row;                              // row in the window, excl w_winrow +  int screen_row;                       // row on the screen, incl w_winrow    char_u extra[18];                     /* line number and 'fdc' must fit in here */    int n_extra = 0;                      /* number of extra chars */ @@ -2522,7 +2522,11 @@ win_line (      if (vcol > v) {        vcol -= c;        ptr = prev_ptr; -      n_skip = v - vcol; +      // If the character fits on the screen, don't need to skip it. +      // Except for a TAB. +      if (((*mb_ptr2cells)(ptr) >= c || *ptr == TAB) && col == 0) { +        n_skip = v - vcol; +      }      }      /* diff --git a/src/nvim/testdir/test_breakindent.vim b/src/nvim/testdir/test_breakindent.vim index 8721b35cdf..7deffbe452 100644 --- a/src/nvim/testdir/test_breakindent.vim +++ b/src/nvim/testdir/test_breakindent.vim @@ -274,7 +274,6 @@ endfunction  function Test_breakindent16()    " Check that overlong lines are indented correctly. -  " TODO: currently it does not fail even when the bug is not fixed.    let s:input=""    call s:test_windows('setl breakindent briopt=min:0 ts=4')    call setline(1, "\t".repeat("1234567890", 10)) @@ -283,16 +282,16 @@ function Test_breakindent16()    redraw!    let lines=s:screen_lines(1,10)    let expect=[ -\ "    123456",  \ "    789012",  \ "    345678", +\ "    901234",  \ ]    call s:compare_lines(expect, lines)    let lines=s:screen_lines(4,10)    let expect=[ -\ "    901234",  \ "    567890",  \ "    123456", +\ "    7890  ",  \ ]    call s:compare_lines(expect, lines)    call s:close_windows() diff --git a/src/nvim/testdir/test_listlbr.vim b/src/nvim/testdir/test_listlbr.vim index 71366a161e..7856ee82ab 100644 --- a/src/nvim/testdir/test_listlbr.vim +++ b/src/nvim/testdir/test_listlbr.vim @@ -217,3 +217,19 @@ func Test_list_with_listchars()    call s:compare_lines(expect, lines)    call s:close_windows()  endfunc + +func Test_list_with_tab_and_skipping_first_chars() +  call s:test_windows('setl list listchars=tab:>- ts=70 nowrap') +  call setline(1, ["iiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa", "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\taaaaaaaaaaaaaaaaaa"]) +  call cursor(4,64) +  norm! 2zl +  let lines = s:screen_lines([1, 4], winwidth(0)) +  let expect = [ +\ "---------------aaaaa", +\ "---------------aaaaa", +\ "---------------aaaaa", +\ "iiiiiiiii>-----aaaaa", +\ ] +  call s:compare_lines(expect, lines) +  call s:close_windows() +endfu diff --git a/src/nvim/testdir/test_listlbr_utf8.vim b/src/nvim/testdir/test_listlbr_utf8.vim index 807b6ad31a..980d67d49d 100644 --- a/src/nvim/testdir/test_listlbr_utf8.vim +++ b/src/nvim/testdir/test_listlbr_utf8.vim @@ -193,3 +193,37 @@ func Test_multibyte_sign_and_colorcolumn()    call s:compare_lines(expect, lines)    call s:close_windows()  endfunc + +func Test_chinese_char_on_wrap_column() +  call s:test_windows("setl nolbr wrap sbr=") +  syntax off +  call setline(1, [ +\ 'aaaaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'aaaaaaaaaaaaaaaaa中'. +\ 'hello']) +  call cursor(1,1) +  norm! $ +  redraw! +  let expect=[ +\ '中aaaaaaaaaaaaaaaaa>', +\ '中aaaaaaaaaaaaaaaaa>', +\ '中aaaaaaaaaaaaaaaaa>', +\ '中aaaaaaaaaaaaaaaaa>', +\ '中aaaaaaaaaaaaaaaaa>', +\ '中aaaaaaaaaaaaaaaaa>', +\ '中aaaaaaaaaaaaaaaaa>', +\ '中aaaaaaaaaaaaaaaaa>', +\ '中aaaaaaaaaaaaaaaaa>', +\ '中hello             '] +  let lines = s:screen_lines([1, 10], winwidth(0)) +  call s:compare_lines(expect, lines) +  call s:close_windows() +endfu diff --git a/src/nvim/version.c b/src/nvim/version.c index 7fca8aee82..a7479c6b18 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -558,7 +558,7 @@ static const int included_patches[] = {    // 397,    // 396,    // 395, -  // 394, +  394,    393,    // 392,    // 391, @@ -662,7 +662,7 @@ static const int included_patches[] = {    // 293,    // 292,    // 291, -  // 290, +  290,    // 289,    // 288 NA    // 287, | 
