version 1.111, 2015/12/13 16:44:35 |
version 1.112, 2015/12/13 17:55:14 |
|
|
cmd_set_state_flag(struct cmd *cmd, struct cmd_q *cmdq, char c) |
cmd_set_state_flag(struct cmd *cmd, struct cmd_q *cmdq, char c) |
{ |
{ |
struct cmd_state *state = &cmdq->state; |
struct cmd_state *state = &cmdq->state; |
struct cmd_state_flag *statef = NULL; |
struct cmd_find_state *fsf = NULL; |
const char *flag; |
const char *flag; |
int flags = cmd->entry->flags, everything = 0; |
int flags = cmd->entry->flags, everything = 0; |
int allflags = 0, targetflags, error; |
int allflags = 0, targetflags, error; |
|
|
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. */ |
/* Set up state for either -t or -s. */ |
if (c == 't') { |
if (c == 't') { |
statef = &cmdq->state.tflag; |
fsf = &cmdq->state.tflag; |
allflags = CMD_ALL_T; |
allflags = CMD_ALL_T; |
} else if (c == 's') { |
} else if (c == 's') { |
statef = &cmdq->state.sflag; |
fsf = &cmdq->state.sflag; |
allflags = CMD_ALL_S; |
allflags = CMD_ALL_S; |
} |
} |
|
|
|
|
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') { |
error = cmd_find_target(&fs, cmdq, flag, CMD_FIND_PANE, |
error = cmd_find_target(fsf, cmdq, flag, CMD_FIND_PANE, |
targetflags); |
targetflags); |
if (error != 0) |
if (error != 0) |
return (-1); |
return (-1); |
statef->s = fs.s; |
|
statef->wl = fs.wl; |
|
statef->wp = fs.wp; |
|
} else { |
} else { |
error = cmd_find_target(&fs, cmdq, flag, |
error = cmd_find_target(fsf, cmdq, flag, |
CMD_FIND_SESSION, targetflags); |
CMD_FIND_SESSION, targetflags); |
if (error != 0) |
if (error != 0) |
return (-1); |
return (-1); |
statef->s = fs.s; |
|
|
|
if (flag == NULL) { |
if (flag == NULL) { |
statef->wl = statef->s->curw; |
fsf->wl = fsf->s->curw; |
statef->wp = statef->s->curw->window->active; |
fsf->wp = fsf->s->curw->window->active; |
} else { |
} else { |
s = statef->s; |
s = fsf->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 { |
|
|
} |
} |
wl = winlink_find_by_window(&s->windows, w); |
wl = winlink_find_by_window(&s->windows, w); |
if (wl != NULL) { |
if (wl != NULL) { |
statef->wl = wl; |
fsf->wl = wl; |
statef->wp = wp; |
fsf->wp = wp; |
} |
} |
} |
} |
} |
} |
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: |
error = cmd_find_target(&fs, cmdq, flag, CMD_FIND_SESSION, |
error = cmd_find_target(fsf, cmdq, flag, CMD_FIND_SESSION, |
targetflags); |
targetflags); |
if (error == 0) |
if (error != 0) { |
statef->s = fs.s; |
error = cmd_find_target(fsf, cmdq, flag, |
else { |
|
error = cmd_find_target(&fs, cmdq, flag, |
|
CMD_FIND_WINDOW, CMD_FIND_WINDOW_INDEX); |
CMD_FIND_WINDOW, CMD_FIND_WINDOW_INDEX); |
if (error != 0) |
if (error != 0) |
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: |
error = cmd_find_target(&fs, cmdq, flag, CMD_FIND_SESSION, |
error = cmd_find_target(fsf, cmdq, flag, CMD_FIND_SESSION, |
targetflags); |
targetflags); |
if (error != 0) |
if (error != 0) |
return (-1); |
return (-1); |
statef->s = fs.s; |
|
break; |
break; |
case CMD_WINDOW_MARKED_T: |
case CMD_WINDOW_MARKED_T: |
case CMD_WINDOW_MARKED_S: |
case CMD_WINDOW_MARKED_S: |
|
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case CMD_WINDOW_T: |
case CMD_WINDOW_T: |
case CMD_WINDOW_S: |
case CMD_WINDOW_S: |
error = cmd_find_target(&fs, cmdq, flag, CMD_FIND_WINDOW, |
error = cmd_find_target(fsf, cmdq, flag, CMD_FIND_WINDOW, |
targetflags); |
targetflags); |
if (error != 0) |
if (error != 0) |
return (-1); |
return (-1); |
statef->s = fs.s; |
|
statef->wl = fs.wl; |
|
break; |
break; |
case CMD_PANE_MARKED_T: |
case CMD_PANE_MARKED_T: |
case CMD_PANE_MARKED_S: |
case CMD_PANE_MARKED_S: |
|
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case CMD_PANE_T: |
case CMD_PANE_T: |
case CMD_PANE_S: |
case CMD_PANE_S: |
error = cmd_find_target(&fs, cmdq, flag, CMD_FIND_PANE, |
error = cmd_find_target(fsf, cmdq, flag, CMD_FIND_PANE, |
targetflags); |
targetflags); |
if (error != 0) |
if (error != 0) |
return (-1); |
return (-1); |
statef->s = fs.s; |
|
statef->wl = fs.wl; |
|
statef->wp = fs.wp; |
|
break; |
break; |
case CMD_INDEX_T: |
case CMD_INDEX_T: |
case CMD_INDEX_S: |
case CMD_INDEX_S: |
error = cmd_find_target(&fs, cmdq, flag, CMD_FIND_WINDOW, |
error = cmd_find_target(fsf, cmdq, flag, CMD_FIND_WINDOW, |
CMD_FIND_WINDOW_INDEX); |
CMD_FIND_WINDOW_INDEX); |
if (error != 0) |
if (error != 0) |
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); |
|
|
return (0); |
return (0); |
|
|
complete_everything: |
complete_everything: |
if (statef->s == NULL) { |
if (fsf->s == NULL) { |
if (state->c != NULL) |
if (state->c != NULL) |
statef->s = state->c->session; |
fsf->s = state->c->session; |
if (statef->s == NULL) { |
if (fsf->s == NULL) { |
error = cmd_find_target(&fs, cmdq, NULL, |
error = cmd_find_target(fsf, cmdq, NULL, |
CMD_FIND_SESSION, CMD_FIND_QUIET); |
CMD_FIND_SESSION, CMD_FIND_QUIET); |
if (error == 0) |
if (error != 0) |
statef->s = fs.s; |
fsf->s = NULL; |
} |
} |
if (statef->s == NULL) { |
if (fsf->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 (fsf->wl == NULL) { |
error = cmd_find_target(&fs, cmdq, flag, CMD_FIND_WINDOW, 0); |
error = cmd_find_target(fsf, cmdq, flag, CMD_FIND_WINDOW, 0); |
if (error != 0) { |
if (error != 0) |
statef->s = fs.s; |
return (-1); |
statef->wl = fs.wl; |
|
} |
|
} |
} |
if (statef->wp == NULL) { |
if (fsf->wp == NULL) { |
error = cmd_find_target(&fs, cmdq, flag, CMD_FIND_PANE, 0); |
error = cmd_find_target(fsf, cmdq, flag, CMD_FIND_PANE, 0); |
if (error != 0) { |
if (error != 0) |
statef->s = fs.s; |
return (-1); |
statef->wl = fs.wl; |
|
statef->wp = fs.wp; |
|
} |
|
} |
} |
return (0); |
return (0); |
} |
} |