=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-attach-session.c,v retrieving revision 1.22 retrieving revision 1.23 diff -c -r1.22 -r1.23 *** src/usr.bin/tmux/cmd-attach-session.c 2012/07/11 07:10:15 1.22 --- src/usr.bin/tmux/cmd-attach-session.c 2013/03/24 09:54:10 1.23 *************** *** 1,4 **** ! /* $OpenBSD: cmd-attach-session.c,v 1.22 2012/07/11 07:10:15 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-attach-session.c,v 1.23 2013/03/24 09:54:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 26,32 **** * Attach existing session to the current terminal. */ ! enum cmd_retval cmd_attach_session_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_attach_session_entry = { "attach-session", "attach", --- 26,32 ---- * Attach existing session to the current terminal. */ ! enum cmd_retval cmd_attach_session_exec(struct cmd *, struct cmd_q *); const struct cmd_entry cmd_attach_session_entry = { "attach-session", "attach", *************** *** 39,45 **** }; enum cmd_retval ! cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx) { struct args *args = self->args; struct session *s; --- 39,45 ---- }; enum cmd_retval ! cmd_attach_session_exec(struct cmd *self, struct cmd_q *cmdq) { struct args *args = self->args; struct session *s; *************** *** 49,65 **** u_int i; if (RB_EMPTY(&sessions)) { ! ctx->error(ctx, "no sessions"); return (CMD_RETURN_ERROR); } ! if ((s = cmd_find_session(ctx, args_get(args, 't'), 1)) == NULL) return (CMD_RETURN_ERROR); ! if (ctx->cmdclient == NULL && ctx->curclient == NULL) return (CMD_RETURN_NORMAL); ! if (ctx->cmdclient == NULL) { if (args_has(self->args, 'd')) { /* * Can't use server_write_session in case attaching to --- 49,65 ---- u_int i; if (RB_EMPTY(&sessions)) { ! cmdq_error(cmdq, "no sessions"); return (CMD_RETURN_ERROR); } ! if ((s = cmd_find_session(cmdq, args_get(args, 't'), 1)) == NULL) return (CMD_RETURN_ERROR); ! if (cmdq->client == NULL) return (CMD_RETURN_NORMAL); ! if (cmdq->client->session != NULL) { if (args_has(self->args, 'd')) { /* * Can't use server_write_session in case attaching to *************** *** 69,111 **** c = ARRAY_ITEM(&clients, i); if (c == NULL || c->session != s) continue; ! if (c == ctx->curclient) continue; server_write_client(c, MSG_DETACH, NULL, 0); } } ! ctx->curclient->session = s; ! notify_attached_session_changed(ctx->curclient); session_update_activity(s); ! server_redraw_client(ctx->curclient); s->curw->flags &= ~WINLINK_ALERTFLAGS; } else { ! if (server_client_open(ctx->cmdclient, s, &cause) != 0) { ! ctx->error(ctx, "open terminal failed: %s", cause); free(cause); return (CMD_RETURN_ERROR); } if (args_has(self->args, 'r')) ! ctx->cmdclient->flags |= CLIENT_READONLY; if (args_has(self->args, 'd')) server_write_session(s, MSG_DETACH, NULL, 0); - ctx->cmdclient->session = s; - notify_attached_session_changed(ctx->cmdclient); - session_update_activity(s); - server_write_ready(ctx->cmdclient); - update = options_get_string(&s->options, "update-environment"); ! environ_update(update, &ctx->cmdclient->environ, &s->environ); ! server_redraw_client(ctx->cmdclient); s->curw->flags &= ~WINLINK_ALERTFLAGS; } recalculate_sizes(); server_update_socket(); ! return (CMD_RETURN_ATTACH); } --- 69,112 ---- c = ARRAY_ITEM(&clients, i); if (c == NULL || c->session != s) continue; ! if (c == cmdq->client) continue; server_write_client(c, MSG_DETACH, NULL, 0); } } ! cmdq->client->session = s; ! notify_attached_session_changed(cmdq->client); session_update_activity(s); ! server_redraw_client(cmdq->client); s->curw->flags &= ~WINLINK_ALERTFLAGS; } else { ! if (server_client_open(cmdq->client, s, &cause) != 0) { ! cmdq_error(cmdq, "open terminal failed: %s", cause); free(cause); return (CMD_RETURN_ERROR); } if (args_has(self->args, 'r')) ! cmdq->client->flags |= CLIENT_READONLY; if (args_has(self->args, 'd')) server_write_session(s, MSG_DETACH, NULL, 0); update = options_get_string(&s->options, "update-environment"); ! environ_update(update, &cmdq->client->environ, &s->environ); ! cmdq->client->session = s; ! notify_attached_session_changed(cmdq->client); ! session_update_activity(s); ! server_redraw_client(cmdq->client); s->curw->flags &= ~WINLINK_ALERTFLAGS; + + server_write_ready(cmdq->client); + cmdq->client_exit = 0; } recalculate_sizes(); server_update_socket(); ! return (CMD_RETURN_NORMAL); }