version 1.109, 2015/12/13 15:00:37 |
version 1.110, 2015/12/13 15:32:12 |
|
|
struct cmd_state_flag *statef = NULL; |
struct cmd_state_flag *statef = NULL; |
const char *flag; |
const char *flag; |
int flags = cmd->entry->flags, everything = 0; |
int flags = cmd->entry->flags, everything = 0; |
int allflags = 0; |
int allflags = 0, targetflags; |
int prefer = !!(flags & CMD_PREFERUNATTACHED); |
|
struct session *s; |
struct session *s; |
struct window *w; |
struct window *w; |
struct winlink *wl; |
struct winlink *wl; |
struct window_pane *wp; |
struct window_pane *wp; |
|
struct cmd_find_state *fs; |
|
|
|
/* Set up state for either -t or -s. */ |
if (c == 't') { |
if (c == 't') { |
statef = &cmdq->state.tflag; |
statef = &cmdq->state.tflag; |
allflags = CMD_ALL_T; |
allflags = CMD_ALL_T; |
|
|
goto complete_everything; |
goto complete_everything; |
|
|
/* Fill in state using command (current or base) flags. */ |
/* Fill in state using command (current or base) flags. */ |
|
if (flags & CMD_PREFERUNATTACHED) |
|
targetflags = CMD_FIND_PREFER_UNATTACHED; |
|
else |
|
targetflags = 0; |
switch (cmd->entry->flags & allflags) { |
switch (cmd->entry->flags & allflags) { |
case 0: |
case 0: |
break; |
break; |
case CMD_SESSION_T|CMD_PANE_T: |
case CMD_SESSION_T|CMD_PANE_T: |
case CMD_SESSION_S|CMD_PANE_S: |
case CMD_SESSION_S|CMD_PANE_S: |
if (flag != NULL && flag[strcspn(flag, ":.")] != '\0') { |
if (flag != NULL && flag[strcspn(flag, ":.")] != '\0') { |
statef->wl = cmd_find_pane(cmdq, flag, &statef->s, |
fs = cmd_find_target(cmdq, flag, CMD_FIND_PANE, |
&statef->wp); |
targetflags); |
if (statef->wl == NULL) |
if (fs == NULL) |
return (-1); |
return (-1); |
|
statef->s = fs->s; |
|
statef->wl = fs->wl; |
|
statef->wp = fs->wp; |
} else { |
} else { |
statef->s = cmd_find_session(cmdq, flag, prefer); |
fs = cmd_find_target(cmdq, flag, CMD_FIND_SESSION, |
if (statef->s == NULL) |
targetflags); |
|
if (fs == NULL) |
return (-1); |
return (-1); |
|
statef->s = fs->s; |
|
|
s = statef->s; |
|
if (flag == NULL) { |
if (flag == NULL) { |
statef->wl = s->curw; |
statef->wl = statef->s->curw; |
statef->wp = s->curw->window->active; |
statef->wp = statef->s->curw->window->active; |
} else { |
} else { |
|
s = statef->s; |
if ((w = window_find_by_id_str(flag)) != NULL) |
if ((w = window_find_by_id_str(flag)) != NULL) |
wp = w->active; |
wp = w->active; |
else { |
else { |
|
|
break; |
break; |
case CMD_MOVEW_R|CMD_INDEX_T: |
case CMD_MOVEW_R|CMD_INDEX_T: |
case CMD_MOVEW_R|CMD_INDEX_S: |
case CMD_MOVEW_R|CMD_INDEX_S: |
statef->s = cmd_find_session(cmdq, flag, prefer); |
fs = cmd_find_target(cmdq, flag, CMD_FIND_SESSION, targetflags); |
if (statef->s == NULL) { |
if (fs != NULL) |
statef->idx = cmd_find_index(cmdq, flag, &statef->s); |
statef->s = fs->s; |
if (statef->idx == -2) |
else { |
|
fs = cmd_find_target(cmdq, flag, CMD_FIND_WINDOW, |
|
CMD_FIND_WINDOW_INDEX); |
|
if (fs == NULL) |
return (-1); |
return (-1); |
|
statef->s = fs->s; |
|
statef->idx = fs->idx; |
} |
} |
break; |
break; |
case CMD_SESSION_T: |
case CMD_SESSION_T: |
case CMD_SESSION_S: |
case CMD_SESSION_S: |
statef->s = cmd_find_session(cmdq, flag, prefer); |
fs = cmd_find_target(cmdq, flag, CMD_FIND_SESSION, targetflags); |
if (statef->s == NULL) |
if (fs == NULL) |
return (-1); |
return (-1); |
|
statef->s = fs->s; |
break; |
break; |
|
case CMD_WINDOW_MARKED_T: |
|
case CMD_WINDOW_MARKED_S: |
|
targetflags |= CMD_FIND_DEFAULT_MARKED; |
|
/* FALLTHROUGH */ |
case CMD_WINDOW_T: |
case CMD_WINDOW_T: |
case CMD_WINDOW_S: |
case CMD_WINDOW_S: |
statef->wl = cmd_find_window(cmdq, flag, &statef->s); |
fs = cmd_find_target(cmdq, flag, CMD_FIND_WINDOW, targetflags); |
if (statef->wl == NULL) |
if (fs == NULL) |
return (-1); |
return (-1); |
|
statef->s = fs->s; |
|
statef->wl = fs->wl; |
break; |
break; |
case CMD_WINDOW_MARKED_T: |
case CMD_PANE_MARKED_T: |
case CMD_WINDOW_MARKED_S: |
case CMD_PANE_MARKED_S: |
statef->wl = cmd_find_window_marked(cmdq, flag, &statef->s); |
targetflags |= CMD_FIND_DEFAULT_MARKED; |
if (statef->wl == NULL) |
/* FALLTHROUGH */ |
return (-1); |
|
break; |
|
case CMD_PANE_T: |
case CMD_PANE_T: |
case CMD_PANE_S: |
case CMD_PANE_S: |
statef->wl = cmd_find_pane(cmdq, flag, &statef->s, |
fs = cmd_find_target(cmdq, flag, CMD_FIND_PANE, targetflags); |
&statef->wp); |
if (fs == NULL) |
if (statef->wl == NULL) |
|
return (-1); |
return (-1); |
|
statef->s = fs->s; |
|
statef->wl = fs->wl; |
|
statef->wp = fs->wp; |
break; |
break; |
case CMD_PANE_MARKED_T: |
|
case CMD_PANE_MARKED_S: |
|
statef->wl = cmd_find_pane_marked(cmdq, flag, &statef->s, |
|
&statef->wp); |
|
if (statef->wl == NULL) |
|
return (-1); |
|
break; |
|
case CMD_INDEX_T: |
case CMD_INDEX_T: |
case CMD_INDEX_S: |
case CMD_INDEX_S: |
statef->idx = cmd_find_index(cmdq, flag, &statef->s); |
fs = cmd_find_target(cmdq, flag, CMD_FIND_WINDOW, |
if (statef->idx == -2) |
CMD_FIND_WINDOW_INDEX); |
|
if (fs == NULL) |
return (-1); |
return (-1); |
|
statef->s = fs->s; |
|
statef->idx = fs->idx; |
break; |
break; |
default: |
default: |
fatalx("too many -%c for %s", c, cmd->entry->name); |
fatalx("too many -%c for %s", c, cmd->entry->name); |
|
|
if (statef->s == NULL) { |
if (statef->s == NULL) { |
if (state->c != NULL) |
if (state->c != NULL) |
statef->s = state->c->session; |
statef->s = state->c->session; |
if (statef->s == NULL) |
|
statef->s = cmd_find_current(cmdq); |
|
if (statef->s == NULL) { |
if (statef->s == NULL) { |
|
fs = cmd_find_target(cmdq, NULL, CMD_FIND_SESSION, |
|
CMD_FIND_QUIET); |
|
if (fs != NULL) |
|
statef->s = fs->s; |
|
} |
|
if (statef->s == NULL) { |
if (flags & CMD_CANFAIL) |
if (flags & CMD_CANFAIL) |
return (0); |
return (0); |
|
|
cmdq_error(cmdq, "no current session"); |
cmdq_error(cmdq, "no current session"); |
return (-1); |
return (-1); |
} |
} |
} |
} |
if (statef->wl == NULL) |
if (statef->wl == NULL) { |
statef->wl = cmd_find_window(cmdq, flag, &statef->s); |
fs = cmd_find_target(cmdq, flag, CMD_FIND_WINDOW, 0); |
if (statef->wp == NULL) |
if (fs != NULL) { |
statef->wl = cmd_find_pane(cmdq, flag, &statef->s, &statef->wp); |
statef->s = fs->s; |
|
statef->wl = fs->wl; |
|
} |
|
} |
|
if (statef->wp == NULL) { |
|
fs = cmd_find_target(cmdq, flag, CMD_FIND_PANE, 0); |
|
if (fs != NULL) { |
|
statef->s = fs->s; |
|
statef->wl = fs->wl; |
|
statef->wp = fs->wp; |
|
} |
|
} |
return (0); |
return (0); |
} |
} |
|
|