aboutsummaryrefslogtreecommitdiff
path: root/src/os/input.c
Commit message (Collapse)AuthorAge
* Move signal handling to libuv event loopThiago de Arruda2014-04-01
| | | | | | | | | | | | | | | | | This removes all signal handling code from os_unix.c to os/signal.c. Now signal handling is done like this: - Watchers for signals are registered with libuv default event loop - `event_poll` continuously calls `poll_uv_loop` to produce events until it receives user input, SIGINT or a timeout - Any signals received in `poll_uv_loop` will push events to a queue that is drained and processed by `event_poll` Signals aren't handled directly in the libuv callback to avoid recursion in the event loop(which isn't supported by libuv). The same principle will apply to other events in the future: Push to a queue from a libuv callback and drain it from `event_poll`
* Address clint warnings and other style issues.Thomas Wienecke2014-03-27
| | | | | | | * Add const. * Fix conditions (move && from end to start of line). * Use int32_t instead of long. * Use //-style comments.
* Rename mch_* functions to os_* in os module.Thomas Wienecke2014-03-27
|
* Make `EventType` enum private to input.cThiago de Arruda2014-03-27
| | | | | This enum doesn't need to be public since `event_poll` is only interested in user input(but other events may be handled by libuv callbacks).
* Reimplement input functions on top of libuvThiago de Arruda2014-03-26
The functions `mch_inchar`, `mch_breakcheck`, `mch_char_avail` were reimplemented on top of libuv. Here's how it works: - When Neovim needs to wait for characters, it will transfer control to libuv event loop. - When the libuv event loop gets user input, it will transfer control back to Neovim - Neovim uses the `input_read` function to get the actual data read by libuv. With this scheme its possible to keep Neovim single-threaded while enjoying the benefits provided by libuv. This commit leaves SIGWINCH broken for now