diff --git a/cmd-new-session.c b/cmd-new-session.c index f08155c0..9815e1e1 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -39,10 +39,10 @@ const struct cmd_entry cmd_new_session_entry = { .name = "new-session", .alias = "new", - .args = { "Ac:dDEF:n:Ps:t:x:Xy:", 0, -1 }, - .usage = "[-AdDEPX] [-c start-directory] [-F format] [-n window-name] " - "[-s session-name] " CMD_TARGET_SESSION_USAGE " [-x width] " - "[-y height] [command]", + .args = { "Ac:dDe:EF:n:Ps:t:x:Xy:", 0, -1 }, + .usage = "[-AdDEPX] [-c start-directory] [-e environment] [-F format] " + "[-n window-name] [-s session-name] " + CMD_TARGET_SESSION_USAGE " [-x width] [-y height] [command]", .target = { 't', CMD_FIND_SESSION, CMD_FIND_CANFAIL }, @@ -75,7 +75,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) struct options *oo; struct termios tio, *tiop; struct session_group *sg = NULL; - const char *errstr, *template, *group, *tmp; + const char *errstr, *template, *group, *tmp, *add; char *cause, *cwd = NULL, *cp, *newname = NULL; char *name, *prefix = NULL; int detached, already_attached, is_control = 0; @@ -83,6 +83,7 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) struct spawn_context sc; enum cmd_retval retval; struct cmd_find_state fs; + struct args_value *value; if (cmd_get_entry(self) == &cmd_has_session_entry) { /* @@ -254,6 +255,11 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) env = environ_create(); if (c != NULL && !args_has(args, 'E')) environ_update(global_s_options, c->environ, env); + add = args_first_value(args, 'e', &value); + while (add != NULL) { + environ_put(env, add, 0); + add = args_next_value(&value); + } s = session_create(prefix, newname, cwd, env, oo, tiop); /* Spawn the initial window. */ diff --git a/tmux.1 b/tmux.1 index d0c4f25b..5b7bb3db 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1094,6 +1094,7 @@ Lock all clients attached to .It Xo Ic new-session .Op Fl AdDEPX .Op Fl c Ar start-directory +.Op Fl e Ar environment .Op Fl F Ar format .Op Fl n Ar window-name .Op Fl s Ar session-name @@ -1200,6 +1201,11 @@ If is used, the .Ic update-environment option will not be applied. +.Fl e +takes the form +.Ql VARIABLE=value +and sets an environment variable for the newly created session; it may be +specified multiple times. .It Xo Ic refresh-client .Op Fl cDlLRSU .Op Fl C Ar XxY