From 1cb16c3a20a9d17df1a8dc3813ef64dc98e42637 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 5 Dec 2022 22:26:44 +0000 Subject: [PATCH] patch 9.0.1016: screenpos() does not count filler lines for diff mode Problem: screenpos() does not count filler lines for diff mode. Solution: Add filler lines. (closes 11658) --- src/move.c | 6 ++++++ src/testdir/test_cursor_func.vim | 16 ++++++++++++++++ src/version.c | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/move.c b/src/move.c index 954a13714d..fde7f20e25 100644 --- a/src/move.c +++ b/src/move.c @@ -1426,6 +1426,12 @@ textpos2screenpos( is_folded = hasFoldingWin(wp, lnum, &lnum, NULL, TRUE, NULL); #endif row = plines_m_win(wp, wp->w_topline, lnum - 1) + 1; + +#ifdef FEAT_DIFF + // Add filler lines above this buffer line. + row += diff_check_fill(wp, lnum); +#endif + #ifdef FEAT_FOLDING if (is_folded) { diff --git a/src/testdir/test_cursor_func.vim b/src/testdir/test_cursor_func.vim index 8bdc956e26..fe64be0e71 100644 --- a/src/testdir/test_cursor_func.vim +++ b/src/testdir/test_cursor_func.vim @@ -156,6 +156,22 @@ func Test_screenpos_fold() bwipe! endfunc +func Test_screenpos_diff() + CheckFeature diff + + enew! + call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']) + vnew + call setline(1, ['a', 'b', 'c', 'g', 'h', 'i']) + windo diffthis + wincmd w + call assert_equal(#{col: 3, row: 7, endcol: 3, curscol: 3}, screenpos(0, 4, 1)) + + windo diffoff + bwipe! + bwipe! +endfunc + func Test_screenpos_number() rightbelow new rightbelow 73vsplit diff --git a/src/version.c b/src/version.c index a19d947653..3dbc0a0a53 100644 --- a/src/version.c +++ b/src/version.c @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1016, /**/ 1015, /**/