Windows-Konsole mit ANSI-Farbverarbeitung

33

Gibt es einen Konsolenemulator für Windows, der ANSI-Farben interpretiert?

Wir benutzen rspec und ein Teil unseres Teams benutzt Windows und die spezielle Zeichenkette zum Ausmalen ist für sie nicht sehr nützlich;).

mrzasa
quelle

Antworten:

40

ConEmu unterstützt ANSI X3.64 mit Xterm 256-Farberweiterung. Ich bin der Autor dieses Konsolenemulators.

Ansi-Sequenzen werden für alle Prozesse in ConEmu-Registerkarten verarbeitet.

AFAIK, ConEmu unterstützt mehr Codes als Ansicon.

ConEmu und ANSI X3.64 / Xterm 256 Farben

Maximus
quelle
1
Das rockt! Als Spieler liebe ich die Beben-Funktion. Die Konsole scheint jedoch oben auf dem Bildschirm gesperrt zu sein (auch wenn die Option oben gesperrt deaktiviert ist). Vielen Dank
Ced
Wie führt man cmd mit Tabulatoren aus?
Mikey
@Mikey Was? Lesen Sie zuerst die Antwort.
Maximus
34

Keine der Antworten auf dieser Seite erwähnt einen wichtigen Aspekt der neuen Unterstützung für ANSI Terminal Control, die dem Windows 10- Konsolenhost in Build 16257 (und höher) hinzugefügt wurde . Das heißt, es ist standardmäßig nicht aktiviert . Es sei denn , die spezifische Software verwenden Sie ermöglicht ANSI Verarbeitung durch den Aufruf SetConsoleMode API mit der ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)Flagge, werden Sie nicht Farben oder get ANSI für diese Anwendung der Verarbeitung sehen.

ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemode

Beim Schreiben mit WriteFile oder WriteConsole werden Zeichen 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 Sequenzen virtueller Konsolenterminals.

Ich vermute, der Grund, warum die auf dieser Seite gezeigten Beispiele funktionieren, ist, dass anscheinend der echoBefehl (oder möglicherweise der Stapelverarbeitungsteil von CMD.EXEoder conhost) die ANSI-Verarbeitung durch Aufrufen der gerade erwähnten API ermöglicht. Viele andere Tools oder ausführbare Dateien, in die geschrieben wird stdinoder die dies stdoutmöglicherweise nicht tun, sehen in diesem Fall keine Farben für diese Prozesse.

Glücklicherweise kann der globale Standard von Opt-In zu Opt-Out geändert werden . Der Registrierungsschlüssel unter HKEY_CURRENT_USER\Console\VirtualTerminalLevellegt das globale Standardverhalten für die Verarbeitung von ANSI-Escape-Sequenzen fest. Erstellen Sie einen DWORDSchlüssel (falls erforderlich) und legen Sie dessen Wert fest, 1um die 0ANSI-Verarbeitung standardmäßig global zu aktivieren (oder zu deaktivieren).

[HKEY_CURRENT_USER \ Console]
"VirtualTerminalLevel" = dword: 00000001

Beachten Sie, dass diese Registrierungseinstellung eine Standardeinstellung steuert. Dies bedeutet, dass nur Konsolenanwendungen betroffen sind, die den Konsolenmodus nicht explizit durch Aufrufen manipulieren SetConsoleMode(...). Daraus folgt, dass der Registrierungswert möglicherweise dazu beiträgt, ANSI für Anwendungen zu aktivieren, die den Konsolenmodus nicht kennen . Er hat jedoch keine Auswirkungen auf Anwendungen, die den Konsolenmodus kennen und aus irgendeinem Grund ANSI explizit deaktivieren .

Bildbeschreibung hier eingeben

Glenn Slayden
quelle
21

Ab Windows 10 TH2 (v1511) conhost.exe(und damit verbunden cmd.exe) werden ANSI-Escape-Sequenzen unterstützt, insbesondere in folgenden Farben:

Bild von der unten genannten MSDN-Seite

Auf der MSDN-Seite zu Sequenzen für virtuelle Konsolenterminals wird erläutert, welche Sequenzen unterstützt werden und wie diese aktiviert werden:

Sie können GetConsoleMode- und SetConsoleMode- Flags verwenden, um dieses Verhalten zu konfigurieren. [...]

Das Verhalten der folgenden Sequenzen basiert auf dem VT100 und den abgeleiteten Terminalemulator-Technologien, insbesondere dem xterm-Terminalemulator. Weitere Informationen zu Terminalsequenzen finden Sie unter http://vt100.net und http://invisible-island.net/xterm/ctlseqs/ctlseqs.html .

rollen
quelle
2
Die unterstützten Sequenzen sind unter msdn.microsoft.com/en-us/library/windows/desktop/…
dbenham
Sie können die Standardfarben auch mit Colortool ändern . Bei Neuinstallationen von Windows 10 werden leicht geänderte Farben angezeigt, die besser lesbar sind (insbesondere Blau auf Schwarz). Bei Aktualisierungen werden jedoch die alten, schwer lesbaren Farben beibehalten.
10

