summaryrefslogtreecommitdiffstats
path: root/server.c
diff options
context:
space:
mode:
authornicm <nicm>2020-05-16 15:47:22 +0000
committernicm <nicm>2020-05-16 15:47:22 +0000
commit367b4e4e0f1d78589398cddb609b33be870af30c (patch)
treea45a113764f1473a42f0611ca98e18b6a0164eda /server.c
parent4de0bd4c5c9eec6dd71cac87b91e736944896c22 (diff)
Change message log to be per server rather than per client and include
every command that is run.
Diffstat (limited to 'server.c')
-rw-r--r--server.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/server.c b/server.c
index be655b6a..a4216b87 100644
--- a/server.c
+++ b/server.c
@@ -51,6 +51,9 @@ static struct event server_ev_accept;
struct cmd_find_state marked_pane;
+static u_int message_next;
+struct message_list message_log;
+
static int server_loop(void);
static void server_send_exit(void);
static void server_accept(int, short, void *);
@@ -195,6 +198,7 @@ server_start(struct tmuxproc *client, int flags, struct event_base *base,
TAILQ_INIT(&clients);
RB_INIT(&sessions);
key_bindings_init();
+ TAILQ_INIT(&message_log);
gettimeofday(&start_time, NULL);
@@ -483,3 +487,34 @@ server_child_stopped(pid_t pid, int status)
}
job_check_died(pid, status);
}
+
+/* Add to message log. */
+void
+server_add_message(const char *fmt, ...)
+{
+ struct message_entry *msg, *msg1;
+ char *s;
+ va_list ap;
+ u_int limit;
+
+ va_start(ap, fmt);
+ xvasprintf(&s, fmt, ap);
+ va_end(ap);
+
+ log_debug("message: %s", s);
+
+ msg = xcalloc(1, sizeof *msg);
+ gettimeofday(&msg->msg_time, NULL);
+ msg->msg_num = message_next++;
+ msg->msg = s;
+ TAILQ_INSERT_TAIL(&message_log, msg, entry);
+
+ limit = options_get_number(global_options, "message-limit");
+ TAILQ_FOREACH_SAFE(msg, &message_log, entry, msg1) {
+ if (msg->msg_num + limit >= message_next)
+ break;
+ free(msg->msg);
+ TAILQ_REMOVE(&message_log, msg, entry);
+ free(msg);
+ }
+}