aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/funcs.c
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2021-01-04 19:04:21 +0100
committerBjörn Linse <bjorn.linse@gmail.com>2021-03-08 16:08:58 +0100
commitf901149de4bc69f7aa4abe00dea13bca99b9c765 (patch)
tree60857ad16af1a036af89ab7c125dc250f9423f54 /src/nvim/eval/funcs.c
parentc12ea02e0b5d465e2c4b7d8bba028d069bdf7008 (diff)
downloadrneovim-f901149de4bc69f7aa4abe00dea13bca99b9c765.tar.gz
rneovim-f901149de4bc69f7aa4abe00dea13bca99b9c765.tar.bz2
rneovim-f901149de4bc69f7aa4abe00dea13bca99b9c765.zip
state: throttle batched event processing when input is available
before, calling vim.schedule() from inside an event would execute the scheduled callback immediately after this event without checking for user input in between. Break event processing whenever user input or an interrupt is available.
Diffstat (limited to 'src/nvim/eval/funcs.c')
-rw-r--r--src/nvim/eval/funcs.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index 8c8e0d568b..60229e1ebc 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -3029,10 +3029,11 @@ static void f_getchar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
if (argvars[0].v_type == VAR_UNKNOWN) {
// getchar(): blocking wait.
+ // TODO(bfredl): deduplicate shared logic with state_enter ?
if (!(char_avail() || using_script() || input_available())) {
(void)os_inchar(NULL, 0, -1, 0, main_loop.events);
if (!multiqueue_empty(main_loop.events)) {
- multiqueue_process_events(main_loop.events);
+ state_handle_k_event();
continue;
}
}