Support "alternate screen" mode (terminfo smcup/rmcup) typically used by full

screen interactive programs to preserve the screen contents. When activated, it
saves a copy of the visible grid and disables scrolling into and resizing out
of the history; when deactivated the visible data is restored and the history
reenabled.
This commit is contained in:
Nicholas Marriott
2009-07-13 10:43:52 +00:00
parent 0b788a3d61
commit 359285928b
6 changed files with 153 additions and 9 deletions

View File

@ -174,10 +174,20 @@ screen_resize_y(struct screen *s, u_int sy)
needed -= available;
/*
* Now just increase the history size to take over the lines
* which are left. XXX Should apply history limit?
* Now just increase the history size, if possible, to take
* over the lines which are left. If history is off, delete
* lines from the top.
*
* XXX Should apply history limit?
*/
gd->hsize += needed;
available = s->cy;
if (gd->flags & GRID_HISTORY)
gd->hsize += needed;
else if (available > 0) {
if (available > needed)
available = needed;
grid_view_delete_lines(gd, 0, available);
}
s->cy -= needed;
}
@ -191,14 +201,18 @@ screen_resize_y(struct screen *s, u_int sy)
if (sy > oldy) {
needed = sy - oldy;
/* Try to pull as much as possible out of the history. */
/*
* Try to pull as much as possible out of the history, if is
* is enabled.
*/
available = gd->hsize;
if (available > 0) {
if (gd->flags & GRID_HISTORY && available > 0) {
if (available > needed)
available = needed;
gd->hsize -= available;
s->cy += available;
}
} else
available = 0;
needed -= available;
/* Then fill the rest in with blanks. */