]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0320: Wrong cursor position after using setcellwidths() v9.1.0320
authorzeertzjq <zeertzjq@outlook.com>
Sun, 14 Apr 2024 16:52:49 +0000 (18:52 +0200)
committerChristian Brabandt <cb@256bit.org>
Sun, 14 Apr 2024 16:52:49 +0000 (18:52 +0200)
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>
src/mbyte.c
src/move.c
src/proto/move.pro
src/testdir/test_utf8.vim
src/version.c

index d6fb7ecc761d2800138bd70d5f66cd7d71ce4875..406d1093ffac5a0410070d69bb39358a24b8f406 100644 (file)
@@ -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);
 }
 
index 20c575c66a1c2c8fc8d857f7ab856c404ea8086f..a234fca1d2146f85f227605b2411372dc26b714c 100644 (file)
@@ -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.
  */
index ec88b9b397fd74585eaa1880985d6c89616bb08c..1302c292da074b7fa51ce7c09f586406592a3433 100644 (file)
@@ -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);
index 112b5a6e98e67f8f60303cdf8a66f2ed94304621..deb96ea4b0255a122e16716a64a004267d213f83 100644 (file)
@@ -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()
index 35ab83f2e92099b6709c6b207dae09feae395f0c..57849eb64ad9f879b8008a2bfc1eafbbe5dd5d3b 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    320,
 /**/
     319,
 /**/