diff --git a/Makefile.am b/Makefile.am index ceaae6ad..2b88892f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -88,7 +88,6 @@ dist_tmux_SOURCES = \ cmd-list-panes.c \ cmd-list-sessions.c \ cmd-list-windows.c \ - cmd-list.c \ cmd-load-buffer.c \ cmd-lock-server.c \ cmd-move-window.c \ diff --git a/cmd-list.c b/cmd-list.c deleted file mode 100644 index 82ffe55c..00000000 --- a/cmd-list.c +++ /dev/null @@ -1,103 +0,0 @@ -/* $OpenBSD$ */ - -/* - * Copyright (c) 2009 Nicholas Marriott - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include - -#include -#include - -#include "tmux.h" - -static u_int cmd_list_next_group = 1; - -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); -} diff --git a/cmd.c b/cmd.c index 81073ec1..74d2f5ef 100644 --- a/cmd.c +++ b/cmd.c @@ -204,6 +204,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, ...) { @@ -501,6 +503,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,