mirror of
https://github.com/neovim/neovim.git
synced 2025-09-22 19:18:34 +00:00
[RDY] Add buffer information to tabline_update (#12481)
* Add buffer information to tabline_update Most terminal implementations of the tabline display buffer and tab information. Many neovim-qt users disable GuiTabline because it lacks functionality provided in the terminal implementation. The tabline_update event should include buffer information too, so client GUIs can display rich useful tabs.
This commit is contained in:
@@ -631,11 +631,13 @@ Tabline Events *ui-tabline*
|
|||||||
|
|
||||||
Activated by the `ext_tabline` |ui-option|.
|
Activated by the `ext_tabline` |ui-option|.
|
||||||
|
|
||||||
["tabline_update", curtab, tabs]
|
["tabline_update", curtab, tabs, curbuf, buffers]
|
||||||
Tabline was updated. UIs should present this data in a custom tabline
|
Tabline was updated. UIs should present this data in a custom tabline
|
||||||
widget.
|
widget. Note: options `curbuf` + `buffers` were added in API7.
|
||||||
curtab: Current Tabpage
|
curtab: Current Tabpage
|
||||||
tabs: List of Dicts [{ "tab": Tabpage, "name": String }, ...]
|
tabs: List of Dicts [{ "tab": Tabpage, "name": String }, ...]
|
||||||
|
curbuf: Current buffer handle.
|
||||||
|
buffers: List of Dicts [{ "buffer": buffer handle, "name": String}, ...]
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Cmdline Events *ui-cmdline*
|
Cmdline Events *ui-cmdline*
|
||||||
|
@@ -130,7 +130,8 @@ void popupmenu_hide(void)
|
|||||||
void popupmenu_select(Integer selected)
|
void popupmenu_select(Integer selected)
|
||||||
FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY;
|
FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY;
|
||||||
|
|
||||||
void tabline_update(Tabpage current, Array tabs)
|
void tabline_update(Tabpage current, Array tabs,
|
||||||
|
Buffer current_buffer, Array buffers)
|
||||||
FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY;
|
FUNC_API_SINCE(3) FUNC_API_REMOTE_ONLY;
|
||||||
|
|
||||||
void cmdline_show(Array content, Integer pos, String firstc, String prompt,
|
void cmdline_show(Array content, Integer pos, String firstc, String prompt,
|
||||||
|
@@ -7211,7 +7211,24 @@ void ui_ext_tabline_update(void)
|
|||||||
|
|
||||||
ADD(tabs, DICTIONARY_OBJ(tab_info));
|
ADD(tabs, DICTIONARY_OBJ(tab_info));
|
||||||
}
|
}
|
||||||
ui_call_tabline_update(curtab->handle, tabs);
|
|
||||||
|
Array buffers = ARRAY_DICT_INIT;
|
||||||
|
FOR_ALL_BUFFERS(buf) {
|
||||||
|
// Do not include unlisted buffers
|
||||||
|
if (!buf->b_p_bl) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary buffer_info = ARRAY_DICT_INIT;
|
||||||
|
PUT(buffer_info, "buffer", BUFFER_OBJ(buf->handle));
|
||||||
|
|
||||||
|
get_trans_bufname(buf);
|
||||||
|
PUT(buffer_info, "name", STRING_OBJ(cstr_to_string((char *)NameBuff)));
|
||||||
|
|
||||||
|
ADD(buffers, DICTIONARY_OBJ(buffer_info));
|
||||||
|
}
|
||||||
|
|
||||||
|
ui_call_tabline_update(curtab->handle, tabs, curbuf->handle, buffers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -4,14 +4,17 @@ local clear, command, eq = helpers.clear, helpers.command, helpers.eq
|
|||||||
|
|
||||||
describe('ui/ext_tabline', function()
|
describe('ui/ext_tabline', function()
|
||||||
local screen
|
local screen
|
||||||
local event_tabs, event_curtab
|
local event_tabs, event_curtab, event_curbuf, event_buffers
|
||||||
|
|
||||||
before_each(function()
|
before_each(function()
|
||||||
clear()
|
clear()
|
||||||
screen = Screen.new(25, 5)
|
screen = Screen.new(25, 5)
|
||||||
screen:attach({rgb=true, ext_tabline=true})
|
screen:attach({rgb=true, ext_tabline=true})
|
||||||
function screen:_handle_tabline_update(curtab, tabs)
|
function screen:_handle_tabline_update(curtab, tabs, curbuf, buffers)
|
||||||
event_curtab, event_tabs = curtab, tabs
|
event_curtab = curtab
|
||||||
|
event_tabs = tabs
|
||||||
|
event_curbuf = curbuf
|
||||||
|
event_buffers = buffers
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
@@ -45,4 +48,38 @@ describe('ui/ext_tabline', function()
|
|||||||
eq(expected_tabs, event_tabs)
|
eq(expected_tabs, event_tabs)
|
||||||
end}
|
end}
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('buffer UI events', function()
|
||||||
|
local expected_buffers_initial= {
|
||||||
|
{buffer = { id = 1 }, name = '[No Name]'},
|
||||||
|
}
|
||||||
|
|
||||||
|
screen:expect{grid=[[
|
||||||
|
^ |
|
||||||
|
~ |
|
||||||
|
~ |
|
||||||
|
~ |
|
||||||
|
|
|
||||||
|
]], condition=function()
|
||||||
|
eq({ id = 1}, event_curbuf)
|
||||||
|
eq(expected_buffers_initial, event_buffers)
|
||||||
|
end}
|
||||||
|
|
||||||
|
command("badd another-buffer")
|
||||||
|
command("bnext")
|
||||||
|
|
||||||
|
local expected_buffers = {
|
||||||
|
{buffer = { id = 2 }, name = 'another-buffer'},
|
||||||
|
}
|
||||||
|
screen:expect{grid=[[
|
||||||
|
^ |
|
||||||
|
~ |
|
||||||
|
~ |
|
||||||
|
~ |
|
||||||
|
|
|
||||||
|
]], condition=function()
|
||||||
|
eq({ id = 2 }, event_curbuf)
|
||||||
|
eq(expected_buffers, event_buffers)
|
||||||
|
end}
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
Reference in New Issue
Block a user