Applied this and the attach-session diff it was based on, thanks!
On Tue, Dec 10, 2013 at 08:51:42PM +0100, Johannes Jakobsson wrote: > Made a change (more like copy-paste) to conform with attach and it seems to > work fine. > Also attached as a file. > > From 0b2298d447d5409952d705eed5a7253947fe4c81 Mon Sep 17 00:00:00 2001 > From: Johannes Jakobsson <johannes.jakobs...@gmail.com> > Date: Tue, 10 Dec 2013 20:43:51 +0100 > Subject: [PATCH] switch-client now conforms to '-t session:win.pane' > > --- > cmd-switch-client.c | 41 ++++++++++++++++++++++++++++++++++------- > cmd.c | 2 -- > tmux.h | 2 ++ > 3 files changed, 36 insertions(+), 9 deletions(-) > > diff --git a/cmd-switch-client.c b/cmd-switch-client.c > index d101c52..e97e3f8 100644 > --- a/cmd-switch-client.c > +++ b/cmd-switch-client.c > @@ -60,8 +60,13 @@ enum cmd_retval > cmd_switch_client_exec(struct cmd *self, struct cmd_q *cmdq) > { > struct args *args = self->args; > - struct client *c; > - struct session *s; > + struct client *c = NULL; > + struct session *s = NULL; > + struct winlink *wl = NULL; > + struct window_pane *wp = NULL; > + struct window *w = NULL; > + > + const char *tflag = NULL; > > if ((c = cmd_find_client(cmdq, args_get(args, 'c'), 0)) == NULL) > return (CMD_RETURN_ERROR); > @@ -76,7 +81,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_q *cmdq) > } > } > > - s = NULL; > + tflag = args_get(args, 't'); > if (args_has(args, 'n')) { > if ((s = session_next_session(c->session)) == NULL) { > cmdq_error(cmdq, "can't find next session"); > @@ -94,10 +99,32 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_q > *cmdq) > cmdq_error(cmdq, "can't find last session"); > return (CMD_RETURN_ERROR); > } > - } else > - s = cmd_find_session(cmdq, args_get(args, 't'), 0); > - if (s == NULL) > - return (CMD_RETURN_ERROR); > + } else { > + 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 (c->session != NULL) > c->last_session = c->session; > diff --git a/cmd.c b/cmd.c > index 414c906..5e6b93a 100644 > --- a/cmd.c > +++ b/cmd.c > @@ -125,9 +125,7 @@ struct session *cmd_lookup_session(const char *, int > *); > struct session *cmd_lookup_session_id(const char *); > struct winlink *cmd_lookup_window(struct session *, const char *, int > *); > int cmd_lookup_index(struct session *, const char *, int *); > -struct window_pane *cmd_lookup_paneid(const char *); > struct winlink *cmd_lookup_winlink_windowid(struct session *, const > char *); > -struct window *cmd_lookup_windowid(const char *); > struct session *cmd_window_session(struct cmd_q *, struct window *, > struct winlink **); > struct winlink *cmd_find_window_offset(const char *, struct session *, > int *); > diff --git a/tmux.h b/tmux.h > index dbc2c49..9c83892 100644 > --- a/tmux.h > +++ b/tmux.h > @@ -1732,6 +1732,8 @@ int cmd_find_index(struct cmd_q *, const > char *, > struct winlink *cmd_find_pane(struct cmd_q *, const char *, struct > session **, > struct window_pane **); > char *cmd_template_replace(const char *, const char *, int); > +struct window *cmd_lookup_windowid(const char *); > +struct window_pane *cmd_lookup_paneid(const char *); > extern const struct cmd_entry *cmd_table[]; > extern const struct cmd_entry cmd_attach_session_entry; > extern const struct cmd_entry cmd_bind_key_entry; > -- > 1.8.3.2 > > > > On 10 12, 2013, at 18:32 , Johannes Jakobsson <johannes.jakobs...@gmail.com> > wrote: > > > I take it that it is the ?-t session:window.pane? syntax you would prefer? > > I will make a new patch with that change. > > > > On 10 12, 2013, at 16:49 , Nicholas Marriott <nicholas.marri...@gmail.com> > > wrote: > > > >> Thanks but I don't like this way of doing it. > >> > >> I think this should work the same way as attach-session. > >> > >> Take a look at the mail I just sent in the thread subject "patch > >> allowing attach to take and select a pane". > >> > >> Both attach and switchc should work the same way, probably the way > >> suggested in that thread. > >> > >> The alternative is that -w or -p or some other flag indicates -t is a > >> window or pane rather than a session, but this isn't as nice for the > >> user. > >> > >> > >> On Sun, Dec 08, 2013 at 11:25:57AM +0100, Johannes Jakobsson wrote: > >>> Add [-w window] to switch-client to specify which window in the > >>> target-session to switch to. > >>> > >>> //Johannes > >>> > >>>> From d8efa53ec1104db86f4fd75be5a59d2317e7b673 Mon Sep 17 00:00:00 2001 > >>> From: Johannes Jakobsson <johannes.jakobs...@gmail.com> > >>> Date: Sat, 7 Dec 2013 16:57:01 +0100 > >>> Subject: [PATCH] '-w' option to switch-client > >>> > >>> Example: switch-client -t s1 -w w1 > >>> --- > >>> cmd-switch-client.c | 22 ++++++++++++++++++++-- > >>> 1 file changed, 20 insertions(+), 2 deletions(-) > >>> > >>> diff --git a/cmd-switch-client.c b/cmd-switch-client.c > >>> index d101c52..68045c8 100644 > >>> --- a/cmd-switch-client.c > >>> +++ b/cmd-switch-client.c > >>> @@ -32,8 +32,8 @@ enum cmd_retval cmd_switch_client_exec(struct cmd *, > >>> struct cmd_q *); > >>> > >>> const struct cmd_entry cmd_switch_client_entry = { > >>> "switch-client", "switchc", > >>> - "lc:npt:r", 0, 0, > >>> - "[-lnpr] [-c target-client] [-t target-session]", > >>> + "lc:npt:rw:", 0, 0, > >>> + "[-lnpr] [-c target-client] [-t target-session] [-w window]", > >>> CMD_READONLY, > >>> cmd_switch_client_key_binding, > >>> cmd_switch_client_exec > >>> @@ -62,6 +62,7 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_q > >>> *cmdq) > >>> struct args *args = self->args; > >>> struct client *c; > >>> struct session *s; > >>> + struct winlink *wl; > >>> > >>> if ((c = cmd_find_client(cmdq, args_get(args, 'c'), 0)) == NULL) > >>> return (CMD_RETURN_ERROR); > >>> @@ -99,6 +100,23 @@ cmd_switch_client_exec(struct cmd *self, struct cmd_q > >>> *cmdq) > >>> if (s == NULL) > >>> return (CMD_RETURN_ERROR); > >>> > >>> + wl = NULL; > >>> + if (args_has(args, 'w')) { > >>> + /* Prepend the choosen session name in front of the > >>> + * window name to make cmd_find_window work. > >>> + */ > >>> + char *sw; > >>> + const char *w_name = args_get(args, 'w'); > >>> + xasprintf(&sw, "%s:%s", s->name, w_name); > >>> + wl = cmd_find_window(cmdq, sw, &s); > >>> + free(sw); > >>> + if (wl == NULL) { > >>> + cmdq_error(cmdq, "can't find window"); > >>> + return (CMD_RETURN_ERROR); > >>> + } > >>> + session_set_current(s, wl); > >>> + } > >>> + > >>> if (c->session != NULL) > >>> c->last_session = c->session; > >>> c->session = s; > >>> -- > >>> 1.8.3.2 > >>> > >>> > >>> ------------------------------------------------------------------------------ > >>> Sponsored by Intel(R) XDK > >>> Develop, test and display web and hybrid apps with a single code base. > >>> Download it for free now! > >>> http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk > >>> _______________________________________________ > >>> tmux-users mailing list > >>> tmux-users@lists.sourceforge.net > >>> https://lists.sourceforge.net/lists/listinfo/tmux-users > > > ------------------------------------------------------------------------------ CenturyLink Cloud: The Leader in Enterprise Cloud Services. Learn Why More Businesses Are Choosing CenturyLink Cloud For Critical Workloads, Development Environments & Everything In Between. Get a Quote or Start a Free Trial Today. http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users