web-dev-qa-db-fra.com

Console Windows avec gestion des couleurs ANSI

Existe-t-il un émulateur de console pour Windows qui interprète la coloration ANSI?

Nous utilisons rspec et une partie de notre équipe utilise Windows et la chaîne spéciale de coloration ne leur est pas très utile;).

29
mrzasa

ConEmu prend en charge ANSI X3.64 avec extension de couleur Xterm 256. Je suis l'auteur de cet émulateur de console.

Les séquences Ansi sont gérées pour tous les processus et s'exécutent dans les onglets ConEmu.

Autant que je sache, ConEmu prend en charge davantage de codes que Ansicon.

ConEmu and ANSI X3.64 / Xterm 256 colors

36
Maximus

Aucune des réponses sur cette page ne mentionne un aspect important du nouveau support de ANSI Terminal Controlajouté à l’hôte Windows 10console. dans la construction 16257 (et plus tard). À savoir, c'est n̲o̲t̲ e̲n̲ab̲l̲e̲d̲ par défaut. Sauf si le logiciel spécifique que vous utilisez active le traitement ANSI en appelant l'API SetConsoleMode avec l'indicateur ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400), vous ne verra pas les couleurs ou obtiendra le traitement ANSI pour cette application.

ENABLE_VIRTUAL_TERMINAL_PROCESSING0x0004
https://docs.Microsoft.com/en-us/windows/console/setconsolemode

Lors de l'écriture avec WriteFile ou WriteConsole , les caractères sont analysés pour VT100 et similaires. contrôler les séquences de caractères qui contrôlent le déplacement du curseur, le mode couleur/police et d'autres opérations pouvant également être effectuées via les API de console existantes. Pour plus d'informations, voir Séquences de terminal virtuel de console.

Je suppose que la raison pour laquelle les exemples présentés sur cette page fonctionnent est apparemment le fait que, apparemment, la commande echo (ou peut-être le traitement par lots de CMD.EXE ou conhost) active le traitement ANSI en appelant le L'API vient d'être mentionnée. Mais de nombreux autres outils ou exécutables qui écrivent dans stdin ou stdout pourraient ne pas le faire, auquel cas vous ne verrez pas de couleur pour ces processus.

Heureusement, la valeur globale par défaut peut être modifiée de opt-in à opt-out . La clé de registre située à HKEY_CURRENT_USER\Console\VirtualTerminalLevel définit le comportement global par défaut pour le traitement des séquences d'échappement ANSI. Créez une clé DWORD (si nécessaire) et définissez sa valeur sur 1 pour activer globalement (ou 0 pour désactiver`) le traitement ANSI par défaut.

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

Notez que ce paramètre de registre contrôle une valeur par défaut , ce qui signifie qu'il n'affecte que les applications console qui ne manipulent pas explicitement le mode console en appelant SetConsoleMode(...). Il s'ensuit que, bien que la valeur de registre puisse aider activer l'ANSI pour les applications en mode console , elle n'aura aucun effet sur les application console-mode-savvy qui peut (pour une raison quelconque) explicitement désactiver ANSI.

enter image description here

27
Glenn Slayden

À partir de Windows 10 TH2 (v1511), conhost.exe (et par extension, cmd.exe) prend en charge les séquences d'échappement ANSI, notamment les couleurs:

image from the MSDN page mentioned below

La page MSDN sur les séquences de terminal virtuel de console explique quelles séquences sont prises en charge et comment les activer:

Vous pouvez utiliser les indicateurs GetConsoleMode et SetConsoleMode pour configurer ce comportement. [...]

Le comportement des séquences suivantes est basé sur les technologies VT100 et d'émulateur de terminal dérivé, plus particulièrement l'émulateur de terminal xterm. Vous trouverez plus d’informations sur les séquences terminales sur http://vt100.net et sur http: // invisible -island.net/xterm/ctlseqs/ctlseqs.html .

21
rolve

Existe-t-il un émulateur de console pour Windows qui interprète la coloration ANSI?

Windows avant 10 - pas de prise en charge native des couleurs ANSI sur la console

Pour la version Windows inférieure à 10, la console de commande Windows ne prend pas en charge la coloration de sortie par défaut. Vous pouvez installer soit Cmder , ConEmu , ANSICON ou Mintty (utilisé par défaut dans GitBash et Cygwin) pour ajouter un support de coloration à votre Console de commande Windows.

Windows 10 - Couleurs de la ligne de commande

À partir de Windows 10, la console Windows prend en charge les séquences d'échappement ANSI et certaines couleurs par défaut.

Documentation MSDN

démo

enter image description here

Commande batch

Le win10colors.cmd a été écrit par 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
10
Jens A. Koch