From 28f23f18e9d79405a60348c4f7aeded33da9135b Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 25 Sep 2015 15:53:07 +0000 Subject: [PATCH] Free the history when it is cleared, based on a diff from Carlo Cannas. --- cmd-clear-history.c | 4 +--- grid.c | 20 ++++++++++++++++---- tmux.h | 1 + 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/cmd-clear-history.c b/cmd-clear-history.c index 88dbbcf7..63e9d548 100644 --- a/cmd-clear-history.c +++ b/cmd-clear-history.c @@ -47,9 +47,7 @@ cmd_clear_history_exec(struct cmd *self, struct cmd_q *cmdq) if (wp->mode == &window_copy_mode) window_pane_reset_mode(wp); - - grid_move_lines(gd, 0, gd->hsize, gd->sy); - gd->hsize = 0; + grid_clear_history(gd); return (CMD_RETURN_NORMAL); } diff --git a/grid.c b/grid.c index 93fed05e..99dafab2 100644 --- a/grid.c +++ b/grid.c @@ -170,6 +170,18 @@ grid_scroll_history(struct grid *gd) gd->hsize++; } +/* Clear the history. */ +void +grid_clear_history(struct grid *gd) +{ + grid_clear_lines(gd, 0, gd->hsize); + grid_move_lines(gd, 0, gd->hsize, gd->sy); + + gd->hsize = 0; + gd->linedata = xreallocarray(gd->linedata, gd->sy, + sizeof *gd->linedata); +} + /* Scroll a region up, moving the top line into the history. */ void grid_scroll_history_region(struct grid *gd, u_int upper, u_int lower) @@ -344,8 +356,8 @@ grid_move_lines(struct grid *gd, u_int dy, u_int py, u_int ny) grid_clear_lines(gd, yy, 1); } - memmove( - &gd->linedata[dy], &gd->linedata[py], ny * (sizeof *gd->linedata)); + memmove(&gd->linedata[dy], &gd->linedata[py], + ny * (sizeof *gd->linedata)); /* Wipe any lines that have been moved (without freeing them). */ for (yy = py; yy < py + ny; yy++) { @@ -371,8 +383,8 @@ grid_move_cells(struct grid *gd, u_int dx, u_int px, u_int py, u_int nx) grid_expand_line(gd, py, px + nx); grid_expand_line(gd, py, dx + nx); - memmove( - &gl->celldata[dx], &gl->celldata[px], nx * sizeof *gl->celldata); + memmove(&gl->celldata[dx], &gl->celldata[px], + nx * sizeof *gl->celldata); /* Wipe any cells that have been moved. */ for (xx = px; xx < px + nx; xx++) { diff --git a/tmux.h b/tmux.h index 3fd057e9..5bf9b39b 100644 --- a/tmux.h +++ b/tmux.h @@ -1842,6 +1842,7 @@ int grid_compare(struct grid *, struct grid *); void grid_collect_history(struct grid *); void grid_scroll_history(struct grid *); void grid_scroll_history_region(struct grid *, u_int, u_int); +void grid_clear_history(struct grid *); void grid_expand_line(struct grid *, u_int, u_int); const struct grid_cell *grid_peek_cell(struct grid *, u_int, u_int); const struct grid_line *grid_peek_line(struct grid *, u_int);