=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-new-session.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- src/usr.bin/tmux/cmd-new-session.c 2009/08/21 11:36:08 1.15 +++ src/usr.bin/tmux/cmd-new-session.c 2009/08/23 17:37:48 1.16 @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-new-session.c,v 1.15 2009/08/21 11:36:08 nicm Exp $ */ +/* $OpenBSD: cmd-new-session.c,v 1.16 2009/08/23 17:37:48 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -114,6 +114,7 @@ { struct cmd_new_session_data *data = self->data; struct session *s; + struct window *w; struct environ env; struct termios tio; const char *update; @@ -186,18 +187,22 @@ } } - /* Find new session size and options. */ + /* Get the new session working directory. */ + if (ctx->cmdclient != NULL && ctx->cmdclient->cwd != NULL) + cwd = ctx->cmdclient->cwd; + else + cwd = options_get_string(&global_s_options, "default-path"); + + /* Find new session size. */ if (detached) { sx = 80; sy = 25; + } else if (ctx->cmdclient != NULL) { + sx = ctx->cmdclient->tty.sx; + sy = ctx->cmdclient->tty.sy; } else { - if (ctx->cmdclient != NULL) { - sx = ctx->cmdclient->tty.sx; - sy = ctx->cmdclient->tty.sy; - } else { - sx = ctx->curclient->tty.sx; - sy = ctx->curclient->tty.sy; - } + sx = ctx->curclient->tty.sx; + sy = ctx->curclient->tty.sy; } if (sy > 0 && options_get_number(&global_s_options, "status")) sy--; @@ -205,10 +210,8 @@ sx = 1; if (sy == 0) sy = 1; - if (ctx->cmdclient != NULL && ctx->cmdclient->cwd != NULL) - cwd = ctx->cmdclient->cwd; - else - cwd = options_get_string(&global_s_options, "default-path"); + + /* Figure out the command for the new window. */ if (data->cmd != NULL) cmd = data->cmd; else @@ -231,26 +234,23 @@ } environ_free(&env); + /* Set the initial window name if one given. */ if (data->winname != NULL) { - xfree(s->curw->window->name); - s->curw->window->name = xstrdup(data->winname); - options_set_number( - &s->curw->window->options, "automatic-rename", 0); + w = s->curw->window; + + xfree(w->name); + w->name = xstrdup(data->winname); + + options_set_number(&w->options, "automatic-rename", 0); } - /* - * If a command client exists, it is either taking this session (and - * needs to get MSG_READY and stay around), or -d is given and it needs - * to exit. + /* + * Set the client to the new session. If a command client exists, it is + * taking this session and needs to get MSG_READY and stay around. */ - if (ctx->cmdclient != NULL) { - if (!detached) - server_write_client(ctx->cmdclient, MSG_READY, NULL, 0); - } - - /* Set the client to the new session. */ if (!detached) { if (ctx->cmdclient != NULL) { + server_write_client(ctx->cmdclient, MSG_READY, NULL, 0); ctx->cmdclient->session = s; server_redraw_client(ctx->cmdclient); } else {