From 7f191c7951e54f635fc55a4c409bef3060eaacfb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 22 Mar 2013 17:01:15 +0000 Subject: [PATCH] Add -P and -F to new-session. --- cmd-new-session.c | 50 ++++++++++++++++++++++++++++++++--------------- cmd-new-window.c | 6 ++---- tmux.1 | 13 ++++++++++-- tmux.h | 1 + 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/cmd-new-session.c b/cmd-new-session.c index 3b1e917f..4eebe632 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -35,9 +35,9 @@ enum cmd_retval cmd_new_session_exec(struct cmd *, struct cmd_q *); const struct cmd_entry cmd_new_session_entry = { "new-session", "new", - "AdDn:s:t:x:y:", 0, 1, - "[-AdD] [-n window-name] [-s session-name] " CMD_TARGET_SESSION_USAGE - " [-x width] [-y height] [command]", + "AdDF:n:Ps:t:x:y:", 0, 1, + "[-AdDP] [-F format] [-n window-name] [-s session-name] " + CMD_TARGET_SESSION_USAGE " [-x width] [-y height] [command]", CMD_STARTSERVER|CMD_CANTNEST|CMD_SENDENVIRON, NULL, cmd_new_session_check, @@ -55,19 +55,20 @@ cmd_new_session_check(struct args *args) enum cmd_retval cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq) { - struct args *args = self->args; - struct client *c = cmdq->client; - struct session *s, *groupwith; - struct window *w; - struct environ env; - struct termios tio, *tiop; - struct passwd *pw; - const char *newname, *target, *update, *cwd, *errstr; - char *cmd, *cause; - int detached, idx; - u_int sx, sy; - int already_attached; - + struct args *args = self->args; + struct client *c = cmdq->client; + struct session *s, *groupwith; + struct window *w; + struct environ env; + struct termios tio, *tiop; + struct passwd *pw; + const char *newname, *target, *update, *cwd, *errstr; + const char *template; + char *cmd, *cause, *cp; + int detached, idx; + u_int sx, sy; + int already_attached; + struct format_tree *ft; newname = args_get(args, 's'); if (newname != NULL) { @@ -233,6 +234,23 @@ cmd_new_session_exec(struct cmd *self, struct cmd_q *cmdq) if (cfg_finished) cfg_show_causes(s); + /* Print if requested. */ + if (args_has(args, 'P')) { + if ((template = args_get(args, 'F')) == NULL) + template = NEW_SESSION_TEMPLATE; + + ft = format_create(); + if ((c = cmd_find_client(cmdq, NULL, 1)) != NULL) + format_client(ft, c); + format_session(ft, s); + + cp = format_expand(ft, template); + cmdq_print(cmdq, "%s", cp); + free(cp); + + format_free(ft); + } + if (!detached) cmdq->client_exit = 0; return (CMD_RETURN_NORMAL); diff --git a/cmd-new-window.c b/cmd-new-window.c index 28cc0884..cfc0b8bd 100644 --- a/cmd-new-window.c +++ b/cmd-new-window.c @@ -46,12 +46,10 @@ cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq) struct session *s; struct winlink *wl; struct client *c; - const char *cmd, *cwd; - const char *template; - char *cause; + const char *cmd, *cwd, *template; + char *cause, *cp; int idx, last, detached; struct format_tree *ft; - char *cp; if (args_has(args, 'a')) { wl = cmd_find_window(cmdq, args_get(args, 't'), &s); diff --git a/tmux.1 b/tmux.1 index cd9637b9..395bc538 100644 --- a/tmux.1 +++ b/tmux.1 @@ -675,7 +675,8 @@ command. Lock all clients attached to .Ar target-session . .It Xo Ic new-session -.Op Fl AdD +.Op Fl AdDP +.Op Fl F Ar format .Op Fl n Ar window-name .Op Fl s Ar session-name .Op Fl t Ar target-session @@ -740,6 +741,14 @@ or are invalid if .Fl t is used. +.Pp +The +.Fl P +option prints information about the new session after it has been created. +By default, it uses the format +.Ql #{session_name}: +but a different format may be specified with +.Fl F . .It Xo Ic refresh-client .Op Fl S .Op Fl t Ar target-client @@ -1470,9 +1479,9 @@ option. .It Xo Ic new-window .Op Fl adkP .Op Fl c Ar start-directory +.Op Fl F Ar format .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 ) diff --git a/tmux.h b/tmux.h index 834ac6e5..9c91d6a4 100644 --- a/tmux.h +++ b/tmux.h @@ -155,6 +155,7 @@ extern char **environ; /* Default templates for break-pane, new-window and split-window. */ #define BREAK_PANE_TEMPLATE "#{session_name}:#{window_index}.#{pane_index}" +#define NEW_SESSION_TEMPLATE "#{session_name}:" #define NEW_WINDOW_TEMPLATE BREAK_PANE_TEMPLATE #define SPLIT_WINDOW_TEMPLATE BREAK_PANE_TEMPLATE