From fdd7ff98ecdd3f79c1c03de3bd85ac3d6618b2fe Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Sun, 30 Aug 2020 22:47:24 +0200 Subject: [PATCH] Adding Windows Terminal detection --- ChangeLog | 3 + doc/first-steps.md | 24 +- src/fmenuitem.cpp | 6 +- src/fstring.cpp | 2 +- src/fterm.cpp | 58 ++-- src/ftermdetection.cpp | 5 +- src/ftextview.cpp | 2 +- src/fwindow.cpp | 2 +- src/include/final/fcallback.h | 38 +-- src/include/final/fterm.h | 11 +- src/include/final/ftermdetection.h | 33 +- src/include/final/fvterm.h | 2 + src/include/final/fwidget.h | 8 +- src/include/final/fwindow.h | 2 +- test/conemu.h | 87 ++--- test/fstringstream-test.cpp | 6 + test/ftermdetection-test.cpp | 492 +++++++++++++++++------------ 17 files changed, 457 insertions(+), 324 deletions(-) diff --git a/ChangeLog b/ChangeLog index 51cb29a8..b7b887ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2020-08-30 Markus Gans + * Adding Windows Terminal detection + 2020-08-15 Markus Gans * The call of the function setNonBlockingRead() resulted in a high CPU load in idle mode. diff --git a/doc/first-steps.md b/doc/first-steps.md index 2697c652..67c99515 100644 --- a/doc/first-steps.md +++ b/doc/first-steps.md @@ -527,7 +527,7 @@ void classname::cb_methode (FWidget* w, int* i, double* d, ...) We use the `addCallback()` method of the `FWidget` class to connect to other widget objects. -(1) For calling functions or static methods via a pointer: +1. For calling functions or static methods via a pointer: ```cpp template::type = nullptr @@ -577,7 +577,7 @@ void FWidget::addCallback ( const FString& cb_signal {...} ``` -(5) For calling a std::bind call wrapper to a specific instance: +5. For calling a std::bind call wrapper to a specific instance: ```cpp templateaddCallback ( "clicked", - std::move(win_item), &FMenuItem::cb_switchToDialog, + static_cast::type>(win_item), + &FMenuItem::cb_switchToDialog, win ); win->addCallback ( "destroy", - std::move(win_item), &FMenuItem::cb_destroyDialog, + static_cast::type>(win_item), + &FMenuItem::cb_destroyDialog, win ); diff --git a/src/fstring.cpp b/src/fstring.cpp index b2b3f819..fceadec1 100644 --- a/src/fstring.cpp +++ b/src/fstring.cpp @@ -641,7 +641,7 @@ double FString::toDouble() const wchar_t* p{}; const double ret = std::wcstod(string, &p); - if ( p != nullptr && *p != '\0' ) + if ( p != nullptr && *p != L'\0' ) throw std::invalid_argument ("no valid floating point value"); if ( errno == ERANGE ) diff --git a/src/fterm.cpp b/src/fterm.cpp index 01788721..f896f6f3 100644 --- a/src/fterm.cpp +++ b/src/fterm.cpp @@ -458,18 +458,18 @@ bool FTerm::isMonochron() return data->isMonochron(); } -//---------------------------------------------------------------------- -bool FTerm::isXTerminal() -{ - return term_detection->isXTerminal(); -} - //---------------------------------------------------------------------- bool FTerm::isAnsiTerminal() { return term_detection->isAnsiTerminal(); } +//---------------------------------------------------------------------- +bool FTerm::isXTerminal() +{ + return term_detection->isXTerminal(); +} + //---------------------------------------------------------------------- bool FTerm::isRxvtTerminal() { @@ -482,18 +482,6 @@ bool FTerm::isUrxvtTerminal() return term_detection->isUrxvtTerminal(); } -//---------------------------------------------------------------------- -bool FTerm::isMltermTerminal() -{ - return term_detection->isMltermTerminal(); -} - -//---------------------------------------------------------------------- -bool FTerm::isPuttyTerminal() -{ - return term_detection->isPuttyTerminal(); -} - //---------------------------------------------------------------------- bool FTerm::isKdeTerminal() { @@ -507,9 +495,15 @@ bool FTerm::isGnomeTerminal() } //---------------------------------------------------------------------- -bool FTerm::isKtermTerminal() +bool FTerm::isPuttyTerminal() { - return term_detection->isKtermTerminal(); + return term_detection->isPuttyTerminal(); +} + +//---------------------------------------------------------------------- +bool FTerm::isWindowsTerminal() +{ + return term_detection->isWindowsTerminal(); } //---------------------------------------------------------------------- @@ -518,12 +512,6 @@ bool FTerm::isTeraTerm() return term_detection->isTeraTerm(); } -//---------------------------------------------------------------------- -bool FTerm::isSunTerminal() -{ - return term_detection->isSunTerminal(); -} - //---------------------------------------------------------------------- bool FTerm::isCygwinTerminal() { @@ -560,6 +548,12 @@ bool FTerm::isOpenBSDTerm() return term_detection->isOpenBSDTerm(); } +//---------------------------------------------------------------------- +bool FTerm::isSunTerminal() +{ + return term_detection->isSunTerminal(); +} + //---------------------------------------------------------------------- bool FTerm::isScreenTerm() { @@ -572,6 +566,18 @@ bool FTerm::isTmuxTerm() return term_detection->isTmuxTerm(); } +//---------------------------------------------------------------------- +bool FTerm::isKtermTerminal() +{ + return term_detection->isKtermTerminal(); +} + +//---------------------------------------------------------------------- +bool FTerm::isMltermTerminal() +{ + return term_detection->isMltermTerminal(); +} + //---------------------------------------------------------------------- bool FTerm::isNewFont() { diff --git a/src/ftermdetection.cpp b/src/ftermdetection.cpp index 51416c56..914f8c18 100644 --- a/src/ftermdetection.cpp +++ b/src/ftermdetection.cpp @@ -860,7 +860,10 @@ inline const char* FTermDetection::secDA_Analysis_0 (const char current_termtype const char* new_termtype = current_termtype; - if ( secondary_da.terminal_id_version == 115 ) + if ( secondary_da.terminal_id_version == 10 + && secondary_da.terminal_id_hardware == 1 ) + terminal_type.win_terminal = true; // Windows Terminal >= 1.2 + else if ( secondary_da.terminal_id_version == 115 ) terminal_type.kde_konsole = true; else if ( secondary_da.terminal_id_version == 136 ) terminal_type.putty = true; // PuTTY diff --git a/src/ftextview.cpp b/src/ftextview.cpp index e1228f0f..7671fa09 100644 --- a/src/ftextview.cpp +++ b/src/ftextview.cpp @@ -729,7 +729,7 @@ inline bool FTextView::isPrintable (wchar_t ch) const const bool utf8 = ( FTerm::getEncoding() == fc::UTF8 ) ? true : false; if ( (utf8 && std::iswprint(std::wint_t(ch))) - || (!utf8 && std::isprint(ch)) ) + || (!utf8 && std::isprint(char(ch))) ) return true; return false; diff --git a/src/fwindow.cpp b/src/fwindow.cpp index cc184311..739def9d 100644 --- a/src/fwindow.cpp +++ b/src/fwindow.cpp @@ -669,7 +669,7 @@ bool FWindow::zoomWindow() } //---------------------------------------------------------------------- -void FWindow::switchToPrevWindow (FWidget* widget) +void FWindow::switchToPrevWindow (const FWidget* widget) { // switch to previous window diff --git a/src/include/final/fcallback.h b/src/include/final/fcallback.h index 5836997a..765c8b38 100644 --- a/src/include/final/fcallback.h +++ b/src/include/final/fcallback.h @@ -159,7 +159,7 @@ class FCallback void addCallback ( const FString& cb_signal , Object&& cb_instance , Function&& cb_member - , Args&&... args); + , Args&&... args) noexcept; template::type = nullptr @@ -168,41 +168,42 @@ class FCallback void addCallback ( const FString& cb_signal , Object&& cb_instance , Function&& cb_function - , Args&&... args); + , Args&&... args) noexcept; template::type = nullptr , typename... Args> void addCallback ( const FString& cb_signal , Function&& cb_function - , Args&&... args); + , Args&&... args) noexcept; template::type = nullptr , typename... Args> void addCallback ( const FString& cb_signal , Function& cb_function - , Args&&... args); + , Args&&... args) noexcept; template::type = nullptr , typename... Args> void addCallback ( const FString& cb_signal , Function& cb_function - , Args&&... args); + , Args&&... args) noexcept; template::type = nullptr , typename... Args> void addCallback ( const FString& cb_signal , Function&& cb_function - , Args&&... args); + , Args&&... args) noexcept; template::type = nullptr> - void delCallback (Object&& cb_instance); + void delCallback (Object&& cb_instance) noexcept; void delCallback (const FString& cb_signal); template::type = nullptr> - void delCallback (const FString& cb_signal, Object&& cb_instance); + void delCallback ( const FString& cb_signal + , Object&& cb_instance ) noexcept; template::type = nullptr> - void delCallback (FunctionPtr&& cb_func_ptr); + void delCallback (FunctionPtr&& cb_func_ptr) noexcept; template::type = nullptr> void delCallback (const Function& cb_function); @@ -235,7 +236,7 @@ template inline void FCallback::addCallback ( const FString& cb_signal , Function&& cb_function - , Args&&... args) + , Args&&... args) noexcept { // Add a function object as callback @@ -287,7 +288,7 @@ template inline void FCallback::addCallback ( const FString& cb_signal , Function& cb_function - , Args&&... args) + , Args&&... args) noexcept { // Add a function object reference as callback @@ -302,7 +303,7 @@ template inline void FCallback::addCallback ( const FString& cb_signal , Function& cb_function - , Args&&... args) + , Args&&... args) noexcept { // Add a function reference as callback @@ -318,7 +319,7 @@ template inline void FCallback::addCallback ( const FString& cb_signal , Function&& cb_function - , Args&&... args) + , Args&&... args) noexcept { // Add a function pointer as callback @@ -332,7 +333,7 @@ inline void FCallback::addCallback ( const FString& cb_signal //---------------------------------------------------------------------- template::type> -inline void FCallback::delCallback (Object&& cb_instance) +inline void FCallback::delCallback (Object&& cb_instance) noexcept { // Deletes entries with the given instance from the callback list @@ -353,7 +354,8 @@ inline void FCallback::delCallback (Object&& cb_instance) //---------------------------------------------------------------------- template::type> -inline void FCallback::delCallback (const FString& cb_signal, Object&& cb_instance) +inline void FCallback::delCallback ( const FString& cb_signal + , Object&& cb_instance ) noexcept { // Deletes entries with the given signal and instance // from the callback list @@ -376,7 +378,7 @@ inline void FCallback::delCallback (const FString& cb_signal, Object&& cb_instan //---------------------------------------------------------------------- template::type> -inline void FCallback::delCallback (FunctionPtr&& cb_func_ptr) +inline void FCallback::delCallback (FunctionPtr&& cb_func_ptr) noexcept { // Deletes entries with the given function pointer // from the callback list diff --git a/src/include/final/fterm.h b/src/include/final/fterm.h index c66b3352..3a04d361 100644 --- a/src/include/final/fterm.h +++ b/src/include/final/fterm.h @@ -221,25 +221,26 @@ class FTerm final static bool hasVT100(); static bool hasASCII(); static bool isMonochron(); - static bool isXTerminal(); static bool isAnsiTerminal(); + static bool isXTerminal(); static bool isRxvtTerminal(); static bool isUrxvtTerminal(); - static bool isMltermTerminal(); - static bool isPuttyTerminal(); static bool isKdeTerminal(); static bool isGnomeTerminal(); - static bool isKtermTerminal(); + static bool isPuttyTerminal(); + static bool isWindowsTerminal(); static bool isTeraTerm(); - static bool isSunTerminal(); static bool isCygwinTerminal(); static bool isMinttyTerm(); static bool isLinuxTerm(); static bool isFreeBSDTerm(); static bool isNetBSDTerm(); static bool isOpenBSDTerm(); + static bool isSunTerminal(); static bool isScreenTerm(); static bool isTmuxTerm(); + static bool isKtermTerminal(); + static bool isMltermTerminal(); static bool isNewFont(); static bool isInitialized(); static bool isCursorHideable(); diff --git a/src/include/final/ftermdetection.h b/src/include/final/ftermdetection.h index 430d0c52..e7d1fe64 100644 --- a/src/include/final/ftermdetection.h +++ b/src/include/final/ftermdetection.h @@ -58,12 +58,11 @@ class FTermDetection final uInt8 xterm : 1; uInt8 rxvt : 1; uInt8 urxvt : 1; - uInt8 mlterm : 1; - uInt8 putty : 1; uInt8 kde_konsole : 1; uInt8 gnome_terminal : 1; + uInt8 putty : 1; + uInt8 win_terminal : 1; // byte #1 - uInt8 kterm : 1; uInt8 tera_term : 1; uInt8 cygwin : 1; uInt8 mintty : 1; @@ -71,11 +70,13 @@ class FTermDetection final uInt8 freebsd_con : 1; uInt8 netbsd_con : 1; uInt8 openbsd_con : 1; - // byte #2 uInt8 sun_con : 1; + // byte #2 uInt8 screen : 1; uInt8 tmux : 1; - uInt8 : 5; // padding bits + uInt8 kterm : 1; + uInt8 mlterm : 1; + uInt8 : 4; // padding bits } FTerminalType; // Constructors @@ -109,11 +110,10 @@ class FTermDetection final static bool isXTerminal(); static bool isRxvtTerminal(); static bool isUrxvtTerminal(); - static bool isMltermTerminal(); - static bool isPuttyTerminal(); static bool isKdeTerminal(); static bool isGnomeTerminal(); - static bool isKtermTerminal(); + static bool isPuttyTerminal(); + static bool isWindowsTerminal(); static bool isTeraTerm(); static bool isCygwinTerminal(); static bool isMinttyTerm(); @@ -124,6 +124,8 @@ class FTermDetection final static bool isSunTerminal(); static bool isScreenTerm(); static bool isTmuxTerm(); + static bool isKtermTerminal(); + static bool isMltermTerminal(); static bool canDisplay256Colors(); static bool hasTerminalDetection(); static bool hasSetCursorStyleSupport(); @@ -133,11 +135,10 @@ class FTermDetection final static void setXTerminal (bool); static void setRxvtTerminal (bool); static void setUrxvtTerminal (bool); - static void setMltermTerminal (bool); - static void setPuttyTerminal (bool); static void setKdeTerminal (bool); static void setGnomeTerminal (bool); - static void setKtermTerminal (bool); + static void setPuttyTerminal (bool); + static void setWindowsTerminal (bool); static void setTeraTerm (bool); static void setCygwinTerminal (bool); static void setMinttyTerm (bool); @@ -148,6 +149,8 @@ class FTermDetection final static void setSunTerminal (bool); static void setScreenTerm (bool); static void setTmuxTerm (bool); + static void setKtermTerminal (bool); + static void setMltermTerminal (bool); static void setTerminalDetection (bool); static void setTtyTypeFileName (const char[]); @@ -301,6 +304,10 @@ inline bool FTermDetection::isMltermTerminal() inline bool FTermDetection::isPuttyTerminal() { return terminal_type.putty; } +//---------------------------------------------------------------------- +inline bool FTermDetection::isWindowsTerminal() +{ return terminal_type.win_terminal; } + //---------------------------------------------------------------------- inline bool FTermDetection::isKdeTerminal() { return terminal_type.kde_konsole; } @@ -381,6 +388,10 @@ inline void FTermDetection::setMltermTerminal (bool enable) inline void FTermDetection::setPuttyTerminal (bool enable) { terminal_type.putty = enable; } +//---------------------------------------------------------------------- +inline void FTermDetection::setWindowsTerminal (bool enable) +{ terminal_type.win_terminal = enable; } + //---------------------------------------------------------------------- inline void FTermDetection::setKdeTerminal (bool enable) { terminal_type.kde_konsole = enable; } diff --git a/src/include/final/fvterm.h b/src/include/final/fvterm.h index a3081c4a..b6d39abf 100644 --- a/src/include/final/fvterm.h +++ b/src/include/final/fvterm.h @@ -48,6 +48,8 @@ #error "Only can be included directly." #endif +#include // need for timeval (cygwin) + #include #include #include diff --git a/src/include/final/fwidget.h b/src/include/final/fwidget.h index b4f95974..dcb36328 100644 --- a/src/include/final/fwidget.h +++ b/src/include/final/fwidget.h @@ -318,9 +318,9 @@ class FWidget : public FVTerm, public FObject virtual bool close(); void clearStatusbarMessage(); template - void addCallback (const FString&, Args&&...); + void addCallback (const FString&, Args&&...) noexcept; template - void delCallback (Args&&...); + void delCallback (Args&&...) noexcept; void emitCallback (const FString&) const; void addAccelerator (FKey); virtual void addAccelerator (FKey, FWidget*); @@ -985,14 +985,14 @@ inline void FWidget::clearStatusbarMessage() //---------------------------------------------------------------------- template -inline void FWidget::addCallback (const FString& cb_signal, Args&&... args) +inline void FWidget::addCallback (const FString& cb_signal, Args&&... args) noexcept { callback_impl.addCallback (cb_signal, std::forward(args)...); } //---------------------------------------------------------------------- template -inline void FWidget::delCallback (Args&&... args) +inline void FWidget::delCallback (Args&&... args) noexcept { callback_impl.delCallback(std::forward(args)...); } diff --git a/src/include/final/fwindow.h b/src/include/final/fwindow.h index f73d4c18..27347886 100644 --- a/src/include/final/fwindow.h +++ b/src/include/final/fwindow.h @@ -143,7 +143,7 @@ class FWindow : public FWidget static bool lowerWindow (FWidget*); bool lowerWindow (); bool zoomWindow (); - static void switchToPrevWindow (FWidget*); + static void switchToPrevWindow (const FWidget*); static bool activatePrevWindow(); void setShadowSize (const FSize&) override; diff --git a/test/conemu.h b/test/conemu.h index d219e09c..0daf1719 100644 --- a/test/conemu.h +++ b/test/conemu.h @@ -53,12 +53,11 @@ class ConEmu xterm, rxvt, urxvt, - mlterm, - putty, kde_konsole, gnome_terminal, newer_vte_terminal, - kterm, + putty, + win_terminal, tera_term, cygwin, mintty, @@ -68,7 +67,9 @@ class ConEmu openbsd_con, sun_con, screen, - tmux + tmux, + kterm, + mlterm }; // Constructors @@ -634,12 +635,11 @@ inline const char* ConEmu::getAnswerback (console con) 0, // XTerm 0, // Rxvt 0, // Urxvt - 0, // mlterm - Multi Lingual TERMinal - C_STR("PuTTY"), // PuTTY 0, // KDE Konsole 0, // GNOME Terminal 0, // VTE Terminal >= 0.53.0 - 0, // kterm, + C_STR("PuTTY"), // PuTTY + C_STR("\005"), // Windows Terminal 0, // Tera Term 0, // Cygwin 0, // Mintty @@ -649,7 +649,9 @@ inline const char* ConEmu::getAnswerback (console con) 0, // OpenBSD console 0, // Sun console 0, // screen - 0 // tmux + 0, // tmux + 0, // kterm, + 0 // mlterm - Multi Lingual TERMinal }; return Answerback[con]; @@ -664,12 +666,11 @@ inline const char* ConEmu::getDSR (console con) C_STR("\033[0n"), // XTerm C_STR("\033[0n"), // Rxvt C_STR("\033[0n"), // Urxvt - C_STR("\033[0n"), // mlterm - Multi Lingual TERMinal - 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"), // PuTTY + C_STR("\033[0n"), // Windows Terminal >= 1.2 C_STR("\033[0n"), // Tera Term 0, // Cygwin C_STR("\033[0n"), // Mintty @@ -677,9 +678,11 @@ inline const char* ConEmu::getDSR (console con) C_STR("\033[0n"), // FreeBSD console C_STR("\033[0n"), // NetBSD console C_STR("\033[0n"), // OpenBSD console - 0, // Sun console + 0, // Sun console C_STR("\033[0n"), // screen - C_STR("\033[0n") // tmux + C_STR("\033[0n"), // tmux + C_STR("\033[0n"), // kterm + C_STR("\033[0n") // mlterm - Multi Lingual TERMinal }; return DSR[con]; @@ -694,12 +697,11 @@ inline const char* ConEmu::getDECID (console con) C_STR("\033[?63;1;2;6;4;6;9;15;22c"), // XTerm C_STR("\033[?1;2c"), // Rxvt C_STR("\033[?1;2c"), // Urxvt - C_STR("\033[?63;1;2;3;4;7;29c"), // mlterm - Multi Lingual TERMinal - 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[?6c"), // PuTTY + 0, // Windows Terminal C_STR("\033[?1;2c"), // Tera Term 0, // Cygwin C_STR("\033[?1;2;6;22c"), // Mintty @@ -709,7 +711,9 @@ inline const char* ConEmu::getDECID (console con) 0, // OpenBSD console 0, // Sun console C_STR("\033[?1;2c"), // screen - 0 // tmux + 0, // tmux + C_STR("\033[?1;2c"), // kterm + C_STR("\033[?63;1;2;3;4;7;29c") // mlterm - Multi Lingual TERMinal }; return DECID[con]; @@ -724,12 +728,11 @@ inline const char* ConEmu::getDA (console con) C_STR("\033[?63;1;2;6;4;6;9;15;22c"), // XTerm C_STR("\033[?1;2c"), // Rxvt C_STR("\033[?1;2c"), // Urxvt - C_STR("\033[?63;1;2;3;4;7;29c"), // mlterm - Multi Lingual TERMinal - 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[?6c"), // PuTTY + C_STR("\033[?1;0c"), // Windows Terminal >= 1.2 C_STR("\033[?1;2c"), // Tera Term C_STR("\033[?6c"), // Cygwin C_STR("\033[?1;2;6;22c"), // Mintty @@ -739,7 +742,9 @@ inline const char* ConEmu::getDA (console con) C_STR("\033[?62;6c"), // OpenBSD console 0, // Sun console C_STR("\033[?1;2c"), // screen - C_STR("\033[?1;2c") // tmux + C_STR("\033[?1;2c"), // tmux + C_STR("\033[?1;2c"), // kterm + C_STR("\033[?63;1;2;3;4;7;29c") // mlterm - Multi Lingual TERMinal }; return DA[con]; @@ -754,12 +759,11 @@ inline const char* ConEmu::getDA1 (console con) 0, // XTerm C_STR("\033[?1;2c"), // Rxvt C_STR("\033[?1;2c"), // Urxvt - C_STR("\033[?63;1;2;3;4;7;29c"), // mlterm - Multi Lingual TERMinal - 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[?6c"), // PuTTY + 0, // Windows Terminal C_STR("\033[?1;2c"), // Tera Term C_STR("\033[?6c"), // Cygwin C_STR("\033[?1;2;6;22c"), // Mintty @@ -769,7 +773,9 @@ inline const char* ConEmu::getDA1 (console con) 0, // OpenBSD console 0, // Sun console 0, // screen - 0 // tmux + 0, // tmux + 0, // kterm + C_STR("\033[?63;1;2;3;4;7;29c") // mlterm - Multi Lingual TERMinal }; return DA1[con]; @@ -784,12 +790,11 @@ inline const char* ConEmu::getSEC_DA (console con) C_STR("\033[>19;312;0c"), // XTerm C_STR("\033[>82;20710;0c"), // Rxvt C_STR("\033[>85;95;0c"), // Urxvt - C_STR("\033[>24;279;0c"), // mlterm - Multi Lingual TERMinal - 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[>0;136;0c"), // PuTTY + C_STR("\033[>0;10;1c"), // Windows Terminal >= 1.2 C_STR("\033[>32;278;0c"), // Tera Term C_STR("\033[>67;200502;0c"), // Cygwin C_STR("\033[>77;20402;0c"), // Mintty @@ -799,7 +804,9 @@ inline const char* ConEmu::getSEC_DA (console con) C_STR("\033[>24;20;0c"), // OpenBSD console 0, // Sun console C_STR("\033[>83;40201;0c"), // screen - C_STR("\033[>84;0;0c") // tmux + C_STR("\033[>84;0;0c"), // tmux + C_STR("\033[?1;2c"), // kterm + C_STR("\033[>24;279;0c") // mlterm - Multi Lingual TERMinal }; return SEC_DA[con]; @@ -968,17 +975,18 @@ inline void ConEmu::parseTerminalBuffer (std::size_t length, console con) write (fd_master, "\033]lbash\033\\", 9); else if ( con != ansi && con != rxvt - && con != mlterm && con != kde_konsole - && con != kterm && con != cygwin + && con != win_terminal && con != mintty && con != linux_con && con != freebsd_con && con != netbsd_con && con != openbsd_con && con != sun_con - && con != tmux ) + && con != tmux + && con != kterm + && con != mlterm ) write (fd_master, "\033]lTITLE\033\\", 10); i += 5; @@ -996,8 +1004,8 @@ inline void ConEmu::parseTerminalBuffer (std::size_t length, console con) if ( con != ansi && con != rxvt && con != kde_konsole - && con != kterm && con != cygwin + && con != win_terminal && con != mintty && con != linux_con && con != freebsd_con @@ -1005,7 +1013,8 @@ inline void ConEmu::parseTerminalBuffer (std::size_t length, console con) && con != openbsd_con && con != sun_con && con != screen - && con != tmux ) + && con != tmux + && con != kterm ) { int n = buffer[i + 4] - '0'; write (fd_master, "\033]4;", 4); @@ -1031,8 +1040,8 @@ inline void ConEmu::parseTerminalBuffer (std::size_t length, console con) if ( con != ansi && con != rxvt && con != kde_konsole - && con != kterm && con != cygwin + && con != win_terminal && con != mintty && con != linux_con && con != freebsd_con @@ -1040,7 +1049,8 @@ inline void ConEmu::parseTerminalBuffer (std::size_t length, console con) && con != openbsd_con && con != sun_con && con != screen - && con != tmux ) + && con != tmux + && con != kterm ) { int n = (buffer[i + 4] - '0') * 10 + (buffer[i + 5] - '0'); @@ -1069,8 +1079,8 @@ inline void ConEmu::parseTerminalBuffer (std::size_t length, console con) if ( con != ansi && con != rxvt && con != kde_konsole - && con != kterm && con != cygwin + && con != win_terminal && con != mintty && con != linux_con && con != freebsd_con @@ -1078,7 +1088,8 @@ inline void ConEmu::parseTerminalBuffer (std::size_t length, console con) && con != openbsd_con && con != sun_con && con != screen - && con != tmux ) + && con != tmux + && con != kterm ) { int n = (buffer[i + 4] - '0') * 100 + (buffer[i + 5] - '0') * 10 diff --git a/test/fstringstream-test.cpp b/test/fstringstream-test.cpp index c6214c20..36642e53 100644 --- a/test/fstringstream-test.cpp +++ b/test/fstringstream-test.cpp @@ -202,6 +202,12 @@ void FStringStreamTest::fileTest() { std::ofstream file_stream(filename, std::ofstream::out); + + if ( ! file_stream.is_open() ) + { + throw std::iostream::failure("Failed to open \"" + filename + "\""); + } + ss << "FStringStream file test\n"; file_stream << ss.str(); diff --git a/test/ftermdetection-test.cpp b/test/ftermdetection-test.cpp index b79809d2..ab35d7ba 100644 --- a/test/ftermdetection-test.cpp +++ b/test/ftermdetection-test.cpp @@ -68,12 +68,11 @@ class FTermDetectionTest : public CPPUNIT_NS::TestFixture, test::ConEmu void xtermTest(); void rxvtTest(); void urxvtTest(); - void mltermTest(); - void puttyTest(); void kdeKonsoleTest(); void gnomeTerminalTest(); void newerVteTerminalTest(); - void ktermTest(); + void puttyTest(); + void windowsTerminalTest(); void teraTermTest(); void cygwinTest(); void minttyTest(); @@ -84,6 +83,8 @@ class FTermDetectionTest : public CPPUNIT_NS::TestFixture, test::ConEmu void sunTest(); void screenTest(); void tmuxTest(); + void ktermTest(); + void mltermTest(); void ttytypeTest(); private: @@ -96,12 +97,11 @@ class FTermDetectionTest : public CPPUNIT_NS::TestFixture, test::ConEmu CPPUNIT_TEST (xtermTest); CPPUNIT_TEST (rxvtTest); CPPUNIT_TEST (urxvtTest); - CPPUNIT_TEST (mltermTest); - CPPUNIT_TEST (puttyTest); CPPUNIT_TEST (kdeKonsoleTest); CPPUNIT_TEST (gnomeTerminalTest); CPPUNIT_TEST (newerVteTerminalTest); - CPPUNIT_TEST (ktermTest); + CPPUNIT_TEST (puttyTest); + CPPUNIT_TEST (windowsTerminalTest); CPPUNIT_TEST (teraTermTest); CPPUNIT_TEST (cygwinTest); CPPUNIT_TEST (minttyTest); @@ -112,6 +112,8 @@ class FTermDetectionTest : public CPPUNIT_NS::TestFixture, test::ConEmu CPPUNIT_TEST (sunTest); CPPUNIT_TEST (screenTest); CPPUNIT_TEST (tmuxTest); + CPPUNIT_TEST (ktermTest); + CPPUNIT_TEST (mltermTest); CPPUNIT_TEST (ttytypeTest); // End of test suite definition @@ -162,11 +164,10 @@ void FTermDetectionTest::ansiTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -177,6 +178,8 @@ void FTermDetectionTest::ansiTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( ! detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -231,11 +234,10 @@ void FTermDetectionTest::xtermTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -246,6 +248,8 @@ void FTermDetectionTest::xtermTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( detect.hasSetCursorStyleSupport() ); @@ -292,11 +296,10 @@ void FTermDetectionTest::rxvtTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -307,6 +310,8 @@ void FTermDetectionTest::rxvtTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -354,11 +359,10 @@ void FTermDetectionTest::urxvtTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -369,6 +373,8 @@ void FTermDetectionTest::urxvtTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -387,137 +393,6 @@ void FTermDetectionTest::urxvtTest() } } -//---------------------------------------------------------------------- -void FTermDetectionTest::mltermTest() -{ - finalcut::FTermData& data = *finalcut::FTerm::getFTermData(); - finalcut::FTermDetection detect; - data.setTermType("mlterm"); - detect.setTerminalDetection(true); - - pid_t pid = forkConEmu(); - - if ( isConEmuChildProcess(pid) ) - { - setenv ("TERM", "mlterm", 1); - setenv ("MLTERM", "3.8.4", 1); - setenv ("COLORFGBG", "default;default", 1); - unsetenv("TERMCAP"); - unsetenv("COLORTERM"); - unsetenv("VTE_VERSION"); - 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() ); - CPPUNIT_ASSERT_CSTRING ( detect.getTermType(), "mlterm-256color" ); - - setenv ("TERM", "mlterm", 1); - unsetenv("COLORFGBG"); - detect.detect(); - CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); - CPPUNIT_ASSERT_CSTRING ( detect.getTermType(), "xterm-256color" ); - - printConEmuDebug(); - closeConEmuStdStreams(); - exit(EXIT_SUCCESS); - } - else // Parent - { - // Start the terminal emulation - startConEmuTerminal (ConEmu::mlterm); - - if ( waitpid(pid, 0, WUNTRACED) != pid ) - std::cerr << "waitpid error" << std::endl; - } -} - -//---------------------------------------------------------------------- -void FTermDetectionTest::puttyTest() -{ - finalcut::FTermData& data = *finalcut::FTerm::getFTermData(); - finalcut::FTermDetection detect; - data.setTermType("xterm"); - detect.setTerminalDetection(true); - - pid_t pid = forkConEmu(); - - if ( isConEmuChildProcess(pid) ) - { - setenv ("TERM", "xterm", 1); - unsetenv("TERMCAP"); - unsetenv("COLORTERM"); - unsetenv("COLORFGBG"); - unsetenv("VTE_VERSION"); - 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() ); - - enableConEmuDebug(true); - printConEmuDebug(); - closeConEmuStdStreams(); - exit(EXIT_SUCCESS); - } - else // Parent - { - // Start the terminal emulation - startConEmuTerminal (ConEmu::putty); - - if ( waitpid(pid, 0, WUNTRACED) != pid ) - std::cerr << "waitpid error" << std::endl; - } -} - //---------------------------------------------------------------------- void FTermDetectionTest::kdeKonsoleTest() { @@ -546,11 +421,10 @@ void FTermDetectionTest::kdeKonsoleTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -561,6 +435,8 @@ void FTermDetectionTest::kdeKonsoleTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -608,11 +484,10 @@ void FTermDetectionTest::gnomeTerminalTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -623,6 +498,8 @@ void FTermDetectionTest::gnomeTerminalTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( detect.hasSetCursorStyleSupport() ); @@ -670,11 +547,10 @@ void FTermDetectionTest::newerVteTerminalTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -685,6 +561,8 @@ void FTermDetectionTest::newerVteTerminalTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( detect.hasSetCursorStyleSupport() ); @@ -704,18 +582,18 @@ void FTermDetectionTest::newerVteTerminalTest() } //---------------------------------------------------------------------- -void FTermDetectionTest::ktermTest() +void FTermDetectionTest::puttyTest() { finalcut::FTermData& data = *finalcut::FTerm::getFTermData(); finalcut::FTermDetection detect; - data.setTermType("kterm"); + data.setTermType("xterm"); detect.setTerminalDetection(true); pid_t pid = forkConEmu(); if ( isConEmuChildProcess(pid) ) { - setenv ("TERM", "kterm", 1); + setenv ("TERM", "xterm", 1); unsetenv("TERMCAP"); unsetenv("COLORTERM"); unsetenv("COLORFGBG"); @@ -725,18 +603,16 @@ void FTermDetectionTest::ktermTest() unsetenv("KONSOLE_DBUS_SESSION"); unsetenv("KONSOLE_DCOP"); unsetenv("TMUX"); - detect.detect(); - CPPUNIT_ASSERT ( ! detect.isXTerminal() ); + 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -747,16 +623,76 @@ void FTermDetectionTest::ktermTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); - CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); - CPPUNIT_ASSERT ( ! detect.hasTerminalDetection() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); + CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); + CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); - // Test fallback to vt100 without TERM environment variable - unsetenv("TERM"); - detect.setKtermTerminal(false); + enableConEmuDebug(true); + printConEmuDebug(); + closeConEmuStdStreams(); + exit(EXIT_SUCCESS); + } + else // Parent + { + // Start the terminal emulation + startConEmuTerminal (ConEmu::putty); + + if ( waitpid(pid, 0, WUNTRACED) != pid ) + std::cerr << "waitpid error" << std::endl; + } +} + +//---------------------------------------------------------------------- +void FTermDetectionTest::windowsTerminalTest() +{ + finalcut::FTermData& data = *finalcut::FTerm::getFTermData(); + finalcut::FTermDetection detect; + data.setTermType("xterm"); + detect.setTerminalDetection(true); + + pid_t pid = forkConEmu(); + + if ( isConEmuChildProcess(pid) ) + { + setenv ("TERM", "xterm-256color", 1); + unsetenv("TERMCAP"); + unsetenv("COLORTERM"); + unsetenv("COLORFGBG"); + unsetenv("VTE_VERSION"); + unsetenv("XTERM_VERSION"); + unsetenv("ROXTERM_ID"); + unsetenv("KONSOLE_DBUS_SESSION"); + unsetenv("KONSOLE_DCOP"); + unsetenv("TMUX"); + setenv ("WT_PROFILE_ID", "{61c54cbd-c2a6-5271-96e7-009a87ff44bf}", 1); + setenv ("WT_SESSION", "4dc413a1-5ed9-46d4-b4e0-5a2fec7acb44", 1); detect.detect(); + + CPPUNIT_ASSERT ( detect.isXTerminal() ); + CPPUNIT_ASSERT ( ! detect.isAnsiTerminal() ); + CPPUNIT_ASSERT ( ! detect.isRxvtTerminal() ); + CPPUNIT_ASSERT ( ! detect.isUrxvtTerminal() ); + CPPUNIT_ASSERT ( ! detect.isKdeTerminal() ); + CPPUNIT_ASSERT ( ! detect.isGnomeTerminal() ); + CPPUNIT_ASSERT ( ! detect.isPuttyTerminal() ); + CPPUNIT_ASSERT ( detect.isWindowsTerminal() ); + 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.isKtermTerminal() ); - CPPUNIT_ASSERT_CSTRING ( detect.getTermType(), "vt100" ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); + CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); + CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); + CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); printConEmuDebug(); closeConEmuStdStreams(); @@ -765,7 +701,7 @@ void FTermDetectionTest::ktermTest() else // Parent { // Start the terminal emulation - startConEmuTerminal (ConEmu::kterm); + startConEmuTerminal (ConEmu::win_terminal); if ( waitpid(pid, 0, WUNTRACED) != pid ) std::cerr << "waitpid error" << std::endl; @@ -801,11 +737,10 @@ void FTermDetectionTest::teraTermTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -816,6 +751,8 @@ void FTermDetectionTest::teraTermTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -863,11 +800,10 @@ void FTermDetectionTest::cygwinTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -878,6 +814,8 @@ void FTermDetectionTest::cygwinTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -925,11 +863,10 @@ void FTermDetectionTest::minttyTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( detect.isMinttyTerm() ); @@ -940,6 +877,8 @@ void FTermDetectionTest::minttyTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( detect.hasSetCursorStyleSupport() ); @@ -987,11 +926,10 @@ void FTermDetectionTest::linuxTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -1002,6 +940,8 @@ void FTermDetectionTest::linuxTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -1057,11 +997,10 @@ void FTermDetectionTest::freebsdTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -1072,6 +1011,8 @@ void FTermDetectionTest::freebsdTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -1129,11 +1070,10 @@ void FTermDetectionTest::netbsdTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -1144,6 +1084,8 @@ void FTermDetectionTest::netbsdTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -1199,11 +1141,10 @@ void FTermDetectionTest::openbsdTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -1214,6 +1155,8 @@ void FTermDetectionTest::openbsdTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -1267,11 +1210,10 @@ void FTermDetectionTest::sunTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -1282,6 +1224,8 @@ void FTermDetectionTest::sunTest() CPPUNIT_ASSERT ( detect.isSunTerminal() ); CPPUNIT_ASSERT ( ! detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( ! detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -1336,11 +1280,10 @@ void FTermDetectionTest::screenTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -1351,6 +1294,8 @@ void FTermDetectionTest::screenTest() CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( detect.isScreenTerm() ); CPPUNIT_ASSERT ( ! detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -1405,11 +1350,10 @@ void FTermDetectionTest::tmuxTest() 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.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); CPPUNIT_ASSERT ( ! detect.isTeraTerm() ); CPPUNIT_ASSERT ( ! detect.isCygwinTerminal() ); CPPUNIT_ASSERT ( ! detect.isMinttyTerm() ); @@ -1419,7 +1363,9 @@ void FTermDetectionTest::tmuxTest() CPPUNIT_ASSERT ( ! detect.isOpenBSDTerm() ); CPPUNIT_ASSERT ( ! detect.isSunTerminal() ); CPPUNIT_ASSERT ( detect.isScreenTerm() ); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); CPPUNIT_ASSERT ( detect.isTmuxTerm() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); @@ -1444,6 +1390,146 @@ void FTermDetectionTest::tmuxTest() } } +//---------------------------------------------------------------------- +void FTermDetectionTest::ktermTest() +{ + finalcut::FTermData& data = *finalcut::FTerm::getFTermData(); + finalcut::FTermDetection detect; + data.setTermType("kterm"); + detect.setTerminalDetection(true); + + pid_t pid = forkConEmu(); + + if ( isConEmuChildProcess(pid) ) + { + setenv ("TERM", "kterm", 1); + unsetenv("TERMCAP"); + unsetenv("COLORTERM"); + unsetenv("COLORFGBG"); + unsetenv("VTE_VERSION"); + 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.isKdeTerminal() ); + CPPUNIT_ASSERT ( ! detect.isGnomeTerminal() ); + CPPUNIT_ASSERT ( ! detect.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); + 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.isKtermTerminal() ); + CPPUNIT_ASSERT ( ! detect.isMltermTerminal() ); + CPPUNIT_ASSERT ( ! detect.canDisplay256Colors() ); + CPPUNIT_ASSERT ( ! detect.hasTerminalDetection() ); + CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); + + // Test fallback to vt100 without TERM environment variable + unsetenv("TERM"); + detect.setKtermTerminal(false); + detect.detect(); + CPPUNIT_ASSERT ( ! detect.isKtermTerminal() ); + CPPUNIT_ASSERT_CSTRING ( detect.getTermType(), "vt100" ); + + printConEmuDebug(); + closeConEmuStdStreams(); + exit(EXIT_SUCCESS); + } + else // Parent + { + // Start the terminal emulation + startConEmuTerminal (ConEmu::kterm); + + if ( waitpid(pid, 0, WUNTRACED) != pid ) + std::cerr << "waitpid error" << std::endl; + } +} + +//---------------------------------------------------------------------- +void FTermDetectionTest::mltermTest() +{ + finalcut::FTermData& data = *finalcut::FTerm::getFTermData(); + finalcut::FTermDetection detect; + data.setTermType("mlterm"); + detect.setTerminalDetection(true); + + pid_t pid = forkConEmu(); + + if ( isConEmuChildProcess(pid) ) + { + setenv ("TERM", "mlterm", 1); + setenv ("MLTERM", "3.8.4", 1); + setenv ("COLORFGBG", "default;default", 1); + unsetenv("TERMCAP"); + unsetenv("COLORTERM"); + unsetenv("VTE_VERSION"); + 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.isKdeTerminal() ); + CPPUNIT_ASSERT ( ! detect.isGnomeTerminal() ); + CPPUNIT_ASSERT ( ! detect.isPuttyTerminal() ); + CPPUNIT_ASSERT ( ! detect.isWindowsTerminal() ); + 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.isKtermTerminal() ); + CPPUNIT_ASSERT ( detect.isMltermTerminal() ); + CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); + CPPUNIT_ASSERT ( detect.hasTerminalDetection() ); + CPPUNIT_ASSERT ( ! detect.hasSetCursorStyleSupport() ); + CPPUNIT_ASSERT_CSTRING ( detect.getTermType(), "mlterm-256color" ); + + setenv ("TERM", "mlterm", 1); + unsetenv("COLORFGBG"); + detect.detect(); + CPPUNIT_ASSERT ( detect.canDisplay256Colors() ); + CPPUNIT_ASSERT_CSTRING ( detect.getTermType(), "xterm-256color" ); + + printConEmuDebug(); + closeConEmuStdStreams(); + exit(EXIT_SUCCESS); + } + else // Parent + { + // Start the terminal emulation + startConEmuTerminal (ConEmu::mlterm); + + if ( waitpid(pid, 0, WUNTRACED) != pid ) + std::cerr << "waitpid error" << std::endl; + } +} + //---------------------------------------------------------------------- void FTermDetectionTest::ttytypeTest() {