Terminal detection for newer vte libraries (>= 0.53.0)

This commit is contained in:
Markus Gans 2018-10-09 16:04:21 +02:00
parent ef21076bbd
commit b854224eb5
4 changed files with 120 additions and 15 deletions

View File

@ -1,3 +1,6 @@
2018-10-09 Markus Gans <guru.mail@muenster.de>
* Terminal detection for newer vte libraries (>= 0.53.0)
2018-10-08 Markus Gans <guru.mail@muenster.de>
* Move all termcap code into FTermcap
* Some small code splits

View File

@ -750,7 +750,12 @@ char* FTermDetection::secDA_Analysis (char current_termtype[])
case 41: // DEC VT420
case 61: // DEC VT510
case 64: // DEC VT520
break;
case 65: // DEC VT525
new_termtype = secDA_Analysis_65(current_termtype);
break;
case 67: // Cygwin
new_termtype = secDA_Analysis_67(current_termtype);
break;
@ -780,7 +785,9 @@ char* FTermDetection::secDA_Analysis (char current_termtype[])
}
// Correct false assumptions
if ( isGnomeTerminal() && secondary_da.terminal_id_type != 1 )
if ( isGnomeTerminal()
&& secondary_da.terminal_id_type != 1
&& secondary_da.terminal_id_type != 65 )
terminal_type.gnome_terminal = false;
if ( isKdeTerminal() && secondary_da.terminal_id_type != 0 )
@ -815,20 +822,7 @@ inline char* FTermDetection::secDA_Analysis_1 (char current_termtype[])
// Terminal ID 1 - DEC VT220
char* new_termtype = current_termtype;
if ( secondary_da.terminal_id_version > 1000 )
{
terminal_type.gnome_terminal = true;
// Each gnome-terminal should be able to use 256 colors
color256 = true;
new_termtype = C_STR("gnome-256color");
gnome_terminal_id = secondary_da.terminal_id_version;
// VTE 0.40.0 or higher and gnome-terminal 3.16 or higher
if ( gnome_terminal_id >= 4000 )
decscusr_support = true;
}
new_termtype = secDA_Analysis_vte(new_termtype);
return new_termtype;
}
@ -870,6 +864,16 @@ inline char* FTermDetection::secDA_Analysis_32 (char[])
return new_termtype;
}
//----------------------------------------------------------------------
inline char* FTermDetection::secDA_Analysis_65 (char current_termtype[])
{
// Terminal ID 65 - DEC VT525
char* new_termtype = current_termtype;
new_termtype = secDA_Analysis_vte(new_termtype);
return new_termtype;
}
//----------------------------------------------------------------------
inline char* FTermDetection::secDA_Analysis_67 (char[])
{
@ -955,4 +959,28 @@ inline char* FTermDetection::secDA_Analysis_85 (char current_termtype[])
return new_termtype;
}
//----------------------------------------------------------------------
inline char* FTermDetection::secDA_Analysis_vte (char current_termtype[])
{
// VTE terminal library
// (Since VTE ) the terminal ID has changed from 1 to 65)
char* new_termtype = current_termtype;
if ( secondary_da.terminal_id_version > 1000 )
{
terminal_type.gnome_terminal = true;
// Each gnome-terminal should be able to use 256 colors
color256 = true;
new_termtype = C_STR("gnome-256color");
gnome_terminal_id = secondary_da.terminal_id_version;
// VTE 0.40.0 or higher and gnome-terminal 3.16 or higher
if ( gnome_terminal_id >= 4000 )
decscusr_support = true;
}
return new_termtype;
}
} // namespace finalcut

View File

@ -190,12 +190,14 @@ class FTermDetection
static char* secDA_Analysis_1 (char[]);
static char* secDA_Analysis_24 (char[]);
static char* secDA_Analysis_32 (char[]);
static char* secDA_Analysis_65 (char[]);
static char* secDA_Analysis_67 (char[]);
static char* secDA_Analysis_77 (char[]);
static char* secDA_Analysis_82 (char[]);
static char* secDA_Analysis_83 (char[]);
static char* secDA_Analysis_84 (char[]);
static char* secDA_Analysis_85 (char[]);
static char* secDA_Analysis_vte (char[]);
// Data Members
static char termtype[256];

View File

