patch 9.1.1600: using diff anchors with hidden buffers fails silently

Problem:  diff: using diff anchors with hidden buffers fails silently
Solution: Give specific error message for diff anchors when using hidden
          buffers (Yee Cheng Chin).

Diff anchors currently will fail to parse if a buffer used for diff'ing
is hidden. Previously it would just fail as the code assumes it would
not happen normally, but this is actually possible to do if `closeoff`
and `hideoff` are not set in diffopt. Git's default diff tool "vimdiff3"
also takes advantage of this.

This fix this properly would require the `{address}` parser to be
smarter about whether a particular address relies on window position or
not (e.g. the `'.` address requires an active window, but `'a` or `1234`
do not). Since hidden diff buffers seem relatively niche, just provide a
better error message / documentation for now. This could be improved
later if there's a demand for it.

related: #17615
closes: #17904

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yee Cheng Chin
2025-08-07 15:33:34 +02:00
committed by Christian Brabandt
parent 589aa284f6
commit cad3b2421d
7 changed files with 27 additions and 4 deletions

View File

@ -1,4 +1,4 @@
*options.txt* For Vim version 9.1. Last change: 2025 Aug 06
*options.txt* For Vim version 9.1. Last change: 2025 Aug 07
VIM REFERENCE MANUAL by Bram Moolenaar
@ -3016,6 +3016,8 @@ A jump table for the options with a short description can be found at |Q_op|.
If some of the {address} do not resolve to a line in each buffer (e.g.
a pattern search that does not match anything), none of the anchors
will be used.
*E1562*
Diff anchors can only be used when there are no hidden diff buffers.
*'dex'* *'diffexpr'*
'diffexpr' 'dex' string (default "")

View File

@ -4694,6 +4694,7 @@ E1559 vim9.txt /*E1559*
E156 sign.txt /*E156*
E1560 vim9.txt /*E1560*
E1561 vim9.txt /*E1561*
E1562 options.txt /*E1562*
E157 sign.txt /*E157*
E158 sign.txt /*E158*
E159 sign.txt /*E159*