mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
parent
cf80fd9e02
commit
8072f085d2
@ -21,16 +21,14 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void rstream_init_fd(Loop *loop, Stream *stream, int fd, size_t bufsize)
|
void rstream_init_fd(Loop *loop, Stream *stream, int fd, size_t bufsize)
|
||||||
FUNC_ATTR_NONNULL_ARG(1)
|
FUNC_ATTR_NONNULL_ARG(1, 2)
|
||||||
FUNC_ATTR_NONNULL_ARG(2)
|
|
||||||
{
|
{
|
||||||
stream_init(loop, stream, fd, NULL);
|
stream_init(loop, stream, fd, NULL);
|
||||||
rstream_init(stream, bufsize);
|
rstream_init(stream, bufsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t bufsize)
|
void rstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t bufsize)
|
||||||
FUNC_ATTR_NONNULL_ARG(1)
|
FUNC_ATTR_NONNULL_ARG(1, 2)
|
||||||
FUNC_ATTR_NONNULL_ARG(2)
|
|
||||||
{
|
{
|
||||||
stream_init(NULL, stream, -1, uvstream);
|
stream_init(NULL, stream, -1, uvstream);
|
||||||
rstream_init(stream, bufsize);
|
rstream_init(stream, bufsize);
|
||||||
@ -138,6 +136,10 @@ static void read_cb(uv_stream_t *uvstream, ssize_t cnt, const uv_buf_t *buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Called by the by the 'idle' handle to emulate a reading event
|
// Called by the by the 'idle' handle to emulate a reading event
|
||||||
|
//
|
||||||
|
// Idle callbacks are invoked once per event loop:
|
||||||
|
// - to perform some very low priority activity.
|
||||||
|
// - to keep the loop "alive" (so there is always an event to process)
|
||||||
static void fread_idle_cb(uv_idle_t *handle)
|
static void fread_idle_cb(uv_idle_t *handle)
|
||||||
{
|
{
|
||||||
uv_fs_t req;
|
uv_fs_t req;
|
||||||
|
@ -53,9 +53,19 @@ void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream)
|
|||||||
stream->uv.idle.data = stream;
|
stream->uv.idle.data = stream;
|
||||||
} else {
|
} else {
|
||||||
assert(type == UV_NAMED_PIPE || type == UV_TTY);
|
assert(type == UV_NAMED_PIPE || type == UV_TTY);
|
||||||
|
#ifdef WIN32
|
||||||
|
if (type == UV_TTY) {
|
||||||
|
uv_tty_init(&loop->uv, &stream->uv.tty, fd, 0);
|
||||||
|
uv_tty_set_mode(&stream->uv.tty, UV_TTY_MODE_RAW);
|
||||||
|
stream->uvstream = STRUCT_CAST(uv_stream_t, &stream->uv.tty);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
uv_pipe_init(&loop->uv, &stream->uv.pipe, 0);
|
uv_pipe_init(&loop->uv, &stream->uv.pipe, 0);
|
||||||
uv_pipe_open(&stream->uv.pipe, fd);
|
uv_pipe_open(&stream->uv.pipe, fd);
|
||||||
stream->uvstream = STRUCT_CAST(uv_stream_t, &stream->uv.pipe);
|
stream->uvstream = STRUCT_CAST(uv_stream_t, &stream->uv.pipe);
|
||||||
|
#ifdef WIN32
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,9 @@ struct stream {
|
|||||||
uv_pipe_t pipe;
|
uv_pipe_t pipe;
|
||||||
uv_tcp_t tcp;
|
uv_tcp_t tcp;
|
||||||
uv_idle_t idle;
|
uv_idle_t idle;
|
||||||
|
#ifdef WIN32
|
||||||
|
uv_tty_t tty;
|
||||||
|
#endif
|
||||||
} uv;
|
} uv;
|
||||||
uv_stream_t *uvstream;
|
uv_stream_t *uvstream;
|
||||||
uv_buf_t uvbuf;
|
uv_buf_t uvbuf;
|
||||||
|
@ -49,15 +49,7 @@ void tinput_init(TermInput *input, Loop *loop)
|
|||||||
int curflags = termkey_get_canonflags(input->tk);
|
int curflags = termkey_get_canonflags(input->tk);
|
||||||
termkey_set_canonflags(input->tk, curflags | TERMKEY_CANON_DELBS);
|
termkey_set_canonflags(input->tk, curflags | TERMKEY_CANON_DELBS);
|
||||||
// setup input handle
|
// setup input handle
|
||||||
#ifdef WIN32
|
|
||||||
uv_tty_init(&loop->uv, &input->tty_in, 0, 1);
|
|
||||||
uv_tty_set_mode(&input->tty_in, UV_TTY_MODE_RAW);
|
|
||||||
rstream_init_stream(&input->read_stream,
|
|
||||||
(uv_stream_t *)&input->tty_in,
|
|
||||||
0xfff);
|
|
||||||
#else
|
|
||||||
rstream_init_fd(loop, &input->read_stream, input->in_fd, 0xfff);
|
rstream_init_fd(loop, &input->read_stream, input->in_fd, 0xfff);
|
||||||
#endif
|
|
||||||
// initialize a timer handle for handling ESC with libtermkey
|
// initialize a timer handle for handling ESC with libtermkey
|
||||||
time_watcher_init(loop, &input->timer_handle, input);
|
time_watcher_init(loop, &input->timer_handle, input);
|
||||||
}
|
}
|
||||||
|
@ -17,9 +17,6 @@ typedef struct term_input {
|
|||||||
#endif
|
#endif
|
||||||
TimeWatcher timer_handle;
|
TimeWatcher timer_handle;
|
||||||
Loop *loop;
|
Loop *loop;
|
||||||
#ifdef WIN32
|
|
||||||
uv_tty_t tty_in;
|
|
||||||
#endif
|
|
||||||
Stream read_stream;
|
Stream read_stream;
|
||||||
RBuffer *key_buffer;
|
RBuffer *key_buffer;
|
||||||
uv_mutex_t key_buffer_mutex;
|
uv_mutex_t key_buffer_mutex;
|
||||||
|
Loading…
Reference in New Issue
Block a user