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.
