diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2012-05-06 07:38:17 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2012-05-06 07:38:17 +0000 |
commit | 37f9bb46d815e8ba6377c3435d72c052267831ed (patch) | |
tree | 9dc322b5aed567b82b0b4ac1c1b7f5d1f028bb03 | |
parent | 218b692221b9dd675275ec353364910dfc072151 (diff) | |
download | rtmux-37f9bb46d815e8ba6377c3435d72c052267831ed.tar.gz rtmux-37f9bb46d815e8ba6377c3435d72c052267831ed.tar.bz2 rtmux-37f9bb46d815e8ba6377c3435d72c052267831ed.zip |
Add a helper function to open the terminal for attach-/new-session.
-rw-r--r-- | cmd-attach-session.c | 13 | ||||
-rw-r--r-- | cmd-new-session.c | 11 | ||||
-rw-r--r-- | server-client.c | 19 | ||||
-rw-r--r-- | tmux.h | 1 |
4 files changed, 25 insertions, 19 deletions
diff --git a/cmd-attach-session.c b/cmd-attach-session.c index bdf3568e..c4ee2437 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -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); } diff --git a/cmd-new-session.c b/cmd-new-session.c index d40b5095..c078d1d2 100644 --- a/cmd-new-session.c +++ b/cmd-new-session.c @@ -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); diff --git a/server-client.c b/server-client.c index b7212379..2cbb5bf3 100644 --- a/server-client.c +++ b/server-client.c @@ -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) @@ -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); |