Windows-Konsole mit ANSI-Farbverarbeitung

Windows-Konsole mit ANSI-Farbverarbeitung

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/setconsolemode

Beim 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 echoBefehl (oder vielleicht dieStapelverarbeitungTeil von CMD.EXEoder conhost) aktiviert die ANSI-Verarbeitung durch Aufruf der gerade erwähnten API. Viele andere Tools oder ausführbare Dateien, die in stdinoder 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\VirtualTerminalLevellegt 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 1global 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.

Bildbeschreibung hier eingeben

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.

ConEmu und ANSI X3.64 / Xterm 256 Farben

Antwort3

Ab Windows 10 Threshold 2 (v1511) werden ANSI-Escape-Sequenzen, insbesondere Farben, unterstützt conhost.exe:cmd.exe

Bild von der unten genannten MSDN-Seite

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

verwandte Informationen