diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2012-03-04 20:50:54 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2012-03-04 20:50:54 +0000 |
commit | d907bc452f1af1d063085211cefc0089f31444fe (patch) | |
tree | a5b6f76ad8c8a91aa0aa1cbe32152beb05ad3071 /usr.bin/tmux | |
parent | 916de1e83e43a622376a9b05ad5d61f3f74cc8d3 (diff) |
Add -F format to new-window and split-window to use with the -P flag,
from George Nachman.
Diffstat (limited to 'usr.bin/tmux')
-rw-r--r-- | usr.bin/tmux/cmd-new-window.c | 44 | ||||
-rw-r--r-- | usr.bin/tmux/cmd-split-window.c | 35 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.1 | 12 |
3 files changed, 67 insertions, 24 deletions
diff --git a/usr.bin/tmux/cmd-new-window.c b/usr.bin/tmux/cmd-new-window.c index 307e882a3ff..3419fc5fa03 100644 --- a/usr.bin/tmux/cmd-new-window.c +++ b/usr.bin/tmux/cmd-new-window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-new-window.c,v 1.20 2012/01/31 15:52:21 nicm Exp $ */ +/* $OpenBSD: cmd-new-window.c,v 1.21 2012/03/04 20:50:53 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -30,9 +30,9 @@ int cmd_new_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_new_window_entry = { "new-window", "neww", - "ac:dkn:Pt:", 0, 1, - "[-adk] [-c start-directory] [-n window-name] [-t target-window] " - "[command]", + "ac:dF:kn:Pt:", 0, 1, + "[-adkP] [-c start-directory] [-F format] [-n window-name] " + "[-t target-window] [command]", 0, NULL, NULL, @@ -42,12 +42,16 @@ const struct cmd_entry cmd_new_window_entry = { int cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) { - struct args *args = self->args; - struct session *s; - struct winlink *wl; - const char *cmd, *cwd; - char *cause; - int idx, last, detached; + struct args *args = self->args; + struct session *s; + struct winlink *wl; + struct client *c; + const char *cmd, *cwd; + const char *template; + char *cause; + int idx, last, detached; + struct format_tree *ft; + char *cp; if (args_has(args, 'a')) { wl = cmd_find_window(ctx, args_get(args, 't'), &s); @@ -116,7 +120,23 @@ cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx) } else server_status_session_group(s); - if (args_has(args, 'P')) - ctx->print(ctx, "%s:%u", s->name, wl->idx); + if (args_has(args, 'P')) { + template = "#{session_name}:#{window_index}"; + if (args_has(args, 'F')) + template = args_get(args, 'F'); + + ft = format_create(); + if ((c = cmd_find_client(ctx, NULL)) != NULL) + format_client(ft, c); + format_session(ft, s); + format_winlink(ft, s, wl); + + cp = format_expand(ft, template); + ctx->print(ctx, "%s", cp); + free(cp); + + format_free(ft); + } + return (0); } diff --git a/usr.bin/tmux/cmd-split-window.c b/usr.bin/tmux/cmd-split-window.c index 0f87e19443c..da7cc336fea 100644 --- a/usr.bin/tmux/cmd-split-window.c +++ b/usr.bin/tmux/cmd-split-window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-split-window.c,v 1.29 2012/03/03 08:31:18 nicm Exp $ */ +/* $OpenBSD: cmd-split-window.c,v 1.30 2012/03/04 20:50:53 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -33,9 +33,9 @@ int cmd_split_window_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_split_window_entry = { "split-window", "splitw", - "c:dl:hp:Pt:v", 0, 1, - "[-dhvP] [-c start-directory] [-p percentage|-l size] [-t target-pane] " - "[command]", + "c:dF:l:hp:Pt:v", 0, 1, + "[-dhvP] [-c start-directory] [-F format] [-p percentage|-l size] " + "[-t target-pane] [command]", 0, cmd_split_window_key_binding, NULL, @@ -59,12 +59,16 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) struct window *w; struct window_pane *wp, *new_wp = NULL; struct environ env; - const char *cmd, *cwd, *shell; + const char *cmd, *cwd, *shell; char *cause, *new_cause; - u_int hlimit, paneidx; + u_int hlimit; int size, percentage; enum layout_type type; struct layout_cell *lc; + const char *template; + struct client *c; + struct format_tree *ft; + char *cp; if ((wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp)) == NULL) return (-1); @@ -135,9 +139,22 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx) environ_free(&env); if (args_has(args, 'P')) { - if (window_pane_index(new_wp, &paneidx) != 0) - fatalx("index not found"); - ctx->print(ctx, "%s:%u.%u", s->name, wl->idx, paneidx); + template = "#{session_name}:#{window_index}.#{pane_index}"; + if (args_has(args, 'F')) + template = args_get(args, 'F'); + + ft = format_create(); + if ((c = cmd_find_client(ctx, NULL)) != NULL) + format_client(ft, c); + format_session(ft, s); + format_winlink(ft, s, wl); + format_window_pane(ft, new_wp); + + cp = format_expand(ft, template); + ctx->print(ctx, "%s", cp); + free(cp); + + format_free(ft); } return (0); diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index 777731bf9a2..4e894d73440 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.278 2012/03/03 09:43:22 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.279 2012/03/04 20:50:53 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: March 3 2012 $ +.Dd $Mdocdate: March 4 2012 $ .Dt TMUX 1 .Os .Sh NAME @@ -1249,6 +1249,7 @@ is moved to .Op Fl c Ar start-directory .Op Fl n Ar window-name .Op Fl t Ar target-window +.Op Fl F Ar format .Op Ar shell-command .Xc .D1 (alias: Ic neww ) @@ -1306,7 +1307,11 @@ start-up files. .Pp The .Fl P -option prints the location of the new window after it has been created. +option prints information about the new window after it has been created. +By default, it uses the format +.Ql #{session_name}:#{window_index} +but a different format may be specified with +.Fl F . .It Ic next-layout Op Fl t Ar target-window .D1 (alias: Ic nextl ) Move a window to the next layout and rearrange the panes to fit. @@ -1491,6 +1496,7 @@ commands. .Fl p Ar percentage Oc .Op Fl t Ar target-pane .Op Ar shell-command +.Op Fl F Ar format .Xc .D1 (alias: Ic splitw ) Create a new pane by splitting |