aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2024-04-26 16:21:56 +0200
committerLuuk van Baal <luukvbaal@gmail.com>2024-04-26 16:42:08 +0200
commit7626f431d84fc3a6eb82d0d23d436e3e31e991ce (patch)
tree3ef752fc6552e24f4e430b350342703ada1d76d7
parentd855c7a2fb3315f4fb05becff798e42833792fe5 (diff)
downloadrneovim-7626f431d84fc3a6eb82d0d23d436e3e31e991ce.tar.gz
rneovim-7626f431d84fc3a6eb82d0d23d436e3e31e991ce.tar.bz2
rneovim-7626f431d84fc3a6eb82d0d23d436e3e31e991ce.zip
fix(ui): update ext_ui widgets when attaching non-remote UI
Problem: Updating internalized UI capabilities is postponed until a remote UI attaches. Solution: Always update active UI widgets in ui_refresh().
-rw-r--r--src/nvim/ui.c21
-rw-r--r--test/functional/lua/ui_event_spec.lua8
2 files changed, 18 insertions, 11 deletions
diff --git a/src/nvim/ui.c b/src/nvim/ui.c
index 75af543448..dd3bb53dde 100644
--- a/src/nvim/ui.c
+++ b/src/nvim/ui.c
@@ -194,15 +194,6 @@ void ui_refresh(void)
abort();
}
- if (!ui_active()) {
- return;
- }
-
- if (updating_screen) {
- ui_schedule_refresh();
- return;
- }
-
int width = INT_MAX;
int height = INT_MAX;
bool ext_widgets[kUIExtCount];
@@ -234,11 +225,19 @@ void ui_refresh(void)
}
ui_ext[i] = ext_widgets[i];
if (i < kUIGlobalCount) {
- ui_call_option_set(cstr_as_string(ui_ext_names[i]),
- BOOLEAN_OBJ(ext_widgets[i]));
+ ui_call_option_set(cstr_as_string(ui_ext_names[i]), BOOLEAN_OBJ(ext_widgets[i]));
}
}
+ if (!ui_active()) {
+ return;
+ }
+
+ if (updating_screen) {
+ ui_schedule_refresh();
+ return;
+ }
+
ui_default_colors_set();
int save_p_lz = p_lz;
diff --git a/test/functional/lua/ui_event_spec.lua b/test/functional/lua/ui_event_spec.lua
index 5fe51a2c35..60f8706e2d 100644
--- a/test/functional/lua/ui_event_spec.lua
+++ b/test/functional/lua/ui_event_spec.lua
@@ -155,6 +155,14 @@ describe('vim.ui_attach', function()
},
}, actual, vim.inspect(actual))
end)
+
+ it('ui_refresh() works without remote UI', function()
+ screen:detach()
+ exec_lua('vim.ui_attach(ns, { ext_messages = true }, on_event)')
+ n.api.nvim_set_option_value('cmdheight', 1, {})
+ screen:attach()
+ eq(1, n.api.nvim_get_option_value('cmdheight', {}))
+ end)
end)
describe('vim.ui_attach', function()