mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 05:21:10 +00:00
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:
26
screen.c
26
screen.c
@ -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. */
|
||||
|
Reference in New Issue
Block a user