62 votes

Console Windows avec gestion des couleurs ANSI

Y a-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 les chaînes spéciales pour la coloration ne leur sont pas très utiles ;).

83voto

Glenn Slayden Points 1165

Aucune des réponses sur cette page ne mentionne un aspect important du nouveau support du Contrôle Terminal ANSI qui a été ajouté à l'hôte de console Windows 10 dans la version 16257 (et ultérieure). En effet, il n'est pas activé par défaut. À moins que le logiciel spécifique que vous utilisez n'active le traitement ANSI en appelant l'API SetConsoleMode avec le drapeau ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0004), vous ne verrez pas de couleurs ou n'aurez pas de traitement ANSI pour cette application.

ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
<a href="https://docs.microsoft.com/fr-fr/windows/console/setconsolemode" rel="noreferrer">https://docs.microsoft.com/fr-fr/windows/console/setconsolemode</a>

Lors de l'écriture avec WriteFile ou WriteConsole, les caractères sont analysés pour détecter les séquences de caractères de contrôle VT100 et similaires qui contrôlent le mouvement du curseur, le mode couleurs/police, et d'autres opérations qui peuvent également être effectuées via les API de Console existantes. Pour plus d'informations, consultez les Séquences du Terminal Virtuel de la Console.

Je suppose que les exemples montrés sur cette page fonctionnent parce que, apparemment la commande echo (ou peut-être la partie de traitement par lots de CMD.EXE ou conhost) active le traitement ANSI en appelant l'API 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, le comportement global par défaut peut être changé de opt-in à opt-out. La clé de registre HKEY_CURRENT_USER\Console\VirtualTerminalLevel définit le comportement par défaut global 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

Remarquez que ce paramètre de registre contrôle un comportement 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 en résulte que, tandis que la valeur du registre peut aider à activer ANSI pour des applications ignorant le mode console, cela n'aura aucun effet sur une application connaissant le mode console qui (pour une raison quelconque) peut explicitement désactiver ANSI.

enter image description here

5 votes

Note VirtualTerminalLevel casse des choses comme git status pour PowerShell 5.1. La solution de contournement est github.com/microsoft/terminal

4 votes

Dans Admin Powershell, utilisez simplement : Set-ItemProperty HKCU:\Console VirtualTerminalLevel -Type DWORD 1.

0 votes

Est-il possible d'activer les couleurs ANSI via un script BAT ? sans programmation et éventuellement sans droits d'administrateur ?

50voto

Maximus Points 20409

ConEmu prend en charge ANSI X3.64 avec l'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 s'exécutant dans les onglets ConEmu.

À ma connaissance, ConEmu prend en charge plus de codes que Ansicon.

ConEmu et ANSI X3.64 / couleurs Xterm 256

1 votes

