diff options
author | nicm <nicm> | 2014-01-09 14:20:55 +0000 |
---|---|---|
committer | nicm <nicm> | 2014-01-09 14:20:55 +0000 |
commit | 1a0d3cd5d3bfcf15be80b5c9739b039fc7e0f575 (patch) | |
tree | 1883c8328296f31713670b1df01187adc49474c2 /cmd-attach-session.c | |
parent | adc1f21eaee899b8ecfdb6ef3676d9a25019e4fa (diff) | |
download | rtmux-1a0d3cd5d3bfcf15be80b5c9739b039fc7e0f575.tar.gz rtmux-1a0d3cd5d3bfcf15be80b5c9739b039fc7e0f575.tar.bz2 rtmux-1a0d3cd5d3bfcf15be80b5c9739b039fc7e0f575.zip |
Allow attach-session -t to accept a window and pane to select them on
attach. Based on a diff from J Raynor.
Diffstat (limited to 'cmd-attach-session.c')
-rw-r--r-- | cmd-attach-session.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/cmd-attach-session.c b/cmd-attach-session.c index c71e6f1f..6fb83d20 100644 --- a/cmd-attach-session.c +++ b/cmd-attach-session.c @@ -47,6 +47,9 @@ cmd_attach_session(struct cmd_q *cmdq, const char *tflag, int dflag, int rflag, { struct session *s; struct client *c; + struct winlink *wl = NULL; + struct window *w = NULL; + struct window_pane *wp = NULL; const char *update; char *cause; u_int i; @@ -59,12 +62,31 @@ cmd_attach_session(struct cmd_q *cmdq, const char *tflag, int dflag, int rflag, return (CMD_RETURN_ERROR); } - if ((s = cmd_find_session(cmdq, tflag, 1)) == NULL) - return (CMD_RETURN_ERROR); + if (tflag == NULL) { + if ((s = cmd_find_session(cmdq, tflag, 1)) == NULL) + return (CMD_RETURN_ERROR); + } else if (tflag[strcspn(tflag, ":.")] != '\0') { + if ((wl = cmd_find_pane(cmdq, tflag, &s, &wp)) == NULL) + return (CMD_RETURN_ERROR); + } else { + if ((s = cmd_find_session(cmdq, tflag, 1)) == NULL) + return (CMD_RETURN_ERROR); + w = cmd_lookup_windowid(tflag); + if (w == NULL && (wp = cmd_lookup_paneid(tflag)) != NULL) + w = wp->window; + if (w != NULL) + wl = winlink_find_by_window(&s->windows, w); + } if (cmdq->client == NULL) return (CMD_RETURN_NORMAL); + if (wl != NULL) { + if (wp != NULL) + window_set_active_pane(wp->window, wp); + session_set_current(s, wl); + } + if (cmdq->client->session != NULL) { if (dflag) { /* |