aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2017-07-23 19:23:02 +0200
committerBjörn Linse <bjorn.linse@gmail.com>2017-11-25 09:37:00 +0100
commit5517d2323ba359d5ed0cb9f0e9abdfc2a9871894 (patch)
tree4f63e6ee61f9d809b35a39069656e776fabec16e
parent5af47031773fc647de867444693d1598d0da458d (diff)
downloadrneovim-5517d2323ba359d5ed0cb9f0e9abdfc2a9871894.tar.gz
rneovim-5517d2323ba359d5ed0cb9f0e9abdfc2a9871894.tar.bz2
rneovim-5517d2323ba359d5ed0cb9f0e9abdfc2a9871894.zip
channels: reimplement logging (as stub for proper event)
-rw-r--r--src/nvim/channel.c59
-rw-r--r--src/nvim/eval.c19
2 files changed, 73 insertions, 5 deletions
diff --git a/src/nvim/channel.c b/src/nvim/channel.c
index 4d9304472b..e2ac79794f 100644
--- a/src/nvim/channel.c
+++ b/src/nvim/channel.c
@@ -178,6 +178,62 @@ static Channel *channel_alloc(ChannelStreamType type)
return chan;
}
+/// Not implemented, only logging for now
+void channel_create_event(Channel *chan, char *ext_source)
+{
+#if MIN_LOG_LEVEL <= INFO_LOG_LEVEL
+ char *stream_desc, *mode_desc, *source;
+
+ switch (chan->streamtype) {
+ case kChannelStreamProc:
+ if (chan->stream.proc.type == kProcessTypePty) {
+ stream_desc = "pty job";
+ } else {
+ stream_desc = "job";
+ }
+ break;
+
+ case kChannelStreamStdio:
+ stream_desc = "stdio";
+ break;
+
+ case kChannelStreamSocket:
+ stream_desc = "socket";
+ break;
+
+ case kChannelStreamInternal:
+ stream_desc = "socket (internal)";
+ break;
+
+ default:
+ stream_desc = "?";
+ }
+
+ if (chan->is_rpc) {
+ mode_desc = ", rpc";
+ } else if (chan->term) {
+ mode_desc = ", terminal";
+ } else {
+ mode_desc = "";
+ }
+
+ if (ext_source) {
+ // TODO(bfredl): in a future improved traceback solution,
+ // external events should be included.
+ source = ext_source;
+ } else {
+ eval_format_source_name_line((char *)IObuff, sizeof(IObuff));
+ source = (char *)IObuff;
+ }
+
+ ILOG("new channel %" PRIu64 " (%s%s): %s", chan->id, stream_desc,
+ mode_desc, source);
+#else
+ (void)chan;
+ (void)ext_source;
+#endif
+}
+
void channel_incref(Channel *channel)
{
channel->refcount++;
@@ -329,6 +385,7 @@ Channel *channel_job_start(char **argv, CallbackReader on_stdout,
rstream_init(&proc->err, 0);
rstream_start(&proc->err, on_job_stderr, chan);
}
+
*status_out = (varnumber_T)chan->id;
return chan;
}
@@ -369,6 +426,7 @@ uint64_t channel_connect(bool tcp, const char *address,
rstream_start(&channel->stream.socket, on_socket_output, channel);
}
+ channel_create_event(channel, NULL);
return channel->id;
}
@@ -384,6 +442,7 @@ void channel_from_connection(SocketWatcher *watcher)
wstream_init(&channel->stream.socket, 0);
rstream_init(&channel->stream.socket, 0);
rpc_start(channel);
+ channel_create_event(channel, watcher->addr);
}
/// Creates a loopback channel. This is used to avoid deadlock
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index f92e2d8d65..40ee3545b6 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -11643,8 +11643,12 @@ static void f_jobstart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
term_name = tv_dict_get_string(job_opts, "TERM", true);
}
- channel_job_start(argv, on_stdout, on_stderr, on_exit, pty, rpc, detach,
- cwd, width, height, term_name, &rettv->vval.v_number);
+ Channel *chan = channel_job_start(argv, on_stdout, on_stderr, on_exit, pty,
+ rpc, detach, cwd, width, height, term_name,
+ &rettv->vval.v_number);
+ if (chan) {
+ channel_create_event(chan, NULL);
+ }
}
// "jobstop()" function
@@ -13872,9 +13876,13 @@ static void f_rpcstart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
// The last item of argv must be NULL
argv[i] = NULL;
- channel_job_start(argv, CALLBACK_READER_INIT, CALLBACK_READER_INIT,
- CALLBACK_NONE, false, true, false, NULL, 0, 0, NULL,
- &rettv->vval.v_number);
+ Channel *chan = channel_job_start(argv, CALLBACK_READER_INIT,
+ CALLBACK_READER_INIT, CALLBACK_NONE,
+ false, true, false, NULL, 0, 0, NULL,
+ &rettv->vval.v_number);
+ if (chan) {
+ channel_create_event(chan, NULL);
+ }
}
// "rpcstop()" function
@@ -16672,6 +16680,7 @@ static void f_termopen(typval_T *argvars, typval_T *rettv, FunPtr fptr)
api_clear_error(&err);
channel_terminal_open(chan);
+ channel_create_event(chan, NULL);
}
// "test_garbagecollect_now()" function