aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/state.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-02-07 12:11:22 +0800
committerGitHub <noreply@github.com>2024-02-07 12:11:22 +0800
commit6725565258930ba430cfb925fd1671596a8a4342 (patch)
tree9671a7cab469f5ea309be6ce3c4ab3f39f55e97a /src/nvim/state.c
parentc0b99bb1de8de967d82fc29780996ed4060516c1 (diff)
downloadrneovim-6725565258930ba430cfb925fd1671596a8a4342.tar.gz
rneovim-6725565258930ba430cfb925fd1671596a8a4342.tar.bz2
rneovim-6725565258930ba430cfb925fd1671596a8a4342.zip
fix(event-loop): process input before events (#27358)
Problem: When nvim_input is followed immediately by non-fast events on RPC, both events and input are available after the polling done by the os_inchar() in state_enter(), but state_enter() then chooses to process events even if input is available, which is inconsistent with state_handle_k_event() that stops processing events once input is available. Solution: Also check for available input after the os_inchar() in state_enter().
Diffstat (limited to 'src/nvim/state.c')
-rw-r--r--src/nvim/state.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/nvim/state.c b/src/nvim/state.c
index 527acee306..0df060ecf4 100644
--- a/src/nvim/state.c
+++ b/src/nvim/state.c
@@ -79,7 +79,7 @@ getkey:
// mapping engine.
os_inchar(NULL, 0, -1, typebuf.tb_change_cnt, main_loop.events);
// If an event was put into the queue, we send K_EVENT directly.
- if (!multiqueue_empty(main_loop.events)) {
+ if (!input_available() && !multiqueue_empty(main_loop.events)) {
key = K_EVENT;
} else {
goto getkey;