neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

loop.h (1226B)


      1 #pragma once
      2 
      3 #include <stdbool.h>
      4 #include <uv.h>
      5 
      6 #include "klib/kvec.h"
      7 #include "nvim/event/defs.h"  // IWYU pragma: keep
      8 #include "nvim/types_defs.h"  // IWYU pragma: keep
      9 
     10 struct loop {
     11  uv_loop_t uv;
     12  MultiQueue *events;
     13  MultiQueue *thread_events;
     14  // Immediate events.
     15  // - "Processed after exiting `uv_run()` (to avoid recursion), but before returning from
     16  //   `loop_poll_events()`." 502aee690c98
     17  // - Practical consequence (for `main_loop`):
     18  //    - these are processed by `state_enter()..input_get()` whereas "regular" events
     19  //      (`main_loop.events`) are processed by `state_enter()..VimState.execute()`
     20  //    - `state_enter()..input_get()` can be "too early" if you want the event to trigger UI
     21  //      updates and other user-activity-related side-effects.
     22  MultiQueue *fast_events;
     23 
     24  // used by process/job-control subsystem
     25  kvec_t(Proc *) children;
     26  uv_signal_t children_watcher;
     27  uv_timer_t children_kill_timer;
     28 
     29  // generic timer, used by loop_poll_events()
     30  uv_timer_t poll_timer;
     31 
     32  uv_timer_t exit_delay_timer;
     33 
     34  uv_async_t async;
     35  uv_mutex_t mutex;
     36  int recursive;
     37  bool closing;  ///< Set to true if loop_close() has been called
     38 };
     39 
     40 #include "event/loop.h.generated.h"