mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Handle splitw -I correctly when used from an attached client, GitHub
issue 2917.
This commit is contained in:
		@@ -75,12 +75,16 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
	if (args_has(args, 'I')) {
 | 
			
		||||
		if (wp == NULL)
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
		if (window_pane_start_input(wp, item, &cause) != 0) {
 | 
			
		||||
		switch (window_pane_start_input(wp, item, &cause)) {
 | 
			
		||||
		case -1:
 | 
			
		||||
			cmdq_error(item, "%s", cause);
 | 
			
		||||
			free(cause);
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		case 1:
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
		case 0:
 | 
			
		||||
			return (CMD_RETURN_WAIT);
 | 
			
		||||
		}
 | 
			
		||||
		return (CMD_RETURN_WAIT);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'F') && count != 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -163,16 +163,22 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item)
 | 
			
		||||
		environ_free(sc.environ);
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	}
 | 
			
		||||
	if (input && window_pane_start_input(new_wp, item, &cause) != 0) {
 | 
			
		||||
		server_client_remove_pane(new_wp);
 | 
			
		||||
		layout_close_pane(new_wp);
 | 
			
		||||
		window_remove_pane(wp->window, new_wp);
 | 
			
		||||
		cmdq_error(item, "%s", cause);
 | 
			
		||||
		free(cause);
 | 
			
		||||
		if (sc.argv != NULL)
 | 
			
		||||
			cmd_free_argv(sc.argc, sc.argv);
 | 
			
		||||
		environ_free(sc.environ);
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	if (input) {
 | 
			
		||||
		switch (window_pane_start_input(new_wp, item, &cause)) {
 | 
			
		||||
		case -1:
 | 
			
		||||
			server_client_remove_pane(new_wp);
 | 
			
		||||
			layout_close_pane(new_wp);
 | 
			
		||||
			window_remove_pane(wp->window, new_wp);
 | 
			
		||||
			cmdq_error(item, "%s", cause);
 | 
			
		||||
			free(cause);
 | 
			
		||||
			if (sc.argv != NULL)
 | 
			
		||||
				cmd_free_argv(sc.argc, sc.argv);
 | 
			
		||||
			environ_free(sc.environ);
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		case 1:
 | 
			
		||||
			input = 0;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (!args_has(args, 'd'))
 | 
			
		||||
		cmd_find_from_winlink_pane(current, wl, new_wp, 0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								window.c
									
									
									
									
									
								
							@@ -1527,7 +1527,7 @@ window_pane_input_callback(struct client *c, __unused const char *path,
 | 
			
		||||
	size_t				 len = EVBUFFER_LENGTH(buffer);
 | 
			
		||||
 | 
			
		||||
	wp = window_pane_find_by_id(cdata->wp);
 | 
			
		||||
	if (wp == NULL || closed || error != 0 || c->flags & CLIENT_DEAD) {
 | 
			
		||||
	if (wp == NULL || closed || error != 0 || (c->flags & CLIENT_DEAD)) {
 | 
			
		||||
		if (wp == NULL)
 | 
			
		||||
			c->flags |= CLIENT_EXIT;
 | 
			
		||||
 | 
			
		||||
@@ -1553,6 +1553,10 @@ window_pane_start_input(struct window_pane *wp, struct cmdq_item *item,
 | 
			
		||||
		*cause = xstrdup("pane is not empty");
 | 
			
		||||
		return (-1);
 | 
			
		||||
	}
 | 
			
		||||
	if (c->flags & (CLIENT_DEAD|CLIENT_EXITED))
 | 
			
		||||
		return (1);
 | 
			
		||||
	if (c->session != NULL)
 | 
			
		||||
		return (1);
 | 
			
		||||
 | 
			
		||||
	cdata = xmalloc(sizeof *cdata);
 | 
			
		||||
	cdata->item = item;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user