From 6984e257e4c8ad13320e72873896a4c6f9b25799 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sat, 2 Mar 2024 14:18:52 -0800 Subject: [PATCH] Allow use of TCELL_ALTSCREEN=disable to disable alternate screen. This hack will also prevent the clearing of the screen at disengage time. This may be useful for certain kinds of applications that want to draw the screen, then place the cursor at a specific location. (The application will need to do a TGoto on it's own first.) --- tscreen.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tscreen.go b/tscreen.go index 7ccbbeb..498f744 100644 --- a/tscreen.go +++ b/tscreen.go @@ -1822,7 +1822,14 @@ func (t *tScreen) engage() error { } ti := t.ti - t.TPuts(ti.EnterCA) + if os.Getenv("TCELL_ALTSCREEN") != "disable" { + // Technically this may not be right, but every terminal we know about + // (even Wyse 60) uses this to enter the alternate screen buffer, and + // possibly save and restore the window title and/or icon. + // (In theory there could be terminals that don't support X,Y cursor + // positions without a setup command, but we don't support them.) + t.TPuts(ti.EnterCA) + } t.TPuts(ti.EnterKeypad) t.TPuts(ti.HideCursor) t.TPuts(ti.EnableAcs) @@ -1865,10 +1872,12 @@ func (t *tScreen) disengage() { } t.TPuts(ti.ResetFgBg) t.TPuts(ti.AttrOff) - t.TPuts(ti.Clear) - t.TPuts(ti.ExitCA) t.TPuts(ti.ExitKeypad) t.TPuts(ti.EnableAutoMargin) + if os.Getenv("TCELL_ALTSCREEN") != "disable" { + t.TPuts(ti.Clear) // only needed if ExitCA is empty + t.TPuts(ti.ExitCA) + } t.enableMouse(0) t.enablePasting(false) t.disableFocusReporting()