diff options
author | nicm <nicm> | 2016-09-02 20:57:20 +0000 |
---|---|---|
committer | nicm <nicm> | 2016-09-02 20:57:20 +0000 |
commit | 2627ab322e0e8dffbf86b1c2eb969139a8062174 (patch) | |
tree | 15cc4f5210c0145ef14433470ba0c96c0860c6ea /screen.c | |
parent | 537964b92dcd2b4a30fdf37a370f9a204fff561c (diff) |
Remember the number of lines scrolled into the history (versus cleared
into the history) and when resizing only use scrolled lines and not
cleared lines (which are probably not intended to reappear). From
Chaoren Lin.
Diffstat (limited to 'screen.c')
-rw-r--r-- | screen.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -177,8 +177,9 @@ screen_resize_y(struct screen *s, u_int sy) * If the height is decreasing, delete lines from the bottom until * hitting the cursor, then push lines from the top into the history. * - * When increasing, pull as many lines as possible from the history to - * the top, then fill the remaining with blanks at the bottom. + * When increasing, pull as many lines as possible from scrolled + * history (not explicitly cleared from view) to the top, then fill the + * remaining with blanks at the bottom. */ /* Size decreasing. */ @@ -200,9 +201,10 @@ screen_resize_y(struct screen *s, u_int sy) * lines from the top. */ available = s->cy; - if (gd->flags & GRID_HISTORY) + if (gd->flags & GRID_HISTORY) { + gd->hscrolled += needed; gd->hsize += needed; - else if (needed > 0 && available > 0) { + } else if (needed > 0 && available > 0) { if (available > needed) available = needed; grid_view_delete_lines(gd, 0, available); @@ -219,13 +221,14 @@ screen_resize_y(struct screen *s, u_int sy) needed = sy - oldy; /* - * Try to pull as much as possible out of the history, if is + * Try to pull as much as possible out of scrolled history, if is * is enabled. */ - available = gd->hsize; + available = gd->hscrolled; if (gd->flags & GRID_HISTORY && available > 0) { if (available > needed) available = needed; + gd->hscrolled -= available; gd->hsize -= available; s->cy += available; } else |