summaryrefslogtreecommitdiffstats
path: root/session.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2013-02-21 16:54:13 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2013-02-21 16:54:13 +0000
commit8c50f625b0698e35ad183864e3baa4bb8679e0ae (patch)
tree8186f5831cbb45da1bba14c4ce29a88fb5a82f80 /session.c
parent6fc96978c20d7772d24796debfb32eba48932377 (diff)
Add session_set_current helper function, extracted from a diff from Aaron
Jensen.
Diffstat (limited to 'session.c')
-rw-r--r--session.c38
1 files changed, 15 insertions, 23 deletions
diff --git a/session.c b/session.c
index 1f4fb30c..72e8fb05 100644
--- a/session.c
+++ b/session.c
@@ -345,13 +345,7 @@ session_next(struct session *s, int alert)
if (alert && ((wl = session_next_alert(wl)) == NULL))
return (-1);
}
- if (wl == s->curw)
- return (1);
- winlink_stack_remove(&s->lastw, wl);
- winlink_stack_push(&s->lastw, s->curw);
- s->curw = wl;
- winlink_clear_flags(wl);
- return (0);
+ return (session_set_current(s, wl));
}
struct winlink *
@@ -382,13 +376,7 @@ session_previous(struct session *s, int alert)
if (alert && (wl = session_previous_alert(wl)) == NULL)
return (-1);
}
- if (wl == s->curw)
- return (1);
- winlink_stack_remove(&s->lastw, wl);
- winlink_stack_push(&s->lastw, s->curw);
- s->curw = wl;
- winlink_clear_flags(wl);
- return (0);
+ return (session_set_current(s, wl));
}
/* Move session to specific window. */
@@ -398,15 +386,7 @@ session_select(struct session *s, int idx)
struct winlink *wl;
wl = winlink_find_by_index(&s->windows, idx);
- if (wl == NULL)
- return (-1);
- if (wl == s->curw)
- return (1);
- winlink_stack_remove(&s->lastw, wl);
- winlink_stack_push(&s->lastw, s->curw);
- s->curw = wl;
- winlink_clear_flags(wl);
- return (0);
+ return (session_set_current(s, wl));
}
/* Move session to last used window. */
@@ -421,6 +401,18 @@ session_last(struct session *s)
if (wl == s->curw)
return (1);
+ return (session_set_current(s, wl));
+}
+
+/* Set current winlink to wl .*/
+int
+session_set_current(struct session *s, struct winlink *wl)
+{
+ if (wl == NULL)
+ return (-1);
+ if (wl == s->curw)
+ return (1);
+
winlink_stack_remove(&s->lastw, wl);
winlink_stack_push(&s->lastw, s->curw);
s->curw = wl;