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

Modified Files:
        cmd-capture-pane.c cmd-choose-buffer.c cmd-delete-buffer.c 
        cmd-generic.c cmd-list-buffers.c cmd-load-buffer.c 
        cmd-paste-buffer.c cmd-save-buffer.c cmd-set-buffer.c 
        cmd-set-option.c cmd-show-buffer.c cmd.c paste.c server.c 
        session.c status.c tmux.1 tmux.c tmux.h window-copy.c 
Removed Files:
        cmd-copy-buffer.c 
Log Message:
Global paste buffers instead of per-session which renders copy-buffer useless.
As a consequence buffer-limit is now a server option.


Index: cmd-set-option.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-set-option.c,v
retrieving revision 1.102
retrieving revision 1.103
diff -u -d -r1.102 -r1.103
--- cmd-set-option.c    22 Dec 2010 15:23:59 -0000      1.102
+++ cmd-set-option.c    30 Dec 2010 22:39:49 -0000      1.103
@@ -74,6 +74,7 @@
 };
 
 const struct set_option_entry set_option_table[] = {
+       { "buffer-limit", SET_OPTION_NUMBER, 1, INT_MAX, NULL },
        { "escape-time", SET_OPTION_NUMBER, 0, INT_MAX, NULL },
        { "exit-unattached", SET_OPTION_FLAG, 0, 0, NULL },
        { "quiet", SET_OPTION_FLAG, 0, 0, NULL },
@@ -83,15 +84,14 @@
 const struct set_option_entry set_session_option_table[] = {
        { "base-index", SET_OPTION_NUMBER, 0, INT_MAX, NULL },
        { "bell-action", SET_OPTION_CHOICE, 0, 0, set_option_bell_action_list },
-       { "buffer-limit", SET_OPTION_NUMBER, 1, INT_MAX, NULL },
        { "default-command", SET_OPTION_STRING, 0, 0, NULL },
        { "default-path", SET_OPTION_STRING, 0, 0, NULL },
        { "default-shell", SET_OPTION_STRING, 0, 0, NULL },
        { "default-terminal", SET_OPTION_STRING, 0, 0, NULL },
        { "destroy-unattached", SET_OPTION_FLAG, 0, 0, NULL },
        { "detach-on-destroy", SET_OPTION_FLAG, 0, 0, NULL },
-       { "display-panes-colour", SET_OPTION_COLOUR, 0, 0, NULL },
        { "display-panes-active-colour", SET_OPTION_COLOUR, 0, 0, NULL },
+       { "display-panes-colour", SET_OPTION_COLOUR, 0, 0, NULL },
        { "display-panes-time", SET_OPTION_NUMBER, 1, INT_MAX, NULL },
        { "display-time", SET_OPTION_NUMBER, 1, INT_MAX, NULL },
        { "history-limit", SET_OPTION_NUMBER, 0, INT_MAX, NULL },

Index: cmd-delete-buffer.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-delete-buffer.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- cmd-delete-buffer.c 14 Nov 2009 17:56:39 -0000      1.8
+++ cmd-delete-buffer.c 30 Dec 2010 22:39:49 -0000      1.9
@@ -30,7 +30,7 @@
 
 const struct cmd_entry cmd_delete_buffer_entry = {
        "delete-buffer", "deleteb",
-       CMD_BUFFER_SESSION_USAGE,
+       CMD_BUFFER_USAGE,
        0, "",
        cmd_buffer_init,
        cmd_buffer_parse,
@@ -43,14 +43,10 @@
 cmd_delete_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 {
        struct cmd_buffer_data  *data = self->data;
-       struct session          *s;
-
-       if ((s = cmd_find_session(ctx, data->target)) == NULL)
-               return (-1);
 
        if (data->buffer == -1)
-               paste_free_top(&s->buffers);
-       else if (paste_free_index(&s->buffers, data->buffer) != 0) {
+               paste_free_top(&global_buffers);
+       else if (paste_free_index(&global_buffers, data->buffer) != 0) {
                ctx->error(ctx, "no buffer %d", data->buffer);
                return (-1);
        }

Index: cmd-capture-pane.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-capture-pane.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- cmd-capture-pane.c  22 Jan 2010 17:29:19 -0000      1.3
+++ cmd-capture-pane.c  30 Dec 2010 22:39:49 -0000      1.4
@@ -18,6 +18,7 @@
 
 #include <sys/types.h>
 
+#include <stdlib.h>
 #include <string.h>
 
 #include "tmux.h"
@@ -26,31 +27,93 @@
  * Write the entire contents of a pane to a buffer.
  */
 
+int    cmd_capture_pane_parse(struct cmd *, int, char **, char **);
 int    cmd_capture_pane_exec(struct cmd *, struct cmd_ctx *);
+void   cmd_capture_pane_free(struct cmd *);
+void   cmd_capture_pane_init(struct cmd *, int);
+size_t cmd_capture_pane_print(struct cmd *, char *, size_t);
+
+struct cmd_capture_pane_data {
+       char    *target;
+       int      buffer;
+};
 
 const struct cmd_entry cmd_capture_pane_entry = {
        "capture-pane", "capturep",
        CMD_BUFFER_PANE_USAGE,
        0, "",
-       cmd_buffer_init,
-       cmd_buffer_parse,
+       cmd_capture_pane_init,
+       cmd_capture_pane_parse,
        cmd_capture_pane_exec,
-       cmd_buffer_free,
-       cmd_buffer_print
+       cmd_capture_pane_free,
+       cmd_capture_pane_print
 };
 
+/* ARGSUSED */
+void
+cmd_capture_pane_init(struct cmd *self, unused int arg)
+{
+       struct cmd_capture_pane_data    *data;
+
+       self->data = data = xmalloc(sizeof *data);
+       data->buffer = -1;
+       data->target = NULL;
+}
+
+int
+cmd_capture_pane_parse(struct cmd *self, int argc, char **argv, char **cause)
+{
+       struct cmd_capture_pane_data    *data;
+       const char                      *errstr;
+       int                              n, opt;
+
+       self->entry->init(self, KEYC_NONE);
+       data = self->data;
+
+       while ((opt = getopt(argc, argv, "b:t:")) != -1) {
+               switch (opt) {
+               case 'b':
+                       if (data->buffer == -1) {
+                               n = strtonum(optarg, 0, INT_MAX, &errstr);
+                               if (errstr != NULL) {
+                                       xasprintf(cause, "buffer %s", errstr);
+                                       goto error;
+                               }
+                               data->buffer = n;
+                       }
+                       break;
+               case 't':
+                       if (data->target == NULL)
+                               data->target = xstrdup(optarg);
+                       break;
+               default:
+                       goto usage;
+               }
+       }
+       argc -= optind;
+       argv += optind;
+
+       return (0);
+
+usage:
+       xasprintf(cause, "usage: %s %s", self->entry->name, self->entry->usage);
+
+error:
+       self->entry->free(self);
+       return (-1);
+}
+
 int
 cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
 {
-       struct cmd_buffer_data  *data = self->data;
-       struct window_pane      *wp;
-       char                    *buf, *line;
-       struct screen           *s;
-       struct session          *sess;
-       u_int                    i, limit;
-       size_t                   len, linelen;
+       struct cmd_capture_pane_data    *data = self->data;
+       struct window_pane              *wp;
+       char                            *buf, *line;
+       struct screen                   *s;
+       u_int                            i, limit;
+       size_t                           len, linelen;
 
-       if (cmd_find_pane(ctx, data->target, &sess, &wp) == NULL)
+       if (cmd_find_pane(ctx, data->target, NULL, &wp) == NULL)
                return (-1);
        s = &wp->base;
 
@@ -69,15 +132,41 @@
               xfree(line);
        }
 
-       limit = options_get_number(&sess->options, "buffer-limit");
+       limit = options_get_number(&global_options, "buffer-limit");
        if (data->buffer == -1) {
-               paste_add(&sess->buffers, buf, len, limit);
+               paste_add(&global_buffers, buf, len, limit);
                return (0);
        }
-       if (paste_replace(&sess->buffers, data->buffer, buf, len) != 0) {
+       if (paste_replace(&global_buffers, data->buffer, buf, len) != 0) {
                ctx->error(ctx, "no buffer %d", data->buffer);
                xfree(buf);
                return (-1);
        }
        return (0);
 }
+
+void
+cmd_capture_pane_free(struct cmd *self)
+{
+       struct cmd_capture_pane_data    *data = self->data;
+
+       if (data->target != NULL)
+               xfree(data->target);
+       xfree(data);
+}
+
+size_t
+cmd_capture_pane_print(struct cmd *self, char *buf, size_t len)
+{
+       struct cmd_capture_pane_data    *data = self->data;
+       size_t                           off = 0;
+
+       off += xsnprintf(buf, len, "%s", self->entry->name);
+       if (data == NULL)
+               return (off);
+       if (off < len && data->buffer != -1)
+               off += xsnprintf(buf + off, len - off, " -b %d", data->buffer);
+       if (off < len && data->target != NULL)
+               off += xsnprintf(buf + off, len - off, " -t %s", data->target);
+       return (off);
+}

Index: cmd.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd.c,v
retrieving revision 1.146
retrieving revision 1.147
diff -u -d -r1.146 -r1.147
--- cmd.c       22 Dec 2010 15:36:44 -0000      1.146
+++ cmd.c       30 Dec 2010 22:39:49 -0000      1.147
@@ -39,7 +39,6 @@
        &cmd_clock_mode_entry,
        &cmd_command_prompt_entry,
        &cmd_confirm_before_entry,
-       &cmd_copy_buffer_entry,
        &cmd_copy_mode_entry,
        &cmd_delete_buffer_entry,
        &cmd_detach_client_entry,

Index: cmd-show-buffer.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-show-buffer.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- cmd-show-buffer.c   4 Dec 2009 22:14:47 -0000       1.12
+++ cmd-show-buffer.c   30 Dec 2010 22:39:49 -0000      1.13
@@ -28,7 +28,7 @@
 
 const struct cmd_entry cmd_show_buffer_entry = {
        "show-buffer", "showb",
-       CMD_BUFFER_SESSION_USAGE,
+       CMD_BUFFER_USAGE,
        0, "",
        cmd_buffer_init,
        cmd_buffer_parse,
@@ -47,20 +47,21 @@
        size_t                   size, len;
        u_int                    width;
 
-       if ((s = cmd_find_session(ctx, data->target)) == NULL)
+       if ((s = cmd_find_session(ctx, NULL)) == NULL)
                return (-1);
 
        if (data->buffer == -1) {
-               if ((pb = paste_get_top(&s->buffers)) == NULL) {
+               if ((pb = paste_get_top(&global_buffers)) == NULL) {
                        ctx->error(ctx, "no buffers");
                        return (-1);
                }
-       } else if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) {
-               ctx->error(ctx, "no buffer %d", data->buffer);
-               return (-1);
+       } else {
+               pb = paste_get_index(&global_buffers, data->buffer);
+               if (pb == NULL) {
+                       ctx->error(ctx, "no buffer %d", data->buffer);
+                       return (-1);
+               }
        }
-       if (pb == NULL)
-               return (0);
 
        size = pb->size;
        if (size > SIZE_MAX / 4 - 1)

Index: cmd-paste-buffer.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-paste-buffer.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- cmd-paste-buffer.c  11 Aug 2010 22:17:32 -0000      1.29
+++ cmd-paste-buffer.c  30 Dec 2010 22:39:49 -0000      1.30
@@ -135,9 +135,10 @@
                return (-1);
 
        if (data->buffer == -1)
-               pb = paste_get_top(&s->buffers);
+               pb = paste_get_top(&global_buffers);
        else {
-               if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) {
+               pb = paste_get_index(&global_buffers, data->buffer);
+               if (pb == NULL) {
                        ctx->error(ctx, "no buffer %d", data->buffer);
                        return (-1);
                }
@@ -149,9 +150,9 @@
        /* Delete the buffer if -d. */
        if (data->flag_delete) {
                if (data->buffer == -1)
-                       paste_free_top(&s->buffers);
+                       paste_free_top(&global_buffers);
                else
-                       paste_free_index(&s->buffers, data->buffer);
+                       paste_free_index(&global_buffers, data->buffer);
        }
 
        return (0);

Index: tmux.1
===================================================================
RCS file: /cvsroot/tmux/tmux/tmux.1,v
retrieving revision 1.280
retrieving revision 1.281
diff -u -d -r1.280 -r1.281
--- tmux.1      27 Dec 2010 21:17:25 -0000      1.280
+++ tmux.1      30 Dec 2010 22:39:49 -0000      1.281
@@ -1598,6 +1598,10 @@
 .Pp
 Available server options are:
 .Bl -tag -width Ds
+.It Ic buffer-limit Ar number
+Set the number of buffers; as new buffers are added to the top of the stack,
+old ones are removed from the bottom if necessary to maintain this maximum
+length.
 .It Ic escape-time
 Set the time in milliseconds for which
 .Nm
@@ -1630,10 +1634,6 @@
 means all bells are ignored and
 .Ic current
 means only bell in windows other than the current window are ignored.
-.It Ic buffer-limit Ar number
-Set the number of buffers kept for each session; as new buffers are added to
-the top of the stack, old ones are removed from the bottom if necessary to
-maintain this maximum length.
 .It Ic default-command Ar shell-command
 Set the command used for new windows (if not specified when the window is
 created) to
@@ -2571,29 +2571,16 @@
 .It Ic clear-history Op Fl t Ar target-pane
 .D1 (alias: Ic clearhist )
 Remove and free the history for the specified pane.
-.It Xo Ic copy-buffer
-.Op Fl a Ar src-index
-.Op Fl b Ar dst-index
-.Op Fl s Ar src-session
-.Op Fl t Ar dst-session
-.Xc
-.D1 (alias: Ic copyb )
-Copy a session paste buffer to another session.
-If no sessions are specified, the current one is used instead.
-.It Xo Ic delete-buffer
-.Op Fl b Ar buffer-index
-.Op Fl t Ar target-session
-.Xc
+.It Ic delete-buffer Op Fl b Ar buffer-index
 .D1 (alias: Ic deleteb )
 Delete the buffer at
 .Ar buffer-index ,
 or the top buffer if not specified.
-.It Ic list-buffers Op Fl t Ar target-session
+.It Ic list-buffers
 .D1 (alias: Ic lsb )
-List the buffers in the given session.
-.It Xo Ic load-buffer
+List the global buffers.
+.It Xo Ic load-buffer 
 .Op Fl b Ar buffer-index
-.Op Fl t Ar target-session
 .Ar path
 .Xc
 .D1 (alias: Ic loadb )
@@ -2622,7 +2609,6 @@
 .It Xo Ic save-buffer
 .Op Fl a
 .Op Fl b Ar buffer-index
-.Op Fl t Ar target-session
 .Ar path
 .Xc
 .D1 (alias: Ic saveb )
@@ -2633,7 +2619,6 @@
 option appends to rather than overwriting the file.
 .It Xo Ic set-buffer
 .Op Fl b Ar buffer-index
-.Op Fl t Ar target-session
 .Ar data
 .Xc
 .D1 (alias: Ic setb )
@@ -2641,7 +2626,6 @@
 .Ar data .
 .It Xo Ic show-buffer
 .Op Fl b Ar buffer-index
-.Op Fl t Ar target-session
 .Xc
 .D1 (alias: Ic showb )
 Display the contents of the specified buffer.

Index: paste.c
===================================================================
RCS file: /cvsroot/tmux/tmux/paste.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- paste.c     22 Jun 2010 23:36:54 -0000      1.15
+++ paste.c     30 Dec 2010 22:39:49 -0000      1.16
@@ -28,19 +28,6 @@
  * string!
  */
 
-void
-paste_init_stack(struct paste_stack *ps)
-{
-       ARRAY_INIT(ps);
-}
-
-void
-paste_free_stack(struct paste_stack *ps)
-{
-       while (paste_free_top(ps) == 0)
-               ;
-}
-
 /* Return each item of the stack in turn. */
 struct paste_buffer *
 paste_walk_stack(struct paste_stack *ps, uint *idx)

Index: cmd-list-buffers.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-list-buffers.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- cmd-list-buffers.c  22 Jun 2010 23:35:20 -0000      1.16
+++ cmd-list-buffers.c  30 Dec 2010 22:39:49 -0000      1.17
@@ -30,29 +30,25 @@
 
 const struct cmd_entry cmd_list_buffers_entry = {
        "list-buffers", "lsb",
-       CMD_TARGET_SESSION_USAGE,
+       "",
        0, "",
-       cmd_target_init,
-       cmd_target_parse,
+       NULL,
+       NULL,
        cmd_list_buffers_exec,
-       cmd_target_free,
-       cmd_target_print
+       NULL,
+       NULL    
 };
 
+/* ARGSUSED */
 int
-cmd_list_buffers_exec(struct cmd *self, struct cmd_ctx *ctx)
+cmd_list_buffers_exec(unused struct cmd *self, struct cmd_ctx *ctx)
 {
-       struct cmd_target_data  *data = self->data;
-       struct session          *s;
        struct paste_buffer     *pb;
        u_int                    idx;
        char                    *tmp;
 
-       if ((s = cmd_find_session(ctx, data->target)) == NULL)
-               return (-1);
-
        idx = 0;
-       while ((pb = paste_walk_stack(&s->buffers, &idx)) != NULL) {
+       while ((pb = paste_walk_stack(&global_buffers, &idx)) != NULL) {
                tmp = paste_print(pb, 50);
                ctx->print(ctx,
                    "%u: %zu bytes: \"%s\"", idx - 1, pb->size, tmp);

Index: cmd-save-buffer.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-save-buffer.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- cmd-save-buffer.c   9 Aug 2010 21:44:25 -0000       1.12
+++ cmd-save-buffer.c   30 Dec 2010 22:39:49 -0000      1.13
@@ -32,7 +32,7 @@
 
 const struct cmd_entry cmd_save_buffer_entry = {
        "save-buffer", "saveb",
-       "[-a] " CMD_BUFFER_SESSION_USAGE " path",
+       "[-a] " CMD_BUFFER_USAGE " path",
        CMD_ARG1, "a",
        cmd_buffer_init,
        cmd_buffer_parse,
@@ -45,21 +45,18 @@
 cmd_save_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 {
        struct cmd_buffer_data  *data = self->data;
-       struct session          *s;
        struct paste_buffer     *pb;
        mode_t                   mask;
        FILE                    *f;
 
-       if ((s = cmd_find_session(ctx, data->target)) == NULL)
-               return (-1);
-
        if (data->buffer == -1) {
-               if ((pb = paste_get_top(&s->buffers)) == NULL) {
+               if ((pb = paste_get_top(&global_buffers)) == NULL) {
                        ctx->error(ctx, "no buffers");
                        return (-1);
                }
        } else {
-               if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL) {
+               pb = paste_get_index(&global_buffers, data->buffer);
+               if (pb == NULL) {
                        ctx->error(ctx, "no buffer %d", data->buffer);
                        return (-1);
                }

Index: cmd-load-buffer.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-load-buffer.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- cmd-load-buffer.c   22 Dec 2010 15:28:50 -0000      1.18
+++ cmd-load-buffer.c   30 Dec 2010 22:39:49 -0000      1.19
@@ -35,7 +35,7 @@
 
 const struct cmd_entry cmd_load_buffer_entry = {
        "load-buffer", "loadb",
-       CMD_BUFFER_SESSION_USAGE " path",
+       CMD_BUFFER_USAGE " path",
        CMD_ARG1, "",
        cmd_buffer_init,
        cmd_buffer_parse,
@@ -44,26 +44,16 @@
        cmd_buffer_print
 };
 
-struct cmd_load_buffer_cdata {
-       struct session  *session;
-       int              buffer;
-};
-
 int
 cmd_load_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 {
-       struct cmd_buffer_data          *data = self->data;
-       struct cmd_load_buffer_cdata    *cdata;
-       struct session                  *s;
-       struct client                   *c = ctx->cmdclient;
-       FILE                            *f;
-       char                            *pdata, *new_pdata;
-       size_t                           psize;
-       u_int                            limit;
-       int                              ch;
-
-       if ((s = cmd_find_session(ctx, data->target)) == NULL)
-               return (-1);
+       struct cmd_buffer_data  *data = self->data;
+       struct client           *c = ctx->cmdclient;
+       FILE                    *f;
+       char                    *pdata, *new_pdata;
+       size_t                   psize;
+       u_int                    limit;
+       int                      ch;
 
        if (strcmp(data->arg, "-") == 0) {
                if (c == NULL) {
@@ -79,11 +69,7 @@
                        return (-1);
                }
 
-               cdata = xmalloc(sizeof *cdata);
-               cdata->session = s;
-               cdata->session->references++;
-               cdata->buffer = data->buffer;
-               c->stdin_data = cdata;
+               c->stdin_data = &data->buffer;
                c->stdin_callback = cmd_load_buffer_callback;
 
                c->references++;
@@ -115,14 +101,13 @@
                pdata[psize] = '\0';
 
        fclose(f);
-       f = NULL;
 
-       limit = options_get_number(&s->options, "buffer-limit");
+       limit = options_get_number(&global_options, "buffer-limit");
        if (data->buffer == -1) {
-               paste_add(&s->buffers, pdata, psize, limit);
+               paste_add(&global_buffers, pdata, psize, limit);
                return (0);
        }
-       if (paste_replace(&s->buffers, data->buffer, pdata, psize) != 0) {
+       if (paste_replace(&global_buffers, data->buffer, pdata, psize) != 0) {
                ctx->error(ctx, "no buffer %d", data->buffer);
                return (-1);
        }
@@ -140,11 +125,10 @@
 void
 cmd_load_buffer_callback(struct client *c, void *data)
 {
-       struct cmd_load_buffer_cdata    *cdata = data;
-       struct session                  *s = cdata->session;
-       char                            *pdata;
-       size_t                           psize;
-       u_int                            limit;
+       char    *pdata;
+       size_t   psize;
+       u_int    limit;
+       int     *buffer = data;
 
        /*
         * Event callback has already checked client is not dead and reduced
@@ -152,34 +136,23 @@
         */
        c->flags |= CLIENT_EXIT;
 
-       /* Does the target session still exist? */
-       if (!session_alive(s))
-               goto out;
-
        psize = EVBUFFER_LENGTH(c->stdin_event->input);
        if (psize == 0)
-               goto out;
+               return;
 
        pdata = malloc(psize + 1);
        if (pdata == NULL)
-               goto out;
+               return;
        bufferevent_read(c->stdin_event, pdata, psize);
        pdata[psize] = '\0';
 
-       limit = options_get_number(&s->options, "buffer-limit");
-       if (cdata->buffer == -1) {
-               paste_add(&s->buffers, pdata, psize, limit);
-               goto out;
-       }
-       if (paste_replace(&s->buffers, cdata->buffer, pdata, psize) != 0) {
+       limit = options_get_number(&global_options, "buffer-limit");
+       if (*buffer == -1)
+               paste_add(&global_buffers, pdata, psize, limit);
+       else if (paste_replace(&global_buffers, *buffer, pdata, psize) != 0) {
                /* No context so can't use server_client_msg_error. */
                evbuffer_add_printf(
-                   c->stderr_event->output, "no buffer %d\n", cdata->buffer);
+                   c->stderr_event->output, "no buffer %d\n", *buffer);
                bufferevent_enable(c->stderr_event, EV_WRITE);
-               goto out;
        }
-
-out:
-       cdata->session->references--;
-       xfree(cdata);
 }

--- cmd-copy-buffer.c DELETED ---

Index: window-copy.c
===================================================================
RCS file: /cvsroot/tmux/tmux/window-copy.c,v
retrieving revision 1.126
retrieving revision 1.127
diff -u -d -r1.126 -r1.127
--- window-copy.c       30 Dec 2010 22:27:38 -0000      1.126
+++ window-copy.c       30 Dec 2010 22:39:49 -0000      1.127
@@ -52,7 +52,7 @@
 void   window_copy_update_cursor(struct window_pane *, u_int, u_int);
 void   window_copy_start_selection(struct window_pane *);
 int    window_copy_update_selection(struct window_pane *);
-void   window_copy_copy_selection(struct window_pane *, struct session *);
+void   window_copy_copy_selection(struct window_pane *);
 void   window_copy_clear_selection(struct window_pane *);
 void   window_copy_copy_line(
            struct window_pane *, char **, size_t *, u_int, u_int, u_int);
@@ -506,7 +506,7 @@
                break;
        case MODEKEYCOPY_COPYSELECTION:
                if (sess != NULL) {
-                       window_copy_copy_selection(wp, sess);
+                       window_copy_copy_selection(wp);
                        window_pane_reset_mode(wp);
                        return;
                }
@@ -796,7 +796,7 @@
                        s->mode &= ~MODE_MOUSE_ANY;
                        s->mode |= MODE_MOUSE_STANDARD;
                        if (sess != NULL) {
-                               window_copy_copy_selection(wp, sess);
+                               window_copy_copy_selection(wp);
                                window_pane_reset_mode(wp);
                        }
                }
@@ -1210,7 +1210,7 @@
 }
 
 void
-window_copy_copy_selection(struct window_pane *wp, struct session *sess)
+window_copy_copy_selection(struct window_pane *wp)
 {
        struct window_copy_mode_data    *data = wp->modedata;
        struct screen                   *s = &data->screen;
@@ -1305,8 +1305,8 @@
        off--;  /* remove final \n */
 
        /* Add the buffer to the stack. */
-       limit = options_get_number(&sess->options, "buffer-limit");
-       paste_add(&sess->buffers, buf, off, limit);
+       limit = options_get_number(&global_options, "buffer-limit");
+       paste_add(&global_buffers, buf, off, limit);
 }
 
 void

Index: server.c
===================================================================
RCS file: /cvsroot/tmux/tmux/server.c,v
retrieving revision 1.249
retrieving revision 1.250
diff -u -d -r1.249 -r1.250
--- server.c    22 Dec 2010 15:36:44 -0000      1.249
+++ server.c    30 Dec 2010 22:39:49 -0000      1.250
@@ -50,6 +50,8 @@
 struct event    server_ev_accept;
 struct event    server_ev_second;
 
+struct paste_stack global_buffers;
+
 int             server_create_socket(void);
 void            server_loop(void);
 int             server_should_shutdown(void);
@@ -149,6 +151,7 @@
        RB_INIT(&sessions);
        RB_INIT(&dead_sessions);
        TAILQ_INIT(&session_groups);
+       ARRAY_INIT(&global_buffers);
        mode_key_init_trees();
        key_bindings_init();
        utf8_build();

Index: tmux.c
===================================================================
RCS file: /cvsroot/tmux/tmux/tmux.c,v
retrieving revision 1.229
retrieving revision 1.230
diff -u -d -r1.229 -r1.230
--- tmux.c      30 Dec 2010 20:41:08 -0000      1.229
+++ tmux.c      30 Dec 2010 22:39:49 -0000      1.230
@@ -326,12 +326,12 @@
        options_set_number(oo, "quiet", quiet);
        options_set_number(oo, "escape-time", 500);
        options_set_number(oo, "exit-unattached", 0);
+       options_set_number(oo, "buffer-limit", 9);
 
        options_init(&global_s_options, NULL);
        so = &global_s_options;
        options_set_number(so, "base-index", 0);
        options_set_number(so, "bell-action", BELL_ANY);
-       options_set_number(so, "buffer-limit", 9);
        options_set_string(so, "default-command", "%s", "");
        options_set_string(so, "default-path", "%s", "");
        options_set_string(so, "default-shell", "%s", getshell());

Index: cmd-set-buffer.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-set-buffer.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- cmd-set-buffer.c    28 Nov 2009 14:54:12 -0000      1.12
+++ cmd-set-buffer.c    30 Dec 2010 22:39:49 -0000      1.13
@@ -30,7 +30,7 @@
 
 const struct cmd_entry cmd_set_buffer_entry = {
        "set-buffer", "setb",
-       CMD_BUFFER_SESSION_USAGE " data",
+       CMD_BUFFER_USAGE " data",
        CMD_ARG1, "",
        cmd_buffer_init,
        cmd_buffer_parse,
@@ -43,23 +43,20 @@
 cmd_set_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 {
        struct cmd_buffer_data  *data = self->data;
-       struct session          *s;
        u_int                    limit;
        char                    *pdata;
        size_t                   psize;
 
-       if ((s = cmd_find_session(ctx, data->target)) == NULL)
-               return (-1);
-       limit = options_get_number(&s->options, "buffer-limit");
+       limit = options_get_number(&global_options, "buffer-limit");
 
        pdata = xstrdup(data->arg);
        psize = strlen(pdata);
 
        if (data->buffer == -1) {
-               paste_add(&s->buffers, pdata, psize, limit);
+               paste_add(&global_buffers, pdata, psize, limit);
                return (0);
        }
-       if (paste_replace(&s->buffers, data->buffer, pdata, psize) != 0) {
+       if (paste_replace(&global_buffers, data->buffer, pdata, psize) != 0) {
                ctx->error(ctx, "no buffer %d", data->buffer);
                xfree(pdata);
                return (-1);

Index: cmd-generic.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-generic.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- cmd-generic.c       4 Dec 2009 22:14:47 -0000       1.38
+++ cmd-generic.c       30 Dec 2010 22:39:49 -0000      1.39
@@ -332,7 +332,6 @@
 
        self->data = data = xmalloc(sizeof *data);
        data->chflags = 0;
-       data->target = NULL;
        data->buffer = -1;
        data->arg = NULL;
        data->arg2 = NULL;
@@ -349,7 +348,7 @@
        cmd_buffer_init(self, 0);
        data = self->data;
 
-       while ((opt = cmd_getopt(argc, argv, "b:t:", entry->chflags)) != -1) {
+       while ((opt = cmd_getopt(argc, argv, "b:", entry->chflags)) != -1) {
                if (cmd_parse_flags(opt, entry->chflags, &data->chflags) == 0)
                        continue;
                switch (opt) {
@@ -363,10 +362,6 @@
                                data->buffer = n;
                        }
                        break;
-               case 't':
-                       if (data->target == NULL)
-                               data->target = xstrdup(optarg);
-                       break;
                default:
                        goto usage;
                }
@@ -392,8 +387,6 @@
 {
        struct cmd_buffer_data  *data = self->data;
 
-       if (data->target != NULL)
-               xfree(data->target);
        if (data->arg != NULL)
                xfree(data->arg);
        if (data->arg2 != NULL)
@@ -413,8 +406,6 @@
        off += cmd_print_flags(buf, len, off, data->chflags);
        if (off < len && data->buffer != -1)
                off += xsnprintf(buf + off, len - off, " -b %d", data->buffer);
-       if (off < len && data->target != NULL)
-               off += cmd_prarg(buf + off, len - off, " -t ", data->target);
        if (off < len && data->arg != NULL)
                off += cmd_prarg(buf + off, len - off, " ", data->arg);
        if (off < len && data->arg2 != NULL)

Index: cmd-choose-buffer.c
===================================================================
RCS file: /cvsroot/tmux/tmux/cmd-choose-buffer.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- cmd-choose-buffer.c 22 Jun 2010 23:35:20 -0000      1.1
+++ cmd-choose-buffer.c 30 Dec 2010 22:39:49 -0000      1.2
@@ -67,14 +67,14 @@
        if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL)
                return (-1);
 
-       if (paste_get_top(&s->buffers) == NULL)
+       if (paste_get_top(&global_buffers) == NULL)
                return (0);
 
        if (window_pane_set_mode(wl->window->active, &window_choose_mode) != 0)
                return (0);
 
        idx = 0;
-       while ((pb = paste_walk_stack(&s->buffers, &idx)) != NULL) {
+       while ((pb = paste_walk_stack(&global_buffers, &idx)) != NULL) {
                tmp = paste_print(pb, 50);
                window_choose_add(wl->window->active, idx - 1,
                    "%u: %zu bytes: \"%s\"", idx - 1, pb->size, tmp);

Index: session.c
===================================================================
RCS file: /cvsroot/tmux/tmux/session.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -d -r1.83 -r1.84
--- session.c   22 Dec 2010 15:36:44 -0000      1.83
+++ session.c   30 Dec 2010 22:39:49 -0000      1.84
@@ -104,8 +104,6 @@
        TAILQ_INIT(&s->lastw);
        RB_INIT(&s->windows);
 
-       paste_init_stack(&s->buffers);
-
        options_init(&s->options, &global_s_options);
        environ_init(&s->environ);
        if (env != NULL)
@@ -154,7 +152,6 @@
        session_group_remove(s);
        environ_free(&s->environ);
        options_free(&s->options);
-       paste_free_stack(&s->buffers);
 
        while (!TAILQ_EMPTY(&s->lastw))
                winlink_stack_remove(&s->lastw, TAILQ_FIRST(&s->lastw));

Index: tmux.h
===================================================================
RCS file: /cvsroot/tmux/tmux/tmux.h,v
retrieving revision 1.593
retrieving revision 1.594
diff -u -d -r1.593 -r1.594
--- tmux.h      30 Dec 2010 22:27:38 -0000      1.593
+++ tmux.h      30 Dec 2010 22:39:49 -0000      1.594
@@ -950,8 +950,6 @@
 
        struct options   options;
 
-       struct paste_stack buffers;
-
 #define SESSION_UNATTACHED 0x1 /* not attached to any clients */
        int              flags;
 
@@ -1254,7 +1252,6 @@
 struct cmd_buffer_data {
        uint64_t chflags;
 
-       char    *target;
        int      buffer;
 
        char    *arg;
@@ -1447,8 +1444,6 @@
 int    tty_keys_next(struct tty *);
 
 /* paste.c */
-void            paste_init_stack(struct paste_stack *);
-void            paste_free_stack(struct paste_stack *);
 struct paste_buffer *paste_walk_stack(struct paste_stack *, uint *);
 struct paste_buffer *paste_get_top(struct paste_stack *);
 struct paste_buffer *paste_get_index(struct paste_stack *, u_int);
@@ -1502,7 +1497,6 @@
 extern const struct cmd_entry cmd_clock_mode_entry;
 extern const struct cmd_entry cmd_command_prompt_entry;
 extern const struct cmd_entry cmd_confirm_before_entry;
-extern const struct cmd_entry cmd_copy_buffer_entry;
 extern const struct cmd_entry cmd_copy_mode_entry;
 extern const struct cmd_entry cmd_delete_buffer_entry;
 extern const struct cmd_entry cmd_detach_client_entry;
@@ -1605,8 +1599,8 @@
 size_t cmd_srcdst_print(struct cmd *, char *, size_t);
 #define CMD_BUFFER_PANE_USAGE "[-b buffer-index] [-t target-pane]"
 #define CMD_BUFFER_WINDOW_USAGE "[-b buffer-index] [-t target-window]"
-#define CMD_BUFFER_SESSION_USAGE "[-b buffer-index] [-t target-session]"
 #define CMD_BUFFER_CLIENT_USAGE "[-b buffer-index] [-t target-client]"
+#define CMD_BUFFER_USAGE "[-b buffer-index]"
 void   cmd_buffer_init(struct cmd *, int);
 int    cmd_buffer_parse(struct cmd *, int, char **, char **);
 void   cmd_buffer_free(struct cmd *);
@@ -1636,6 +1630,7 @@
 /* server.c */
 extern struct clients clients;
 extern struct clients dead_clients;
+extern struct paste_stack global_buffers;
 int     server_start(void);
 void    server_update_socket(void);
 

Index: status.c
===================================================================
RCS file: /cvsroot/tmux/tmux/status.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -d -r1.151 -r1.152
--- status.c    11 Dec 2010 16:15:02 -0000      1.151
+++ status.c    30 Dec 2010 22:39:49 -0000      1.152
@@ -996,7 +996,7 @@
                c->flags |= CLIENT_STATUS;
                break;
        case MODEKEYEDIT_PASTE:
-               if ((pb = paste_get_top(&c->session->buffers)) == NULL)
+               if ((pb = paste_get_top(&global_buffers)) == NULL)
                        break;
                for (n = 0; n < pb->size; n++) {
                        ch = (u_char) pb->data[n];


------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to