summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/cmd-display-message.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2012-02-23 22:40:59 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2012-02-23 22:40:59 +0000
commit6428e8f7531a5d373ba3bbcdfb996d324c777976 (patch)
tree0288d762c9d5245dbf343132110cc865975f3f82 /usr.bin/tmux/cmd-display-message.c
parentfb47d5e42efc0737d910b8ac0af506513f19de4a (diff)
Use format for display-message, based on a diff from George Nachman.
Diffstat (limited to 'usr.bin/tmux/cmd-display-message.c')
-rw-r--r--usr.bin/tmux/cmd-display-message.c40
1 files changed, 29 insertions, 11 deletions
diff --git a/usr.bin/tmux/cmd-display-message.c b/usr.bin/tmux/cmd-display-message.c
index 03de7d1e0cf..352a31e1304 100644
--- a/usr.bin/tmux/cmd-display-message.c
+++ b/usr.bin/tmux/cmd-display-message.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-display-message.c,v 1.10 2011/04/06 11:36:26 miod Exp $ */
+/* $OpenBSD: cmd-display-message.c,v 1.11 2012/02/23 22:40:58 nicm Exp $ */
/*
* Copyright (c) 2009 Tiago Cunha <me@tiagocunha.org>
@@ -30,8 +30,8 @@ int cmd_display_message_exec(struct cmd *, struct cmd_ctx *);
const struct cmd_entry cmd_display_message_entry = {
"display-message", "display",
- "c:pt:", 0, 1,
- "[-p] [-c target-client] [-t target-pane] [message]",
+ "c:pt:F:", 0, 1,
+ "[-p] [-c target-client] [-t target-pane] [-F format] [message]",
0,
NULL,
NULL,
@@ -48,26 +48,44 @@ cmd_display_message_exec(struct cmd *self, struct cmd_ctx *ctx)
struct window_pane *wp;
const char *template;
char *msg;
+ struct format_tree *ft;
+ char out[BUFSIZ];
+ time_t t;
if ((c = cmd_find_client(ctx, args_get(args, 'c'))) == NULL)
return (-1);
- if (args_has(args, 't') != 0) {
+ if (args_has(args, 't')) {
wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp);
if (wl == NULL)
return (-1);
} else {
- s = NULL;
- wl = NULL;
- wp = NULL;
+ wl = cmd_find_pane(ctx, NULL, &s, &wp);
+ if (wl == NULL)
+ return (-1);
}
- if (args->argc == 0)
- template = "[#S] #I:#W, current pane #P - (%H:%M %d-%b-%y)";
- else
+ if (args_has(args, 'F') && args->argc != 0) {
+ ctx->error(ctx, "only one of -F or argument must be given");
+ return (-1);
+ }
+
+ template = args_get(args, 'F');
+ if (args->argc != 0)
template = args->argv[0];
+ if (template == NULL)
+ template = "[#S] #I:#W, current pane #P - (%H:%M %d-%b-%y)";
+
+ ft = format_create();
+ format_client(ft, c);
+ format_session(ft, s);
+ format_winlink(ft, s, wl);
+ format_window_pane(ft, wp);
+
+ t = time(NULL);
+ strftime(out, sizeof out, template, localtime(&t));
- msg = status_replace(c, s, wl, wp, template, time(NULL), 0);
+ msg = format_expand(ft, out);
if (args_has(self->args, 'p'))
ctx->print(ctx, "%s", msg);
else