diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-04-14 18:52:49 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-04-14 18:52:49 +0200 |
commit | 05aacec6ab5c7ed8a13bbdca2f0005d6a1816230 (patch) | |
tree | bcd397910eeac7718df272cd5425788bcf16626e /src | |
parent | 3d93630605df60e8de5a38918eaff62165b42382 (diff) |
patch 9.1.0320: Wrong cursor position after using setcellwidths()v9.1.0320
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/mbyte.c | 1 | ||||
-rw-r--r-- | src/move.c | 13 | ||||
-rw-r--r-- | src/proto/move.pro | 1 | ||||
-rw-r--r-- | src/testdir/test_utf8.vim | 14 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 31 insertions, 0 deletions
diff --git a/src/mbyte.c b/src/mbyte.c index d6fb7ecc76..406d1093ff 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -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); } diff --git a/src/move.c b/src/move.c index 20c575c66a..a234fca1d2 100644 --- a/src/move.c +++ b/src/move.c @@ -678,6 +678,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. */ void diff --git a/src/proto/move.pro b/src/proto/move.pro index ec88b9b397..1302c292da 100644 --- a/src/proto/move.pro +++ b/src/proto/move.pro @@ -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); diff --git a/src/testdir/test_utf8.vim b/src/testdir/test_utf8.vim index 112b5a6e98..deb96ea4b0 100644 --- a/src/testdir/test_utf8.vim +++ b/src/testdir/test_utf8.vim @@ -170,6 +170,7 @@ func Test_screenchar_utf8() endfunc func Test_setcellwidths() + new call setcellwidths([ \ [0x1330, 0x1330, 2], \ [9999, 10000, 1], @@ -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& @@ -245,6 +258,7 @@ func Test_setcellwidths() set listchars& set fillchars& call setcellwidths([]) + bwipe! endfunc func Test_getcellwidths() diff --git a/src/version.c b/src/version.c index 35ab83f2e9..57849eb64a 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 320, +/**/ 319, /**/ 318, |