mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 01:34:18 +00:00 
			
		
		
		
	Add a helper function to open the terminal for attach-/new-session.
This commit is contained in:
		@@ -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);
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							@@ -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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user