mirror of
https://github.com/vim/vim.git
synced 2025-07-04 23:07:33 -04:00
patch 9.1.0046: :drop does not re-use empty buffer
Problem: :drop does not re-use empty buffer (Rocco Mao) Solution: Make :drop re-use an empty buffer (Rocco Mao) fixes: #13851 closes: #13881 Signed-off-by: Rocco Mao <dapeng.mao@qq.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
cc979b49dc
commit
f96dc8d07f
@ -502,7 +502,7 @@ do_arglist(
|
||||
void
|
||||
set_arglist(char_u *str)
|
||||
{
|
||||
do_arglist(str, AL_SET, 0, FALSE);
|
||||
do_arglist(str, AL_SET, 0, TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -5425,8 +5425,7 @@ ex_smile(exarg_T *eap UNUSED)
|
||||
|
||||
/*
|
||||
* ":drop"
|
||||
* Opens the first argument in a window. When there are two or more arguments
|
||||
* the argument list is redefined.
|
||||
* Opens the first argument in a window, and the argument list is redefined.
|
||||
*/
|
||||
void
|
||||
ex_drop(exarg_T *eap)
|
||||
@ -5463,6 +5462,8 @@ ex_drop(exarg_T *eap)
|
||||
// edited in a window yet. It's like ":tab all" but without closing
|
||||
// windows or tabs.
|
||||
ex_all(eap);
|
||||
cmdmod.cmod_tab = 0;
|
||||
ex_rewind(eap);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -5486,6 +5487,7 @@ ex_drop(exarg_T *eap)
|
||||
buf_check_timestamp(curbuf, FALSE);
|
||||
curbuf->b_p_ar = save_ar;
|
||||
}
|
||||
ex_rewind(eap);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -84,18 +84,27 @@ endfunc
|
||||
" Test for the :drop command
|
||||
func Test_drop_cmd()
|
||||
call writefile(['L1', 'L2'], 'Xdropfile', 'D')
|
||||
" Test for reusing the current buffer
|
||||
enew | only
|
||||
let expected_nr = bufnr()
|
||||
drop Xdropfile
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
" Test for switching to an existing window
|
||||
below new
|
||||
drop Xdropfile
|
||||
call assert_equal(1, winnr())
|
||||
" Test for splitting the current window
|
||||
" Test for splitting the current window (set nohidden)
|
||||
enew | only
|
||||
set modified
|
||||
drop Xdropfile
|
||||
call assert_equal(2, winnr('$'))
|
||||
" Not splitting the current window even if modified (set hidden)
|
||||
set hidden
|
||||
enew | only
|
||||
set modified
|
||||
drop Xdropfile
|
||||
call assert_equal(1, winnr('$'))
|
||||
" Check for setting the argument list
|
||||
call assert_equal(['Xdropfile'], argv())
|
||||
enew | only!
|
||||
|
@ -164,6 +164,74 @@ func Test_tabpage_drop()
|
||||
bwipe!
|
||||
bwipe!
|
||||
call assert_equal(1, tabpagenr('$'))
|
||||
|
||||
call assert_equal(1, winnr('$'))
|
||||
call assert_equal('', bufname(''))
|
||||
call writefile(['L1', 'L2'], 'Xdropfile', 'D')
|
||||
|
||||
" Test for ':tab drop single-file': reuse current buffer
|
||||
let expected_nr = bufnr()
|
||||
tab drop Xdropfile
|
||||
call assert_equal(1, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
bwipe!
|
||||
|
||||
" Test for ':tab drop single-file': not reuse modified buffer
|
||||
set modified
|
||||
let expected_nr = bufnr() + 1
|
||||
tab drop Xdropfile
|
||||
call assert_equal(2, tabpagenr())
|
||||
call assert_equal(2, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
bwipe!
|
||||
|
||||
" Test for ':tab drop single-file': multiple tabs already exist
|
||||
tab split f2
|
||||
tab split f3
|
||||
let expected_nr = bufnr() + 1
|
||||
tab drop Xdropfile
|
||||
call assert_equal(4, tabpagenr())
|
||||
call assert_equal(4, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
%bwipe!
|
||||
|
||||
" Test for ':tab drop multi-files': reuse current buffer
|
||||
let expected_nr = bufnr()
|
||||
tab drop Xdropfile f1 f2 f3
|
||||
call assert_equal(1, tabpagenr())
|
||||
call assert_equal(4, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
%bwipe!
|
||||
|
||||
" Test for ':tab drop multi-files': not reuse modified buffer
|
||||
set modified
|
||||
let expected_nr = bufnr() + 1
|
||||
tab drop Xdropfile f1 f2 f3
|
||||
call assert_equal(2, tabpagenr())
|
||||
call assert_equal(5, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
%bwipe!
|
||||
|
||||
" Test for ':tab drop multi-files': multiple tabs already exist
|
||||
tab split f2
|
||||
tab split f3
|
||||
let expected_nr = bufnr() + 1
|
||||
tab drop a b c
|
||||
call assert_equal(4, tabpagenr())
|
||||
call assert_equal(6, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
let expected_nr = bufnr() + 3
|
||||
tab drop Xdropfile f1 f2 f3
|
||||
call assert_equal(5, tabpagenr())
|
||||
call assert_equal(8, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
%bwipe!
|
||||
endfunc
|
||||
|
||||
" Test autocommands
|
||||
@ -260,14 +328,14 @@ function Test_tabpage_with_autocmd_tab_drop()
|
||||
|
||||
let s:li = []
|
||||
tab drop test1
|
||||
call assert_equal(['BufLeave', 'BufEnter'], s:li)
|
||||
call assert_equal(['BufEnter'], s:li)
|
||||
|
||||
let s:li = []
|
||||
tab drop test2 test3
|
||||
call assert_equal([
|
||||
\ 'TabLeave', 'TabEnter', 'TabLeave', 'TabEnter',
|
||||
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter',
|
||||
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
|
||||
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter', 'BufEnter'], s:li)
|
||||
|
||||
autocmd! TestTabpageGroup
|
||||
augroup! TestTabpageGroup
|
||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
46,
|
||||
/**/
|
||||
45,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user