summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Kaseorg <andersk@mit.edu>2013-01-27 21:36:05 -0500
committerKeith Winstein <keithw@mit.edu>2013-03-10 15:46:38 -0400
commit2ae960f7f0ec5b620915ee788da71516a6290ba2 (patch)
tree209a4fc3e0547e31f5647f934c990c648ab34469
parent03217ddb5a2133698de0d38a10f8cfd879b9be0b (diff)
Display: Abstract terminfo capability functions
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
-rw-r--r--src/terminal/terminaldisplay.h4
-rw-r--r--src/terminal/terminaldisplayinit.cc51
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;
*/
}
}