mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Add new-session -X and attach-session -x to send SIGHUP to parent when
detaching (like detach-client -P). From Colin Watson in GitHub issue 1773.
This commit is contained in:
		| @@ -37,8 +37,8 @@ const struct cmd_entry cmd_attach_session_entry = { | ||||
| 	.name = "attach-session", | ||||
| 	.alias = "attach", | ||||
|  | ||||
| 	.args = { "c:dErt:", 0, 0 }, | ||||
| 	.usage = "[-dEr] [-c working-directory] " CMD_TARGET_SESSION_USAGE, | ||||
| 	.args = { "c:dErt:x", 0, 0 }, | ||||
| 	.usage = "[-dErx] [-c working-directory] " CMD_TARGET_SESSION_USAGE, | ||||
|  | ||||
| 	/* -t is special */ | ||||
|  | ||||
| @@ -48,7 +48,7 @@ const struct cmd_entry cmd_attach_session_entry = { | ||||
|  | ||||
| enum cmd_retval | ||||
| cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, | ||||
|     int rflag, const char *cflag, int Eflag) | ||||
|     int xflag, int rflag, const char *cflag, int Eflag) | ||||
| { | ||||
| 	struct cmd_find_state	*current = &item->shared->current; | ||||
| 	enum cmd_find_type	 type; | ||||
| @@ -58,6 +58,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, | ||||
| 	struct winlink		*wl; | ||||
| 	struct window_pane	*wp; | ||||
| 	char			*cause; | ||||
| 	enum msgtype		 msgtype; | ||||
|  | ||||
| 	if (RB_EMPTY(&sessions)) { | ||||
| 		cmdq_error(item, "no sessions"); | ||||
| @@ -102,11 +103,15 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, | ||||
|  | ||||
| 	c->last_session = c->session; | ||||
| 	if (c->session != NULL) { | ||||
| 		if (dflag) { | ||||
| 		if (dflag || xflag) { | ||||
| 			if (xflag) | ||||
| 				msgtype = MSG_DETACHKILL; | ||||
| 			else | ||||
| 				msgtype = MSG_DETACH; | ||||
| 			TAILQ_FOREACH(c_loop, &clients, entry) { | ||||
| 				if (c_loop->session != s || c == c_loop) | ||||
| 					continue; | ||||
| 				server_client_detach(c_loop, MSG_DETACH); | ||||
| 				server_client_detach(c_loop, msgtype); | ||||
| 			} | ||||
| 		} | ||||
| 		if (!Eflag) | ||||
| @@ -131,11 +136,15 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag, | ||||
| 		if (rflag) | ||||
| 			c->flags |= CLIENT_READONLY; | ||||
|  | ||||
| 		if (dflag) { | ||||
| 		if (dflag || xflag) { | ||||
| 			if (xflag) | ||||
| 				msgtype = MSG_DETACHKILL; | ||||
| 			else | ||||
| 				msgtype = MSG_DETACH; | ||||
| 			TAILQ_FOREACH(c_loop, &clients, entry) { | ||||
| 				if (c_loop->session != s || c == c_loop) | ||||
| 					continue; | ||||
| 				server_client_detach(c_loop, MSG_DETACH); | ||||
| 				server_client_detach(c_loop, msgtype); | ||||
| 			} | ||||
| 		} | ||||
| 		if (!Eflag) | ||||
| @@ -169,6 +178,6 @@ cmd_attach_session_exec(struct cmd *self, struct cmdq_item *item) | ||||
| 	struct args	*args = self->args; | ||||
|  | ||||
| 	return (cmd_attach_session(item, args_get(args, 't'), | ||||
| 	    args_has(args, 'd'), args_has(args, 'r'), args_get(args, 'c'), | ||||
| 	    args_has(args, 'E'))); | ||||
| 	    args_has(args, 'd'), args_has(args, 'x'), args_has(args, 'r'), | ||||
| 	    args_get(args, 'c'), args_has(args, 'E'))); | ||||
| } | ||||
|   | ||||
| @@ -39,8 +39,8 @@ const struct cmd_entry cmd_new_session_entry = { | ||||
| 	.name = "new-session", | ||||
| 	.alias = "new", | ||||
|  | ||||
| 	.args = { "Ac:dDEF:n:Ps:t:x:y:", 0, -1 }, | ||||
| 	.usage = "[-AdDEP] [-c start-directory] [-F format] [-n window-name] " | ||||
| 	.args = { "Ac:dDEF:n:Ps:t:x:Xy:", 0, -1 }, | ||||
| 	.usage = "[-AdDEPX] [-c start-directory] [-F format] [-n window-name] " | ||||
| 		 "[-s session-name] " CMD_TARGET_SESSION_USAGE " [-x width] " | ||||
| 		 "[-y height] [command]", | ||||
|  | ||||
| @@ -105,7 +105,8 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item) | ||||
| 			if (args_has(args, 'A')) { | ||||
| 				retval = cmd_attach_session(item, | ||||
| 				    newname, args_has(args, 'D'), | ||||
| 				    0, NULL, args_has(args, 'E')); | ||||
| 				    args_has(args, 'X'), 0, NULL, | ||||
| 				    args_has(args, 'E')); | ||||
| 				free(newname); | ||||
| 				return (retval); | ||||
| 			} | ||||
|   | ||||
							
								
								
									
										14
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								tmux.1
									
									
									
									
									
								
							| @@ -918,7 +918,7 @@ section. | ||||
| The following commands are available to manage clients and sessions: | ||||
| .Bl -tag -width Ds | ||||
| .It Xo Ic attach-session | ||||
| .Op Fl dEr | ||||
| .Op Fl dErx | ||||
| .Op Fl c Ar working-directory | ||||
| .Op Fl t Ar target-session | ||||
| .Xc | ||||
| @@ -931,6 +931,10 @@ If used from inside, switch the current client. | ||||
| If | ||||
| .Fl d | ||||
| is specified, any other clients attached to the session are detached. | ||||
| If | ||||
| .Fl x | ||||
| is given, send SIGHUP to the parent process of the client as well as | ||||
| detaching the client, typically causing it to exit. | ||||
| .Fl r | ||||
| signifies the client is read-only (only keys bound to the | ||||
| .Ic detach-client | ||||
| @@ -1048,7 +1052,7 @@ command. | ||||
| Lock all clients attached to | ||||
| .Ar target-session . | ||||
| .It Xo Ic new-session | ||||
| .Op Fl AdDEP | ||||
| .Op Fl AdDEPX | ||||
| .Op Fl c Ar start-directory | ||||
| .Op Fl F Ar format | ||||
| .Op Fl n Ar window-name | ||||
| @@ -1105,6 +1109,12 @@ already exists; in this case, | ||||
| behaves like | ||||
| .Fl d | ||||
| to | ||||
| .Ic attach-session , | ||||
| and | ||||
| .Fl X | ||||
| behaves like | ||||
| .Fl x | ||||
| to | ||||
| .Ic attach-session . | ||||
| .Pp | ||||
| If | ||||
|   | ||||
							
								
								
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							| @@ -2009,7 +2009,7 @@ extern const struct cmd_entry *cmd_table[]; | ||||
|  | ||||
| /* cmd-attach-session.c */ | ||||
| enum cmd_retval	 cmd_attach_session(struct cmdq_item *, const char *, int, int, | ||||
| 		     const char *, int); | ||||
| 		     int, const char *, int); | ||||
|  | ||||
| /* cmd-parse.c */ | ||||
| void	    	 cmd_parse_empty(struct cmd_parse_input *); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 nicm
					nicm