web-dev-qa-db-ja.com

ANSIカラー処理を備えたWindowsコンソール

ANSIカラーリングを解釈するWindows用のコンソールエミュレーターはありますか?

私たちはrspecを使用しており、チームの一部はWindowsを使用しており、色付けのための特別な文字列はそれらにはあまり役に立ちません;).

35
mrzasa

ConEm は、Xterm 256色拡張のANSI X3.64をサポートします。私はこのコンソールエミュレータの作成者です。

Ansiシーケンスは、ConEmuタブで実行されるすべてのプロセスで処理されます。

AFAIK、ConEmuはAnsiconよりも多くのコードをサポートしています。

ConEmu and ANSI X3.64 / Xterm 256 colors

42
Maximus

このページの回答には、ビルド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/setconsolemode

WriteFile または 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。

enter image description here

41
Glenn Slayden

Windows 10 TH2(v1511)以降、conhost.exe(そして、拡張により、cmd.exe)ANSIエスケープシーケンス、特に色をサポート:

image from the MSDN page mentioned below

コンソール仮想端末シーケンスに関するMSDNページ は、サポートされているシーケンスとそれらを有効にする方法を説明しています。

GetConsoleMode および SetConsoleMode フラグを使用して、この動作を構成できます。 [...]

以下のシーケンスの動作は、VT100と派生ターミナルエミュレーターテクノロジー、最も具体的にはxtermターミナルエミュレーターに基づいています。端末シーケンスの詳細については、 http://vt100.net および http://invisible-island.net/xterm/ctlseqs/ctlseqs.html を参照してください。

21
rolve

ANSIカラーリングを解釈するWindows用のコンソールエミュレーターはありますか?

Windows 10より前-コンソールでのANSIカラーのネイティブサポートなし

10未満のWindowsバージョンの場合、Windowsコマンドコンソールはデフォルトで出力の色分けをサポートしていません。 CmderConEmu[〜#〜] ansicon [〜#〜]のいずれかをインストールできます または Mintty (デフォルトでGitBashおよびCygwinで使用)により、Windowsコマンドコンソールにカラーリングサポートを追加します。

Windows 10-コマンドラインの色

Windows 10以降、WindowsコンソールはデフォルトでANSIエスケープシーケンスと一部の色をサポートしています。

MSDNドキュメント

デモ

enter image description here

バッチコマンド

win10colors.cmdMichele 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
10
Jens A. Koch

現在、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
0
Pedro77