From 9c0b51cd5df342aa96048948d42323df6e6d3dc0 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 20 Sep 2007 08:21:59 +0000 Subject: [PATCH] Wrap next/prev. --- CHANGES | 6 +++++- session.c | 19 ++++++++++++++----- 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 @@ -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); }