diff --git a/Makefile.am b/Makefile.am index 071c3a17..63e20b17 100644 --- a/Makefile.am +++ b/Makefile.am @@ -73,7 +73,6 @@ dist_tmux_SOURCES = \ cmd-choose-client.c \ cmd-choose-tree.c \ cmd-clear-history.c \ - cmd-clock-mode.c \ cmd-command-prompt.c \ cmd-confirm-before.c \ cmd-copy-mode.c \ diff --git a/cmd-clock-mode.c b/cmd-clock-mode.c deleted file mode 100644 index 80835813..00000000 --- a/cmd-clock-mode.c +++ /dev/null @@ -1,49 +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 "tmux.h" - -/* - * Enter clock mode. - */ - -enum cmd_retval cmd_clock_mode_exec(struct cmd *, struct cmd_q *); - -const struct cmd_entry cmd_clock_mode_entry = { - "clock-mode", NULL, - "t:", 0, 0, - CMD_TARGET_PANE_USAGE, - 0, - cmd_clock_mode_exec -}; - -enum cmd_retval -cmd_clock_mode_exec(struct cmd *self, struct cmd_q *cmdq) -{ - struct args *args = self->args; - struct window_pane *wp; - - if (cmd_find_pane(cmdq, args_get(args, 't'), NULL, &wp) == NULL) - return (CMD_RETURN_ERROR); - - window_pane_set_mode(wp, &window_clock_mode); - - return (CMD_RETURN_NORMAL); -} diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c index 89335296..b46a5a46 100644 --- a/cmd-copy-mode.c +++ b/cmd-copy-mode.c @@ -21,7 +21,7 @@ #include "tmux.h" /* - * Enter copy mode. + * Enter copy or clock mode. */ enum cmd_retval cmd_copy_mode_exec(struct cmd *, struct cmd_q *); @@ -34,6 +34,14 @@ const struct cmd_entry cmd_copy_mode_entry = { cmd_copy_mode_exec }; +const struct cmd_entry cmd_clock_mode_entry = { + "clock-mode", NULL, + "t:", 0, 0, + CMD_TARGET_PANE_USAGE, + 0, + cmd_copy_mode_exec +}; + enum cmd_retval cmd_copy_mode_exec(struct cmd *self, struct cmd_q *cmdq) { @@ -43,6 +51,11 @@ cmd_copy_mode_exec(struct cmd *self, struct cmd_q *cmdq) if (cmd_find_pane(cmdq, args_get(args, 't'), NULL, &wp) == NULL) return (CMD_RETURN_ERROR); + if (self->entry == &cmd_clock_mode_entry) { + window_pane_set_mode(wp, &window_clock_mode); + return (CMD_RETURN_NORMAL); + } + if (wp->mode != &window_copy_mode) { if (window_pane_set_mode(wp, &window_copy_mode) != 0) return (CMD_RETURN_NORMAL); diff --git a/cmd-queue.c b/cmd-queue.c index 58282c8f..6be532a8 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -163,6 +163,7 @@ cmdq_continue(struct cmd_q *cmdq) int empty, flags; char s[1024]; + cmdq->references++; notify_disable(); empty = TAILQ_EMPTY(&cmdq->queue); @@ -220,11 +221,13 @@ empty: if (cmdq->client_exit > 0) cmdq->client->flags |= CLIENT_EXIT; if (cmdq->emptyfn != NULL) - cmdq->emptyfn(cmdq); /* may free cmdq */ + cmdq->emptyfn(cmdq); empty = 1; out: notify_enable(); + cmdq_free(cmdq); + return (empty); } diff --git a/colour.c b/colour.c index 9e90596f..b5efd6f1 100644 --- a/colour.c +++ b/colour.c @@ -236,28 +236,28 @@ colour_fromstring(const char *s) if (strcasecmp(s, "default") == 0 || (s[0] == '8' && s[1] == '\0')) return (8); if (strcasecmp(s, "brightblack") == 0 || - (s[0] == '9' && s[1] == '0' && s[1] == '\0')) + (s[0] == '9' && s[1] == '0' && s[2] == '\0')) return (90); if (strcasecmp(s, "brightred") == 0 || - (s[0] == '9' && s[1] == '1' && s[1] == '\0')) + (s[0] == '9' && s[1] == '1' && s[2] == '\0')) return (91); if (strcasecmp(s, "brightgreen") == 0 || - (s[0] == '9' && s[1] == '2' && s[1] == '\0')) + (s[0] == '9' && s[1] == '2' && s[2] == '\0')) return (92); if (strcasecmp(s, "brightyellow") == 0 || - (s[0] == '9' && s[1] == '3' && s[1] == '\0')) + (s[0] == '9' && s[1] == '3' && s[2] == '\0')) return (93); if (strcasecmp(s, "brightblue") == 0 || - (s[0] == '9' && s[1] == '4' && s[1] == '\0')) + (s[0] == '9' && s[1] == '4' && s[2] == '\0')) return (94); if (strcasecmp(s, "brightmagenta") == 0 || - (s[0] == '9' && s[1] == '5' && s[1] == '\0')) + (s[0] == '9' && s[1] == '5' && s[2] == '\0')) return (95); if (strcasecmp(s, "brightcyan") == 0 || - (s[0] == '9' && s[1] == '6' && s[1] == '\0')) + (s[0] == '9' && s[1] == '6' && s[2] == '\0')) return (96); if (strcasecmp(s, "brightwhite") == 0 || - (s[0] == '9' && s[1] == '7' && s[1] == '\0')) + (s[0] == '9' && s[1] == '7' && s[2] == '\0')) return (97); return (-1); } diff --git a/status.c b/status.c index e7714a00..5f8895fb 100644 --- a/status.c +++ b/status.c @@ -758,9 +758,9 @@ status_prompt_set(struct client *c, const char *msg, const char *input, status_message_clear(c); status_prompt_clear(c); - c->prompt_string = format_expand_time(ft, msg, time(NULL)); + c->prompt_string = format_expand_time(ft, msg, t); - c->prompt_buffer = format_expand_time(ft, input, time(NULL)); + c->prompt_buffer = format_expand_time(ft, input, t); c->prompt_index = strlen(c->prompt_buffer); c->prompt_callbackfn = callbackfn; @@ -817,10 +817,10 @@ status_prompt_update(struct client *c, const char *msg, const char *input) t = time(NULL); free(c->prompt_string); - c->prompt_string = format_expand_time(ft, msg, time(NULL)); + c->prompt_string = format_expand_time(ft, msg, t); free(c->prompt_buffer); - c->prompt_buffer = format_expand_time(ft, input, time(NULL)); + c->prompt_buffer = format_expand_time(ft, input, t); c->prompt_index = strlen(c->prompt_buffer); c->prompt_hindex = 0; diff --git a/window.c b/window.c index 54129634..fff2cfc3 100644 --- a/window.c +++ b/window.c @@ -262,7 +262,7 @@ window_find_by_id(u_int id) for (i = 0; i < ARRAY_LENGTH(&windows); i++) { w = ARRAY_ITEM(&windows, i); - if (w->id == id) + if (w != NULL && w->id == id) return (w); } return (NULL);