Sync OpenBSD patchset 979:

Make window_pane_index work the same as window_index, from Ben Boeckel.
This commit is contained in:
Tiago Cunha 2011-11-25 13:30:45 +00:00
parent 398af28d2a
commit 9ec457575d
6 changed files with 25 additions and 15 deletions

View File

@ -49,15 +49,18 @@ cmd_respawn_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
struct session *s; struct session *s;
struct environ env; struct environ env;
const char *cmd; const char *cmd;
char *cause; char *cause;
u_int idx;
if ((wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp)) == NULL) if ((wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp)) == NULL)
return (-1); return (-1);
w = wl->window; w = wl->window;
if (!args_has(self->args, 'k') && wp->fd != -1) { if (!args_has(self->args, 'k') && wp->fd != -1) {
if (window_pane_index(wp, &idx) != 0)
fatalx("index not found");
ctx->error(ctx, "pane still active: %s:%u.%u", ctx->error(ctx, "pane still active: %s:%u.%u",
s->name, wl->idx, window_pane_index(w, wp)); s->name, wl->idx, idx);
return (-1); return (-1);
} }

View File

@ -139,7 +139,8 @@ cmd_split_window_exec(struct cmd *self, struct cmd_ctx *ctx)
environ_free(&env); environ_free(&env);
if (args_has(args, 'P')) { if (args_has(args, 'P')) {
paneidx = window_pane_index(wl->window, new_wp); if (window_pane_index(new_wp, &paneidx) != 0)
fatalx("index not found");
ctx->print(ctx, "%s:%u.%u", s->name, wl->idx, paneidx); ctx->print(ctx, "%s:%u.%u", s->name, wl->idx, paneidx);
} }
return (0); return (0);

View File

@ -264,7 +264,7 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp)
{ {
struct tty *tty = &c->tty; struct tty *tty = &c->tty;
struct session *s = c->session; struct session *s = c->session;
struct options *oo = &s->options; struct options *oo = &s->options;
struct window *w = wp->window; struct window *w = wp->window;
struct grid_cell gc; struct grid_cell gc;
u_int idx, px, py, i, j, xoff, yoff; u_int idx, px, py, i, j, xoff, yoff;
@ -272,7 +272,8 @@ screen_redraw_draw_number(struct client *c, struct window_pane *wp)
char buf[16], *ptr; char buf[16], *ptr;
size_t len; size_t len;
idx = window_pane_index(w, wp); if (window_pane_index(wp, &idx) != 0)
fatalx("index not found");
len = xsnprintf(buf, sizeof buf, "%u", idx); len = xsnprintf(buf, sizeof buf, "%u", idx);
if (wp->sx < len) if (wp->sx < len)

View File

@ -372,6 +372,7 @@ status_replace1(struct client *c, struct session *s, struct winlink *wl,
char ch, tmp[256], *ptr, *endptr, *freeptr; char ch, tmp[256], *ptr, *endptr, *freeptr;
size_t ptrlen; size_t ptrlen;
long limit; long limit;
u_int idx;
if (s == NULL) if (s == NULL)
s = c->session; s = c->session;
@ -422,8 +423,10 @@ status_replace1(struct client *c, struct session *s, struct winlink *wl,
ptr = tmp; ptr = tmp;
goto do_replace; goto do_replace;
case 'P': case 'P':
if (window_pane_index(wp, &idx) != 0)
fatalx("index not found");
xsnprintf( xsnprintf(
tmp, sizeof tmp, "%u", window_pane_index(wl->window, wp)); tmp, sizeof tmp, "%u", idx);
ptr = tmp; ptr = tmp;
goto do_replace; goto do_replace;
case 'S': case 'S':

2
tmux.h
View File

@ -1927,7 +1927,7 @@ struct window_pane *window_pane_next_by_number(struct window *,
struct window_pane *, u_int); struct window_pane *, u_int);
struct window_pane *window_pane_previous_by_number(struct window *, struct window_pane *window_pane_previous_by_number(struct window *,
struct window_pane *, u_int); struct window_pane *, u_int);
u_int window_pane_index(struct window *, struct window_pane *); int window_pane_index(struct window_pane *, u_int *);
u_int window_count_panes(struct window *); u_int window_count_panes(struct window *);
void window_destroy_panes(struct window *); void window_destroy_panes(struct window *);
struct window_pane *window_pane_find_by_id(u_int); struct window_pane *window_pane_find_by_id(u_int);

View File

@ -483,19 +483,21 @@ window_pane_previous_by_number(struct window *w, struct window_pane *wp,
return (wp); return (wp);
} }
u_int int
window_pane_index(struct window *w, struct window_pane *wp) window_pane_index(struct window_pane *wp, u_int *i)
{ {
struct window_pane *wq; struct window_pane *wq;
u_int n; struct window *w = wp->window;
n = options_get_number(&w->options, "pane-base-index"); *i = options_get_number(&w->options, "pane-base-index");
TAILQ_FOREACH(wq, &w->panes, entry) { TAILQ_FOREACH(wq, &w->panes, entry) {
if (wp == wq) if (wp == wq) {
break; return (0);
n++; }
(*i)++;
} }
return (n);
return (-1);
} }
u_int u_int