Commit: patch 9.2.0585: line number wrong after undoing a deletion in quickfix buffer

3 views
Skip to first unread message

Christian Brabandt

unread,
Jun 1, 2026, 5:00:13 PM (yesterday) Jun 1
to vim...@googlegroups.com
patch 9.2.0585: line number wrong after undoing a deletion in quickfix buffer

Commit: https://github.com/vim/vim/commit/64982d6010c3610e7f44190f4eb128d6f0f2b91a
Author: glepnir <gleph...@gmail.com>
Date: Mon Jun 1 20:43:56 2026 +0000

patch 9.2.0585: line number wrong after undoing a deletion in quickfix buffer

Problem: Deleting a quickfix line and undoing it leaves the entry
pointing one line below where it should.
Solution: Don't shift already cleared entries in qf_mark_adjust.

closes: #20379

Signed-off-by: glepnir <gleph...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/quickfix.c b/src/quickfix.c
index 2470902fd..0c7a9c9a5 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -4434,6 +4434,9 @@ qf_mark_adjust(
if (qfp->qf_fnum == curbuf->b_fnum)
{
found_one = TRUE;
+ if (qfp->qf_cleared)
+ continue;
+
if (qfp->qf_lnum >= line1 && qfp->qf_lnum <= line2)
{
if (amount == MAXLNUM)
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index b0c4475cc..6ffc1828a 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -2334,6 +2334,53 @@ func Test_adjust_lnum()
call Xadjust_qflnum('l')
endfunc

+func Xqf_undo_after_delete(cchar)
+ call s:setup_commands(a:cchar)
+
+ enew | only
+
+ let fname = 'Xqfundofile' . a:cchar
+ call s:create_test_file(fname)
+ exe 'edit ' . fname
+
+ Xgetexpr [fname . ':5:Line5',
+ \ fname . ':10:Line10',
+ \ fname . ':15:Line15']
+
+ " Delete the line of the second error and undo the deletion.
+ 10delete
+ let l = g:Xgetlist()
+ call assert_equal(5, l[0].lnum)
+ call assert_equal(10, l[1].lnum)
+ call assert_equal(14, l[2].lnum)
+
+ undo
+ call assert_equal('Line10', getline(10))
+ let l = g:Xgetlist()
+ call assert_equal(5, l[0].lnum)
+ call assert_equal(10, l[1].lnum)
+ call assert_equal(15, l[2].lnum)
+
+ " Redo and undo again to make sure the line number does not drift.
+ redo
+ call assert_equal(14, g:Xgetlist()[2].lnum)
+ undo
+ let l = g:Xgetlist()
+ call assert_equal(10, l[1].lnum)
+ call assert_equal(15, l[2].lnum)
+
+ call g:Xsetlist([], 'f')
+ enew!
+ call delete(fname)
+endfunc
+
+func Test_qf_undo_after_delete()
+ call setloclist(0, [])
+ call Xqf_undo_after_delete('c')
+ call setqflist([])
+ call Xqf_undo_after_delete('l')
+endfunc
+
" Tests for the :grep/:lgrep and :grepadd/:lgrepadd commands
func s:test_xgrep(cchar)
call s:setup_commands(a:cchar)
diff --git a/src/version.c b/src/version.c
index 208e7164d..be7bb521b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 585,
/**/
584,
/**/
Reply all
Reply to author
Forward
0 new messages