diff options
author | Gregory Anders <greg@gpanders.com> | 2025-03-07 12:16:39 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-07 12:16:39 -0600 |
commit | 3d49c55d3c33a243f4236cf57b179608c288b145 (patch) | |
tree | 506520f8fd41fe820ee039f18d9e8ea42d66356b /runtime/lua/vim/_meta/api.lua | |
parent | 8da59060c6dc9899d1f66d1c9b501b80496cc2e8 (diff) | |
download | rneovim-3d49c55d3c33a243f4236cf57b179608c288b145.tar.gz rneovim-3d49c55d3c33a243f4236cf57b179608c288b145.tar.bz2 rneovim-3d49c55d3c33a243f4236cf57b179608c288b145.zip |
fix(terminal): avoid rescheduling events onto the same queue (#32755)
Problem:
When a function like vim.wait() is used, we continuously drain the main
event queue until it is empty, never stopping for user input. This means
the libuv timer never runs and the terminal never gets refreshed, so
emit_termrequest continously reschedules itself onto the same event
queue, causing an infinite loop.
Solution:
Use a separate "pending" event queue, where events that require a
terminal refresh are temporarily placed. Drain this queue after a
terminal refresh and events are copied back onto the main queue. This
prevents infinite loops since the main event queue will always be able
to properly drain.
Diffstat (limited to 'runtime/lua/vim/_meta/api.lua')
0 files changed, 0 insertions, 0 deletions