Update of /cvsroot/tmux/tmux
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv12893

Modified Files:
        cmd-new-session.c cmd-switch-client.c key-bindings.c 
        server-client.c server-fn.c tmux.1 tmux.h 
Log Message:
Track the last session for a client and add a flag to switch-client and
a key binding (L) to move a client back to its last session.



Index: server-client.c
===================================================================
RCS file: /cvsroot/tmux/tmux/server-client.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- server-client.c     11 Dec 2010 16:15:02 -0000      1.46
+++ server-client.c     11 Dec 2010 18:42:20 -0000      1.47
@@ -77,6 +77,7 @@
        c->title = NULL;
 
        c->session = NULL;
+       c->last_session = UINT_MAX;
        c->tty.sx = 80;
        c->tty.sy = 24;
 

Index: tmux.1
===================================================================
RCS file: /cvsroot/tmux/tmux/tmux.1,v
retrieving revision 1.276
retrieving revision 1.277
diff -u -d -r1.276 -r1.277
--- tmux.1      10 Dec 2010 21:19:13 -0000      1.276
+++ tmux.1      11 Dec 2010 18:42:20 -0000      1.277
@@ -286,6 +286,8 @@
 Force redraw of the attached client.
 .It s
 Select a new session for the attached client interactively.
+.It L
+Switch the attached client back to the last session.
 .It t
 Show the time.
 .It w
@@ -666,7 +668,7 @@
 .Dv SIGTSTP
 (tty stop).
 .It Xo Ic switch-client
-.Op Fl np
+.Op Fl lnp
 .Op Fl c Ar target-client
 .Op Fl t Ar target-session
 .Xc
@@ -676,10 +678,12 @@
 to
 .Ar target-session .
 If
+.Fl l,
 .Fl n
 or
 .Fl p
-is used, the client is moved to the next or previous session respectively.
+is used, the client is moved to the last, next or previous session
+respectively.
 .El
 .Sh WINDOWS AND PANES
 A

Index: cmd-new-session.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-new-session.c,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -d -r1.78 -r1.79
--- cmd-new-session.c   2 Jul 2010 02:49:19 -0000       1.78
+++ cmd-new-session.c   11 Dec 2010 18:42:20 -0000      1.79
@@ -279,9 +279,17 @@
        if (!detached) {
                if (ctx->cmdclient != NULL) {
                        server_write_client(ctx->cmdclient, MSG_READY, NULL, 0);
+                       if (ctx->cmdclient->session != NULL) {
+                               session_index(ctx->cmdclient->session,
+                                   &ctx->cmdclient->last_session);
+                       }
                        ctx->cmdclient->session = s;
                        server_redraw_client(ctx->cmdclient);
                } else {
+                       if (ctx->curclient->session != NULL) {
+                               session_index(ctx->curclient->session,
+                                   &ctx->curclient->last_session);
+                       }
                        ctx->curclient->session = s;
                        server_redraw_client(ctx->curclient);
                }

Index: server-fn.c
===================================================================
RCS file: /cvsroot/tmux/tmux/server-fn.c,v
retrieving revision 1.113
retrieving revision 1.114
diff -u -d -r1.113 -r1.114
--- server-fn.c 9 Oct 2010 14:31:50 -0000       1.113
+++ server-fn.c 11 Dec 2010 18:42:20 -0000      1.114
@@ -399,6 +399,7 @@
                        c->session = NULL;
                        c->flags |= CLIENT_EXIT;
                } else {
+                       c->last_session = UINT_MAX;
                        c->session = s_new;
                        server_redraw_client(c);
                }

Index: cmd-switch-client.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-switch-client.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- cmd-switch-client.c 9 Oct 2010 14:29:32 -0000       1.21
+++ cmd-switch-client.c 11 Dec 2010 18:42:20 -0000      1.22
@@ -36,13 +36,14 @@
 struct cmd_switch_client_data {
        char    *name;
        char    *target;
+       int      flag_last;
        int      flag_next;
        int      flag_previous;
 };
 
 const struct cmd_entry cmd_switch_client_entry = {
        "switch-client", "switchc",
-       "[-np] [-c target-client] [-t target-session]",
+       "[-lnp] [-c target-client] [-t target-session]",
        0, "",
        cmd_switch_client_init,
        cmd_switch_client_parse,
@@ -59,6 +60,7 @@
        self->data = data = xmalloc(sizeof *data);
        data->name = NULL;
        data->target = NULL;
+       data->flag_last = 0;
        data->flag_next = 0;
        data->flag_previous = 0;
 
@@ -69,6 +71,9 @@
        case ')':
                data->flag_next = 1;
                break;
+       case 'L':
+               data->flag_last = 1;
+               break;
        }
 }
 
