Update of /cvsroot/tmux/tmux In directory vz-cvs-2.sog:/tmp/cvs-serv20354 Modified Files: cmd-attach-session.c cmd-has-session.c cmd-kill-session.c cmd-list-panes.c cmd-list-windows.c cmd-lock-server.c cmd-new-session.c cmd-rename-session.c cmd-select-window.c cmd-set-environment.c cmd-set-option.c cmd-show-buffer.c cmd-show-environment.c cmd-show-options.c cmd-switch-client.c cmd.c tmux.1 tmux.h Log Message: |PatchSet 882 |Date: 2011/04/05 20:37:01 |Author: nicm |Branch: HEAD |Tag: (none) |Log: |Add a flag to cmd_find_session so that attach-session can prefer |unattached sessions when choosing the most recently used (if -t is not |given). Suggested by claudio@.
Index: cmd-list-panes.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-list-panes.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- cmd-list-panes.c 6 Apr 2011 22:20:16 -0000 1.9 +++ cmd-list-panes.c 6 Apr 2011 22:24:00 -0000 1.10 @@ -52,7 +52,7 @@ if (args_has(args, 'a')) cmd_list_panes_server(ctx); else if (args_has(args, 's')) { - s = cmd_find_session(ctx, args_get(args, 't')); + s = cmd_find_session(ctx, args_get(args, 't'), 0); if (s == NULL) return (-1); cmd_list_panes_session(s, ctx); Index: cmd.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd.c,v retrieving revision 1.150 retrieving revision 1.151 diff -u -d -r1.150 -r1.151 --- cmd.c 6 Apr 2011 22:16:33 -0000 1.150 +++ cmd.c 6 Apr 2011 22:24:01 -0000 1.151 @@ -111,7 +111,7 @@ }; struct session *cmd_choose_session_list(struct sessionslist *); -struct session *cmd_choose_session(void); +struct session *cmd_choose_session(int); struct client *cmd_choose_client(struct clients *); struct client *cmd_lookup_client(const char *); struct session *cmd_lookup_session(const char *, int *); @@ -315,7 +315,7 @@ * session from all sessions. */ struct session * -cmd_current_session(struct cmd_ctx *ctx) +cmd_current_session(struct cmd_ctx *ctx, int prefer_unattached) { struct msg_command_data *data = ctx->msgdata; struct client *c = ctx->cmdclient; @@ -364,19 +364,25 @@ return (s); } - return (cmd_choose_session()); + return (cmd_choose_session(prefer_unattached)); } -/* Find the most recently used session. */ +/* + * Find the most recently used session, preferring unattached if the flag is + * set. + */ struct session * -cmd_choose_session(void) +cmd_choose_session(int prefer_unattached) { struct session *s, *sbest; struct timeval *tv = NULL; sbest = NULL; RB_FOREACH(s, sessions, &sessions) { - if (tv == NULL || timercmp(&s->activity_time, tv, >)) { + if (tv == NULL || timercmp(&s->activity_time, tv, >) || + (prefer_unattached && + !(sbest->flags & SESSION_UNATTACHED) && + (s->flags & SESSION_UNATTACHED))) { sbest = s; tv = &s->activity_time; } @@ -427,7 +433,7 @@ * No current client set. Find the current session and return the * newest of its clients. */ - s = cmd_current_session(ctx); + s = cmd_current_session(ctx, 0); if (s != NULL && !(s->flags & SESSION_UNATTACHED)) { ARRAY_INIT(&cc); for (i = 0; i < ARRAY_LENGTH(&clients); i++) { @@ -670,7 +676,7 @@ struct winlink *wl; /* If this pane is in the current session, return that winlink. */ - s = cmd_current_session(ctx); + s = cmd_current_session(ctx, 0); if (s != NULL) { wl = winlink_find_by_window(&s->windows, wp->window); if (wl != NULL) { @@ -695,7 +701,7 @@ /* Find the target session or report an error and return NULL. */ struct session * -cmd_find_session(struct cmd_ctx *ctx, const char *arg) +cmd_find_session(struct cmd_ctx *ctx, const char *arg, int prefer_unattached) { struct session *s; struct window_pane *wp; @@ -706,7 +712,7 @@ /* A NULL argument means the current session. */ if (arg == NULL) - return (cmd_current_session(ctx)); + return (cmd_current_session(ctx, prefer_unattached)); tmparg = xstrdup(arg); /* Lookup as pane id. */ @@ -752,7 +758,7 @@ * Find the current session. There must always be a current session, if * it can't be found, report an error. */ - if ((s = cmd_current_session(ctx)) == NULL) { + if ((s = cmd_current_session(ctx, 0)) == NULL) { ctx->error(ctx, "can't establish current session"); return (NULL); } @@ -899,7 +905,7 @@ * Find the current session. There must always be a current session, if * it can't be found, report an error. */ - if ((s = cmd_current_session(ctx)) == NULL) { + if ((s = cmd_current_session(ctx, 0)) == NULL) { ctx->error(ctx, "can't establish current session"); return (-2); } @@ -1053,7 +1059,7 @@ u_int idx; /* Get the current session. */ - if ((s = cmd_current_session(ctx)) == NULL) { + if ((s = cmd_current_session(ctx, 0)) == NULL) { ctx->error(ctx, "can't establish current session"); return (NULL); } Index: cmd-show-buffer.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-show-buffer.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- cmd-show-buffer.c 7 Jan 2011 14:45:34 -0000 1.14 +++ cmd-show-buffer.c 6 Apr 2011 22:24:01 -0000 1.15 @@ -47,7 +47,7 @@ size_t size, len; u_int width; - if ((s = cmd_find_session(ctx, NULL)) == NULL) + if ((s = cmd_find_session(ctx, NULL, 0)) == NULL) return (-1); if (!args_has(args, 'b')) { Index: cmd-show-environment.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-show-environment.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- cmd-show-environment.c 7 Jan 2011 14:45:34 -0000 1.3 +++ cmd-show-environment.c 6 Apr 2011 22:24:01 -0000 1.4 @@ -50,7 +50,7 @@ if (args_has(self->args, 'g')) env = &global_environ; else { - if ((s = cmd_find_session(ctx, args_get(args, 't'))) == NULL) + if ((s = cmd_find_session(ctx, args_get(args, 't'), 0)) == NULL) return (-1); env = &s->environ; } Index: cmd-show-options.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-show-options.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -d -r1.24 -r1.25 --- cmd-show-options.c 7 Jan 2011 15:02:38 -0000 1.24 +++ cmd-show-options.c 6 Apr 2011 22:24:01 -0000 1.25 @@ -79,7 +79,7 @@ if (args_has(self->args, 'g')) oo = &global_s_options; else { - s = cmd_find_session(ctx, args_get(args, 't')); + s = cmd_find_session(ctx, args_get(args, 't'), 0); if (s == NULL) return (-1); oo = &s->options; Index: cmd-lock-server.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-lock-server.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- cmd-lock-server.c 7 Jan 2011 15:02:38 -0000 1.11 +++ cmd-lock-server.c 6 Apr 2011 22:24:00 -0000 1.12 @@ -71,7 +71,7 @@ if (self->entry == &cmd_lock_server_entry) server_lock(); else if (self->entry == &cmd_lock_session_entry) { - if ((s = cmd_find_session(ctx, args_get(args, 't'))) == NULL) + if ((s = cmd_find_session(ctx, args_get(args, 't'), 0)) == NULL) return (-1); server_lock_session(s); } else { Index: tmux.1 =================================================================== RCS file: /cvsroot/tmux/tmux/tmux.1,v retrieving revision 1.301 retrieving revision 1.302 diff -u -d -r1.301 -r1.302 --- tmux.1 6 Apr 2011 22:23:14 -0000 1.301 +++ tmux.1 6 Apr 2011 22:24:01 -0000 1.302 @@ -566,6 +566,17 @@ .Ic attach-session will attempt to start it; this will fail unless sessions are created in the configuration file. +.Pp +The +.Ar target-session +rules for +.Ic attach-session +are slightly adjusted: if +.Nm +needs to select the most recently used session, it will prefer the most +recently used +.Em unattached +session. .It Xo Ic detach-client .Op Fl P .Op Fl t Ar target-client Index: cmd-select-window.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-select-window.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- cmd-select-window.c 7 Jan 2011 15:02:38 -0000 1.26 +++ cmd-select-window.c 6 Apr 2011 22:24:01 -0000 1.27 @@ -102,7 +102,7 @@ last = 1; if (next || previous || last) { - s = cmd_find_session(ctx, args_get(args, 't')); + s = cmd_find_session(ctx, args_get(args, 't'), 0); if (s == NULL) return (-1); Index: cmd-kill-session.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-kill-session.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- cmd-kill-session.c 7 Jan 2011 14:45:34 -0000 1.19 +++ cmd-kill-session.c 6 Apr 2011 22:24:00 -0000 1.20 @@ -45,7 +45,7 @@ struct args *args = self->args; struct session *s; - if ((s = cmd_find_session(ctx, args_get(args, 't'))) == NULL) + if ((s = cmd_find_session(ctx, args_get(args, 't'), 0)) == NULL) return (-1); server_destroy_session(s); Index: cmd-new-session.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-new-session.c,v retrieving revision 1.84 retrieving revision 1.85 diff -u -d -r1.84 -r1.85 --- cmd-new-session.c 15 Feb 2011 15:25:48 -0000 1.84 +++ cmd-new-session.c 6 Apr 2011 22:24:00 -0000 1.85 @@ -75,7 +75,7 @@ target = args_get(args, 't'); if (target != NULL) { - groupwith = cmd_find_session(ctx, target); + groupwith = cmd_find_session(ctx, target, 0); if (groupwith == NULL) return (-1); } else Index: cmd-switch-client.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-switch-client.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- cmd-switch-client.c 7 Jan 2011 14:45:34 -0000 1.25 +++ cmd-switch-client.c 6 Apr 2011 22:24:01 -0000 1.26 @@ -86,7 +86,7 @@ return (-1); } } else - s = cmd_find_session(ctx, args_get(args, 't')); + s = cmd_find_session(ctx, args_get(args, 't'), 0); if (s == NULL) return (-1); Index: cmd-set-environment.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-set-environment.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- cmd-set-environment.c 7 Jan 2011 14:45:34 -0000 1.4 +++ cmd-set-environment.c 6 Apr 2011 22:24:01 -0000 1.5 @@ -65,7 +65,7 @@ if (args_has(self->args, 'g')) env = &global_environ; else { - if ((s = cmd_find_session(ctx, args_get(args, 't'))) == NULL) + if ((s = cmd_find_session(ctx, args_get(args, 't'), 0)) == NULL) return (-1); env = &s->environ; } Index: cmd-has-session.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-has-session.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- cmd-has-session.c 7 Jan 2011 14:45:34 -0000 1.16 +++ cmd-has-session.c 6 Apr 2011 22:24:00 -0000 1.17 @@ -41,7 +41,7 @@ { struct args *args = self->args; - if (cmd_find_session(ctx, args_get(args, 't')) == NULL) + if (cmd_find_session(ctx, args_get(args, 't'), 0) == NULL) return (-1); return (0); Index: cmd-set-option.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-set-option.c,v retrieving revision 1.111 retrieving revision 1.112 diff -u -d -r1.111 -r1.112 --- cmd-set-option.c 6 Apr 2011 22:22:49 -0000 1.111 +++ cmd-set-option.c 6 Apr 2011 22:24:01 -0000 1.112 @@ -164,7 +164,7 @@ if (args_has(self->args, 'g')) oo = &global_s_options; else { - s = cmd_find_session(ctx, args_get(args, 't')); + s = cmd_find_session(ctx, args_get(args, 't'), 0); if (s == NULL) return (-1); oo = &s->options; Index: cmd-list-windows.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-list-windows.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -d -r1.46 -r1.47 --- cmd-list-windows.c 6 Apr 2011 22:20:16 -0000 1.46 +++ cmd-list-windows.c 6 Apr 2011 22:24:00 -0000 1.47 @@ -50,7 +50,7 @@ if (args_has(args, 'a')) cmd_list_windows_server(ctx); else { - s = cmd_find_session(ctx, args_get(args, 't')); + s = cmd_find_session(ctx, args_get(args, 't'), 0); if (s == NULL) return (-1); cmd_list_windows_session(s, ctx); Index: cmd-rename-session.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-rename-session.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- cmd-rename-session.c 7 Jan 2011 14:45:34 -0000 1.22 +++ cmd-rename-session.c 6 Apr 2011 22:24:01 -0000 1.23 @@ -51,7 +51,7 @@ return (-1); } - if ((s = cmd_find_session(ctx, args_get(args, 't'))) == NULL) + if ((s = cmd_find_session(ctx, args_get(args, 't'), 0)) == NULL) return (-1); RB_REMOVE(sessions, &sessions, s); Index: cmd-attach-session.c =================================================================== RCS file: /cvsroot/tmux/tmux/cmd-attach-session.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -d -r1.39 -r1.40 --- cmd-attach-session.c 7 Jan 2011 14:45:33 -0000 1.39 +++ cmd-attach-session.c 6 Apr 2011 22:24:00 -0000 1.40 @@ -51,7 +51,7 @@ return (-1); } - if ((s = cmd_find_session(ctx, args_get(args, 't'))) == NULL) + if ((s = cmd_find_session(ctx, args_get(args, 't'), 1)) == NULL) return (-1); if (ctx->cmdclient == NULL && ctx->curclient == NULL) Index: tmux.h =================================================================== RCS file: /cvsroot/tmux/tmux/tmux.h,v retrieving revision 1.616 retrieving revision 1.617 diff -u -d -r1.616 -r1.617 --- tmux.h 6 Apr 2011 22:21:02 -0000 1.616 +++ tmux.h 6 Apr 2011 22:24:01 -0000 1.617 @@ -1483,10 +1483,10 @@ int cmd_exec(struct cmd *, struct cmd_ctx *); void cmd_free(struct cmd *); size_t cmd_print(struct cmd *, char *, size_t); -struct session *cmd_current_session(struct cmd_ctx *); +struct session *cmd_current_session(struct cmd_ctx *, int); struct client *cmd_current_client(struct cmd_ctx *); struct client *cmd_find_client(struct cmd_ctx *, const char *); -struct session *cmd_find_session(struct cmd_ctx *, const char *); +struct session *cmd_find_session(struct cmd_ctx *, const char *, int); struct winlink *cmd_find_window( struct cmd_ctx *, const char *, struct session **); int cmd_find_index( ------------------------------------------------------------------------------ Xperia(TM) PLAY It's a major breakthrough. An authentic gaming smartphone on the nation's most reliable network. And it wants your games. http://p.sf.net/sfu/verizon-sfdev _______________________________________________ tmux-cvs mailing list tmux-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-cvs