Gibt es einen Konsolenemulator für Windows, der ANSI-Farbgebung interpretiert?
Wir verwenden rspec und ein Teil unseres Teams verwendet Windows und die speziellen Zeichenfolgen zum Einfärben sind für sie nicht sehr nützlich ;).
Antwort1
Keine der Antworten auf dieser Seite erwähnt einen wichtigen Aspekt der neuen Unterstützung fürANSI-Terminalsteuerungdas hinzugefügt wurde zuWindows 10Konsolenhost in Build 16257 (und höher). Es ist nämlichnicht aktiviertstandardmäßig. Sofern die von Ihnen verwendete Software nichtermöglichtANSI-Verarbeitung durch Aufruf derKonsolenmodus festlegenWenn Sie die API mit dem ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0004)
Flag verwenden, werden für diese Anwendung weder Farben angezeigt noch eine ANSI-Verarbeitung durchgeführt.
VERARBEITUNG DES VIRTUELLEN TERMINALS AKTIVIERENVersion:
https://docs.microsoft.com/windows/console/setconsolemodeBeim Schreiben mitSchreibeDateioderSchreibkonsole, Zeichen werden für VT100 und ähnliche Steuerzeichenfolgen analysiert, die die Cursorbewegung, den Farb-/Schriftmodus und andere Vorgänge steuern, die auch über die vorhandenen Konsolen-APIs ausgeführt werden können. Weitere Informationen finden Sie unter Virtuelle Terminalsequenzen der Konsole.
Ich vermute, der Grund, warum die Beispiele auf dieser Seite funktionieren, ist, dass anscheinend der echo
Befehl (oder vielleicht dieStapelverarbeitungTeil von CMD.EXE
oder conhost
) aktiviert die ANSI-Verarbeitung durch Aufruf der gerade erwähnten API. Viele andere Tools oder ausführbare Dateien, die in stdin
oder schreiben stdout
, tun dies jedoch möglicherweise nicht. In diesem Fall werden für diese Prozesse keine Farben angezeigt.
Glücklicherweise kann die globale Vorgabe geändert werden vonOpt-inZuOpt-out. Der Registrierungsschlüssel unter HKEY_CURRENT_USER\Console\VirtualTerminalLevel
legt das globale Standardverhalten für die Verarbeitung von ANSI-Escapesequenzen fest. Erstellen Sie DWORD
(falls erforderlich) einen Schlüssel und legen Sie seinen Wert auf fest, um die ANSI-Verarbeitung standardmäßig 1
global zu aktivieren (oder zu deaktivieren).0
[HKEY_CURRENT_USER\Console] "VirtualTerminalLevel"=dword:00000001
Beachten Sie, dass diese Registrierungseinstellung eineStandard, was bedeutet, dass es nur Konsolen-Apps betrifft, die den Konsolenmodus nicht explizit durch den Aufruf von manipulieren SetConsoleMode(...)
. Daraus folgt, dass der Registrierungswert zwar hilfreich sein kannaktivierenANSI fürKonsolenmodus-ahnungslosApps, es hat keine Auswirkungen aufKonsolenmodus-versiertApp, die (aus irgendeinem Grund) ausdrücklichdeaktivierenANSI.
Antwort2
ConEmuunterstützt ANSI X3.64 mit Xterm 256-Farberweiterung. Ich bin der Autor dieses Konsolenemulators.
Ansi-Sequenzen werden für alle Prozesse verarbeitet, die in ConEmu-Tabs ausgeführt werden.
Soweit ich weiß, unterstützt ConEmu mehr Codes als Ansicon.
Antwort3
Ab Windows 10 Threshold 2 (v1511) werden ANSI-Escape-Sequenzen, insbesondere Farben, unterstützt conhost.exe
:cmd.exe
DerMSDN-Seite zu Konsolen-Virtual-Terminal-Sequenzenerklärt, welche Sequenzen unterstützt werden und wie man sie aktiviert:
Sie könnenGetConsoleModeUndKonsolenmodus festlegenFlags, um dieses Verhalten zu konfigurieren. [...]
Das Verhalten der folgenden Sequenzen basiert auf VT100 und abgeleiteten Terminalemulatortechnologien, insbesondere dem xterm-Terminalemulator. Weitere Informationen zu Terminalsequenzen finden Sie unterhttp://vt100.netund beihttp://invisible-island.net/xterm/ctlseqs/ctlseqs.html.
Antwort4
Derzeit sind CMD-Konsolenfarben in Win10 standardmäßig nicht aktiviert. Um sie zu aktivieren, fügen Sie Ihrem Code Folgendes hinzu:
#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwMode = 0;
GetConsoleMode(hOut, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hOut, dwMode);
// References:
//SetConsoleMode() and ENABLE_VIRTUAL_TERMINAL_PROCESSING?
//https://stackoverflow.com/questions/38772468/setconsolemode-and-enable-virtual-terminal-processing
// Windows console with ANSI colors handling
// https://superuser.com/questions/413073/windows-console-with-ansi-colors-handling
#endif