ANSIカラーリングを解釈するWindows用のコンソールエミュレーターはありますか?
私たちはrspecを使用しており、チームの一部はWindowsを使用しており、色付けのための特別な文字列はそれらにはあまり役に立ちません;).
ConEm は、Xterm 256色拡張のANSI X3.64をサポートします。私はこのコンソールエミュレータの作成者です。
Ansiシーケンスは、ConEmuタブで実行されるすべてのプロセスで処理されます。
AFAIK、ConEmuはAnsiconよりも多くのコードをサポートしています。
このページの回答には、ビルド16257以降のWindows 1コンソールホストに追加されたANSI Terminal Controlの新しいサポートの重要な側面については触れられていません。つまり、デフォルトでは n̲o̲t̲ e̲n̲a̲b̲l̲e̲d̲ です。使用している特定のソフトウェアを除き、 enables ANSI処理は SetConsoleMode API with the ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
フラグを付けると、そのアプリケーションの色が表示されなかったり、ANSI処理が行われなくなります。
ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.Microsoft.com/en-us/windows/console/setconsolemodeWriteFile または WriteConsole で書き込む場合、VT100およびカーソルの動きを制御する同様の制御文字シーケンスについて文字が解析されます。色/フォントモード、および既存のコンソールAPIを介して実行できるその他の操作。詳細については、「コンソール仮想端末シーケンス」を参照してください。
このページに表示されている例が機能する理由は、おそらくecho
コマンド(または多分batch-processing _CMD.EXE
_またはconhost
)は、前述のAPIを呼び出すことにより、ANSI処理を有効にします。ただし、stdin
またはstdout
に書き込む他の多くのツールまたは実行可能ファイルはこれを行わない場合があります。その場合、これらのプロセスの色は表示されません。
さいわい、グローバルデフォルトは opt-in から opt-out に変更できます。 _HKEY_CURRENT_USER\Console\VirtualTerminalLevel
_のレジストリキーは、ANSIエスケープシーケンスを処理するためのグローバルなデフォルトの動作を設定します。 DWORD
キーを作成し(必要な場合)、その値を_1
_に設定して、デフォルトでANSI処理をグローバルに有効化(または_0
_を無効化 `)します。
[HKEY_CURRENT_USER\Console] "VirtualTerminalLevel" = dword:00000001
このレジストリ設定は default を制御することに注意してください。つまり、SetConsoleMode(...)
を呼び出してコンソールモードを明示的に操作しないコンソールアプリにのみ影響します。したがって、レジストリ値は enable ANSI for console-mode-oblivious アプリには役立ちますが、 console-mode-savvy app(何らかの理由で) disable ANSI。
Windows 10 TH2(v1511)以降、conhost.exe
(そして、拡張により、cmd.exe
)ANSIエスケープシーケンス、特に色をサポート:
コンソール仮想端末シーケンスに関するMSDNページ は、サポートされているシーケンスとそれらを有効にする方法を説明しています。
GetConsoleMode および SetConsoleMode フラグを使用して、この動作を構成できます。 [...]
以下のシーケンスの動作は、VT100と派生ターミナルエミュレーターテクノロジー、最も具体的にはxtermターミナルエミュレーターに基づいています。端末シーケンスの詳細については、 http://vt100.net および http://invisible-island.net/xterm/ctlseqs/ctlseqs.html を参照してください。
ANSIカラーリングを解釈するWindows用のコンソールエミュレーターはありますか?
Windows 10より前-コンソールでのANSIカラーのネイティブサポートなし
10未満のWindowsバージョンの場合、Windowsコマンドコンソールはデフォルトで出力の色分けをサポートしていません。 Cmder 、 ConEmu 、 [〜#〜] ansicon [〜#〜]のいずれかをインストールできます または Mintty (デフォルトでGitBashおよびCygwinで使用)により、Windowsコマンドコンソールにカラーリングサポートを追加します。
Windows 10-コマンドラインの色
Windows 10以降、WindowsコンソールはデフォルトでANSIエスケープシーケンスと一部の色をサポートしています。
デモ
バッチコマンド
win10colors.cmd
は 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
現在、Win10ではCMDコンソールの色がデフォルトで有効になっていないため、これを有効にするには、コードに次のコードを追加します。
#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