diff options
author | Anders Kaseorg <andersk@mit.edu> | 2013-01-27 21:36:05 -0500 |
---|---|---|
committer | Keith Winstein <keithw@mit.edu> | 2013-03-10 15:46:38 -0400 |
commit | 2ae960f7f0ec5b620915ee788da71516a6290ba2 (patch) | |
tree | 209a4fc3e0547e31f5647f934c990c648ab34469 | |
parent | 03217ddb5a2133698de0d38a10f8cfd879b9be0b (diff) |
Display: Abstract terminfo capability functions
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
-rw-r--r-- | src/terminal/terminaldisplay.h | 4 | ||||
-rw-r--r-- | src/terminal/terminaldisplayinit.cc | 51 |
2 files changed, 34 insertions, 21 deletions
diff --git a/src/terminal/terminaldisplay.h b/src/terminal/terminaldisplay.h index 4ac4ce4..25c2b83 100644 --- a/src/terminal/terminaldisplay.h +++ b/src/terminal/terminaldisplay.h @@ -65,6 +65,10 @@ namespace Terminal { class Display { private: + bool ti_flag( const char *capname ) const; + int ti_num( const char *capname ) const; + const char *ti_str( const char *capname ) const; + bool has_ech; /* erase character is part of vt200 but not supported by tmux (or by "screen" terminfo entry, which is what tmux advertises) */ diff --git a/src/terminal/terminaldisplayinit.cc b/src/terminal/terminaldisplayinit.cc index 0f8b5dd..27b8f93 100644 --- a/src/terminal/terminaldisplayinit.cc +++ b/src/terminal/terminaldisplayinit.cc @@ -61,6 +61,33 @@ using namespace Terminal; +bool Display::ti_flag( const char *capname ) const +{ + int val = tigetflag( const_cast<char *>( capname ) ); + if ( val == -1 ) { + throw std::string( "Invalid terminfo boolean capability " ) + capname; + } + return val; +} + +int Display::ti_num( const char *capname ) const +{ + int val = tigetnum( const_cast<char *>( capname ) ); + if ( val == -2 ) { + throw std::string( "Invalid terminfo numeric capability " ) + capname; + } + return val; +} + +const char *Display::ti_str( const char *capname ) const +{ + const char *val = tigetstr( const_cast<char *>( capname ) ); + if ( val == (const char *)-1 ) { + throw std::string( "Invalid terminfo string capability " ) + capname; + } + return val; +} + Display::Display( bool use_environment ) : has_ech( true ), has_bce( true ), has_title( true ), posterize_colors( false ) { @@ -86,22 +113,10 @@ Display::Display( bool use_environment ) } /* check for ECH */ - char ech_name[] = "ech"; - char *val = tigetstr( ech_name ); - if ( val == (char *)-1 ) { - throw std::string( "Invalid terminfo string capability " ) + ech_name; - } else if ( val == 0 ) { - has_ech = false; - } + has_ech = ti_str( "ech" ); /* check for BCE */ - char bce_name[] = "bce"; - int bce_val = tigetflag( bce_name ); - if ( bce_val == -1 ) { - throw std::string( "Invalid terminfo boolean capability " ) + bce_name; - } else if ( bce_val == 0 ) { - has_bce = false; - } + has_bce = ti_flag( "bce" ); /* Check if we can set the window title and icon name. terminfo does not have reliable information on this, so we hardcode a whitelist of @@ -128,13 +143,7 @@ Display::Display( bool use_environment ) /* posterization disabled because server now only advertises xterm-256color when client has colors = 256 */ /* - char colors_name[] = "colors"; - int color_val = tigetnum( colors_name ); - if ( color_val == -2 ) { - throw std::string( "Invalid terminfo numeric capability " ) + colors_name; - } else if ( color_val < 256 ) { - posterize_colors = true; - } + posterize_colors = ti_num( "colors" ) < 256; */ } } |