From ef21076bbda50236d41685f2468b069bae420435 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Tue, 9 Oct 2018 00:33:26 +0200 Subject: [PATCH] Some small code splits --- ChangeLog | 1 + src/fterm.cpp | 164 +++++++++++++++++++---------- src/ftermcap.cpp | 32 +++--- src/ftermcapquirks.cpp | 4 +- src/include/final/fterm.h | 8 ++ src/include/final/ftermcap.h | 1 + src/include/final/ftermcapquirks.h | 2 +- 7 files changed, 142 insertions(+), 70 deletions(-) diff --git a/ChangeLog b/ChangeLog index b6921e88..76dbe706 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 2018-10-08 Markus Gans * Move all termcap code into FTermcap + * Some small code splits 2018-10-05 Markus Gans * Remove redundant program code from FString diff --git a/src/fterm.cpp b/src/fterm.cpp index b1e244d6..23bc5821 100644 --- a/src/fterm.cpp +++ b/src/fterm.cpp @@ -166,15 +166,9 @@ bool FTerm::setVGAFont() if ( data->isVGAFont() ) return data->isVGAFont(); - if ( isGnomeTerminal() - || isKdeTerminal() - || isPuttyTerminal() - || isTeraTerm() - || isCygwinTerminal() - || isMinttyTerm() ) + if ( hasNoFontSettingOption() ) return false; - if ( isXTerminal() || isScreenTerm() || isUrxvtTerminal() || FTermcap::osc_support ) { @@ -215,12 +209,7 @@ bool FTerm::setNewFont() if ( isNewFont() ) return true; - if ( isGnomeTerminal() - || isKdeTerminal() - || isPuttyTerminal() - || isTeraTerm() - || isCygwinTerminal() - || isMinttyTerm() ) + if ( hasNoFontSettingOption() ) return false; if ( isXTerminal() || isScreenTerm() @@ -1418,10 +1407,22 @@ void FTerm::init_captureFontAndTitle() } //---------------------------------------------------------------------- -void FTerm::redefineColorPalette() +inline bool FTerm::hasNoFontSettingOption() { - // Redefine the color palette + if ( isGnomeTerminal() + || isKdeTerminal() + || isPuttyTerminal() + || isTeraTerm() + || isCygwinTerminal() + || isMinttyTerm() ) + return true; + return false; +} + +//---------------------------------------------------------------------- +inline bool FTerm::canChangeColorPalette() +{ if ( isCygwinTerminal() || isKdeTerminal() || isTeraTerm() @@ -1430,6 +1431,17 @@ void FTerm::redefineColorPalette() || isOpenBSDTerm() || isSunTerminal() || isAnsiTerminal() ) + return false; + + return FTermcap::can_change_color_palette; +} + +//---------------------------------------------------------------------- +void FTerm::redefineColorPalette() +{ + // Redefine the color palette + + if ( ! canChangeColorPalette() ) return; resetColorMap(); @@ -1444,14 +1456,7 @@ void FTerm::redefineColorPalette() //---------------------------------------------------------------------- void FTerm::restoreColorPalette() { - if ( isCygwinTerminal() - || isKdeTerminal() - || isTeraTerm() - || isMltermTerminal() - || isNetBSDTerm() - || isOpenBSDTerm() - || isSunTerminal() - || isAnsiTerminal() ) + if ( ! canChangeColorPalette() ) return; // Reset screen settings @@ -1509,6 +1514,11 @@ void FTerm::setOverwriteCursorStyle() //---------------------------------------------------------------------- void FTerm::enableMouse() { + // Enable the terminal mouse support + + if ( ! init_values.mouse_support ) + return; + bool gpm_mouse = false; bool xterm_mouse = false; @@ -1536,12 +1546,68 @@ void FTerm::enableMouse() } //---------------------------------------------------------------------- -void FTerm::disableMouse() +inline void FTerm::disableMouse() { + // Disable the terminal mouse support + keyboard->disableMouseSequences(); mouse->disable(); } +//---------------------------------------------------------------------- +inline void FTerm::enableKeypad() +{ + // Enter 'keyboard_transmit' mode + + if ( TCAP(fc::t_keypad_xmit) ) + { + putstring (TCAP(fc::t_keypad_xmit)); + std::fflush(stdout); + } +} + +//---------------------------------------------------------------------- +inline void FTerm::disableKeypad() +{ + // Leave 'keyboard_transmit' mode + + if ( TCAP(fc::t_keypad_local) ) + { + putstring (TCAP(fc::t_keypad_local)); + std::fflush(stdout); + } +} + +//---------------------------------------------------------------------- +inline void FTerm::enableAlternateCharset() +{ + // Enable alternate charset + + if ( TCAP(fc::t_enable_acs) ) + { + putstring (TCAP(fc::t_enable_acs)); + std::fflush(stdout); + } +} + +//---------------------------------------------------------------------- +inline void FTerm::enableApplicationEscKey() +{ + // switch to application escape key mode + + if ( isMinttyTerm() ) + FTerm::putstring (CSI "?7727h"); +} + +//---------------------------------------------------------------------- +inline void FTerm::disableApplicationEscKey() +{ + // Switch to normal escape key mode + + if ( isMinttyTerm() ) + putstring (CSI "?7727l"); +} + //---------------------------------------------------------------------- void FTerm::useAlternateScreenBuffer() { @@ -1652,7 +1718,6 @@ inline void FTerm::deallocationValues() //---------------------------------------------------------------------- void FTerm::init (bool disable_alt_screen) { - int stdout_no = FTermios::getStdOut(); init_term_object = this; // Initialize global values for all objects @@ -1672,11 +1737,7 @@ void FTerm::init (bool disable_alt_screen) FTermios::storeTTYsettings(); // Get output baud rate - uInt baud = FTermios::getBaudRate(); - data->setBaudrate(baud); - - if ( isatty(stdout_no) ) - opti_move->setBaudRate(int(baud)); + initBaudRate(); // Terminal detection term_detection->setTermData(data); @@ -1714,32 +1775,22 @@ void FTerm::init (bool disable_alt_screen) init_keyboard(); // Enable the terminal mouse support - if ( init_values.mouse_support ) - enableMouse(); + enableMouse(); // Activate meta key sends escape if ( isXTerminal() ) xterm->metaSendsESC(true); // switch to application escape key mode - if ( isMinttyTerm() ) - FTerm::putstring (CSI "?7727h"); + enableApplicationEscKey(); // Enter 'keyboard_transmit' mode - if ( TCAP(fc::t_keypad_xmit) ) - { - putstring (TCAP(fc::t_keypad_xmit)); - std::fflush(stdout); - } + enableKeypad(); useAlternateScreenBuffer(); // Enable alternate charset - if ( TCAP(fc::t_enable_acs) ) - { - putstring (TCAP(fc::t_enable_acs)); - std::fflush(stdout); - } + enableAlternateCharset(); // Save the used xterm font and window title init_captureFontAndTitle(); @@ -1822,6 +1873,17 @@ void FTerm::initTermspecifics() init_teraterm_charmap(); } +//---------------------------------------------------------------------- +void FTerm::initBaudRate() +{ + int stdout_no = FTermios::getStdOut(); + uInt baud = FTermios::getBaudRate(); + data->setBaudrate(baud); + + if ( isatty(stdout_no) ) + opti_move->setBaudRate(int(baud)); +} + //---------------------------------------------------------------------- void FTerm::finish() { @@ -1860,12 +1922,8 @@ void FTerm::finish() if ( init_values.color_change ) restoreColorPalette(); - if ( isMinttyTerm() ) - { - // Switch to normal escape key mode - putstring (CSI "?7727l"); - std::fflush(stdout); - } + // Switch to normal escape key mode + disableApplicationEscKey(); finishOSspecifics1(); @@ -1885,11 +1943,7 @@ void FTerm::finish() useNormalScreenBuffer(); // leave 'keyboard_transmit' mode - if ( TCAP(fc::t_keypad_local) ) - { - putstring (TCAP(fc::t_keypad_local)); - std::fflush(stdout); - } + disableKeypad(); finish_encoding(); diff --git a/src/ftermcap.cpp b/src/ftermcap.cpp index 071bcca6..e35b62b9 100644 --- a/src/ftermcap.cpp +++ b/src/ftermcap.cpp @@ -26,18 +26,19 @@ namespace finalcut { // static class attributes -bool FTermcap::background_color_erase = false; -bool FTermcap::automatic_left_margin = false; -bool FTermcap::automatic_right_margin = false; -bool FTermcap::eat_nl_glitch = false; -bool FTermcap::ansi_default_color = false; -bool FTermcap::osc_support = false; -bool FTermcap::no_utf8_acs_chars = false; -int FTermcap::max_color = 1; -int FTermcap::tabstop = 8; -int FTermcap::attr_without_color = 0; -FTermData* FTermcap::fterm_data = 0; -FTermDetection* FTermcap::term_detection = 0; +bool FTermcap::background_color_erase = false; +bool FTermcap::can_change_color_palette = false; +bool FTermcap::automatic_left_margin = false; +bool FTermcap::automatic_right_margin = false; +bool FTermcap::eat_nl_glitch = false; +bool FTermcap::ansi_default_color = false; +bool FTermcap::osc_support = false; +bool FTermcap::no_utf8_acs_chars = false; +int FTermcap::max_color = 1; +int FTermcap::tabstop = 8; +int FTermcap::attr_without_color = 0; +FTermData* FTermcap::fterm_data = 0; +FTermDetection* FTermcap::term_detection = 0; //---------------------------------------------------------------------- @@ -96,7 +97,11 @@ void FTermcap::termcap() bool color256 = term_detection->canDisplay256Colors(); // Open termcap file +#if defined(__sun) && defined(__SVR4) + char* termtype = fterm_data->getTermType(); +#else const char* termtype = fterm_data->getTermType(); +#endif terminals.push_back(termtype); // available terminal type if ( color256 ) // 1st fallback if not found @@ -174,6 +179,9 @@ void FTermcap::termcapBoleans() // Screen erased with the background color background_color_erase = tgetflag(C_STR("ut")); + // Terminal is able to redefine existing colors + can_change_color_palette = tgetflag(C_STR("cc")); + // t_cursor_left wraps from column 0 to last column automatic_left_margin = tgetflag(C_STR("bw")); diff --git a/src/ftermcapquirks.cpp b/src/ftermcapquirks.cpp index 4e77b038..7cba5aa1 100644 --- a/src/ftermcapquirks.cpp +++ b/src/ftermcapquirks.cpp @@ -89,7 +89,7 @@ void FTermcapQuirks::terminalFixup() } else if ( td->isSunTerminal() ) { - sun(); + sunConsole(); } else if ( td->isPuttyTerminal() ) { @@ -385,7 +385,7 @@ void FTermcapQuirks::teraterm() } //---------------------------------------------------------------------- -void FTermcapQuirks::sun() +void FTermcapQuirks::sunConsole() { // Sun Microsystems workstation console eat_nl_glitch fix FTermcap::eat_nl_glitch = true; diff --git a/src/include/final/fterm.h b/src/include/final/fterm.h index 1c7475a2..2f463262 100644 --- a/src/include/final/fterm.h +++ b/src/include/final/fterm.h @@ -367,12 +367,19 @@ class FTerm static void init_utf8_without_alt_charset(); static void init_tab_quirks(); static void init_captureFontAndTitle(); + static bool hasNoFontSettingOption(); + static bool canChangeColorPalette(); static void redefineColorPalette(); static void restoreColorPalette(); static void setInsertCursorStyle(); static void setOverwriteCursorStyle(); static void enableMouse(); static void disableMouse(); + static void enableApplicationEscKey(); + static void disableApplicationEscKey(); + static void enableKeypad(); + static void disableKeypad(); + static void enableAlternateCharset(); static void useAlternateScreenBuffer(); static void useNormalScreenBuffer(); void allocationValues(); @@ -380,6 +387,7 @@ class FTerm void init (bool); void initOSspecifics(); void initTermspecifics(); + void initBaudRate(); void finish(); void finishOSspecifics1(); void finish_encoding(); diff --git a/src/include/final/ftermcap.h b/src/include/final/ftermcap.h index 791a9431..04f20a3a 100644 --- a/src/include/final/ftermcap.h +++ b/src/include/final/ftermcap.h @@ -109,6 +109,7 @@ class FTermcap // Data Members static bool background_color_erase; + static bool can_change_color_palette; static bool automatic_left_margin; static bool automatic_right_margin; static bool eat_nl_glitch; diff --git a/src/include/final/ftermcapquirks.h b/src/include/final/ftermcapquirks.h index a8b6712d..9d9b5e53 100644 --- a/src/include/final/ftermcapquirks.h +++ b/src/include/final/ftermcapquirks.h @@ -82,7 +82,7 @@ class FTermcapQuirks static void vte(); static void putty(); static void teraterm(); - static void sun(); + static void sunConsole(); static void screen(); static void general();