From ed42d31bda8b6d1e111142640728e34ec4f2309f Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Sun, 27 Jan 2013 20:38:30 -0500 Subject: [PATCH] Put the real terminal in alternate screen mode Closes #2 Signed-off-by: Anders Kaseorg --- src/terminal/terminaldisplay.cc | 4 ++-- src/terminal/terminaldisplay.h | 2 ++ src/terminal/terminaldisplayinit.cc | 5 ++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/terminal/terminaldisplay.cc b/src/terminal/terminaldisplay.cc index e801b8c..3df7491 100644 --- a/src/terminal/terminaldisplay.cc +++ b/src/terminal/terminaldisplay.cc @@ -46,12 +46,12 @@ static const Renditions & initial_rendition( void ) std::string Display::open() const { - return std::string( "\033[?1h" ); + return std::string( smcup ? smcup : "" ) + std::string( "\033[?1h" ); } std::string Display::close() const { - return std::string( "\033[?1l\033[0m\033[?25h" ); + return std::string( "\033[?1l\033[0m\033[?25h" ) + std::string( rmcup ? rmcup : "" ); } std::string Display::new_frame( bool initialized, const Framebuffer &last, const Framebuffer &f ) const diff --git a/src/terminal/terminaldisplay.h b/src/terminal/terminaldisplay.h index 25c2b83..acd0fc4 100644 --- a/src/terminal/terminaldisplay.h +++ b/src/terminal/terminaldisplay.h @@ -78,6 +78,8 @@ namespace Terminal { int posterize_colors; /* downsample input colors >8 to [0..7] */ + const char *smcup, *rmcup; /* enter and exit alternate screen mode */ + void put_cell( bool initialized, FrameState &frame, const Framebuffer &f ) const; public: diff --git a/src/terminal/terminaldisplayinit.cc b/src/terminal/terminaldisplayinit.cc index 27b8f93..4744628 100644 --- a/src/terminal/terminaldisplayinit.cc +++ b/src/terminal/terminaldisplayinit.cc @@ -89,7 +89,7 @@ const char *Display::ti_str( const char *capname ) const } Display::Display( bool use_environment ) - : has_ech( true ), has_bce( true ), has_title( true ), posterize_colors( false ) + : has_ech( true ), has_bce( true ), has_title( true ), posterize_colors( false ), smcup( NULL ), rmcup( NULL ) { if ( use_environment ) { int errret = -2; @@ -145,5 +145,8 @@ Display::Display( bool use_environment ) /* posterize_colors = ti_num( "colors" ) < 256; */ + + smcup = ti_str("smcup"); + rmcup = ti_str("rmcup"); } }