aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES6
-rw-r--r--session.c19
2 files changed, 19 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index 236f1218..3fd2402f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+20 September 2007
+
+* Wrap on next/previous. From Maximilian Gass.
+
19 September 2007
* Don't renumber windows on close.
@@ -20,5 +24,5 @@
(including mutt, emacs). No status bar yet and no key remapping or other
customisation.
-$Id: CHANGES,v 1.5 2007-09-19 15:16:23 nicm Exp $
+$Id: CHANGES,v 1.6 2007-09-20 08:21:59 nicm Exp $
diff --git a/session.c b/session.c
index 79e394d2..463bc040 100644
--- a/session.c
+++ b/session.c
@@ -1,4 +1,4 @@
-/* $Id: session.c,v 1.7 2007-08-27 20:36:52 nicm Exp $ */
+/* $Id: session.c,v 1.8 2007-09-20 08:21:59 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -155,13 +155,19 @@ int
session_next(struct session *s)
{
struct window *w;
+ u_int n;
if (s->window == NULL)
return (-1);
w = window_next(&s->windows, s->window);
- if (w == NULL)
- return (-1);
+ if (w == NULL) {
+ n = 0;
+ while ((w = ARRAY_ITEM(&s->windows, n)) == NULL)
+ n++;
+ if (w == s->window)
+ return (1);
+ }
s->window = w;
return (0);
}
@@ -176,8 +182,11 @@ session_previous(struct session *s)
return (-1);
w = window_previous(&s->windows, s->window);
- if (w == NULL)
- return (-1);
+ if (w == NULL) {
+ w = ARRAY_LAST(&s->windows);
+ if (w == s->window)
+ return (1);
+ }
s->window = w;
return (0);
}