Add session_set_current helper function, extracted from a diff from

Aaron Jensen.
This commit is contained in:
Nicholas Marriott
2013-03-22 16:00:26 +00:00
parent 295d86911e
commit eaaeb28cda
2 changed files with 26 additions and 30 deletions

View File

@ -346,13 +346,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 *
@ -383,13 +377,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. */
@ -399,15 +387,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. */
@ -422,6 +402,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;