Odpowiedzi:
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.
Ż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/setconsolemodePiszą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 echo
polecenie (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ą stdin
lub stdout
mogą 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\VirtualTerminalLevel
ustawia globalne domyślne zachowanie przetwarzania sekwencji specjalnych ANSI. Utwórz DWORD
klucz (jeśli to konieczne) i ustaw jego wartość, aby domyślnie 1
globalnie 0
włą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.
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:
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 .
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.
Próbny
Polecenie wsadowe
win10colors.cmd
Został 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