diff options
author | luukvbaal <luukvbaal@gmail.com> | 2025-01-15 15:55:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-15 06:55:21 -0800 |
commit | bbf36ef8ef86534e317e4e0153730a40ae4c936e (patch) | |
tree | f42051d012c32af4fb6847dd975498a01585486e /src/nvim/ex_getln.c | |
parent | 5cc93ef4729c65d6a539c8d0a8a2bf767cf17ced (diff) | |
download | rneovim-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.c | 8 |
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) { |