Reimplement input functions on top of libuv

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
This commit is contained in:
Thiago de Arruda
2014-03-26 16:35:24 -03:00
parent f8432ef127
commit 452804638d
7 changed files with 392 additions and 154 deletions

View File

@@ -2,8 +2,6 @@
#define NEOVIM_OS_UNIX_H
/* os_unix.c */
void mch_write(char_u *s, int len);
int mch_inchar(char_u *buf, int maxlen, long wtime, int tb_change_cnt);
int mch_char_avail(void);
void mch_startjmp(void);
void mch_endjmp(void);
void mch_didjmp(void);
@@ -45,7 +43,6 @@ int mch_get_shellsize(void);
void mch_set_shellsize(void);
void mch_new_shellsize(void);
int mch_call_shell(char_u *cmd, int options);
void mch_breakcheck(void);
int mch_expandpath(garray_T *gap, char_u *path, int flags);
int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,
char_u ***file,