aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server-client.c13
-rw-r--r--tmux.c19
2 files changed, 18 insertions, 14 deletions
diff --git a/server-client.c b/server-client.c
index 883d47fc..ff633d0b 100644
--- a/server-client.c
+++ b/server-client.c
@@ -1,4 +1,4 @@
-/* $Id: server-client.c,v 1.29 2010-01-08 16:35:38 tcunha Exp $ */
+/* $Id: server-client.c,v 1.30 2010-02-08 18:25:04 tcunha Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -692,17 +692,6 @@ server_client_msg_command(struct client *c, struct msg_command_data *data)
}
cmd_free_argv(argc, argv);
- if (data->pid != -1) {
- TAILQ_FOREACH(cmd, cmdlist, qentry) {
- if (cmd->entry->flags & CMD_CANTNEST) {
- server_client_msg_error(&ctx,
- "sessions should be nested with care. "
- "unset $TMUX to force");
- goto error;
- }
- }
- }
-
if (cmd_list_exec(cmdlist, &ctx) != 1)
server_write_client(c, MSG_EXIT, NULL, 0);
cmd_list_free(cmdlist);
diff --git a/tmux.c b/tmux.c
index d5818fde..e857421f 100644
--- a/tmux.c
+++ b/tmux.c
@@ -1,4 +1,4 @@
-/* $Id: tmux.c,v 1.201 2010-02-08 18:23:48 tcunha Exp $ */
+/* $Id: tmux.c,v 1.202 2010-02-08 18:25:04 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -487,6 +487,7 @@ main(int argc, char **argv)
cmddata.pid = envdata.pid;
cmddata.idx = envdata.idx;
+ /* Prepare command for server. */
cmddata.argc = argc;
if (cmd_pack_argv(
argc, argv, cmddata.argv, sizeof cmddata.argv) != 0) {
@@ -502,7 +503,7 @@ main(int argc, char **argv)
if (shellcmd != NULL)
cmdflags |= CMD_STARTSERVER;
else if (argc == 0) /* new-session is the default */
- cmdflags |= CMD_STARTSERVER|CMD_SENDENVIRON;
+ cmdflags |= CMD_STARTSERVER|CMD_SENDENVIRON|CMD_CANTNEST;
else {
/*
* It sucks parsing the command string twice (in client and
@@ -519,10 +520,24 @@ main(int argc, char **argv)
cmdflags |= CMD_STARTSERVER;
if (cmd->entry->flags & CMD_SENDENVIRON)
cmdflags |= CMD_SENDENVIRON;
+ if (cmd->entry->flags & CMD_CANTNEST)
+ cmdflags |= CMD_CANTNEST;
}
cmd_list_free(cmdlist);
}
+ /*
+ * Check if this could be a nested session, if the command can't nest:
+ * if the socket path matches $TMUX, this is probably the same server.
+ */
+ if (shellcmd == NULL && envdata.path != NULL &&
+ cmdflags & CMD_CANTNEST &&
+ (path == envdata.path || strcmp(path, envdata.path) == 0)) {
+ log_warnx("sessions should be nested with care. "
+ "unset $TMUX to force.");
+ exit(1);
+ }
+
if ((main_ibuf = client_init(path, cmdflags, flags)) == NULL)
exit(1);
xfree(path);