diff options
author | nicm <nicm> | 2019-05-25 10:44:09 +0000 |
---|---|---|
committer | nicm <nicm> | 2019-05-25 10:44:09 +0000 |
commit | d7586d3d65bb1361928205751ea7a69f69a4aa87 (patch) | |
tree | a2bdf9d4d8b3b5ecca462d8e1696d4d3fcc4932a | |
parent | f8d3d247d884a9dc0b23f2799944c15630cab28f (diff) | |
download | rtmux-d7586d3d65bb1361928205751ea7a69f69a4aa87.tar.gz rtmux-d7586d3d65bb1361928205751ea7a69f69a4aa87.tar.bz2 rtmux-d7586d3d65bb1361928205751ea7a69f69a4aa87.zip |
Use client name when logging command queue.
-rw-r--r-- | cmd-queue.c | 4 | ||||
-rw-r--r-- | cmd.c | 85 |
2 files changed, 84 insertions, 5 deletions
diff --git a/cmd-queue.c b/cmd-queue.c index 0cfa57fe..c707dd7b 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -32,11 +32,11 @@ static struct cmdq_list global_queue = TAILQ_HEAD_INITIALIZER(global_queue); static const char * cmdq_name(struct client *c) { - static char s[32]; + static char s[256]; if (c == NULL) return ("<global>"); - xsnprintf(s, sizeof s, "<%p>", c); + xsnprintf(s, sizeof s, "<%s>", c->name); return (s); } @@ -205,6 +205,8 @@ const struct cmd_entry *cmd_table[] = { NULL }; +static u_int cmd_list_next_group = 1; + void printflike(3, 4) cmd_log_argv(int argc, char **argv, const char *fmt, ...) { @@ -381,9 +383,9 @@ cmd_get_alias(const char *name) static const struct cmd_entry * cmd_find(const char *name, char **cause) { - const struct cmd_entry **loop, *entry, *found = NULL; - int ambiguous; - char s[BUFSIZ]; + const struct cmd_entry **loop, *entry, *found = NULL; + int ambiguous; + char s[BUFSIZ]; ambiguous = 0; for (loop = cmd_table; *loop != NULL; loop++) { @@ -502,6 +504,83 @@ cmd_print(struct cmd *cmd) return (out); } +struct cmd_list * +cmd_list_new(void) +{ + struct cmd_list *cmdlist; + + cmdlist = xcalloc(1, sizeof *cmdlist); + cmdlist->references = 1; + cmdlist->group = cmd_list_next_group++; + TAILQ_INIT(&cmdlist->list); + return (cmdlist); +} + +void +cmd_list_append(struct cmd_list *cmdlist, struct cmd *cmd) +{ + cmd->group = cmdlist->group; + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); +} + +void +cmd_list_move(struct cmd_list *cmdlist, struct cmd_list *from) +{ + struct cmd *cmd, *cmd1; + + TAILQ_FOREACH_SAFE(cmd, &from->list, qentry, cmd1) { + TAILQ_REMOVE(&from->list, cmd, qentry); + TAILQ_INSERT_TAIL(&cmdlist->list, cmd, qentry); + } + cmdlist->group = cmd_list_next_group++; +} + +void +cmd_list_free(struct cmd_list *cmdlist) +{ + struct cmd *cmd, *cmd1; + + if (--cmdlist->references != 0) + return; + + TAILQ_FOREACH_SAFE(cmd, &cmdlist->list, qentry, cmd1) { + TAILQ_REMOVE(&cmdlist->list, cmd, qentry); + cmd_free(cmd); + } + + free(cmdlist); +} + +char * +cmd_list_print(struct cmd_list *cmdlist, int escaped) +{ + struct cmd *cmd; + char *buf, *this; + size_t len; + + len = 1; + buf = xcalloc(1, len); + + TAILQ_FOREACH(cmd, &cmdlist->list, qentry) { + this = cmd_print(cmd); + + len += strlen(this) + 4; + buf = xrealloc(buf, len); + + strlcat(buf, this, len); + if (TAILQ_NEXT(cmd, qentry) != NULL) { + if (escaped) + strlcat(buf, " \\; ", len); + else + strlcat(buf, " ; ", len); + } + + free(this); + } + + return (buf); +} + /* Adjust current mouse position for a pane. */ int cmd_mouse_at(struct window_pane *wp, struct mouse_event *m, u_int *xp, |