mirror of
https://github.com/tmux/tmux.git
synced 2025-01-26 16:13:34 +00:00
Merge branch 'obsd-master'
This commit is contained in:
commit
12c49fa3bd
30
cmd-find.c
30
cmd-find.c
@ -657,7 +657,7 @@ cmd_find_get_pane(struct cmd_find_state *fs, const char *pane)
|
||||
/* Check for pane ids starting with %. */
|
||||
if (*pane == '%') {
|
||||
fs->wp = window_pane_find_by_id_str(pane);
|
||||
if (fs->wp == NULL)
|
||||
if (fs->wp == NULL || window_pane_outside(fs->wp))
|
||||
return (-1);
|
||||
fs->w = fs->wp->window;
|
||||
return (cmd_find_best_session_with_window(fs));
|
||||
@ -694,7 +694,7 @@ cmd_find_get_pane_with_session(struct cmd_find_state *fs, const char *pane)
|
||||
/* Check for pane ids starting with %. */
|
||||
if (*pane == '%') {
|
||||
fs->wp = window_pane_find_by_id_str(pane);
|
||||
if (fs->wp == NULL)
|
||||
if (fs->wp == NULL || window_pane_outside(fs->wp))
|
||||
return (-1);
|
||||
fs->w = fs->wp->window;
|
||||
return (cmd_find_best_winlink_with_window(fs));
|
||||
@ -726,7 +726,9 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane)
|
||||
/* Check for pane ids starting with %. */
|
||||
if (*pane == '%') {
|
||||
fs->wp = window_pane_find_by_id_str(pane);
|
||||
if (fs->wp == NULL || fs->wp->window != fs->w)
|
||||
if (fs->wp == NULL || window_pane_outside(fs->wp))
|
||||
return (-1);
|
||||
if (fs->wp->window != fs->w)
|
||||
return (-1);
|
||||
return (0);
|
||||
}
|
||||
@ -736,25 +738,27 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane)
|
||||
if (fs->w->last == NULL)
|
||||
return (-1);
|
||||
fs->wp = fs->w->last;
|
||||
if (fs->wp == NULL || window_pane_outside(fs->wp))
|
||||
return (-1);
|
||||
return (0);
|
||||
} else if (strcmp(pane, "{up-of}") == 0) {
|
||||
fs->wp = window_pane_find_up(fs->w->active);
|
||||
if (fs->wp == NULL)
|
||||
if (fs->wp == NULL || window_pane_outside(fs->wp))
|
||||
return (-1);
|
||||
return (0);
|
||||
} else if (strcmp(pane, "{down-of}") == 0) {
|
||||
fs->wp = window_pane_find_down(fs->w->active);
|
||||
if (fs->wp == NULL)
|
||||
if (fs->wp == NULL || window_pane_outside(fs->wp))
|
||||
return (-1);
|
||||
return (0);
|
||||
} else if (strcmp(pane, "{left-of}") == 0) {
|
||||
fs->wp = window_pane_find_left(fs->w->active);
|
||||
if (fs->wp == NULL)
|
||||
if (fs->wp == NULL || window_pane_outside(fs->wp))
|
||||
return (-1);
|
||||
return (0);
|
||||
} else if (strcmp(pane, "{right-of}") == 0) {
|
||||
fs->wp = window_pane_find_right(fs->w->active);
|
||||
if (fs->wp == NULL)
|
||||
if (fs->wp == NULL || window_pane_outside(fs->wp))
|
||||
return (-1);
|
||||
return (0);
|
||||
}
|
||||
@ -770,7 +774,7 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane)
|
||||
fs->wp = window_pane_next_by_number(fs->w, wp, n);
|
||||
else
|
||||
fs->wp = window_pane_previous_by_number(fs->w, wp, n);
|
||||
if (fs->wp != NULL)
|
||||
if (fs->wp != NULL && !window_pane_outside(fs->wp))
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -778,13 +782,13 @@ cmd_find_get_pane_with_window(struct cmd_find_state *fs, const char *pane)
|
||||
idx = strtonum(pane, 0, INT_MAX, &errstr);
|
||||
if (errstr == NULL) {
|
||||
fs->wp = window_pane_at_index(fs->w, idx);
|
||||
if (fs->wp != NULL)
|
||||
if (fs->wp != NULL && !window_pane_outside(fs->wp))
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Try as a description. */
|
||||
fs->wp = window_find_string(fs->w, pane);
|
||||
if (fs->wp != NULL)
|
||||
if (fs->wp != NULL && !window_pane_outside(fs->wp))
|
||||
return (0);
|
||||
|
||||
return (-1);
|
||||
@ -836,7 +840,7 @@ cmd_find_valid_state(struct cmd_find_state *fs)
|
||||
|
||||
if (!window_has_pane(fs->w, fs->wp))
|
||||
return (0);
|
||||
return (window_pane_visible(fs->wp));
|
||||
return (!window_pane_outside(fs->wp));
|
||||
}
|
||||
|
||||
/* Copy a state. */
|
||||
@ -944,6 +948,8 @@ cmd_find_from_pane(struct cmd_find_state *fs, struct window_pane *wp)
|
||||
{
|
||||
if (cmd_find_from_window(fs, wp->window) != 0)
|
||||
return (-1);
|
||||
if (window_pane_outside(wp))
|
||||
return (-1);
|
||||
fs->wp = wp;
|
||||
|
||||
cmd_find_log_state(__func__, fs);
|
||||
@ -1011,7 +1017,7 @@ cmd_find_target(struct cmd_find_state *fs, struct cmd_find_state *current,
|
||||
switch (type) {
|
||||
case CMD_FIND_PANE:
|
||||
fs->wp = cmd_mouse_pane(m, &fs->s, &fs->wl);
|
||||
if (fs->wp != NULL)
|
||||
if (fs->wp != NULL && !window_pane_outside(fs->wp))
|
||||
fs->w = fs->wl->window;
|
||||
break;
|
||||
case CMD_FIND_WINDOW:
|
||||
|
@ -63,7 +63,6 @@ cmd_select_pane_exec(struct cmd *self, struct cmdq_item *item)
|
||||
const char *style;
|
||||
|
||||
if (self->entry == &cmd_last_pane_entry || args_has(args, 'l')) {
|
||||
|
||||
if (wl->window->last == NULL) {
|
||||
cmdq_error(item, "no last pane");
|
||||
return (CMD_RETURN_ERROR);
|
||||
|
1
tmux.h
1
tmux.h
@ -2128,6 +2128,7 @@ int window_pane_set_mode(struct window_pane *,
|
||||
void window_pane_reset_mode(struct window_pane *);
|
||||
void window_pane_key(struct window_pane *, struct client *,
|
||||
struct session *, key_code, struct mouse_event *);
|
||||
int window_pane_outside(struct window_pane *);
|
||||
int window_pane_visible(struct window_pane *);
|
||||
char *window_pane_search(struct window_pane *, const char *,
|
||||
u_int *);
|
||||
|
18
window.c
18
window.c
@ -1200,17 +1200,23 @@ window_pane_key(struct window_pane *wp, struct client *c, struct session *s,
|
||||
}
|
||||
|
||||
int
|
||||
window_pane_visible(struct window_pane *wp)
|
||||
window_pane_outside(struct window_pane *wp)
|
||||
{
|
||||
struct window *w = wp->window;
|
||||
|
||||
if (wp->xoff >= w->sx || wp->yoff >= w->sy)
|
||||
return (1);
|
||||
if (wp->xoff + wp->sx > w->sx || wp->yoff + wp->sy > w->sy)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
window_pane_visible(struct window_pane *wp)
|
||||
{
|
||||
if (wp->layout_cell == NULL)
|
||||
return (0);
|
||||
if (wp->xoff >= w->sx || wp->yoff >= w->sy)
|
||||
return (0);
|
||||
if (wp->xoff + wp->sx > w->sx || wp->yoff + wp->sy > w->sy)
|
||||
return (0);
|
||||
return (1);
|
||||
return (!window_pane_outside(wp));
|
||||
}
|
||||
|
||||
char *
|
||||
|
Loading…
Reference in New Issue
Block a user