diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-07-13 10:43:52 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-07-13 10:43:52 +0000 |
commit | 359285928b63605a130990699c33c8af42be9fd2 (patch) | |
tree | d41c53755083b3527066a65d7d5542141bd045e2 /screen.c | |
parent | 0b788a3d61994e5a7a98e36d104c130dcbb5e0c9 (diff) | |
download | rtmux-359285928b63605a130990699c33c8af42be9fd2.tar.gz rtmux-359285928b63605a130990699c33c8af42be9fd2.tar.bz2 rtmux-359285928b63605a130990699c33c8af42be9fd2.zip |
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.
Diffstat (limited to 'screen.c')
-rw-r--r-- | screen.c | 26 |
1 files changed, 20 insertions, 6 deletions
@@ -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. */ |