Hi,
    I have been wanting the capability to capture the history and store
store it to a file much akin to save-buffer. While checking the sources,
I noticed that it had been noticed in TODO to be added with -h to
capture-pane. So I have implemented it. I have also tested it myself.

%<%<------------------------------------------------------------------


Adding -h to capture-pane now captures history of that pane.

Signed-off-by: Raghavendra D Prabhu <rpra...@wnohang.net>
---
 cmd-capture-pane.c |   50 ++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/cmd-capture-pane.c b/cmd-capture-pane.c
index a2c2fdd..1ed0bb3 100644
--- a/cmd-capture-pane.c
+++ b/cmd-capture-pane.c
@@ -31,8 +31,8 @@ int   cmd_capture_pane_exec(struct cmd *, struct cmd_ctx *);
const struct cmd_entry cmd_capture_pane_entry = {
        "capture-pane", "capturep",
-       "b:t:", 0, 0,
-       "[-b buffer-index] [-t target-pane]",
+       "b:t:h", 0, 0,
+       "[-b buffer-index] [-t target-pane] [-h capture-history]",
        0,
        NULL,
        NULL,
@@ -47,8 +47,9 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
        char                    *buf, *line, *cause;
        struct screen           *s;
        int                      buffer;
-       u_int                    i, limit;
-       size_t                   len, linelen;
+       u_int                    i, j, limit;
+       size_t                   len, linelen, cellsize;
+       struct grid*             gd;
if (cmd_find_pane(ctx, args_get(args, 't'), NULL, &wp) == NULL)
                return (-1);
@@ -57,16 +58,37 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
        buf = NULL;
        len = 0;
- for (i = 0; i < screen_size_y(s); i++) {
-              line = grid_view_string_cells(s->grid, 0, i, screen_size_x(s));
-              linelen = strlen(line);
-
-              buf = xrealloc(buf, 1, len + linelen + 1);
-              memcpy(buf + len, line, linelen);
-              len += linelen;
-              buf[len++] = '\n';
-
-              xfree(line);
+       if (!args_has(args, 'h')) {
+              for (i = 0; i < screen_size_y(s); i++) {
+                       line = grid_view_string_cells(s->grid, 0, i, 
screen_size_x(s));
+                       linelen = strlen(line);
+
+                       buf = xrealloc(buf, 1, len + linelen + 1);
+                       memcpy(buf + len, line, linelen);
+                       len += linelen;
+                       buf[len++] = '\n';
+
+                       xfree(line);
+               }
+       } else  {
+               gd = s->grid;
+               line = NULL;
+               // Looping over the previous history + viewable text
+               for (i = 0; i < gd->hsize + gd->sy; i++) {
+                       cellsize = gd->linedata[i].cellsize;
+                       line = xrealloc(line,1,cellsize+1);
+                       for (j = 0; j < cellsize; j++) {
+                                       line[j] = 
gd->linedata[i].celldata[j].data;
+                       }
+                       line[cellsize]='\0';
+
+                       buf = xrealloc(buf, 1, len + cellsize + 1);
+                       memcpy(buf + len, line, cellsize);
+                       len += cellsize;
+                       buf[len++] = '\n';
+
+               }
+               xfree(line);
        }
limit = options_get_number(&global_options, "buffer-limit");
--
1.7.4.2

--------------------------
Raghavendra Prabhu
GPG ID:D72BE977

Attachment: pgphDl6R3RErJ.pgp
Description: PGP signature

------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself; 
WebMatrix provides all the features you need to develop and 
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to