@ -332,6 +332,7 @@ class FTermDetectionTest : public CPPUNIT_NS::TestFixture
putty,
kde_konsole,
gnome_terminal,
newer_vte_terminal,
kterm,
tera_term,
cygwin,
@ -358,6 +359,7 @@ class FTermDetectionTest : public CPPUNIT_NS::TestFixture
void puttyTest();
void kdeKonsoleTest();
void gnomeTerminalTest();
void newerVteTerminalTest();
void ktermTest();
void teraTermTest();
void cygwinTest();
@ -402,6 +404,7 @@ class FTermDetectionTest : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST (puttyTest);
CPPUNIT_TEST (kdeKonsoleTest);
CPPUNIT_TEST (gnomeTerminalTest);
CPPUNIT_TEST (newerVteTerminalTest);
CPPUNIT_TEST (ktermTest);
CPPUNIT_TEST (teraTermTest);
CPPUNIT_TEST (cygwinTest);
@ -987,6 +990,69 @@ void FTermDetectionTest::gnomeTerminalTest()
}
}
//----------------------------------------------------------------------
void FTermDetectionTest::newerVteTerminalTest()
{
finalcut::FTermData data;
finalcut::FTermDetection detect;
data.setTermFileName(C_STR("xterm-256color"));
detect.setTermData(&data);
detect.setTerminalDetection(true);
pid_t pid = forkProcess();
if ( isChildProcess(pid) )
{
setenv ("TERM", "xterm-256color", 1);
setenv ("COLORTERM", "truecolor", 1);
setenv ("VTE_VERSION", "5300", 1);
unsetenv("COLORFGBG");
unsetenv("TERMCAP");
unsetenv("XTERM_VERSION");
unsetenv("ROXTERM_ID");
unsetenv("KONSOLE_DBUS_SESSION");
unsetenv("KONSOLE_DCOP");
unsetenv("TMUX");
detect.detect();
CPPUNIT_ASSERT ( detect.isXTerminal() );
CPPUNIT_ASSERT ( ! detect.isAnsiTerminal() );
CPPUNIT_ASSERT ( ! detect.isRxvtTerminal() );
CPPUNIT_ASSERT ( ! detect.isUrxvtTerminal() );
CPPUNIT_ASSERT ( ! detect.isMltermTerminal() );
CPPUNIT_ASSERT ( ! detect.isPuttyTerminal() );
CPPUNIT_ASSERT ( ! detect.isKdeTerminal() );
CPPUNIT_ASSERT ( detect.isGnomeTerminal() );
CPPUNIT_ASSERT ( ! detect.isKtermTerminal() );
CPPUNIT_ASSERT ( ! detect.isTeraTerm() );
CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() );
CPPUNIT_ASSERT ( ! detect.isMinttyTerm() );
CPPUNIT_ASSERT ( ! detect.isLinuxTerm() );
CPPUNIT_ASSERT ( ! detect.isFreeBSDTerm() );
CPPUNIT_ASSERT ( ! detect.isNetBSDTerm() );
CPPUNIT_ASSERT ( ! detect.isOpenBSDTerm() );
CPPUNIT_ASSERT ( ! detect.isSunTerminal() );
CPPUNIT_ASSERT ( ! detect.isScreenTerm() );
CPPUNIT_ASSERT ( ! detect.isTmuxTerm() );
CPPUNIT_ASSERT ( detect.canDisplay256Colors() );
CPPUNIT_ASSERT ( detect.hasTerminalDetection() );
CPPUNIT_ASSERT ( detect.hasSetCursorStyleSupport() );
debugOutput();
closeStandardStreams();
exit(EXIT_SUCCESS);
}
else // Parent
{
// Start the terminal simulation
terminalSimulation (newer_vte_terminal);
if ( waitpid(pid, 0, WUNTRACED) != pid )
std::cerr << "waitpid error" << std::endl;
}
}
//----------------------------------------------------------------------
void FTermDetectionTest::ktermTest()
{
@ -1846,6 +1912,7 @@ char* FTermDetectionTest::getAnswerback (console con)
C_STR("PuTTY"), // PuTTY
0, // KDE Konsole
0, // GNOME Terminal
0, // VTE Terminal >= 0.53.0
0, // kterm,
0, // Tera Term
0, // Cygwin
@ -1875,6 +1942,7 @@ char* FTermDetectionTest::getDSR (console con)
C_STR("\033[0n"), // PuTTY
C_STR("\033[0n"), // KDE Konsole
C_STR("\033[0n"), // GNOME Terminal
C_STR("\033[0n"), // VTE Terminal >= 0.53.0
C_STR("\033[0n"), // kterm,
C_STR("\033[0n"), // Tera Term
0, // Cygwin
@ -1904,6 +1972,7 @@ char* FTermDetectionTest::getDECID (console con)
C_STR("\033[?6c"), // PuTTY
C_STR("\033[?1;2c"), // KDE Konsole
C_STR("\033[?62;c"), // GNOME Terminal
C_STR("\033[?65;1;9c"), // VTE Terminal >= 0.53.0
C_STR("\033[?1;2c"), // kterm,
C_STR("\033[?1;2c"), // Tera Term
0, // Cygwin
@ -1933,6 +2002,7 @@ char* FTermDetectionTest::getDA (console con)
C_STR("\033[?6c"), // PuTTY
C_STR("\033[?1;2c"), // KDE Konsole
C_STR("\033[?62;c"), // GNOME Terminal
C_STR("\033[?65;1;9c"), // VTE Terminal >= 0.53.0
C_STR("\033[?1;2c"), // kterm,
C_STR("\033[?1;2c"), // Tera Term
C_STR("\033[?6c"), // Cygwin
@ -1962,6 +2032,7 @@ char* FTermDetectionTest::getDA1 (console con)
C_STR("\033[?6c"), // PuTTY
C_STR("\033[?1;2c"), // KDE Konsole
C_STR("\033[?62;c"), // GNOME Terminal
C_STR("\033[?65;1;9c"), // VTE Terminal >= 0.53.0
0, // kterm,
C_STR("\033[?1;2c"), // Tera Term
C_STR("\033[?6c"), // Cygwin
@ -1991,6 +2062,7 @@ char* FTermDetectionTest::getSEC_DA (console con)
C_STR("\033[>0;136;0c"), // PuTTY
C_STR("\033[>0;115;0c"), // KDE Konsole
C_STR("\033[>1;5202;0c"), // GNOME Terminal
C_STR("\033[>65;5300;1c"), // VTE Terminal >= 0.53.0
C_STR("\033[?1;2c"), // kterm,
C_STR("\033[>32;278;0c"), // Tera Term
C_STR("\033[>67;200502;0c"), // Cygwin