mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 10:08:47 +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:
parent
97620bb5be
commit
a6ad44f111
@ -59,19 +59,21 @@ cmd_if_shell_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
struct args *args = self->args;
|
struct args *args = self->args;
|
||||||
struct cmd_if_shell_data *cdata;
|
struct cmd_if_shell_data *cdata;
|
||||||
char *shellcmd;
|
char *shellcmd;
|
||||||
struct session *s;
|
struct session *s = NULL;
|
||||||
struct winlink *wl;
|
struct winlink *wl = NULL;
|
||||||
struct window_pane *wp;
|
struct window_pane *wp = NULL;
|
||||||
struct format_tree *ft;
|
struct format_tree *ft;
|
||||||
|
|
||||||
wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp);
|
if (args_has(args, 't'))
|
||||||
if (wl == NULL)
|
wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp);
|
||||||
return (CMD_RETURN_ERROR);
|
|
||||||
|
|
||||||
ft = format_create();
|
ft = format_create();
|
||||||
format_session(ft, s);
|
if (s != NULL)
|
||||||
format_winlink(ft, s, wl);
|
format_session(ft, s);
|
||||||
format_window_pane(ft, wp);
|
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]);
|
shellcmd = format_expand(ft, args->argv[0]);
|
||||||
format_free(ft);
|
format_free(ft);
|
||||||
|
|
||||||
|
@ -49,16 +49,17 @@ struct cmd_run_shell_data {
|
|||||||
char *cmd;
|
char *cmd;
|
||||||
struct cmd_q *cmdq;
|
struct cmd_q *cmdq;
|
||||||
int bflag;
|
int bflag;
|
||||||
u_int wp_id;
|
int wp_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
cmd_run_shell_print(struct job *job, const char *msg)
|
cmd_run_shell_print(struct job *job, const char *msg)
|
||||||
{
|
{
|
||||||
struct cmd_run_shell_data *cdata = job->data;
|
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) {
|
if (wp == NULL) {
|
||||||
cmdq_print(cdata->cmdq, "%s", msg);
|
cmdq_print(cdata->cmdq, "%s", msg);
|
||||||
return;
|
return;
|
||||||
@ -76,26 +77,28 @@ cmd_run_shell_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
struct args *args = self->args;
|
struct args *args = self->args;
|
||||||
struct cmd_run_shell_data *cdata;
|
struct cmd_run_shell_data *cdata;
|
||||||
char *shellcmd;
|
char *shellcmd;
|
||||||
struct session *s;
|
struct session *s = NULL;
|
||||||
struct winlink *wl;
|
struct winlink *wl = NULL;
|
||||||
struct window_pane *wp;
|
struct window_pane *wp = NULL;
|
||||||
struct format_tree *ft;
|
struct format_tree *ft;
|
||||||
|
|
||||||
wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp);
|
if (args_has(args, 't'))
|
||||||
if (wl == NULL)
|
wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp);
|
||||||
return (CMD_RETURN_ERROR);
|
|
||||||
|
|
||||||
ft = format_create();
|
ft = format_create();
|
||||||
format_session(ft, s);
|
if (s != NULL)
|
||||||
format_winlink(ft, s, wl);
|
format_session(ft, s);
|
||||||
format_window_pane(ft, wp);
|
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]);
|
shellcmd = format_expand(ft, args->argv[0]);
|
||||||
format_free(ft);
|
format_free(ft);
|
||||||
|
|
||||||
cdata = xmalloc(sizeof *cdata);
|
cdata = xmalloc(sizeof *cdata);
|
||||||
cdata->cmd = shellcmd;
|
cdata->cmd = shellcmd;
|
||||||
cdata->bflag = args_has(args, 'b');
|
cdata->bflag = args_has(args, 'b');
|
||||||
cdata->wp_id = wp->id;
|
cdata->wp_id = wp != NULL ? (int) wp->id : -1;
|
||||||
|
|
||||||
cdata->cmdq = cmdq;
|
cdata->cmdq = cmdq;
|
||||||
cmdq->references++;
|
cmdq->references++;
|
||||||
|
Loading…
Reference in New Issue
Block a user