diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-04-30 13:11:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-30 13:11:35 +0800 |
commit | 2ba539f449a95f38463a61b189e203a5fe306fc0 (patch) | |
tree | 03469caff9c6c1d0cc8da4338f51cc28236a6d9a /src/nvim/os/input.c | |
parent | 7df25a1372fde01d9498ddef349a0b7851045cc7 (diff) | |
download | rneovim-2ba539f449a95f38463a61b189e203a5fe306fc0.tar.gz rneovim-2ba539f449a95f38463a61b189e203a5fe306fc0.tar.bz2 rneovim-2ba539f449a95f38463a61b189e203a5fe306fc0.zip |
fix(input): only disable mapped CTRL-C interrupts when getting input (#18310)
Diffstat (limited to 'src/nvim/os/input.c')
-rw-r--r-- | src/nvim/os/input.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c index 9941774d82..9ee2f57b3d 100644 --- a/src/nvim/os/input.c +++ b/src/nvim/os/input.c @@ -98,7 +98,7 @@ static void create_cursorhold_event(bool events_enabled) /// Low level input function /// -/// wait until either the input buffer is non-empty or , if `events` is not NULL +/// wait until either the input buffer is non-empty or, if `events` is not NULL /// until `events` is non-empty. int os_inchar(uint8_t *buf, int maxlen, int ms, int tb_change_cnt, MultiQueue *events) { @@ -106,6 +106,11 @@ int os_inchar(uint8_t *buf, int maxlen, int ms, int tb_change_cnt, MultiQueue *e return (int)rbuffer_read(input_buffer, (char *)buf, (size_t)maxlen); } + // No risk of a UI flood, so disable CTRL-C "interrupt" behavior if it's mapped. + if ((mapped_ctrl_c | curbuf->b_mapped_ctrl_c) & get_real_state()) { + ctrl_c_interrupts = false; + } + InbufPollResult result; if (ms >= 0) { if ((result = inbuf_poll(ms, events)) == kInputNone) { @@ -127,6 +132,8 @@ int os_inchar(uint8_t *buf, int maxlen, int ms, int tb_change_cnt, MultiQueue *e } } + ctrl_c_interrupts = true; + // If input was put directly in typeahead buffer bail out here. if (typebuf_changed(tb_change_cnt)) { return 0; @@ -275,7 +282,7 @@ size_t input_enqueue(String keys) } size_t rv = (size_t)(ptr - keys.data); - process_interrupts(); + process_ctrl_c(); return rv; } @@ -480,9 +487,9 @@ static void input_read_cb(Stream *stream, RBuffer *buf, size_t c, void *data, bo } } -static void process_interrupts(void) +static void process_ctrl_c(void) { - if ((mapped_ctrl_c | curbuf->b_mapped_ctrl_c) & get_real_state()) { + if (!ctrl_c_interrupts) { return; } |