コード例 #1
0
ファイル: input.c プロジェクト: dkns/neovim
static void read_cb(Stream *stream, RBuffer *buf, void *data, bool at_eof)
{
  if (at_eof) {
    input_eof = true;
  }

  assert(rbuffer_space(input_buffer) >= rbuffer_size(buf));
  RBUFFER_UNTIL_EMPTY(buf, ptr, len) {
    (void)rbuffer_write(input_buffer, ptr, len);
    rbuffer_consumed(buf, len);
  }
コード例 #2
0
ファイル: input.c プロジェクト: Sean1708/neovim
static void read_cb(RStream *rstream, void *data, bool at_eof)
{
  if (at_eof) {
    input_eof = true;
  }

  char *buf = rbuffer_read_ptr(read_buffer);
  size_t buf_size = rbuffer_pending(read_buffer);
  (void)rbuffer_write(input_buffer, buf, buf_size);
  rbuffer_consumed(read_buffer, buf_size);
}
コード例 #3
0
ファイル: rstream.c プロジェクト: axblount/neovim
/// Reads data from a `RBuffer` instance into a raw buffer.
///
/// @param rbuffer The `RBuffer` instance
/// @param buffer The buffer which will receive the data
/// @param count Number of bytes that `buffer` can accept
/// @return The number of bytes copied into `buffer`
size_t rbuffer_read(RBuffer *rbuffer, char *buffer, size_t count)
{
  size_t read_count = rbuffer_pending(rbuffer);

  if (count < read_count) {
    read_count = count;
  }

  if (read_count > 0) {
    memcpy(buffer, rbuffer_read_ptr(rbuffer), read_count);
    rbuffer_consumed(rbuffer, read_count);
  }

  return read_count;
}
コード例 #4
0
ファイル: input.c プロジェクト: Sean1708/neovim
static void process_interrupts(void)
{
  if (mapped_ctrl_c) {
    return;
  }

  char *inbuf = rbuffer_read_ptr(input_buffer);
  size_t count = rbuffer_pending(input_buffer), consume_count = 0;

  for (int i = (int)count - 1; i >= 0; i--) {
    if (inbuf[i] == 3) {
      got_int = true;
      consume_count = (size_t)i;
      break;
    }
  }

  if (got_int) {
    // Remove everything typed before the CTRL-C
    rbuffer_consumed(input_buffer, consume_count);
  }
}
コード例 #5
0
ファイル: rbuffer.c プロジェクト: Alok/neovim-1
 RBUFFER_UNTIL_EMPTY(buf, rptr, rcnt) {
   cb(rptr, rcnt);
   rbuffer_consumed(buf, rcnt);
 }