mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Fix if-shell and run-shell if there are no sessions. Batted around through
several people, finished off by Chris Johnsen.
This commit is contained in:
		@@ -59,19 +59,21 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	struct args			*args = self->args;
 | 
			
		||||
	struct cmd_if_shell_data	*cdata;
 | 
			
		||||
	char				*shellcmd;
 | 
			
		||||
	struct session			*s;
 | 
			
		||||
	struct winlink			*wl;
 | 
			
		||||
	struct window_pane		*wp;
 | 
			
		||||
	struct session			*s = NULL;
 | 
			
		||||
	struct winlink			*wl = NULL;
 | 
			
		||||
	struct window_pane		*wp = NULL;
 | 
			
		||||
	struct format_tree		*ft;
 | 
			
		||||
 | 
			
		||||
	wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp);
 | 
			
		||||
	if (wl == NULL)
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	if (args_has(args, 't'))
 | 
			
		||||
		wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp);
 | 
			
		||||
 | 
			
		||||
	ft = format_create();
 | 
			
		||||
	format_session(ft, s);
 | 
			
		||||
	format_winlink(ft, s, wl);
 | 
			
		||||
	format_window_pane(ft, wp);
 | 
			
		||||
	if (s != NULL)
 | 
			
		||||
		format_session(ft, s);
 | 
			
		||||
	if (s != NULL && wl != NULL)
 | 
			
		||||
		format_winlink(ft, s, wl);
 | 
			
		||||
	if (wp != NULL)
 | 
			
		||||
		format_window_pane(ft, wp);
 | 
			
		||||
	shellcmd = format_expand(ft, args->argv[0]);
 | 
			
		||||
	format_free(ft);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -49,16 +49,17 @@ struct cmd_run_shell_data {
 | 
			
		||||
	char		*cmd;
 | 
			
		||||
	struct cmd_q	*cmdq;
 | 
			
		||||
	int		 bflag;
 | 
			
		||||
	u_int		 wp_id;
 | 
			
		||||
	int		 wp_id;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_run_shell_print(struct job *job, const char *msg)
 | 
			
		||||
{
 | 
			
		||||
	struct cmd_run_shell_data	*cdata = job->data;
 | 
			
		||||
	struct window_pane		*wp;
 | 
			
		||||
	struct window_pane		*wp = NULL;
 | 
			
		||||
 | 
			
		||||
	wp = window_pane_find_by_id(cdata->wp_id);
 | 
			
		||||
	if (cdata->wp_id != -1)
 | 
			
		||||
		wp = window_pane_find_by_id(cdata->wp_id);
 | 
			
		||||
	if (wp == NULL) {
 | 
			
		||||
		cmdq_print(cdata->cmdq, "%s", msg);
 | 
			
		||||
		return;
 | 
			
		||||
@@ -76,26 +77,28 @@ cmd_run_shell_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	struct args			*args = self->args;
 | 
			
		||||
	struct cmd_run_shell_data	*cdata;
 | 
			
		||||
	char				*shellcmd;
 | 
			
		||||
	struct session			*s;
 | 
			
		||||
	struct winlink			*wl;
 | 
			
		||||
	struct window_pane		*wp;
 | 
			
		||||
	struct session			*s = NULL;
 | 
			
		||||
	struct winlink			*wl = NULL;
 | 
			
		||||
	struct window_pane		*wp = NULL;
 | 
			
		||||
	struct format_tree		*ft;
 | 
			
		||||
 | 
			
		||||
	wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp);
 | 
			
		||||
	if (wl == NULL)
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	if (args_has(args, 't'))
 | 
			
		||||
		wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp);
 | 
			
		||||
 | 
			
		||||
	ft = format_create();
 | 
			
		||||
	format_session(ft, s);
 | 
			
		||||
	format_winlink(ft, s, wl);
 | 
			
		||||
	format_window_pane(ft, wp);
 | 
			
		||||
	if (s != NULL)
 | 
			
		||||
		format_session(ft, s);
 | 
			
		||||
	if (s != NULL && wl != NULL)
 | 
			
		||||
		format_winlink(ft, s, wl);
 | 
			
		||||
	if (wp != NULL)
 | 
			
		||||
		format_window_pane(ft, wp);
 | 
			
		||||
	shellcmd = format_expand(ft, args->argv[0]);
 | 
			
		||||
	format_free(ft);
 | 
			
		||||
 | 
			
		||||
	cdata = xmalloc(sizeof *cdata);
 | 
			
		||||
	cdata->cmd = shellcmd;
 | 
			
		||||
	cdata->bflag = args_has(args, 'b');
 | 
			
		||||
	cdata->wp_id = wp->id;
 | 
			
		||||
	cdata->wp_id = wp != NULL ? (int) wp->id : -1;
 | 
			
		||||
 | 
			
		||||
	cdata->cmdq = cmdq;
 | 
			
		||||
	cmdq->references++;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user