mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.0.1361: some users don't want to diff with hidden buffers
Problem: Some users don't want to diff with hidden buffers. Solution: Add the "hiddenoff" item to 'diffopt'. (Alisue, closes #2394)
This commit is contained in:
@@ -2634,6 +2634,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
vertical Start diff mode with vertical splits (unless
|
vertical Start diff mode with vertical splits (unless
|
||||||
explicitly specified otherwise).
|
explicitly specified otherwise).
|
||||||
|
|
||||||
|
hiddenoff Do not use diff mode for a buffer when it
|
||||||
|
becomes hidden.
|
||||||
|
|
||||||
foldcolumn:{n} Set the 'foldcolumn' option to {n} when
|
foldcolumn:{n} Set the 'foldcolumn' option to {n} when
|
||||||
starting diff mode. Without this 2 is used.
|
starting diff mode. Without this 2 is used.
|
||||||
|
|
||||||
|
@@ -593,6 +593,11 @@ aucmd_abort:
|
|||||||
if (buf->b_nwindows > 0)
|
if (buf->b_nwindows > 0)
|
||||||
--buf->b_nwindows;
|
--buf->b_nwindows;
|
||||||
|
|
||||||
|
#ifdef FEAT_DIFF
|
||||||
|
if (diffopt_hiddenoff() && !unload_buf && buf->b_nwindows == 0)
|
||||||
|
diff_buf_delete(buf); /* Clear 'diff' for hidden buffer. */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Return when a window is displaying the buffer or when it's not
|
/* Return when a window is displaying the buffer or when it's not
|
||||||
* unloaded. */
|
* unloaded. */
|
||||||
if (buf->b_nwindows > 0 || !unload_buf)
|
if (buf->b_nwindows > 0 || !unload_buf)
|
||||||
|
15
src/diff.c
15
src/diff.c
@@ -23,6 +23,7 @@ static int diff_busy = FALSE; /* ex_diffgetput() is busy */
|
|||||||
#define DIFF_IWHITE 4 /* ignore change in white space */
|
#define DIFF_IWHITE 4 /* ignore change in white space */
|
||||||
#define DIFF_HORIZONTAL 8 /* horizontal splits */
|
#define DIFF_HORIZONTAL 8 /* horizontal splits */
|
||||||
#define DIFF_VERTICAL 16 /* vertical splits */
|
#define DIFF_VERTICAL 16 /* vertical splits */
|
||||||
|
#define DIFF_HIDDEN_OFF 32 /* diffoff when hidden */
|
||||||
static int diff_flags = DIFF_FILLER;
|
static int diff_flags = DIFF_FILLER;
|
||||||
|
|
||||||
#define LBUFLEN 50 /* length of line in diff file */
|
#define LBUFLEN 50 /* length of line in diff file */
|
||||||
@@ -1924,6 +1925,11 @@ diffopt_changed(void)
|
|||||||
p += 11;
|
p += 11;
|
||||||
diff_foldcolumn_new = getdigits(&p);
|
diff_foldcolumn_new = getdigits(&p);
|
||||||
}
|
}
|
||||||
|
else if (STRNCMP(p, "hiddenoff", 9) == 0)
|
||||||
|
{
|
||||||
|
p += 9;
|
||||||
|
diff_flags_new |= DIFF_HIDDEN_OFF;
|
||||||
|
}
|
||||||
if (*p != ',' && *p != NUL)
|
if (*p != ',' && *p != NUL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
if (*p == ',')
|
if (*p == ',')
|
||||||
@@ -1961,6 +1967,15 @@ diffopt_horizontal(void)
|
|||||||
return (diff_flags & DIFF_HORIZONTAL) != 0;
|
return (diff_flags & DIFF_HORIZONTAL) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return TRUE if 'diffopt' contains "hiddenoff".
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
diffopt_hiddenoff(void)
|
||||||
|
{
|
||||||
|
return (diff_flags & DIFF_HIDDEN_OFF) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find the difference within a changed line.
|
* Find the difference within a changed line.
|
||||||
* Returns TRUE if the line was added, no other buffer has it.
|
* Returns TRUE if the line was added, no other buffer has it.
|
||||||
|
@@ -16,6 +16,7 @@ int diff_check_fill(win_T *wp, linenr_T lnum);
|
|||||||
void diff_set_topline(win_T *fromwin, win_T *towin);
|
void diff_set_topline(win_T *fromwin, win_T *towin);
|
||||||
int diffopt_changed(void);
|
int diffopt_changed(void);
|
||||||
int diffopt_horizontal(void);
|
int diffopt_horizontal(void);
|
||||||
|
int diffopt_hiddenoff(void);
|
||||||
int diff_find_change(win_T *wp, linenr_T lnum, int *startp, int *endp);
|
int diff_find_change(win_T *wp, linenr_T lnum, int *startp, int *endp);
|
||||||
int diff_infold(win_T *wp, linenr_T lnum);
|
int diff_infold(win_T *wp, linenr_T lnum);
|
||||||
void nv_diffgetput(int put, long count);
|
void nv_diffgetput(int put, long count);
|
||||||
|
@@ -375,6 +375,29 @@ func Test_diffopt_vertical()
|
|||||||
%bwipe
|
%bwipe
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_diffopt_hiddenoff()
|
||||||
|
set diffopt=filler,foldcolumn:0,hiddenoff
|
||||||
|
e! one
|
||||||
|
call setline(1, ['Two', 'Three'])
|
||||||
|
redraw
|
||||||
|
let normattr = screenattr(1, 1)
|
||||||
|
diffthis
|
||||||
|
botright vert new two
|
||||||
|
call setline(1, ['One', 'Four'])
|
||||||
|
diffthis
|
||||||
|
redraw
|
||||||
|
call assert_notequal(normattr, screenattr(1, 1))
|
||||||
|
set hidden
|
||||||
|
close
|
||||||
|
redraw
|
||||||
|
" should not diffing with hidden buffer two while 'hiddenoff' is enabled
|
||||||
|
call assert_equal(normattr, screenattr(1, 1))
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
bwipe!
|
||||||
|
set hidden& diffopt&
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_diffoff_hidden()
|
func Test_diffoff_hidden()
|
||||||
set diffopt=filler,foldcolumn:0
|
set diffopt=filler,foldcolumn:0
|
||||||
e! one
|
e! one
|
||||||
|
@@ -771,6 +771,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1361,
|
||||||
/**/
|
/**/
|
||||||
1360,
|
1360,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user