version 1.54, 2015/12/11 12:27:36 |
version 1.55, 2015/12/13 14:32:38 |
|
|
"ac:dF:kn:Pt:", 0, -1, |
"ac:dF:kn:Pt:", 0, -1, |
"[-adkP] [-c start-directory] [-F format] [-n window-name] " |
"[-adkP] [-c start-directory] [-F format] [-n window-name] " |
CMD_TARGET_WINDOW_USAGE " [command]", |
CMD_TARGET_WINDOW_USAGE " [command]", |
0, |
/* |
|
* Using PREP_CANFAIL here ensures that the wl is filled in |
|
* regardless; making PREP_INDEX the thing we want -t to be used for |
|
* in the specific case. |
|
*/ |
|
CMD_INDEX_T|CMD_CANFAIL, |
cmd_new_window_exec |
cmd_new_window_exec |
}; |
}; |
|
|
|
|
cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq) |
cmd_new_window_exec(struct cmd *self, struct cmd_q *cmdq) |
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
struct session *s; |
struct session *s = cmdq->state.tflag.s; |
struct winlink *wl; |
struct winlink *wl = cmdq->state.tflag.wl; |
|
struct client *c = cmdq->state.c; |
|
int idx = cmdq->state.tflag.idx; |
const char *cmd, *path, *template, *cwd, *to_free; |
const char *cmd, *path, *template, *cwd, *to_free; |
char **argv, *cause, *cp; |
char **argv, *cause, *cp; |
int argc, idx, detached; |
int argc, detached; |
struct format_tree *ft; |
struct format_tree *ft; |
struct environ_entry *envent; |
struct environ_entry *envent; |
|
|
if (args_has(args, 'a')) { |
if (args_has(args, 'a')) { |
wl = cmd_find_window(cmdq, args_get(args, 't'), &s); |
|
if (wl == NULL) |
|
return (CMD_RETURN_ERROR); |
|
if ((idx = winlink_shuffle_up(s, wl)) == -1) { |
if ((idx = winlink_shuffle_up(s, wl)) == -1) { |
cmdq_error(cmdq, "no free window indexes"); |
cmdq_error(cmdq, "no free window indexes"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
} else { |
|
idx = cmd_find_index(cmdq, args_get(args, 't'), &s); |
|
if (idx == -2) |
|
return (CMD_RETURN_ERROR); |
|
} |
} |
detached = args_has(args, 'd'); |
detached = args_has(args, 'd'); |
|
|
|
|
to_free = NULL; |
to_free = NULL; |
if (args_has(args, 'c')) { |
if (args_has(args, 'c')) { |
ft = format_create(cmdq, 0); |
ft = format_create(cmdq, 0); |
format_defaults(ft, cmd_find_client(cmdq, NULL, 1), s, NULL, |
format_defaults(ft, c, s, NULL, NULL); |
NULL); |
|
cwd = to_free = format_expand(ft, args_get(args, 'c')); |
cwd = to_free = format_expand(ft, args_get(args, 'c')); |
format_free(ft); |
format_free(ft); |
} else if (cmdq->client != NULL && cmdq->client->session == NULL) |
} else if (cmdq->client != NULL && cmdq->client->session == NULL) |
|
|
template = NEW_WINDOW_TEMPLATE; |
template = NEW_WINDOW_TEMPLATE; |
|
|
ft = format_create(cmdq, 0); |
ft = format_create(cmdq, 0); |
format_defaults(ft, cmd_find_client(cmdq, NULL, 1), s, wl, |
format_defaults(ft, c, s, wl, NULL); |
NULL); |
|
|
|
cp = format_expand(ft, template); |
cp = format_expand(ft, template); |
cmdq_print(cmdq, "%s", cp); |
cmdq_print(cmdq, "%s", cp); |