0
0
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:
Bram Moolenaar
2017-02-03 23:16:28 +01:00
parent 6b40f30329
commit 25ea054458
3 changed files with 60 additions and 0 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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,
/**/ /**/