mirror of
https://github.com/neovim/neovim.git
synced 2024-12-25 05:35:10 -07:00
Merge pull request #13591 from janlazo/vim-8.1.1805
vim-patch:8.1.1805,8.2.{116,1025}
This commit is contained in:
commit
7afd4526f2
@ -4706,7 +4706,6 @@ do_arg_all(
|
|||||||
int keep_tabs // keep current tabs, for ":tab drop file"
|
int keep_tabs // keep current tabs, for ":tab drop file"
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
char_u *opened; // Array of weight for which args are open:
|
char_u *opened; // Array of weight for which args are open:
|
||||||
// 0: not opened
|
// 0: not opened
|
||||||
// 1: opened in other tab
|
// 1: opened in other tab
|
||||||
@ -4715,6 +4714,7 @@ do_arg_all(
|
|||||||
|
|
||||||
int opened_len; // length of opened[]
|
int opened_len; // length of opened[]
|
||||||
int use_firstwin = false; // use first window for arglist
|
int use_firstwin = false; // use first window for arglist
|
||||||
|
bool tab_drop_empty_window = false;
|
||||||
int split_ret = OK;
|
int split_ret = OK;
|
||||||
bool p_ea_save;
|
bool p_ea_save;
|
||||||
alist_T *alist; // argument list to be used
|
alist_T *alist; // argument list to be used
|
||||||
@ -4762,6 +4762,7 @@ do_arg_all(
|
|||||||
win_T *wpnext = NULL;
|
win_T *wpnext = NULL;
|
||||||
tpnext = curtab->tp_next;
|
tpnext = curtab->tp_next;
|
||||||
for (win_T *wp = firstwin; wp != NULL; wp = wpnext) {
|
for (win_T *wp = firstwin; wp != NULL; wp = wpnext) {
|
||||||
|
int i;
|
||||||
wpnext = wp->w_next;
|
wpnext = wp->w_next;
|
||||||
buf = wp->w_buffer;
|
buf = wp->w_buffer;
|
||||||
if (buf->b_ffname == NULL
|
if (buf->b_ffname == NULL
|
||||||
@ -4867,14 +4868,15 @@ do_arg_all(
|
|||||||
last_curwin = curwin;
|
last_curwin = curwin;
|
||||||
last_curtab = curtab;
|
last_curtab = curtab;
|
||||||
win_enter(lastwin, false);
|
win_enter(lastwin, false);
|
||||||
// ":drop all" should re-use an empty window to avoid "--remote-tab"
|
// ":tab drop file" should re-use an empty window to avoid "--remote-tab"
|
||||||
// leaving an empty tab page when executed locally.
|
// leaving an empty tab page when executed locally.
|
||||||
if (keep_tabs && BUFEMPTY() && curbuf->b_nwindows == 1
|
if (keep_tabs && BUFEMPTY() && curbuf->b_nwindows == 1
|
||||||
&& curbuf->b_ffname == NULL && !curbuf->b_changed) {
|
&& curbuf->b_ffname == NULL && !curbuf->b_changed) {
|
||||||
use_firstwin = true;
|
use_firstwin = true;
|
||||||
|
tab_drop_empty_window = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < count && i < opened_len && !got_int; i++) {
|
for (int i = 0; i < count && !got_int; i++) {
|
||||||
if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1) {
|
if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1) {
|
||||||
arg_had_last = true;
|
arg_had_last = true;
|
||||||
}
|
}
|
||||||
@ -4894,6 +4896,10 @@ do_arg_all(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (split_ret == OK) {
|
} else if (split_ret == OK) {
|
||||||
|
// trigger events for tab drop
|
||||||
|
if (tab_drop_empty_window && i == count - 1) {
|
||||||
|
autocmd_no_enter--;
|
||||||
|
}
|
||||||
if (!use_firstwin) { // split current window
|
if (!use_firstwin) { // split current window
|
||||||
p_ea_save = p_ea;
|
p_ea_save = p_ea;
|
||||||
p_ea = true; // use space from all windows
|
p_ea = true; // use space from all windows
|
||||||
@ -4919,6 +4925,9 @@ do_arg_all(
|
|||||||
|| bufIsChanged(curwin->w_buffer))
|
|| bufIsChanged(curwin->w_buffer))
|
||||||
? ECMD_HIDE : 0) + ECMD_OLDBUF,
|
? ECMD_HIDE : 0) + ECMD_OLDBUF,
|
||||||
curwin);
|
curwin);
|
||||||
|
if (tab_drop_empty_window && i == count - 1) {
|
||||||
|
autocmd_no_enter++;
|
||||||
|
}
|
||||||
if (use_firstwin) {
|
if (use_firstwin) {
|
||||||
autocmd_no_leave++;
|
autocmd_no_leave++;
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,14 @@ func CheckCanRunGui()
|
|||||||
endif
|
endif
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Command to check that we are using the GUI
|
||||||
|
command CheckGui call CheckGui()
|
||||||
|
func CheckGui()
|
||||||
|
if !has('gui_running')
|
||||||
|
throw 'Skipped: only works in the GUI'
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Command to check that not currently using the GUI
|
" Command to check that not currently using the GUI
|
||||||
command CheckNotGui call CheckNotGui()
|
command CheckNotGui call CheckNotGui()
|
||||||
func CheckNotGui()
|
func CheckNotGui()
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
" Tests for digraphs
|
" Tests for digraphs
|
||||||
|
|
||||||
if !has("digraphs")
|
source check.vim
|
||||||
finish
|
CheckFeature digraphs
|
||||||
endif
|
source term_util.vim
|
||||||
|
|
||||||
func Put_Dig(chars)
|
func Put_Dig(chars)
|
||||||
exe "norm! o\<c-k>".a:chars
|
exe "norm! o\<c-k>".a:chars
|
||||||
@ -487,4 +487,20 @@ func Test_show_digraph_cp1251()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for the characters displayed on the screen when entering a digraph
|
||||||
|
func Test_entering_digraph()
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
let buf = RunVimInTerminal('', {'rows': 6})
|
||||||
|
call term_sendkeys(buf, "i\<C-K>")
|
||||||
|
call term_wait(buf)
|
||||||
|
call assert_equal('?', term_getline(buf, 1))
|
||||||
|
call term_sendkeys(buf, "1")
|
||||||
|
call term_wait(buf)
|
||||||
|
call assert_equal('1', term_getline(buf, 1))
|
||||||
|
call term_sendkeys(buf, "2")
|
||||||
|
call term_wait(buf)
|
||||||
|
call assert_equal('½', term_getline(buf, 1))
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
" Tests for tabpage
|
" Tests for tabpage
|
||||||
|
|
||||||
source screendump.vim
|
source screendump.vim
|
||||||
|
source check.vim
|
||||||
|
|
||||||
function Test_tabpage()
|
function Test_tabpage()
|
||||||
bw!
|
bw!
|
||||||
@ -222,6 +223,34 @@ function Test_tabpage_with_autocmd()
|
|||||||
1tabonly!
|
1tabonly!
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Test autocommands on tab drop
|
||||||
|
function Test_tabpage_with_autocmd_tab_drop()
|
||||||
|
augroup TestTabpageGroup
|
||||||
|
au!
|
||||||
|
autocmd TabEnter * call add(s:li, 'TabEnter')
|
||||||
|
autocmd WinEnter * call add(s:li, 'WinEnter')
|
||||||
|
autocmd BufEnter * call add(s:li, 'BufEnter')
|
||||||
|
autocmd TabLeave * call add(s:li, 'TabLeave')
|
||||||
|
autocmd WinLeave * call add(s:li, 'WinLeave')
|
||||||
|
autocmd BufLeave * call add(s:li, 'BufLeave')
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
let s:li = []
|
||||||
|
tab drop test1
|
||||||
|
call assert_equal(['BufLeave', '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)
|
||||||
|
|
||||||
|
autocmd! TestTabpageGroup
|
||||||
|
augroup! TestTabpageGroup
|
||||||
|
1tabonly!
|
||||||
|
endfunction
|
||||||
|
|
||||||
function Test_tabpage_with_tab_modifier()
|
function Test_tabpage_with_tab_modifier()
|
||||||
for n in range(4)
|
for n in range(4)
|
||||||
tabedit
|
tabedit
|
||||||
@ -579,4 +608,82 @@ func Test_tabpage_cmdheight()
|
|||||||
call delete('XTest_tabpage_cmdheight')
|
call delete('XTest_tabpage_cmdheight')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Return the terminal key code for selecting a tab page from the tabline. This
|
||||||
|
" sequence contains the following codes: a CSI (0x9b), KS_TABLINE (0xf0),
|
||||||
|
" KS_FILLER (0x58) and then the tab page number.
|
||||||
|
func TabLineSelectPageCode(tabnr)
|
||||||
|
return "\x9b\xf0\x58" .. nr2char(a:tabnr)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Return the terminal key code for opening a new tabpage from the tabpage
|
||||||
|
" menu. This sequence consists of the following codes: a CSI (0x9b),
|
||||||
|
" KS_TABMENU (0xef), KS_FILLER (0x58), the tab page number and
|
||||||
|
" TABLINE_MENU_NEW (2).
|
||||||
|
func TabMenuNewItemCode(tabnr)
|
||||||
|
return "\x9b\xef\x58" .. nr2char(a:tabnr) .. nr2char(2)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Return the terminal key code for closing a tabpage from the tabpage menu.
|
||||||
|
" This sequence consists of the following codes: a CSI (0x9b), KS_TABMENU
|
||||||
|
" (0xef), KS_FILLER (0x58), the tab page number and TABLINE_MENU_CLOSE (1).
|
||||||
|
func TabMenuCloseItemCode(tabnr)
|
||||||
|
return "\x9b\xef\x58" .. nr2char(a:tabnr) .. nr2char(1)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Test for using the tabpage menu from the insert and normal modes
|
||||||
|
func Test_tabline_tabmenu()
|
||||||
|
" only works in GUI
|
||||||
|
CheckGui
|
||||||
|
|
||||||
|
%bw!
|
||||||
|
tabnew
|
||||||
|
tabnew
|
||||||
|
call assert_equal(3, tabpagenr())
|
||||||
|
|
||||||
|
" go to tab page 2 in normal mode
|
||||||
|
call feedkeys(TabLineSelectPageCode(2), "Lx!")
|
||||||
|
call assert_equal(2, tabpagenr())
|
||||||
|
|
||||||
|
" close tab page 3 in normal mode
|
||||||
|
call feedkeys(TabMenuCloseItemCode(3), "Lx!")
|
||||||
|
call assert_equal(2, tabpagenr('$'))
|
||||||
|
call assert_equal(2, tabpagenr())
|
||||||
|
|
||||||
|
" open new tab page before tab page 1 in normal mode
|
||||||
|
call feedkeys(TabMenuNewItemCode(1), "Lx!")
|
||||||
|
call assert_equal(1, tabpagenr())
|
||||||
|
call assert_equal(3, tabpagenr('$'))
|
||||||
|
|
||||||
|
" go to tab page 2 in operator-pending mode (should beep)
|
||||||
|
call assert_beeps('call feedkeys("f" .. TabLineSelectPageCode(2), "Lx!")')
|
||||||
|
|
||||||
|
" open new tab page before tab page 1 in operator-pending mode (should beep)
|
||||||
|
call assert_beeps('call feedkeys("f" .. TabMenuNewItemCode(1), "Lx!")')
|
||||||
|
|
||||||
|
" open new tab page after tab page 3 in normal mode
|
||||||
|
call feedkeys(TabMenuNewItemCode(4), "Lx!")
|
||||||
|
call assert_equal(4, tabpagenr())
|
||||||
|
call assert_equal(4, tabpagenr('$'))
|
||||||
|
|
||||||
|
" go to tab page 2 in insert mode
|
||||||
|
call feedkeys("i" .. TabLineSelectPageCode(2) .. "\<C-C>", "Lx!")
|
||||||
|
call assert_equal(2, tabpagenr())
|
||||||
|
|
||||||
|
" close tab page 2 in insert mode
|
||||||
|
call feedkeys("i" .. TabMenuCloseItemCode(2) .. "\<C-C>", "Lx!")
|
||||||
|
call assert_equal(3, tabpagenr('$'))
|
||||||
|
|
||||||
|
" open new tab page before tab page 3 in insert mode
|
||||||
|
call feedkeys("i" .. TabMenuNewItemCode(3) .. "\<C-C>", "Lx!")
|
||||||
|
call assert_equal(3, tabpagenr())
|
||||||
|
call assert_equal(4, tabpagenr('$'))
|
||||||
|
|
||||||
|
" open new tab page after tab page 4 in insert mode
|
||||||
|
call feedkeys("i" .. TabMenuNewItemCode(5) .. "\<C-C>", "Lx!")
|
||||||
|
call assert_equal(5, tabpagenr())
|
||||||
|
call assert_equal(5, tabpagenr('$'))
|
||||||
|
|
||||||
|
%bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Loading…
Reference in New Issue
Block a user