changeset 31479:0c0b78aa7ae3 v9.0.1072

patch 9.0.1072: screenpos() column result in fold may be too small Commit: https://github.com/vim/vim/commit/ba2d19193201277397c25c1f5a134ea042542555 Author: zeertzjq <zeertzjq@outlook.com> Date: Sun Dec 18 12:28:59 2022 +0000 patch 9.0.1072: screenpos() column result in fold may be too small Problem: screenpos() column result in fold may be too small. Solution: Add space of 'number', sign column, etc. (closes https://github.com/vim/vim/issues/11715)
author Bram Moolenaar <Bram@vim.org>
date Sun, 18 Dec 2022 13:30:05 +0100
parents cbe9e21916fc
children 4362410023f9
files src/move.c src/testdir/test_cursor_func.vim src/version.c
diffstat 3 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/move.c
+++ b/src/move.c
@@ -1416,7 +1416,6 @@ textpos2screenpos(
 
     if (pos->lnum >= wp->w_topline && pos->lnum <= wp->w_botline)
     {
-	colnr_T	    off;
 	colnr_T	    col;
 	int	    width;
 	linenr_T    lnum = pos->lnum;
@@ -1432,11 +1431,12 @@ textpos2screenpos(
 	row += diff_check_fill(wp, lnum);
 #endif
 
+	colnr_T	off = win_col_off(wp);
 #ifdef FEAT_FOLDING
 	if (is_folded)
 	{
 	    row += W_WINROW(wp);
-	    coloff = wp->w_wincol + 1;
+	    coloff = wp->w_wincol + 1 + off;
 	}
 	else
 #endif
@@ -1445,7 +1445,6 @@ textpos2screenpos(
 
 	    // similar to what is done in validate_cursor_col()
 	    col = scol;
-	    off = win_col_off(wp);
 	    col += off;
 	    width = wp->w_width - off + win_col_off2(wp);
 
--- a/src/testdir/test_cursor_func.vim
+++ b/src/testdir/test_cursor_func.vim
@@ -150,8 +150,12 @@ func Test_screenpos_fold()
   redraw
   call assert_equal(2, screenpos(1, 2, 1).row)
   call assert_equal(#{col: 1, row: 3, endcol: 1, curscol: 1}, screenpos(1, 3, 1))
-  call assert_equal(3, screenpos(1, 4, 1).row)
-  call assert_equal(3, screenpos(1, 5, 1).row)
+  call assert_equal(#{col: 1, row: 3, endcol: 1, curscol: 1}, screenpos(1, 4, 1))
+  call assert_equal(#{col: 1, row: 3, endcol: 1, curscol: 1}, screenpos(1, 5, 1))
+  setlocal number
+  call assert_equal(#{col: 5, row: 3, endcol: 5, curscol: 5}, screenpos(1, 3, 1))
+  call assert_equal(#{col: 5, row: 3, endcol: 5, curscol: 5}, screenpos(1, 4, 1))
+  call assert_equal(#{col: 5, row: 3, endcol: 5, curscol: 5}, screenpos(1, 5, 1))
   call assert_equal(4, screenpos(1, 6, 1).row)
   bwipe!
 endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1072,
+/**/
     1071,
 /**/
     1070,