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

Commit: 
https://github.com/vim/vim/commit/64982d6010c3610e7f44190f4eb128d6f0f2b91a
Author: glepnir <[email protected]>
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 <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

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,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1wU9jw-000ccr-Ia%40256bit.org.

Raspunde prin e-mail lui