Cela déchire ! En tant que joueur, j'adore la fonction quake. Cependant, il semble que la console soit verrouillée en haut de l'écran (même avec l'option verrouillée en haut désactivée). Merci

0 votes

Comment exécuter CMD avec des onglets ?

0 votes

@Mikey Quoi? Lisez d'abord la réponse.

25voto

user166203 Points 11

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

image de la page MSDN mentionnée ci-dessous

La page MSDN sur les séquences de terminal virtuel 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 la technologie VT100 et les émulateurs de terminal dérivés, plus spécifiquement l'émulateur de terminal xterm. Plus d'informations sur les séquences de terminal peuvent être trouvées sur http://vt100.net et sur http://invisible-island.net/xterm/ctlseqs/ctlseqs.html.

4 votes

Les séquences prises en charge sont décrites sur msdn.microsoft.com/en-us/library/windows/desktop/…

0 votes

Vous pouvez également modifier les couleurs par défaut en utilisant Colortool. Les nouvelles installations de Windows 10 obtiendront des couleurs légèrement modifiées qui sont plus faciles à lire (en particulier le bleu sur noir), mais les mises à jour conserveront les anciennes couleurs difficiles à lire.

16voto

Jens A. Koch Points 320

Y a-t-il un émulateur de console pour Windows qui interprète les couleurs ANSI ?

Windows avant la version 10 - pas de support natif pour les couleurs ANSI sur la console

Pour les versions de Windows antérieures à la version 10, la console de commande Windows ne prend pas en charge la coloration de la sortie par défaut. Vous pouvez installer soit Cmder, ConEmu, ANSICON ou Mintty (utilisé par défaut dans GitBash et Cygwin) pour ajouter la prise en charge de la 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émonstration

entrez la description de l'image ici

Commande Batch

Le win10colors.cmd a été écrit par Michele Locati:

@echo off
cls
echo [101;93m STYLES [0m
echo ^[0m [0mRéinitialiser[0m
echo ^[1m [1mGras[0m
echo ^[4m [4+Souligné[0m
echo ^[7m [7mInverse[0m
echo.
echo [101;93m COULEURS AVANT-PLAN NORMALES [0m
echo ^[30m [30mNoir[0m (noir)
echo ^[31m [31mRouge[0m
echo ^[32m [32mVert[0m
echo ^[33m [33mJaune[0m
echo ^[34m [34mBleu[0m
echo ^[35m [35mMagenta[0m
echo ^[36m [36mCyan[0m
echo ^[37m [37mBlanc[0m
echo.
echo [101;93m COULEURS DE FOND NORMALES [0m
echo ^[40m [40mNoir[0m
echo ^[41m [41mRouge[0m
echo ^[42m [42mVert[0m
echo ^[43m [43mJaune[0m
echo ^[44m [44mBleu[0m
echo ^[45m [45mMagenta[0m
echo ^[46m [46mCyan[0m
echo ^[47m [47mBlanc[0m (blanc)
echo.
echo [101;93m COULEURS AVANT-PLAN FORTES [0m
echo ^[90m [90mBlanc[0m
echo ^[91m [91mRouge[0m
echo ^[92m [92mVert[0m
echo ^[93m [93mJaune[0m
echo ^[94m [94mBleu[0m
echo ^[95m [95mMagenta[0m
echo ^[96m [96mCyan[0m
echo ^[97m [97mBlanc[0m
echo.
echo [101;93m COULEURS DE FOND FORTES [0m
echo ^[100m [100mNoir[0m
echo ^[101m [101mRouge[0m
echo ^[102m [102mVert[0m
echo ^[103m [103mJaune[0m
echo ^[104m [104mBleu[0m
echo ^[105m [105mMagenta[0m
echo ^[106m [106mCyan[0m
echo ^[107m [107mBlanc[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^[31m [31mCouleur d'avant-plan rouge[0m
echo ^[7m [7mInverse avant-plan ^<-^> arrière-plan[0m
echo ^[7;31m [7;31mCouleur d'avant-plan rouge inversée[0m
echo ^[7m et ^[31m imbriqués [7mavant ^[31mintérieur[0m
echo ^[31m et ^[7m ^[31mavant ^[7mintérieur[0m

0 votes

À partir de la Version 1607 (OS Build 14393.693), la couleur dans Windows 10 a été désactivée.

3 votes

Pourquoi devrais-je croire cela? Des faits s'il vous plaît. a) Il n'y a rien dans le journal des modifications : support.microsoft.com/fr-fr/help/4009938 b) Ça marche pour moi : imgur.com/fr-fr/a/MNPNm

1 votes

Je ne suis pas sûr de la version exacte de Win10, mais c'est mentionné ici : github.com/symfony/symfony/issues/19520 Sur mon ordinateur portable de l'entreprise -- Ver 1511 (Build OS 10586.753) -- je n'en avais pas besoin. Sur mon PC personnel, j'ai dû utiliser ansicon, car les couleurs n'étaient pas activées par défaut.

8voto

Brian Ogden Points 143

Actuellement, les couleurs de la console CMD ne sont pas activées par défaut dans Win10, donc, pour les activer, ajoutez ceci à votre code:

#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);

    // Références:
    // SetConsoleMode() et ENABLE_VIRTUAL_TERMINAL_PROCESSING?
    // https://stackoverflow.com/questions/38772468/setconsolemode-and-enable-virtual-terminal-processing

    // Console Windows avec gestion des couleurs ANSI
    // https://superuser.com/questions/413073/windows-console-with-ansi-colors-handling
#endif

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X