summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-04-14 18:52:49 +0200
committerChristian Brabandt <cb@256bit.org>2024-04-14 18:52:49 +0200
commit05aacec6ab5c7ed8a13bbdca2f0005d6a1816230 (patch)
treebcd397910eeac7718df272cd5425788bcf16626e
parent3d93630605df60e8de5a38918eaff62165b42382 (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>
-rw-r--r--src/mbyte.c1
-rw-r--r--src/move.c13
-rw-r--r--src/proto/move.pro1
-rw-r--r--src/testdir/test_utf8.vim14
-rw-r--r--src/version.c2
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,