mirror of
https://github.com/neovim/neovim.git
synced 2025-10-16 06:46:07 +00:00
refactor(ui): devirtualize the ui layer
- The defined interface for the UI is only the RPC protocol. The original UI interface as an array of function pointers fill no function. - On the server, all the UI:s are all RPC channels. - ui.c is only used on the server. - The compositor is a preprocessing step for single-grid UI:s - on the client, ui_client and tui talk directly to each other - we still do module separation, as ui_client.c could form the basis of a libnvim client module later. Items for later PR:s - vim.ui_attach is still an unhappy child, reconsider based on plugin experience. - the flags in ui_events.in.h are still a mess. Can be simplified now. - UX for remote attachment needs more work. - startup for client can be simplified further (think of the millisecs we can save)
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include "lauxlib.h"
|
||||
#include "nvim/api/private/defs.h"
|
||||
#include "nvim/api/private/helpers.h"
|
||||
#include "nvim/api/ui.h"
|
||||
#include "nvim/decoration_provider.h"
|
||||
#include "nvim/drawscreen.h"
|
||||
#include "nvim/gettext.h"
|
||||
@@ -128,19 +129,15 @@ static int get_attr_entry(HlEntry entry)
|
||||
/// When a UI connects, we need to send it the table of highlights used so far.
|
||||
void ui_send_all_hls(UI *ui)
|
||||
{
|
||||
if (ui->hl_attr_define) {
|
||||
for (size_t i = 1; i < kv_size(attr_entries); i++) {
|
||||
Array inspect = hl_inspect((int)i);
|
||||
ui->hl_attr_define(ui, (Integer)i, kv_A(attr_entries, i).attr,
|
||||
kv_A(attr_entries, i).attr, inspect);
|
||||
api_free_array(inspect);
|
||||
}
|
||||
for (size_t i = 1; i < kv_size(attr_entries); i++) {
|
||||
Array inspect = hl_inspect((int)i);
|
||||
remote_ui_hl_attr_define(ui, (Integer)i, kv_A(attr_entries, i).attr,
|
||||
kv_A(attr_entries, i).attr, inspect);
|
||||
api_free_array(inspect);
|
||||
}
|
||||
if (ui->hl_group_set) {
|
||||
for (size_t hlf = 0; hlf < HLF_COUNT; hlf++) {
|
||||
ui->hl_group_set(ui, cstr_as_string((char *)hlf_names[hlf]),
|
||||
highlight_attr[hlf]);
|
||||
}
|
||||
for (size_t hlf = 0; hlf < HLF_COUNT; hlf++) {
|
||||
remote_ui_hl_group_set(ui, cstr_as_string((char *)hlf_names[hlf]),
|
||||
highlight_attr[hlf]);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user