version 1.89, 2020/06/25 08:56:02 |
version 1.90, 2021/02/05 12:23:49 |
|
|
.name = "new-window", |
.name = "new-window", |
.alias = "neww", |
.alias = "neww", |
|
|
.args = { "abc:de:F:kn:Pt:", 0, -1 }, |
.args = { "abc:de:F:kn:PSt:", 0, -1 }, |
.usage = "[-abdkP] [-c start-directory] [-e environment] [-F format] " |
.usage = "[-abdkPS] [-c start-directory] [-e environment] [-F format] " |
"[-n window-name] " CMD_TARGET_WINDOW_USAGE " [command]", |
"[-n window-name] " CMD_TARGET_WINDOW_USAGE " [command]", |
|
|
.target = { 't', CMD_FIND_WINDOW, CMD_FIND_WINDOW_INDEX }, |
.target = { 't', CMD_FIND_WINDOW, CMD_FIND_WINDOW_INDEX }, |
|
|
cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) |
cmd_new_window_exec(struct cmd *self, struct cmdq_item *item) |
{ |
{ |
struct args *args = cmd_get_args(self); |
struct args *args = cmd_get_args(self); |
|
struct client *c = cmdq_get_client(item); |
struct cmd_find_state *current = cmdq_get_current(item); |
struct cmd_find_state *current = cmdq_get_current(item); |
struct cmd_find_state *target = cmdq_get_target(item); |
struct cmd_find_state *target = cmdq_get_target(item); |
struct spawn_context sc; |
struct spawn_context sc; |
|
|
struct session *s = target->s; |
struct session *s = target->s; |
struct winlink *wl = target->wl; |
struct winlink *wl = target->wl; |
int idx = target->idx, before; |
int idx = target->idx, before; |
struct winlink *new_wl; |
struct winlink *new_wl = NULL; |
char *cause = NULL, *cp; |
char *cause = NULL, *cp; |
const char *template, *add; |
const char *template, *add, *name; |
struct cmd_find_state fs; |
struct cmd_find_state fs; |
struct args_value *value; |
struct args_value *value; |
|
|
|
/* |
|
* If -S and -n are given and -t is not and a single window with this |
|
* name already exists, select it. |
|
*/ |
|
name = args_get(args, 'n'); |
|
if (args_has(args, 'S') && name != NULL && target->idx == -1) { |
|
RB_FOREACH(wl, winlinks, &s->windows) { |
|
if (strcmp(wl->window->name, name) != 0) |
|
continue; |
|
if (new_wl == NULL) { |
|
new_wl = wl; |
|
continue; |
|
} |
|
cmdq_error(item, "multiple windows named %s", name); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
if (new_wl != NULL) { |
|
if (args_has(args, 'd')) |
|
return (CMD_RETURN_NORMAL); |
|
if (session_set_current(s, new_wl) == 0) |
|
server_redraw_session(s); |
|
if (c != NULL && c->session != NULL) |
|
s->curw->window->latest = c; |
|
recalculate_sizes(); |
|
return (CMD_RETURN_NORMAL); |
|
} |
|
} |
|
|
|
|
before = args_has(args, 'b'); |
before = args_has(args, 'b'); |
if (args_has(args, 'a') || before) { |
if (args_has(args, 'a') || before) { |