summaryrefslogtreecommitdiffstats
path: root/cmd-show-messages.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2014-01-31 21:39:56 +0000
committerThomas Adam <thomas@xteddy.org>2014-01-31 21:39:56 +0000
commitd50e47fc4ab5cbbdbe6bbebdc2c36ce3aae6e987 (patch)
tree397f4999444c2eef367f884b815bec2a14697c3c /cmd-show-messages.c
parentcbf9224c5f7bcf07352f6ea128c90c12cb0af22e (diff)
parent9f02feb9d089b1a4639afb52ab0e8212eeb55a7c (diff)
Merge branch 'obsd-master'
Conflicts: Makefile cmd-server-info.c cmd-start-server.c
Diffstat (limited to 'cmd-show-messages.c')
-rw-r--r--cmd-show-messages.c112
1 files changed, 110 insertions, 2 deletions
diff --git a/cmd-show-messages.c b/cmd-show-messages.c
index 256570cd..393ed789 100644
--- a/cmd-show-messages.c
+++ b/cmd-show-messages.c
@@ -20,6 +20,8 @@
#include <string.h>
#include <time.h>
+#include <unistd.h>
+#include <vis.h>
#include "tmux.h"
@@ -31,13 +33,98 @@ enum cmd_retval cmd_show_messages_exec(struct cmd *, struct cmd_q *);
const struct cmd_entry cmd_show_messages_entry = {
"show-messages", "showmsgs",
- "t:", 0, 0,
- CMD_TARGET_CLIENT_USAGE,
+ "IJTt:", 0, 0,
+ "[-IJT] " CMD_TARGET_CLIENT_USAGE,
0,
NULL,
cmd_show_messages_exec
};
+const struct cmd_entry cmd_server_info_entry = {
+ "server-info", "info",
+ "", 0, 0,
+ "",
+ 0,
+ NULL,
+ cmd_show_messages_exec
+};
+
+void cmd_show_messages_server (struct cmd_q *);
+void cmd_show_messages_terminals (struct cmd_q *);
+void cmd_show_messages_jobs (struct cmd_q *);
+
+void
+cmd_show_messages_server (struct cmd_q *cmdq)
+{
+ char *tim;
+
+ tim = ctime(&start_time);
+ *strchr(tim, '\n') = '\0';
+
+ cmdq_print(cmdq, "started %s", tim);
+ cmdq_print(cmdq, "socket path %s", socket_path);
+ cmdq_print(cmdq, "debug level %d", debug_level);
+ cmdq_print(cmdq, "protocol version %d", PROTOCOL_VERSION);
+}
+
+void
+cmd_show_messages_terminals (struct cmd_q *cmdq)
+{
+ struct tty_term *term;
+ const struct tty_term_code_entry *ent;
+ struct tty_code *code;
+ u_int i, n;
+ char out[80];
+
+ n = 0;
+ LIST_FOREACH(term, &tty_terms, entry) {
+ cmdq_print(cmdq,
+ "Terminal %u: %s [references=%u, flags=0x%x]:",
+ n, term->name, term->references, term->flags);
+ n++;
+ for (i = 0; i < NTTYCODE; i++) {
+ ent = &tty_term_codes[i];
+ code = &term->codes[ent->code];
+ switch (code->type) {
+ case TTYCODE_NONE:
+ cmdq_print(cmdq, "%4u: %s: [missing]",
+ ent->code, ent->name);
+ break;
+ case TTYCODE_STRING:
+ strnvis(out, code->value.string, sizeof out,
+ VIS_OCTAL|VIS_TAB|VIS_NL);
+ cmdq_print(cmdq, "%4u: %s: (string) %s",
+ ent->code, ent->name, out);
+ break;
+ case TTYCODE_NUMBER:
+ cmdq_print(cmdq, "%4u: %s: (number) %d",
+ ent->code, ent->name, code->value.number);
+ break;
+ case TTYCODE_FLAG:
+ cmdq_print(cmdq, "%4u: %s: (flag) %s",
+ ent->code, ent->name,
+ code->value.flag ? "true" : "false");
+ break;
+ }
+ }
+ }
+}
+
+void
+cmd_show_messages_jobs (struct cmd_q *cmdq)
+{
+ struct job *job;
+ u_int n;
+
+ n = 0;
+ LIST_FOREACH(job, &all_jobs, lentry) {
+ cmdq_print(cmdq,
+ "Job %u: %s [fd=%d, pid=%d, status=%d]",
+ n, job->cmd, job->fd, job->pid, job->status);
+ n++;
+ }
+}
+
enum cmd_retval
cmd_show_messages_exec(struct cmd *self, struct cmd_q *cmdq)
{
@@ -46,6 +133,27 @@ cmd_show_messages_exec(struct cmd *self, struct cmd_q *cmdq)
struct message_entry *msg;
char *tim;
u_int i;
+ int done;
+
+ done = 0;
+ if (args_has (args, 'I') || self->entry == &cmd_server_info_entry) {
+ cmd_show_messages_server (cmdq);
+ done = 1;
+ }
+ if (args_has (args, 'T') || self->entry == &cmd_server_info_entry) {
+ if (done)
+ cmdq_print (cmdq, "%s", "");
+ cmd_show_messages_terminals (cmdq);
+ done = 1;
+ }
+ if (args_has (args, 'J') || self->entry == &cmd_server_info_entry) {
+ if (done)
+ cmdq_print (cmdq, "%s", "");
+ cmd_show_messages_jobs (cmdq);
+ done = 1;
+ }
+ if (done)
+ return (CMD_RETURN_NORMAL);
if ((c = cmd_find_client(cmdq, args_get(args, 't'), 0)) == NULL)
return (CMD_RETURN_ERROR);