@@ -81,28 +86,36 @@
        self->entry->init(self, KEYC_NONE);
        data = self->data;
 
-       while ((opt = getopt(argc, argv, "c:t:")) != -1) {
+       while ((opt = getopt(argc, argv, "c:lnpt:")) != -1) {
                switch (opt) {
                case 'c':
                        if (data->name == NULL)
                                data->name = xstrdup(optarg);
                        break;
-               case 't':
-                       if (data->flag_next || data->flag_previous)
+               case 'l':
+                       if (data->flag_next || data->flag_previous ||
+                           data->target != NULL)
                                goto usage;
-                       if (data->target == NULL)
-                               data->target = xstrdup(optarg);
+                       data->flag_last = 1;
                        break;
                case 'n':
-                       if (data->flag_previous || data->target != NULL)
+                       if (data->flag_previous || data->flag_last ||
+                           data->target != NULL)
                                goto usage;
                        data->flag_next = 1;
                        break;
                case 'p':
-                       if (data->flag_next || data->target != NULL)
+                       if (data->flag_next || data->flag_last ||
+                           data->target != NULL)
                                goto usage;
                        data->flag_next = 1;
                        break;
+               case 't':
+                       if (data->flag_next || data->flag_previous)
+                               goto usage;
+                       if (data->target == NULL)
+                               data->target = xstrdup(optarg);
+                       break;
                default:
                        goto usage;
                }
@@ -134,6 +147,7 @@
        if ((c = cmd_find_client(ctx, data->name)) == NULL)
                return (-1);
 
+       s = NULL;
        if (data->flag_next) {
                if ((s = session_next_session(c->session)) == NULL) {
                        ctx->error(ctx, "can't find next session");
@@ -144,11 +158,21 @@
                        ctx->error(ctx, "can't find previous session");
                        return (-1);
                }
+       } else if (data->flag_last) {
+               if (c->last_session != UINT_MAX &&
+                   c->last_session < ARRAY_LENGTH(&sessions))
+                       s = ARRAY_ITEM(&sessions, c->last_session);
+               if (s == NULL) {
+                       ctx->error(ctx, "can't find last session");
+                       return (-1);
+               }
        } else
                s = cmd_find_session(ctx, data->target);
-
        if (s == NULL)
                return (-1);
+
+       if (c->session != NULL)
+               session_index(c->session, &c->last_session);
        c->session = s;
 
        recalculate_sizes();
@@ -179,6 +203,8 @@
        off += xsnprintf(buf, len, "%s", self->entry->name);
        if (data == NULL)
                return (off);
+       if (off < len && data->flag_last)
+               off += xsnprintf(buf + off, len - off, "%s", " -l");
        if (off < len && data->flag_next)
                off += xsnprintf(buf + off, len - off, "%s", " -n");
        if (off < len && data->flag_previous)

Index: tmux.h
===================================================================
RCS file: /cvsroot/tmux/tmux/tmux.h,v
retrieving revision 1.586
retrieving revision 1.587
diff -u -d -r1.586 -r1.587
--- tmux.h      11 Dec 2010 16:15:02 -0000      1.586
+++ tmux.h      11 Dec 2010 18:42:20 -0000      1.587
@@ -1153,6 +1153,7 @@
        struct mode_key_data prompt_mdata;
 
        struct session  *session;
+       u_int            last_session;
 
        int              references;
 };

Index: key-bindings.c
===================================================================
RCS file: /cvsroot/tmux/tmux/key-bindings.c,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -d -r1.96 -r1.97
--- key-bindings.c      24 Oct 2010 01:34:30 -0000      1.96
+++ key-bindings.c      11 Dec 2010 18:42:20 -0000      1.97
@@ -128,6 +128,7 @@
                { '=',                    0, &cmd_choose_buffer_entry },
                { '?',                    0, &cmd_list_keys_entry },
                { 'D',                    0, &cmd_choose_client_entry },
+               { 'L',                    0, &cmd_switch_client_entry },
                { '[',                    0, &cmd_copy_mode_entry },
                { '\'',                   0, &cmd_command_prompt_entry },
                { '\002', /* C-b */       0, &cmd_send_prefix_entry },


------------------------------------------------------------------------------
Oracle to DB2 Conversion Guide: Learn learn about native support for PL/SQL,
new data types, scalar functions, improved concurrency, built-in packages, 
OCI, SQL*Plus, data movement tools, best practices and more.
http://p.sf.net/sfu/oracle-sfdev2dev 
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to