mirror of
https://github.com/vim/vim.git
synced 2025-11-14 23:04:02 -05:00
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:
committed by
Christian Brabandt
parent
589aa284f6
commit
cad3b2421d
11
src/diff.c
11
src/diff.c
@@ -2768,8 +2768,15 @@ parse_diffanchors(int check_only, buf_T *buf, linenr_T *anchors, int *num_anchor
|
||||
FOR_ALL_WINDOWS(bufwin)
|
||||
if (bufwin->w_buffer == buf && bufwin->w_p_diff)
|
||||
break;
|
||||
if (bufwin == NULL)
|
||||
return FAIL; // should not really happen
|
||||
if (bufwin == NULL && *dia != NUL)
|
||||
{
|
||||
// The buffer is hidden. Currently this is not supported due to the
|
||||
// edge cases of needing to decide if an address is window-specific
|
||||
// or not. We could add more checks in the future so we can detect
|
||||
// whether an address relies on curwin to make this more fleixble.
|
||||
emsg(_(e_diff_anchors_with_hidden_windows));
|
||||
return FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_DIFF_ANCHORS && *dia != NUL; i++)
|
||||
|
||||
Reference in New Issue
Block a user