mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
Merge pull request #25561 from glepnir/9663
feat(float): add fclose command
This commit is contained in:
commit
fd39f5ce8c
@ -1288,6 +1288,7 @@ tag command action ~
|
||||
|:execute| :exe[cute] execute result of expressions
|
||||
|:exit| :exi[t] same as ":xit"
|
||||
|:exusage| :exu[sage] overview of Ex commands
|
||||
|:fclose| :fc[lose] close floating window
|
||||
|:file| :f[ile] show or set the current file name
|
||||
|:files| :files list all files in the buffer list
|
||||
|:filetype| :filet[ype] switch file type detection on/off
|
||||
|
@ -187,6 +187,8 @@ The following new APIs and features were added.
|
||||
|
||||
• |$NVIM_APPNAME| can be set to a relative path instead of only a name.
|
||||
|
||||
• Added |:fclose| command.
|
||||
|
||||
==============================================================================
|
||||
CHANGED FEATURES *news-changed*
|
||||
|
||||
|
@ -392,6 +392,11 @@ CTRL-W CTRL-O *CTRL-W_CTRL-O* *:on* *:only*
|
||||
given, then they become hidden. But modified buffers are
|
||||
never abandoned, so changes cannot get lost.
|
||||
|
||||
*:fc* *:fclose*
|
||||
:[count]fc[lose][!]
|
||||
Close [count]th floating window by zindex order. '!' to close
|
||||
all floating windows.
|
||||
|
||||
==============================================================================
|
||||
4. Moving cursor to other windows *window-move-cursor*
|
||||
|
||||
|
@ -1044,6 +1044,12 @@ module.cmds = {
|
||||
addr_type='ADDR_NONE',
|
||||
func='ex_function',
|
||||
},
|
||||
{
|
||||
command='fclose',
|
||||
flags=bit.bor(BANG, RANGE),
|
||||
addr_type='ADDR_OTHER',
|
||||
func='ex_floatclose',
|
||||
},
|
||||
{
|
||||
command='global',
|
||||
flags=bit.bor(RANGE, WHOLEFOLD, BANG, EXTRA, DFLALL, SBOXOK, CMDWIN, LOCK_OK),
|
||||
|
@ -7354,6 +7354,12 @@ static void ex_terminal(exarg_T *eap)
|
||||
do_cmdline_cmd(ex_cmd);
|
||||
}
|
||||
|
||||
/// ":fclose"
|
||||
static void ex_floatclose(exarg_T *eap)
|
||||
{
|
||||
win_float_remove(eap->forceit, eap->line1);
|
||||
}
|
||||
|
||||
void verify_command(char *cmd)
|
||||
{
|
||||
if (strcmp("smile", cmd) != 0) {
|
||||
|
@ -7656,3 +7656,29 @@ win_T *lastwin_nofloating(void)
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static int floating_zindex_compare(const void *a, const void *b)
|
||||
{
|
||||
return (*(win_T **)b)->w_float_config.zindex - (*(win_T **)a)->w_float_config.zindex;
|
||||
}
|
||||
|
||||
void win_float_remove(bool bang, int count)
|
||||
{
|
||||
kvec_t(win_T *) float_win_arr = KV_INITIAL_VALUE;
|
||||
for (win_T *wp = lastwin; wp && wp->w_floating; wp = wp->w_prev) {
|
||||
kv_push(float_win_arr, wp);
|
||||
}
|
||||
qsort(float_win_arr.items, float_win_arr.size, sizeof(win_T *), floating_zindex_compare);
|
||||
for (size_t i = 0; i < float_win_arr.size; i++) {
|
||||
if (win_close(float_win_arr.items[i], false, false) == FAIL) {
|
||||
break;
|
||||
}
|
||||
if (!bang) {
|
||||
count--;
|
||||
if (count == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
kv_destroy(float_win_arr);
|
||||
}
|
||||
|
@ -10927,6 +10927,186 @@ describe('float window', function()
|
||||
]])
|
||||
end
|
||||
end)
|
||||
|
||||
it('fclose command #9663', function()
|
||||
local bufA = meths.create_buf(false,false)
|
||||
local bufB = meths.create_buf(false,false)
|
||||
local bufC = meths.create_buf(false,false)
|
||||
local bufD = meths.create_buf(false,false)
|
||||
local config_A = {relative='editor', width=11, height=11, row=5, col=5, border ='single', zindex=50}
|
||||
local config_B = {relative='editor', width=8, height=8, row=7, col=7, border ='single', zindex=70}
|
||||
local config_C = {relative='editor', width=4, height=4, row=9, col=9, border ='single',zindex=90}
|
||||
local config_D = {relative='editor', width=2, height=2, row=10, col=10, border ='single',zindex=100}
|
||||
meths.open_win(bufA, false, config_A)
|
||||
meths.open_win(bufB, false, config_B)
|
||||
meths.open_win(bufC, false, config_C)
|
||||
meths.open_win(bufD, false, config_D)
|
||||
--close window which have higher zindex value
|
||||
command('fclose')
|
||||
local expected_pos = {
|
||||
[4]={{id=1001}, 'NW', 1, 5, 5, true, 50},
|
||||
[5]={{id=1002}, 'NW', 1, 7, 7, true, 70},
|
||||
[6]={{id=1003}, 'NW', 1, 9, 9, true, 90},
|
||||
}
|
||||
if multigrid then
|
||||
screen:expect{grid=[[
|
||||
## grid 1
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[3:----------------------------------------]|
|
||||
## grid 2
|
||||
^ |
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
## grid 3
|
||||
|
|
||||
|
||||
## grid 4
|
||||
{5:┌───────────┐}|
|
||||
{5:│}{1: }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:└───────────┘}|
|
||||
## grid 5
|
||||
{5:┌────────┐}|
|
||||
{5:│}{1: }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:└────────┘}|
|
||||
## grid 6
|
||||
{5:┌────┐}|
|
||||
{5:│}{1: }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:└────┘}|
|
||||
]],float_pos= expected_pos}
|
||||
else
|
||||
screen:expect([[
|
||||
^ {5:┌─┌─┌────┐─┐┐} |
|
||||
{0:~ }{5:│}{1: }{5:│}{1: }{5:│}{1: }{5:│}{1: }{5:││}{0: }|
|
||||
{0:~ }{5:│}{2:~}{5:│}{2:~}{5:│}{2:~ }{5:│}{2: }{5:││}{0: }|
|
||||
{0:~ }{5:│}{2:~}{5:│}{2:~}{5:│}{2:~ }{5:│}{2: }{5:││}{0: }|
|
||||
{0:~ }{5:│}{2:~}{5:│}{2:~}{5:│}{2:~ }{5:│}{2: }{5:││}{0: }|
|
||||
{0:~ }{5:│}{2:~}{5:│}{2:~}{5:└────┘}{2: }{5:││}{0: }|
|
||||
|
|
||||
]])
|
||||
end
|
||||
-- with range
|
||||
command('1fclose')
|
||||
expected_pos[6]=nil
|
||||
if multigrid then
|
||||
screen:expect{grid=[[
|
||||
## grid 1
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[3:----------------------------------------]|
|
||||
## grid 2
|
||||
^ |
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
## grid 3
|
||||
|
|
||||
|
||||
## grid 4
|
||||
{5:┌───────────┐}|
|
||||
{5:│}{1: }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:└───────────┘}|
|
||||
## grid 5
|
||||
{5:┌────────┐}|
|
||||
{5:│}{1: }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:│}{2:~ }{5:│}|
|
||||
{5:└────────┘}|
|
||||
]],float_pos= expected_pos}
|
||||
else
|
||||
screen:expect([[
|
||||
^ {5:┌─┌────────┐┐} |
|
||||
{0:~ }{5:│}{1: }{5:│}{1: }{5:││}{0: }|
|
||||
{0:~ }{5:│}{2:~}{5:│}{2:~ }{5:││}{0: }|
|
||||
{0:~ }{5:│}{2:~}{5:│}{2:~ }{5:││}{0: }|
|
||||
{0:~ }{5:│}{2:~}{5:│}{2:~ }{5:││}{0: }|
|
||||
{0:~ }{5:│}{2:~}{5:│}{2:~ }{5:││}{0: }|
|
||||
|
|
||||
]])
|
||||
end
|
||||
--with bang
|
||||
command('fclose!')
|
||||
if multigrid then
|
||||
screen:expect{grid=[[
|
||||
## grid 1
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[2:----------------------------------------]|
|
||||
[3:----------------------------------------]|
|
||||
## grid 2
|
||||
^ |
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
## grid 3
|
||||
|
|
||||
|
||||
]],float_pos= {}}
|
||||
else
|
||||
screen:expect([[
|
||||
^ |
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
{0:~ }|
|
||||
|
|
||||
]])
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
describe('with ext_multigrid', function()
|
||||
|
Loading…
Reference in New Issue
Block a user