mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.0.0300: cannot stop diffing hidden buffers
Problem: Cannot stop diffing hidden buffers. (Daniel Hahler) Solution: When using :diffoff! make the whole list if diffed buffers empty. (closes #736)
This commit is contained in:
21
src/diff.c
21
src/diff.c
@@ -138,6 +138,23 @@ diff_buf_add(buf_T *buf)
|
|||||||
EMSGN(_("E96: Cannot diff more than %ld buffers"), DB_COUNT);
|
EMSGN(_("E96: Cannot diff more than %ld buffers"), DB_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove all buffers to make diffs for.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
diff_buf_clear(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < DB_COUNT; ++i)
|
||||||
|
if (curtab->tp_diffbuf[i] != NULL)
|
||||||
|
{
|
||||||
|
curtab->tp_diffbuf[i] = NULL;
|
||||||
|
curtab->tp_diff_invalid = TRUE;
|
||||||
|
diff_redraw(TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find buffer "buf" in the list of diff buffers for the current tab page.
|
* Find buffer "buf" in the list of diff buffers for the current tab page.
|
||||||
* Return its index or DB_COUNT if not found.
|
* Return its index or DB_COUNT if not found.
|
||||||
@@ -1257,6 +1274,10 @@ ex_diffoff(exarg_T *eap)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Also remove hidden buffers from the list. */
|
||||||
|
if (eap->forceit)
|
||||||
|
diff_buf_clear();
|
||||||
|
|
||||||
#ifdef FEAT_SCROLLBIND
|
#ifdef FEAT_SCROLLBIND
|
||||||
/* Remove "hor" from from 'scrollopt' if there are no diff windows left. */
|
/* Remove "hor" from from 'scrollopt' if there are no diff windows left. */
|
||||||
if (!diffwin && vim_strchr(p_sbo, 'h') != NULL)
|
if (!diffwin && vim_strchr(p_sbo, 'h') != NULL)
|
||||||
|
@@ -212,6 +212,7 @@ func Test_diffoff()
|
|||||||
call setline(1, ['One', '', 'Two', 'Three'])
|
call setline(1, ['One', '', 'Two', 'Three'])
|
||||||
diffthis
|
diffthis
|
||||||
redraw
|
redraw
|
||||||
|
call assert_notequal(normattr, screenattr(1, 1))
|
||||||
diffoff!
|
diffoff!
|
||||||
redraw
|
redraw
|
||||||
call assert_equal(normattr, screenattr(1, 1))
|
call assert_equal(normattr, screenattr(1, 1))
|
||||||
@@ -219,6 +220,42 @@ func Test_diffoff()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_diffoff_hidden()
|
||||||
|
set diffopt=filler,foldcolumn:0
|
||||||
|
e! one
|
||||||
|
call setline(1, ['Two', 'Three'])
|
||||||
|
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
|
||||||
|
" diffing with hidden buffer two
|
||||||
|
call assert_notequal(normattr, screenattr(1, 1))
|
||||||
|
diffoff
|
||||||
|
redraw
|
||||||
|
call assert_equal(normattr, screenattr(1, 1))
|
||||||
|
diffthis
|
||||||
|
redraw
|
||||||
|
" still diffing with hidden buffer two
|
||||||
|
call assert_notequal(normattr, screenattr(1, 1))
|
||||||
|
diffoff!
|
||||||
|
redraw
|
||||||
|
call assert_equal(normattr, screenattr(1, 1))
|
||||||
|
diffthis
|
||||||
|
redraw
|
||||||
|
" no longer diffing with hidden buffer two
|
||||||
|
call assert_equal(normattr, screenattr(1, 1))
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
bwipe!
|
||||||
|
set hidden& diffopt&
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_setting_cursor()
|
func Test_setting_cursor()
|
||||||
new Xtest1
|
new Xtest1
|
||||||
put =range(1,90)
|
put =range(1,90)
|
||||||
|
@@ -764,6 +764,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 */
|
||||||
|
/**/
|
||||||
|
300,
|
||||||
/**/
|
/**/
|
||||||
299,
|
299,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user