diff options
Diffstat (limited to 'src/os/input.c')
| -rw-r--r-- | src/os/input.c | 92 | 
1 files changed, 43 insertions, 49 deletions
| diff --git a/src/os/input.c b/src/os/input.c index 2f4b42467b..1e2d331fc0 100644 --- a/src/os/input.c +++ b/src/os/input.c @@ -31,8 +31,8 @@ typedef struct {  static ReadBuffer rbuffer;  static uv_pipe_t read_stream; -/* Use an idle handle to make reading from the fs look like a normal libuv - * event */ +// Use an idle handle to make reading from the fs look like a normal libuv +// event  static uv_idle_t fread_idle;  static uv_handle_type read_channel_type;  static bool eof = false; @@ -58,30 +58,30 @@ void input_init()    }  } -/* Check if there's a pending input event */ +// Check if there's a pending input event  bool input_ready()  {    return rbuffer.rpos < rbuffer.wpos || eof;  } -/* Listen for input */ +// Listen for input  void input_start()  { -  /* Pin the buffer used by libuv */ +  // Pin the buffer used by libuv    rbuffer.uvbuf.len = READ_BUFFER_LENGTH - rbuffer.wpos;    rbuffer.uvbuf.base = (char *)(rbuffer.data + rbuffer.wpos);    if (read_channel_type == UV_FILE) { -    /* Just invoke the `fread_idle_cb` as soon as the loop starts */ +    // Just invoke the `fread_idle_cb` as soon as the loop starts      uv_idle_start(&fread_idle, fread_idle_cb);    } else { -    /* Start reading */ +    // Start reading      rbuffer.reading = false;      uv_read_start((uv_stream_t *)&read_stream, alloc_cb, read_cb);    }  } -/* Stop listening for input */ +// Stop listening for input  void input_stop()  {    if (read_channel_type == UV_FILE) { @@ -91,7 +91,7 @@ void input_stop()    }  } -/* Copies (at most `count`) of was read from `read_cmd_fd` into `buf` */ +// Copies (at most `count`) of was read from `read_cmd_fd` into `buf`  uint32_t input_read(char *buf, uint32_t count)  {    uint32_t read_count = rbuffer.wpos - rbuffer.rpos; @@ -106,13 +106,12 @@ uint32_t input_read(char *buf, uint32_t count)    }    if (rbuffer.wpos == READ_BUFFER_LENGTH) { -    /* `wpos` is at the end of the buffer, so free some space by moving unread -     * data... */ +    // `wpos` is at the end of the buffer, so free some space by moving unread +    // data...      memmove( -        rbuffer.data,/* ...To the beginning of the buffer(rpos 0) */ -        rbuffer.data + rbuffer.rpos,/* ...From the first unread position */ -        rbuffer.wpos - rbuffer.rpos/* ...By the number of unread bytes */ -        ); +        rbuffer.data,  // ...To the beginning of the buffer(rpos 0) +        rbuffer.data + rbuffer.rpos,  // ...From the first unread position +        rbuffer.wpos - rbuffer.rpos);  // ...By the number of unread bytes      rbuffer.wpos -= rbuffer.rpos;      rbuffer.rpos = 0;    } @@ -121,8 +120,8 @@ uint32_t input_read(char *buf, uint32_t count)  } -/* Low level input function. */ -int os_inchar(char_u *buf, int maxlen, long ms, int tb_change_cnt) +// Low level input function. +int os_inchar(char_u *buf, int maxlen, int32_t ms, int tb_change_cnt)  {    InbufPollResult result; @@ -132,8 +131,8 @@ int os_inchar(char_u *buf, int maxlen, long ms, int tb_change_cnt)      }    } else {      if ((result = inbuf_poll(p_ut)) != kInputAvail) { -      if (trigger_cursorhold() && maxlen >= 3 && -          !typebuf_changed(tb_change_cnt)) { +      if (trigger_cursorhold() && maxlen >= 3 +          && !typebuf_changed(tb_change_cnt)) {          buf[0] = K_SPECIAL;          buf[1] = KS_EXTRA;          buf[2] = KE_CURSORHOLD; @@ -145,7 +144,7 @@ int os_inchar(char_u *buf, int maxlen, long ms, int tb_change_cnt)      }    } -  /* If input was put directly in typeahead buffer bail out here. */ +  // If input was put directly in typeahead buffer bail out here.    if (typebuf_changed(tb_change_cnt))      return 0; @@ -157,23 +156,21 @@ int os_inchar(char_u *buf, int maxlen, long ms, int tb_change_cnt)    return read_from_input_buf(buf, (long)maxlen);  } -/* Check if a character is available for reading */ +// Check if a character is available for reading  bool os_char_avail()  {    return inbuf_poll(0) == kInputAvail;  } -/* - * Check for CTRL-C typed by reading all available characters. - * In cooked mode we should get SIGINT, no need to check. - */ +// Check for CTRL-C typed by reading all available characters. +// In cooked mode we should get SIGINT, no need to check.  void os_breakcheck()  {    if (curr_tmode == TMODE_RAW && event_poll(0))      fill_input_buf(FALSE);  } -/* This is a replacement for the old `WaitForChar` function in os_unix.c */ +// This is a replacement for the old `WaitForChar` function in os_unix.c  static InbufPollResult inbuf_poll(int32_t ms)  {    if (input_available()) @@ -192,23 +189,23 @@ static InbufPollResult inbuf_poll(int32_t ms)  static void stderr_switch()  {    int mode = cur_tmode; -  /* We probably set the wrong file descriptor to raw mode. Switch back to -   * cooked mode */ +  // We probably set the wrong file descriptor to raw mode. Switch back to +  // cooked mode    settmode(TMODE_COOK); -  /* Stop the idle handle */ +  // Stop the idle handle    uv_idle_stop(&fread_idle); -  /* Use stderr for stdin, also works for shell commands. */ +  // Use stderr for stdin, also works for shell commands.    read_cmd_fd = 2; -  /* Initialize and start the input stream */ +  // Initialize and start the input stream    uv_pipe_init(uv_default_loop(), &read_stream, 0);    uv_pipe_open(&read_stream, read_cmd_fd);    uv_read_start((uv_stream_t *)&read_stream, alloc_cb, read_cb);    rbuffer.reading = false; -  /* Set the mode back to what it was */ +  // Set the mode back to what it was    settmode(mode);  } -/* Called by libuv to allocate memory for reading. */ +// Called by libuv to allocate memory for reading.  static void alloc_cb(uv_handle_t *handle, size_t suggested, uv_buf_t *buf)  {    if (rbuffer.reading) { @@ -218,36 +215,34 @@ static void alloc_cb(uv_handle_t *handle, size_t suggested, uv_buf_t *buf)    buf->base = rbuffer.uvbuf.base;    buf->len = rbuffer.uvbuf.len; -  /* Avoid `alloc_cb`, `alloc_cb` sequences on windows */ +  // Avoid `alloc_cb`, `alloc_cb` sequences on windows    rbuffer.reading = true;  } -/* - * Callback invoked by libuv after it copies the data into the buffer provided - * by `alloc_cb`. This is also called on EOF or when `alloc_cb` returns a - * 0-length buffer. - */ +// Callback invoked by libuv after it copies the data into the buffer provided +// by `alloc_cb`. This is also called on EOF or when `alloc_cb` returns a +// 0-length buffer.  static void read_cb(uv_stream_t *stream, ssize_t cnt, const uv_buf_t *buf)  {    if (cnt <= 0) {      if (cnt != UV_ENOBUFS) { -      /* Read error or EOF, either way vim must exit */ +      // Read error or EOF, either way vim must exit        eof = true;      }      return;    } -  /* Data was already written, so all we need is to update 'wpos' to reflect -   * the space actually used in the buffer. */ +  // Data was already written, so all we need is to update 'wpos' to reflect +  // the space actually used in the buffer.    rbuffer.wpos += cnt;  } -/* Called by the by the 'idle' handle to emulate a reading event */ +// Called by the by the 'idle' handle to emulate a reading event  static void fread_idle_cb(uv_idle_t *handle, int status)  {    uv_fs_t req; -  /* Synchronous read */ +  // Synchronous read    uv_fs_read(        uv_default_loop(),        &req, @@ -255,16 +250,15 @@ static void fread_idle_cb(uv_idle_t *handle, int status)        &rbuffer.uvbuf,        1,        rbuffer.fpos, -      NULL -      ); +      NULL);    uv_fs_req_cleanup(&req);    if (req.result <= 0) {      if (rbuffer.fpos == 0 && uv_guess_handle(2) == UV_TTY) { -      /* Read error. Since stderr is a tty we switch to reading from it. This -       * is for handling for cases like "foo | xargs vim" because xargs -       * redirects stdin from /dev/null. Previously, this was done in ui.c */ +      // Read error. Since stderr is a tty we switch to reading from it. This +      // is for handling for cases like "foo | xargs vim" because xargs +      // redirects stdin from /dev/null. Previously, this was done in ui.c        stderr_switch();      } else {        eof = true; | 
