Add a helper function to open the terminal for attach-/new-session.

This commit is contained in:
Nicholas Marriott 2012-05-06 07:38:17 +00:00
parent 218b692221
commit 37f9bb46d8
4 changed files with 25 additions and 19 deletions

View File

@ -43,7 +43,7 @@ cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx)
struct session *s;
struct client *c;
const char *update;
char *overrides, *cause;
char *cause;
u_int i;
if (RB_EMPTY(&sessions)) {
@ -79,15 +79,8 @@ cmd_attach_session_exec(struct cmd *self, struct cmd_ctx *ctx)
server_redraw_client(ctx->curclient);
s->curw->flags &= ~WINLINK_ALERTFLAGS;
} else {
if (!(ctx->cmdclient->flags & CLIENT_TERMINAL)) {
ctx->error(ctx, "not a terminal");
return (-1);
}
overrides =
options_get_string(&s->options, "terminal-overrides");
if (tty_open(&ctx->cmdclient->tty, overrides, &cause) != 0) {
ctx->error(ctx, "terminal open failed: %s", cause);
if (server_client_open(ctx->cmdclient, s, &cause) != 0) {
ctx->error(ctx, "open terminal failed: %s", cause);
xfree(cause);
return (-1);
}

View File

@ -63,7 +63,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
struct termios tio, *tiop;
struct passwd *pw;
const char *newname, *target, *update, *cwd, *errstr;
char *overrides, *cmd, *cause;
char *cmd, *cause;
int detached, idx;
u_int sx, sy, i;
@ -128,14 +128,7 @@ cmd_new_session_exec(struct cmd *self, struct cmd_ctx *ctx)
/* Open the terminal if necessary. */
if (!detached && ctx->cmdclient != NULL) {
if (!(ctx->cmdclient->flags & CLIENT_TERMINAL)) {
ctx->error(ctx, "not a terminal");
return (-1);
}
overrides =
options_get_string(&global_s_options, "terminal-overrides");
if (tty_open(&ctx->cmdclient->tty, overrides, &cause) != 0) {
if (server_client_open(ctx->cmdclient, NULL, &cause) != 0) {
ctx->error(ctx, "open terminal failed: %s", cause);
xfree(cause);
return (-1);

View File

@ -105,6 +105,25 @@ server_client_create(int fd)
log_debug("new client %d", fd);
}
/* Open client terminal if needed. */
int
server_client_open(struct client *c, struct session *s, char **cause)
{
struct options *oo = s != NULL ? &s->options : &global_s_options;
char *overrides;
if (!(c->flags & CLIENT_TERMINAL)) {
*cause = xstrdup ("not a terminal");
return (-1);
}
overrides = options_get_string(oo, "terminal-overrides");
if (tty_open(&c->tty, overrides, cause) != 0)
return (-1);
return (0);
}
/* Lost a client. */
void
server_client_lost(struct client *c)

1
tmux.h
View File

@ -1723,6 +1723,7 @@ void server_add_accept(int);
/* server-client.c */
void server_client_create(int);
int server_client_open(struct client *, struct session *, char **);
void server_client_lost(struct client *);
void server_client_callback(int, short, void *);
void server_client_status_timer(void);