Skip to content

Commit

Permalink
patch 9.1.0320: Wrong cursor position after using setcellwidths()
Browse files Browse the repository at this point in the history
Problem:  Wrong cursor position after using setcellwidths().
Solution: Invalidate cursor position in addition to redrawing.
          (zeertzjq)

closes: #14545

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
  • Loading branch information
zeertzjq authored and chrisbra committed Apr 14, 2024
1 parent 3d93630 commit 05aacec
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/mbyte.c
Expand Up @@ -5733,6 +5733,7 @@ f_setcellwidths(typval_T *argvars, typval_T *rettv UNUSED)
}

vim_free(cw_table_save);
changed_window_setting_all();
redraw_all_later(UPD_CLEAR);
}

Expand Down
13 changes: 13 additions & 0 deletions src/move.c
Expand Up @@ -677,6 +677,19 @@ changed_window_setting_buf(buf_T *buf)
}
#endif

/*
* Call changed_window_setting_win() for every window.
*/
void
changed_window_setting_all(void)
{
tabpage_T *tp;
win_T *wp;

FOR_ALL_TAB_WINDOWS(tp, wp)
changed_window_setting_win(wp);
}

/*
* Set wp->w_topline to a certain number.
*/
Expand Down
1 change: 1 addition & 0 deletions src/proto/move.pro
Expand Up @@ -9,6 +9,7 @@ void check_cursor_moved(win_T *wp);
void changed_window_setting(void);
void changed_window_setting_win(win_T *wp);
void changed_window_setting_buf(buf_T *buf);
void changed_window_setting_all(void);
void set_topline(win_T *wp, linenr_T lnum);
void changed_cline_bef_curs(void);
void changed_cline_bef_curs_win(win_T *wp);
Expand Down
14 changes: 14 additions & 0 deletions src/testdir/test_utf8.vim
Expand Up @@ -170,6 +170,7 @@ func Test_screenchar_utf8()
endfunc

func Test_setcellwidths()
new
call setcellwidths([
\ [0x1330, 0x1330, 2],
\ [9999, 10000, 1],
Expand Down Expand Up @@ -212,6 +213,18 @@ func Test_setcellwidths()
" Ambiguous width chars
call assert_equal(2, strwidth("\u00A1"))
call assert_equal(2, strwidth("\u2010"))

call setcellwidths([])
call setline(1, repeat("\u2103", 10))
normal! $
redraw
call assert_equal((aw == 'single') ? 10 : 19, wincol())
call setcellwidths([[0x2103, 0x2103, 1]])
redraw
call assert_equal(10, wincol())
call setcellwidths([[0x2103, 0x2103, 2]])
redraw
call assert_equal(19, wincol())
endfor
set ambiwidth& isprint&

Expand Down Expand Up @@ -245,6 +258,7 @@ func Test_setcellwidths()
set listchars&
set fillchars&
call setcellwidths([])
bwipe!
endfunc

func Test_getcellwidths()
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -704,6 +704,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
320,
/**/
319,
/**/
Expand Down

0 comments on commit 05aacec

Please sign in to comment.