0
0
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:
Rocco Mao 2024-01-23 21:27:19 +01:00 committed by Christian Brabandt
parent cc979b49dc
commit f96dc8d07f
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
5 changed files with 87 additions and 6 deletions

View File

@ -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);
}
/*

View File

@ -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;
}
}

View File

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

View File

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

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
46,
/**/
45,
/**/