mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -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:
committed by
Christian Brabandt
parent
cc979b49dc
commit
f96dc8d07f
@@ -502,7 +502,7 @@ do_arglist(
|
|||||||
void
|
void
|
||||||
set_arglist(char_u *str)
|
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"
|
* ":drop"
|
||||||
* Opens the first argument in a window. When there are two or more arguments
|
* Opens the first argument in a window, and the argument list is redefined.
|
||||||
* the argument list is redefined.
|
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
ex_drop(exarg_T *eap)
|
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
|
// edited in a window yet. It's like ":tab all" but without closing
|
||||||
// windows or tabs.
|
// windows or tabs.
|
||||||
ex_all(eap);
|
ex_all(eap);
|
||||||
|
cmdmod.cmod_tab = 0;
|
||||||
|
ex_rewind(eap);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5486,6 +5487,7 @@ ex_drop(exarg_T *eap)
|
|||||||
buf_check_timestamp(curbuf, FALSE);
|
buf_check_timestamp(curbuf, FALSE);
|
||||||
curbuf->b_p_ar = save_ar;
|
curbuf->b_p_ar = save_ar;
|
||||||
}
|
}
|
||||||
|
ex_rewind(eap);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -84,18 +84,27 @@ endfunc
|
|||||||
" Test for the :drop command
|
" Test for the :drop command
|
||||||
func Test_drop_cmd()
|
func Test_drop_cmd()
|
||||||
call writefile(['L1', 'L2'], 'Xdropfile', 'D')
|
call writefile(['L1', 'L2'], 'Xdropfile', 'D')
|
||||||
|
" Test for reusing the current buffer
|
||||||
enew | only
|
enew | only
|
||||||
|
let expected_nr = bufnr()
|
||||||
drop Xdropfile
|
drop Xdropfile
|
||||||
|
call assert_equal(expected_nr, bufnr())
|
||||||
call assert_equal('L2', getline(2))
|
call assert_equal('L2', getline(2))
|
||||||
" Test for switching to an existing window
|
" Test for switching to an existing window
|
||||||
below new
|
below new
|
||||||
drop Xdropfile
|
drop Xdropfile
|
||||||
call assert_equal(1, winnr())
|
call assert_equal(1, winnr())
|
||||||
" Test for splitting the current window
|
" Test for splitting the current window (set nohidden)
|
||||||
enew | only
|
enew | only
|
||||||
set modified
|
set modified
|
||||||
drop Xdropfile
|
drop Xdropfile
|
||||||
call assert_equal(2, winnr('$'))
|
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
|
" Check for setting the argument list
|
||||||
call assert_equal(['Xdropfile'], argv())
|
call assert_equal(['Xdropfile'], argv())
|
||||||
enew | only!
|
enew | only!
|
||||||
|
@@ -164,6 +164,74 @@ func Test_tabpage_drop()
|
|||||||
bwipe!
|
bwipe!
|
||||||
bwipe!
|
bwipe!
|
||||||
call assert_equal(1, tabpagenr('$'))
|
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
|
endfunc
|
||||||
|
|
||||||
" Test autocommands
|
" Test autocommands
|
||||||
@@ -260,14 +328,14 @@ function Test_tabpage_with_autocmd_tab_drop()
|
|||||||
|
|
||||||
let s:li = []
|
let s:li = []
|
||||||
tab drop test1
|
tab drop test1
|
||||||
call assert_equal(['BufLeave', 'BufEnter'], s:li)
|
call assert_equal(['BufEnter'], s:li)
|
||||||
|
|
||||||
let s:li = []
|
let s:li = []
|
||||||
tab drop test2 test3
|
tab drop test2 test3
|
||||||
call assert_equal([
|
call assert_equal([
|
||||||
\ 'TabLeave', 'TabEnter', 'TabLeave', 'TabEnter',
|
\ 'TabLeave', 'TabEnter', 'TabLeave', 'TabEnter',
|
||||||
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter',
|
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter',
|
||||||
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
|
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter', 'BufEnter'], s:li)
|
||||||
|
|
||||||
autocmd! TestTabpageGroup
|
autocmd! TestTabpageGroup
|
||||||
augroup! TestTabpageGroup
|
augroup! TestTabpageGroup
|
||||||
|
@@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
46,
|
||||||
/**/
|
/**/
|
||||||
45,
|
45,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user