Konsola Windows z obsługą kolorów ANSI

34

Czy istnieje emulator konsoli dla systemu Windows, który interpretuje kolorowanie ANSI?

Używamy rspec i część naszego zespołu używa Windows, a specjalny ciąg do kolorowania nie jest dla nich bardzo przydatny;).

Mrzasa
źródło

Odpowiedzi:

40

ConEmu obsługuje ANSI X3.64 z rozszerzeniem kolorów Xterm 256. Jestem autorem tego emulatora konsoli.

Sekwencje Ansi są obsługiwane dla wszystkich procesów, działających w zakładkach ConEmu.

AFAIK, ConEmu obsługuje więcej kodów niż Ansicon.

ConEmu i ANSI X3.64 / Xterm 256 kolorów

Maximus
źródło
1
To kołysze! Jako gracz uwielbiam funkcję trzęsienia ziemi. Jednak konsola wydaje się być zablokowana na górze ekranu (nawet z wyłączoną opcją zablokowania na górze). Dzięki
Ced
jak uruchamiasz cmd z kartami?
Mikey,
@Mikey What? Najpierw przeczytaj odpowiedź.
Maximus
35

Żadna z odpowiedzi na tej stronie nie wspomina o ważnym aspekcie nowej obsługi ANSI Terminal Control, która została dodana do hosta konsoli Windows 10 w kompilacji 16257 (i późniejszych). Mianowicie, domyślnie nie jest to e̲n̲a̲b̲l̲e̲d̲ . O ile określone oprogramowanie, którego używasz, nie umożliwia przetwarzania ANSI przez wywołanie interfejsu API SetConsoleMode z ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)flagą, nie zobaczysz kolorów ani nie otrzymasz przetwarzania ANSI dla tej aplikacji.

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

Pisząc z WriteFile lub WriteConsole , znaki są przetwarzane dla VT100 i podobnych sekwencji znaków sterowanie ruchem kursora że kontrola, kolor / tryb czcionki i inne operacje, które mogą być wykonywane za pośrednictwem istniejących interfejsów API konsoli. Aby uzyskać więcej informacji, zobacz sekwencje terminali wirtualnych konsoli.

Zgaduję, że powodem pokazanym na tej stronie jest to, że najwyraźniej echopolecenie (a może część przetwarzania wsadowegoCMD.EXE lub conhost) umożliwia przetwarzanie ANSI przez wywołanie właśnie wspomnianego API. Ale wiele innych narzędzi lub plików wykonywalnych, które zapisują stdinlub stdoutmogą tego nie robić, w takim przypadku nie zobaczysz kolorów dla tych procesów.

Na szczęście globalne ustawienie domyślne można zmienić z opcji opt-in na opt-out . Klucz rejestru at HKEY_CURRENT_USER\Console\VirtualTerminalLevelustawia globalne domyślne zachowanie przetwarzania sekwencji specjalnych ANSI. Utwórz DWORDklucz (jeśli to konieczne) i ustaw jego wartość, aby domyślnie 1globalnie 0włączało (lub wyłączało) przetwarzanie ANSI.

[HKEY_CURRENT_USER \ Console]
„VirtualTerminalLevel” = dword: 00000001

Zauważ, że to ustawienie rejestru kontroluje wartość domyślną , co oznacza, że ​​wpływa tylko na aplikacje konsoli, które nie manipulują jawnie trybem konsoli przez wywołanie SetConsoleMode(...). Wynika z tego, że chociaż wartość rejestru może pomóc w włączeniu ANSI dla aplikacji nieobsługujących trybu konsoli , nie wpłynie ona na żadną aplikację znającą tryb konsoli, która (z jakiegoś powodu) może jawnie wyłączyć ANSI.

wprowadź opis zdjęcia tutaj

Glenn Slayden
źródło
21

Począwszy od systemu Windows 10 TH2 (v1511) conhost.exe(i przez rozszerzenie cmd.exe) obsługuje sekwencje specjalne ANSI, w szczególności kolory:

obraz ze strony MSDN wspomnianej poniżej

Strona MSDN o sekwencjach terminali wirtualnych konsoli wyjaśnia, jakie sekwencje są obsługiwane i jak je włączyć:

Do skonfigurowania tego zachowania można użyć flag GetConsoleMode i SetConsoleMode . [...]

Zachowanie następujących sekwencji jest oparte na technologii VT100 i pochodnych emulatorach terminali, w szczególności na emulatorze terminali xterm. Więcej informacji na temat sekwencji końcowych można znaleźć na stronie http://vt100.net i http://invisible-island.net/xterm/ctlseqs/ctlseqs.html .

rola
źródło
2
Obsługiwane sekwencje są opisane na stronie msdn.microsoft.com/en-us/library/windows/desktop/…
dbenham
Możesz także zmienić domyślne kolory za pomocą Colortool . Nowe instalacje systemu Windows 10 otrzymają nieznacznie zmodyfikowane kolory, które są łatwiejsze do odczytania (zwłaszcza niebieski na czarnym), ale aktualizacje zachowają stare, trudne do odczytania kolory.
10

Czy istnieje emulator konsoli dla systemu Windows, który interpretuje kolorowanie ANSI?

Windows przed 10 - brak natywnej obsługi kolorów ANSI na konsoli

W przypadku wersji Windows poniżej 10 konsola poleceń Windows domyślnie nie obsługuje kolorowania wydruków. Możesz zainstalować Cmder , ConEmu , ANSICON lub Mintty (domyślnie używane w GitBash i Cygwin), aby dodać obsługę kolorowania do konsoli poleceń Windows.

Windows 10 - Kolory wiersza poleceń

Począwszy od systemu Windows 10 konsola Windows domyślnie obsługuje sekwencje specjalne ANSI i niektóre kolory.

Dokumentacja MSDN

Próbny

wprowadź opis zdjęcia tutaj

Polecenie wsadowe

win10colors.cmdZostał napisany przez 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
źródło
Od wersji 1607 (kompilacja systemu operacyjnego 14393.693) kolor w systemie Windows 10 został wyłączony.
geff_chang
2
Dlaczego mam w to wierzyć? Fakty proszę. a) W dzienniku zmian nie ma nic: support.microsoft.com/en-us/help/4009938 b) Działa dla mnie: imgur.com/a/MNPNm
Jens A. Koch
1
Nie jestem pewien, w jakiej dokładnie wersji Win10, ale wspomniano tutaj: github.com/symfony/symfony/issues/19520 Na moim firmowym laptopie - Ver 1511 (kompilacja systemu operacyjnego 10586.753) - nie potrzebowałem tego. Na moim domowym komputerze musiałem użyć ansiconu, ponieważ kolory nie były domyślnie włączone.
geff_chang
4
Właśnie wprowadzili flagę, która kontroluje kolorowe wydruki i domyślnie jest fałszywa. Zobacz wpdev.uservoice.com/forums/… ) --- Symfony używa PHP.exe w systemie Windows, gdzie flaga była wyłączona, więc musieli czekać na łatkę, która wylądowała tutaj: github.com/php/php- src / pull / 2103 . Sytuacja rozwiązana. --- W przypadku cmd.exe flaga zawsze jest prawdziwa. Dlatego masz obsługę kolorów na konsoli.
Jens A. Koch
1
czy te kody działałyby również w skrypcie powłoki w systemie Linux? czy jest to zrobione w inny sposób?
Mikey