version 1.40, 2016/10/16 17:55:14 |
version 1.41, 2016/10/16 19:04:05 |
|
|
* Runs a command without a window. |
* Runs a command without a window. |
*/ |
*/ |
|
|
static enum cmd_retval cmd_run_shell_exec(struct cmd *, struct cmd_q *); |
static enum cmd_retval cmd_run_shell_exec(struct cmd *, struct cmdq_item *); |
|
|
static void cmd_run_shell_callback(struct job *); |
static void cmd_run_shell_callback(struct job *); |
static void cmd_run_shell_free(void *); |
static void cmd_run_shell_free(void *); |
|
|
}; |
}; |
|
|
struct cmd_run_shell_data { |
struct cmd_run_shell_data { |
char *cmd; |
char *cmd; |
struct cmd_q *cmdq; |
struct cmdq_item *item; |
int wp_id; |
int wp_id; |
}; |
}; |
|
|
static void |
static void |
|
|
if (cdata->wp_id != -1) |
if (cdata->wp_id != -1) |
wp = window_pane_find_by_id(cdata->wp_id); |
wp = window_pane_find_by_id(cdata->wp_id); |
if (wp == NULL) { |
if (wp == NULL) { |
cmdq_print(cdata->cmdq, "%s", msg); |
cmdq_print(cdata->item, "%s", msg); |
return; |
return; |
} |
} |
|
|
|
|
} |
} |
|
|
static enum cmd_retval |
static enum cmd_retval |
cmd_run_shell_exec(struct cmd *self, struct cmd_q *cmdq) |
cmd_run_shell_exec(struct cmd *self, struct cmdq_item *item) |
{ |
{ |
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 = cmdq->state.tflag.s; |
struct session *s = item->state.tflag.s; |
struct winlink *wl = cmdq->state.tflag.wl; |
struct winlink *wl = item->state.tflag.wl; |
struct window_pane *wp = cmdq->state.tflag.wp; |
struct window_pane *wp = item->state.tflag.wp; |
struct format_tree *ft; |
struct format_tree *ft; |
const char *cwd; |
const char *cwd; |
|
|
if (cmdq->client != NULL && cmdq->client->session == NULL) |
if (item->client != NULL && item->client->session == NULL) |
cwd = cmdq->client->cwd; |
cwd = item->client->cwd; |
else if (s != NULL) |
else if (s != NULL) |
cwd = s->cwd; |
cwd = s->cwd; |
else |
else |
cwd = NULL; |
cwd = NULL; |
|
|
ft = format_create(cmdq, 0); |
ft = format_create(item, 0); |
format_defaults(ft, cmdq->state.c, s, wl, wp); |
format_defaults(ft, item->state.c, s, wl, wp); |
shellcmd = format_expand(ft, args->argv[0]); |
shellcmd = format_expand(ft, args->argv[0]); |
format_free(ft); |
format_free(ft); |
|
|
|
|
cdata->wp_id = -1; |
cdata->wp_id = -1; |
|
|
if (!args_has(args, 'b')) |
if (!args_has(args, 'b')) |
cdata->cmdq = cmdq; |
cdata->item = item; |
|
|
job_run(shellcmd, s, cwd, cmd_run_shell_callback, cmd_run_shell_free, |
job_run(shellcmd, s, cwd, cmd_run_shell_callback, cmd_run_shell_free, |
cdata); |
cdata); |
|
|
cmd_run_shell_print(job, msg); |
cmd_run_shell_print(job, msg); |
free(msg); |
free(msg); |
|
|
if (cdata->cmdq != NULL) |
if (cdata->item != NULL) |
cdata->cmdq->flags &= ~CMD_Q_WAITING; |
cdata->item->flags &= ~CMDQ_WAITING; |
} |
} |
|
|
static void |
static void |