Gibt es einen Konsolenemulator für Windows, der ANSI-Farben interpretiert?

Windows vor 10 - Keine native Unterstützung für ANSI-Farben auf der Konsole

Bei Windows-Versionen unter 10 unterstützt die Windows-Befehlskonsole standardmäßig keine Ausgabefarben. Sie können entweder Cmder , ConEmu , ANSICON oder Mintty (standardmäßig in GitBash und Cygwin verwendet) installieren , um die Windows-Befehlskonsole farblich zu unterstützen.

Windows 10 - Befehlszeilenfarben

Ab Windows 10 unterstützt die Windows-Konsole standardmäßig ANSI-Escape-Sequenzen und einige Farben.

MSDN-Dokumentation

Demo

Bildbeschreibung hier eingeben

Batch-Befehl

Das win10colors.cmdwurde durch schriftliche Michele Locati :

@echo off
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.
echo [101;93m NORMAL FOREGROUND COLORS [0m
echo ^<ESC^>[30m [30mBlack[0m (black)
echo ^<ESC^>[31m [31mRed[0m
echo ^<ESC^>[32m [32mGreen[0m
echo ^<ESC^>[33m [33mYellow[0m
echo ^<ESC^>[34m [34mBlue[0m
echo ^<ESC^>[35m [35mMagenta[0m
echo ^<ESC^>[36m [36mCyan[0m
echo ^<ESC^>[37m [37mWhite[0m
echo.
echo [101;93m NORMAL BACKGROUND COLORS [0m
echo ^<ESC^>[40m [40mBlack[0m
echo ^<ESC^>[41m [41mRed[0m
echo ^<ESC^>[42m [42mGreen[0m
echo ^<ESC^>[43m [43mYellow[0m
echo ^<ESC^>[44m [44mBlue[0m
echo ^<ESC^>[45m [45mMagenta[0m
echo ^<ESC^>[46m [46mCyan[0m
echo ^<ESC^>[47m [47mWhite[0m (white)
echo.
echo [101;93m STRONG FOREGROUND COLORS [0m
echo ^<ESC^>[90m [90mWhite[0m
echo ^<ESC^>[91m [91mRed[0m
echo ^<ESC^>[92m [92mGreen[0m
echo ^<ESC^>[93m [93mYellow[0m
echo ^<ESC^>[94m [94mBlue[0m
echo ^<ESC^>[95m [95mMagenta[0m
echo ^<ESC^>[96m [96mCyan[0m
echo ^<ESC^>[97m [97mWhite[0m
echo.
echo [101;93m STRONG BACKGROUND COLORS [0m
echo ^<ESC^>[100m [100mBlack[0m
echo ^<ESC^>[101m [101mRed[0m
echo ^<ESC^>[102m [102mGreen[0m
echo ^<ESC^>[103m [103mYellow[0m
echo ^<ESC^>[104m [104mBlue[0m
echo ^<ESC^>[105m [105mMagenta[0m
echo ^<ESC^>[106m [106mCyan[0m
echo ^<ESC^>[107m [107mWhite[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^<ESC^>[31m                     [31mred foreground color[0m
echo ^<ESC^>[7m                      [7minverse foreground ^<-^> background[0m
echo ^<ESC^>[7;31m                   [7;31minverse red foreground color[0m
echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m
echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m
Jens A. Koch
quelle
Ab Version 1607 (OS Build 14393.693) wurde die Farbe in Windows 10 deaktiviert.
geff_chang
2
Warum soll ich das glauben? Fakten bitte. a) Es gibt nichts im Changelog: support.microsoft.com/en-us/help/4009938 b) Funktioniert für mich: imgur.com/a/MNPNm
Jens A. Koch
1
Ich bin nicht sicher, in welcher Win10-Version es sich genau handelt, aber es wird hier erwähnt: github.com/symfony/symfony/issues/19520 Auf meinem Firmen-Laptop - Ver 1511 (OS Build 10586.753) - habe ich es nicht benötigt. Auf meinem Heim-PC musste ich ansicon verwenden, da die Farben standardmäßig nicht aktiviert waren.
geff_chang
4
Sie haben gerade eine Flagge eingeführt, die die Farbausgabe steuert und standardmäßig falsch ist. Siehe wpdev.uservoice.com/forums/… ) --- Symfony verwendet PHP.exe unter Windows, bei dem die Markierung deaktiviert war. Daher mussten sie auf einen Patch warten, der hier landete: github.com/php/php- src / pull / 2103 . Situation gelöst. --- Für cmd.exe ist das Flag immer wahr. Aus diesem Grund unterstützt die Konsole Farben.
Jens A. Koch
1
Würden diese Codes auch in einem Shell-Skript unter Linux funktionieren? oder ist das anders gemacht?
Mikey