[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:
John Gehrig 2021-06-27 15:30:09 -04:00 committed by GitHub
parent bdf3df4027
commit 5aaa1a1c04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 66 additions and 9 deletions

View File

@ -631,11 +631,13 @@ Tabline Events *ui-tabline*
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
widget.
curtab: Current Tabpage
tabs: List of Dicts [{ "tab": Tabpage, "name": String }, ...]
widget. Note: options `curbuf` + `buffers` were added in API7.
curtab: Current Tabpage
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*

View File

@ -130,7 +130,8 @@ void popupmenu_hide(void)
void popupmenu_select(Integer selected)
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;
void cmdline_show(Array content, Integer pos, String firstc, String prompt,

View File

@ -7211,7 +7211,24 @@ void ui_ext_tabline_update(void)
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);
}
/*

View File

@ -4,14 +4,17 @@ local clear, command, eq = helpers.clear, helpers.command, helpers.eq
describe('ui/ext_tabline', function()
local screen
local event_tabs, event_curtab
local event_tabs, event_curtab, event_curbuf, event_buffers
before_each(function()
clear()
screen = Screen.new(25, 5)
screen:attach({rgb=true, ext_tabline=true})
function screen:_handle_tabline_update(curtab, tabs)
event_curtab, event_tabs = curtab, tabs
function screen:_handle_tabline_update(curtab, tabs, curbuf, buffers)
event_curtab = curtab
event_tabs = tabs
event_curbuf = curbuf
event_buffers = buffers
end
end)
@ -45,4 +48,38 @@ describe('ui/ext_tabline', function()
eq(expected_tabs, event_tabs)
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)