mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Add -F to if-shell to allow it to be used to check for format or option
values rather than executing a command.
This commit is contained in:
		@@ -37,8 +37,8 @@ void	cmd_if_shell_free(void *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_if_shell_entry = {
 | 
			
		||||
	"if-shell", "if",
 | 
			
		||||
	"bt:", 2, 3,
 | 
			
		||||
	"[-b] " CMD_TARGET_PANE_USAGE " shell-command command [command]",
 | 
			
		||||
	"bFt:", 2, 3,
 | 
			
		||||
	"[-bF] " CMD_TARGET_PANE_USAGE " shell-command command [command]",
 | 
			
		||||
	0,
 | 
			
		||||
	cmd_if_shell_exec
 | 
			
		||||
};
 | 
			
		||||
@@ -56,7 +56,8 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
{
 | 
			
		||||
	struct args			*args = self->args;
 | 
			
		||||
	struct cmd_if_shell_data	*cdata;
 | 
			
		||||
	char				*shellcmd;
 | 
			
		||||
	char				*shellcmd, *cmd, *cause;
 | 
			
		||||
	struct cmd_list			*cmdlist;
 | 
			
		||||
	struct client			*c;
 | 
			
		||||
	struct session			*s = NULL;
 | 
			
		||||
	struct winlink			*wl = NULL;
 | 
			
		||||
@@ -84,6 +85,26 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	shellcmd = format_expand(ft, args->argv[0]);
 | 
			
		||||
	format_free(ft);
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'F')) {
 | 
			
		||||
		cmd = NULL;
 | 
			
		||||
		if (*shellcmd != '0' && *shellcmd != '\0')
 | 
			
		||||
			cmd = args->argv[1];
 | 
			
		||||
		else if (args->argc == 3)
 | 
			
		||||
			cmd = args->argv[2];
 | 
			
		||||
		if (cmd == NULL)
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
		if (cmd_string_parse(cmd, &cmdlist, NULL, 0, &cause) != 0) {
 | 
			
		||||
			if (cause != NULL) {
 | 
			
		||||
				cmdq_error(cmdq, "%s", cause);
 | 
			
		||||
				free(cause);
 | 
			
		||||
			}
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
		cmdq_run(cmdq, cmdlist);
 | 
			
		||||
		cmd_list_free(cmdlist);
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cdata = xmalloc(sizeof *cdata);
 | 
			
		||||
	cdata->cmd_if = xstrdup(args->argv[1]);
 | 
			
		||||
	if (args->argc == 3)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								tmux.1
									
									
									
									
									
								
							@@ -3589,7 +3589,7 @@ Miscellaneous commands are as follows:
 | 
			
		||||
.It Ic clock-mode Op Fl t Ar target-pane
 | 
			
		||||
Display a large clock.
 | 
			
		||||
.It Xo Ic if-shell
 | 
			
		||||
.Op Fl b
 | 
			
		||||
.Op Fl bF
 | 
			
		||||
.Op Fl t Ar target-pane
 | 
			
		||||
.Ar shell-command command
 | 
			
		||||
.Op Ar command
 | 
			
		||||
@@ -3602,7 +3602,9 @@ if
 | 
			
		||||
returns success or the second
 | 
			
		||||
.Ar command
 | 
			
		||||
otherwise.
 | 
			
		||||
Before being executed, shell-command is expanded using the rules specified in the
 | 
			
		||||
Before being executed,
 | 
			
		||||
.Ar shell-command
 | 
			
		||||
is expanded using the rules specified in the
 | 
			
		||||
.Sx FORMATS
 | 
			
		||||
section, including those relevant to
 | 
			
		||||
.Ar target-pane .
 | 
			
		||||
@@ -3610,6 +3612,13 @@ With
 | 
			
		||||
.Fl b ,
 | 
			
		||||
.Ar shell-command
 | 
			
		||||
is run in the background.
 | 
			
		||||
.Pp
 | 
			
		||||
If
 | 
			
		||||
.Fl F
 | 
			
		||||
is given,
 | 
			
		||||
.Ar shell-command
 | 
			
		||||
is not executed but considered success if neither empty nor zero (after formats
 | 
			
		||||
are expanded).
 | 
			
		||||
.It Ic lock-server
 | 
			
		||||
.D1 (alias: Ic lock )
 | 
			
		||||
Lock each client individually by running the command specified by the
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user