summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Kaseorg <andersk@mit.edu>2013-01-27 20:38:30 -0500
committerKeith Winstein <keithw@mit.edu>2013-03-10 15:46:39 -0400
commited42d31bda8b6d1e111142640728e34ec4f2309f (patch)
treebe7b1f405dbd29dca76abeb746698e315af1b61c
parent2ae960f7f0ec5b620915ee788da71516a6290ba2 (diff)
Put the real terminal in alternate screen mode
Closes #2 Signed-off-by: Anders Kaseorg <andersk@mit.edu>
-rw-r--r--src/terminal/terminaldisplay.cc4
-rw-r--r--src/terminal/terminaldisplay.h2
-rw-r--r--src/terminal/terminaldisplayinit.cc5
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");
}
}