Console Windows avec gestion des couleurs ANSI


34

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 pour la coloration ne leur est pas très utile;).

Réponses:


40

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.

AFAIK, ConEmu prend en charge plus de codes que Ansicon.

ConEmu et ANSI X3.64 / Xterm 256 couleurs


1
Ça bouge! En tant que joueur, j'adore la fonction de tremblement de terre. Cependant, la console semble être verrouillée en haut de l'écran (même avec l'option verrouillée en haut désactivée). Merci
Ced

comment exécutez-vous cmd avec des onglets?
Mikey

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

35

Aucune des réponses sur cette page ne mentionne un aspect important de la nouvelle prise en charge du contrôle de terminal ANSI qui a été ajouté à l' hôte de la console Windows 10 dans la version 16257 (et versions ultérieures). À savoir, c'est n̲o̲t̲ e̲n̲a̲b̲l̲e̲d̲ par défaut. À moins que le logiciel spécifique que vous utilisez ne permette le traitement ANSI en appelant l' API SetConsoleMode avec l' ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)indicateur, vous ne verrez pas les couleurs ou n'obtiendrez pas de traitement ANSI pour cette application.

ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemode

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

Je suppose que la raison pour laquelle les exemples montrés sur cette page fonctionnent est que, apparemment, la echocommande (ou peut-être la partie de traitement par lots de CMD.EXEou conhost) permet le traitement ANSI en appelant l'API que je viens de mentionner. Mais de nombreux autres outils ou exécutables qui écrivent stdinou stdoutpeuvent ne pas le faire, auquel cas vous ne verrez pas de couleur pour ces processus.

Heureusement, la valeur par défaut globale peut être modifiée de opt-in à opt-out . La clé de registre à HKEY_CURRENT_USER\Console\VirtualTerminalLeveldéfinit le comportement global par défaut pour le traitement des séquences d'échappement ANSI. Créez une DWORDclé (si nécessaire) et définissez sa valeur sur 1pour activer (ou 0désactiver) globalement 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 de 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 ANSI pour les applications inconscientes en mode console , elle n'aura aucun effet sur toute application avertie en mode console qui (pour une raison quelconque) peut désactiver explicitement ANSI.

entrez la description de l'image ici


21

À 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 terminaux virtuels 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 le VT100 et les technologies d'émulation de terminal dérivées, plus particulièrement l'émulateur de terminal xterm. Plus d'informations sur les séquences terminales peuvent être trouvées sur http://vt100.net et sur http://invisible-island.net/xterm/ctlseqs/ctlseqs.html .


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

Vous pouvez également modifier les couleurs par défaut à l'aide de 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 le noir), mais les mises à jour conserveront les anciennes couleurs difficiles à lire.

10

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 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 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

entrez la description de l'image ici

Commande par lots

Le a win10colors.cmdé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

À partir de la version 1607 (build du système d'exploitation 14393.693), la couleur dans Windows 10 a été désactivée.
geff_chang

2
Pourquoi devrais-je croire cela? Les faits, s'il vous plaît. a) Il n'y a rien dans le journal des modifications : support.microsoft.com/en-us/help/4009938 b) Fonctionne pour moi: imgur.com/a/MNPNm
Jens A. Koch

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

4
Ils viennent d'introduire un drapeau, qui contrôle la sortie colorée et est faux par défaut. Voir wpdev.uservoice.com/forums/… ) --- Symfony utilise PHP.exe sur Windows, où le drapeau était désactivé, ils ont donc dû attendre un correctif, qui a atterri ici: github.com/php/php- src / pull / 2103 . Situation résolue. --- Pour cmd.exe, le drapeau est toujours vrai. C'est pourquoi vous avez un support de couleur sur la console.
Jens A. Koch

1
ces codes fonctionneraient-ils aussi dans un script shell sous Linux? ou est-ce fait d'une manière différente?
Mikey
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.