Vim-patch 8.0.0300 (#7258)

vim-patch:8.0.0300

Problem:    Cannot stop diffing hidden buffers. (Daniel Hahler)
Solution:   When using :diffoff! make the whole list if diffed buffers empty.
            (closes vim/vim#736)

25ea054458
This commit is contained in:
KunMing Xie 2017-09-11 22:17:41 +08:00 committed by James McCoy
parent f51a397010
commit d2cbc31185
3 changed files with 57 additions and 1 deletions

View File

@ -135,6 +135,20 @@ void diff_buf_add(buf_T *buf)
EMSGN(_("E96: Cannot diff more than %" PRId64 " buffers"), DB_COUNT);
}
///
/// Remove all buffers to make diffs for.
///
static void diff_buf_clear(void)
{
for (int 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.
///
/// @param buf The buffer to find.
@ -1175,6 +1189,11 @@ void ex_diffoff(exarg_T *eap)
diffwin |= wp->w_p_diff;
}
// Also remove hidden buffers from the list.
if (eap->forceit) {
diff_buf_clear();
}
// Remove "hor" from from 'scrollopt' if there are no diff windows left.
if (!diffwin && (vim_strchr(p_sbo, 'h') != NULL)) {
do_cmdline_cmd("set sbo-=hor");

View File

@ -212,6 +212,7 @@ func Test_diffoff()
call setline(1, ['One', '', 'Two', 'Three'])
diffthis
redraw
call assert_notequal(normattr, screenattr(1, 1))
diffoff!
redraw
call assert_equal(normattr, screenattr(1, 1))
@ -219,6 +220,42 @@ func Test_diffoff()
bwipe!
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()
new Xtest1
put =range(1,90)

View File

@ -652,7 +652,7 @@ static const int included_patches[] = {
// 303,
// 302,
// 301,
// 300,
300,
// 299,
// 298,
297,