aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_getln.c
diff options
context:
space:
mode:
authorluukvbaal <luukvbaal@gmail.com>2025-01-15 15:55:21 +0100
committerGitHub <noreply@github.com>2025-01-15 06:55:21 -0800
commitbbf36ef8ef86534e317e4e0153730a40ae4c936e (patch)
treef42051d012c32af4fb6847dd975498a01585486e /src/nvim/ex_getln.c
parent5cc93ef4729c65d6a539c8d0a8a2bf767cf17ced (diff)
downloadrneovim-bbf36ef8ef86534e317e4e0153730a40ae4c936e.tar.gz
rneovim-bbf36ef8ef86534e317e4e0153730a40ae4c936e.tar.bz2
rneovim-bbf36ef8ef86534e317e4e0153730a40ae4c936e.zip
fix(cmdline): prevent cmdline_show events after exiting cmdline #32033
Problem: If a (vim.ui_attach) cmdline_hide callback triggers a redraw, it may cause cmdline_show events for an already exited cmdline. Solution: Avoid emitting cmdline_show event when ccline.cmdbuff is already NULL. Unset ccline.cmdbuff before emitting cmdline_hide.
Diffstat (limited to 'src/nvim/ex_getln.c')
-rw-r--r--src/nvim/ex_getln.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index 0b5d0864e5..baff795e71 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -951,6 +951,8 @@ theend:
kv_destroy(ccline.last_colors.colors);
char *p = ccline.cmdbuff;
+ // Prevent show events triggered by a (vim.ui_attach) hide callback.
+ ccline.cmdbuff = NULL;
if (ui_has(kUICmdline)) {
ui_call_cmdline_hide(ccline.level, s->gotesc);
@@ -965,8 +967,6 @@ theend:
if (did_save_ccline) {
restore_cmdline(&save_ccline);
- } else {
- ccline.cmdbuff = NULL;
}
return (uint8_t *)p;
@@ -3415,6 +3415,10 @@ static void draw_cmdline(int start, int len)
static void ui_ext_cmdline_show(CmdlineInfo *line)
{
+ if (line->cmdbuff == NULL) {
+ return;
+ }
+
Arena arena = ARENA_EMPTY;
Array content;
if (cmdline_star) {