Sync OpenBSD patchset 735:

Make pane/window wrapping more logical (so with 10 windows, +10 from
window 5 stays in the same place), and tidy the code. From Tiago Cunha.
This commit is contained in:
Tiago Cunha
2010-07-17 14:38:13 +00:00
parent ad6a528f61
commit 11f81e8134
3 changed files with 116 additions and 88 deletions

View File

@ -1,4 +1,4 @@
/* $Id: window.c,v 1.133 2010-06-22 23:29:05 tcunha Exp $ */
/* $Id: window.c,v 1.134 2010-07-17 14:38:13 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -171,22 +171,22 @@ winlink_previous(struct winlink *wl)
}
struct winlink *
winlink_next_by_number(struct winlink *wl, int n)
winlink_next_by_number(struct winlink *wl, struct session *s, int n)
{
for (; n > 0; n--) {
if ((wl = RB_NEXT(winlinks, wwl, wl)) == NULL)
break;
wl = RB_MIN(winlinks, &s->windows);
}
return (wl);
}
struct winlink *
winlink_previous_by_number(struct winlink *wl, int n)
winlink_previous_by_number(struct winlink *wl, struct session *s, int n)
{
for (; n > 0; n--) {
if ((wl = RB_PREV(winlinks, wwl, wl)) == NULL)
break;
wl = RB_MAX(winlinks, &s->windows);
}
return (wl);
@ -389,6 +389,29 @@ window_pane_at_index(struct window *w, u_int idx)
return (NULL);
}
struct window_pane *
window_pane_next_by_number(struct window *w, struct window_pane *wp, u_int n)
{
for (; n > 0; n--) {
if ((wp = TAILQ_NEXT(wp, entry)) == NULL)
wp = TAILQ_FIRST(&w->panes);
}
return (wp);
}
struct window_pane *
window_pane_previous_by_number(struct window *w, struct window_pane *wp,
u_int n)
{
for (; n > 0; n--) {
if ((wp = TAILQ_PREV(wp, window_panes, entry)) == NULL)
wp = TAILQ_LAST(&w->panes, window_panes);
}
return (wp);
}
u_int
window_pane_index(struct window *w, struct window_pane *wp)
{