Helper function to shorten history.

pull/1290/merge
nicm 2018-07-11 06:51:39 +00:00
parent 03519021b9
commit e7d53020b4
1 changed files with 11 additions and 6 deletions

17
grid.c
View File

@ -286,6 +286,15 @@ grid_compare(struct grid *ga, struct grid *gb)
return (0);
}
/* Trim lines from the history. */
static void
grid_trim_history(struct grid *gd, u_int ny)
{
grid_free_lines(gd, 0, ny);
memmove(&gd->linedata[0], &gd->linedata[ny],
(gd->hsize + gd->sy - ny) * (sizeof *gd->linedata));
}
/*
* Collect lines from the history if at the limit. Free the top (oldest) 10%
* and shift up.
@ -308,9 +317,7 @@ grid_collect_history(struct grid *gd)
* Free the lines from 0 to ny then move the remaining lines over
* them.
*/
grid_free_lines(gd, 0, ny);
memmove(&gd->linedata[0], &gd->linedata[ny],
(gd->hsize + gd->sy - ny) * (sizeof *gd->linedata));
grid_trim_history(gd, ny);
gd->hsize -= ny;
if (gd->hscrolled > gd->hsize)
@ -340,9 +347,7 @@ grid_scroll_history(struct grid *gd, u_int bg)
void
grid_clear_history(struct grid *gd)
{
grid_free_lines(gd, 0, gd->hsize);
memmove(&gd->linedata[0], &gd->linedata[gd->hsize],
gd->sy * (sizeof *gd->linedata));
grid_trim_history(gd, gd->hsize);
gd->hscrolled = 0;
gd->hsize = 0;