Comment faire pour que win32 console reconnaisse les séquences d'échappement ANSI/VT100?

je construis une version légère de la bibliothèque ncurses. Jusqu'à présent, il fonctionne assez bien avec les terminaux compatibles VT100, mais la console win32 ne reconnaît pas le code 3 comme le début d'une séquence d'échappement:

# include <stdio.h>
# include "term.h"

int main(void) {
  puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
  return 0;
}

Screenshot

Ce qui doit être fait sur le code C, afin que l'ANSI.Le pilote SYS est chargé et les séquences d'échappement ANSI/VT100 sont reconnues?

45
demandé sur rolve 2013-05-26 04:25:30

11 réponses

[mise à jour] avant Windows 10 Mise à jour anniversaire:

ANSI.SYS a une restriction qu'il ne peut exécuter que dans le contexte du sous-système MS-DOS sous Windows 95-Vista.

Microsoft KB101875 explique comment activer ANSI.SYS dans une fenêtre de commande, mais il ne s'applique pas à Windows NT . Selon l'article: nous aimons tous les couleurs , les versions modernes de Windows n'ont pas ce soutien ANSI nice.

à la place, Microsoft a créé beaucoup de fonctions, mais c'est loin de votre besoin d'exploiter ANSI/VT100 séquence d'échappement.

pour une explication plus détaillée, voir le article Wikipedia :

ANSI.SYS fonctionne également dans les systèmes dérivés de NT pour les programmes existants de 16 bits exécutés sous NTVDM.

la console Win32 ne supporte pas nativement les séquences d'échappement ANSI à tous. Un logiciel tel que Ansicon peut cependant agir comme un enveloppeur autour de la console Win32 standard et Ajouter un support pour les séquences d'échappement ANSI.

je pense Donc que ANSICON par Jason Capot est votre solution. Il est écrit dans C , prend en charge les versions 32 bits et 64 bits de Windows, et la source est disponible .

J'ai aussi trouvé un autre similaire question ou message qui ont finalement été répondus pour utiliser ANSICON:

47
répondu Franco Rondini 2018-03-06 19:01:31

à partir de Windows 10 TH2 (v1511), conhost.exe et cmd.exe supporter ANSI et VT100 séquences D'échappement hors de la boîte (bien que ils doivent être activés ).

Voir ma réponse sur au super-utilisateur pour plus de détails.

30
répondu rolve 2017-03-20 10:18:21

à partir de Windows 10, vous pouvez utiliser ENABLE_VIRTUAL_TERMINAL_PROCESSING pour activer les séquences d'échappement ANSI:

https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032 (v=vs 85).aspx

11
répondu Star Brilliant 2016-06-13 07:04:45

si ANSICON n'est pas acceptable car il exige que vous installiez quelque chose sur le système, une solution plus légère qui analyse et traduit les codes ANSI dans les fonctions de console pertinentes Win32 API 151920920" telles que SetConsoleTextAttribute .

https://github.com/mattn/ansicolor-w32.c

6
répondu Joakim 2015-03-03 16:21:06

pour Python 2.7 le script suivant fonctionne pour moi avec Windows 10 (v1607)

import os

print '3[35m'+'color-test'+'3[39m'+" test end"
os.system('') #enable VT100 Escape Sequence for WINDOWS 10 Ver. 1607
print '3[35m'+'color-test'+'3[39m'+" test end"

résultat:

[35mcolor-test[39m test end

color-test test end
5
répondu Guestreader 2018-03-06 17:43:06

pour colorer le cmd vous avez besoin de Windows.h et utiliser SetConsoleTextAttribute() plus de détails peuvent être trouvés dans http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx

5
répondu rho 2018-07-01 16:32:17

peut-être ANSICON peut aider u

il suffit de télécharger et d'extraire des fichiers, en fonction de votre système d'exploitation windows: 32bit ou 64bit

installez - le avec: ansicon -i

1
répondu user3137537 2016-12-14 14:40:46

Ansi.sys (dans le dossier system32) est un "pilote MSDOS" fourni dans le cadre de Windows XP, 2000, et des versions précédentes de NT. En 2000 et XP, il est situé dans le dossier system32 (Je ne me souviens pas de la structure des versions précédentes de NT). Les programmes qui fonctionnent dans le sous-système DOS et utilisent la sortie standard peuvent utiliser ANSI.SYS tout comme ils pouvaient renverser des MSDOS.

pour charger ansi.sys, vous devez utiliser la commande device= ou devicehigh= dans config, comme vous le feriez dans MS-dos. Sur Windows NT 5 (2K & XP), chaque copie du sous-système DOS peut recevoir un fichier de configuration séparé dans le fichier pif/shortcut (utilisez le bouton "Avancé"), et il y a un fichier par défaut appelé CONFIG.NT (également dans le dossier system32), qui est utilisé si le fichier pif/shortcut ne spécifie pas de fichier de configuration spécial.

quand ansi.sys est chargé correctement, mem /d signalera qu'il est chargé. Sur les versions précédentes de NT, vous pouvez et devez charger un environnement DOS approprié pour charger ansi.sys, et ansi art travaillera à l'instant. Sur Win 2K et XP, chargement ansi.sys n'aura aucun effet sur votre "CMD prompt" car CMD n'est pas un programme DOS: C'est un programme Windows console 32 bits. Pour une raison que je ne comprends pas, sur WinXP, même si vous chargez une copie command.com utilisation "command.com /p", l'invite de commande ne sera pas activée ansi: peut-être que lorsque vous le faites de cette façon, il n'émule que le chargement command.com Je ne sais pas.

dans tous les cas, lorsque vous utilisez une version DOS réelle de command.com, ansi est activé après avoir été chargé: vous pouvez démontrer son utilisation avec un peu d'art ansi comme ceci:

command /c type ansiart.ans

(voici un exemple: http://artscene.textfiles.com/ansi/artwork/beastie.ans )

CONFIG.NT (dans le dossier system32) contient un exemple de syntaxe pour le chargement des pilotes de périphérique. Vous devez être un Administrateur pour éditer le fichier par défaut, ou vous pouvez faire une copie de celui-ci.

sur Win 2K et XP, le raccourci par défaut pour MSDOS est A.Fichier PIF, pas un .LNK fichier. Si vous créez une .le fichier lnk au CMD, vous ne pourrez pas définir les fichiers spéciaux de configuration et d'autoexec, il utilisera la configuration par défaut.NT. Si vous voulez utiliser un fichier de configuration spécial pour une seule application DOS, vous pouvez faire une copie du "raccourci MSDOS", ou vous pouvez faire une copie de "_default.pif", trouvé dans votre dossier Windows.

1
répondu david 2018-03-22 03:00:59

personnellement, j'aime bien clink . Il ne traite pas seulement les codes ANSI, il ajoute également de nombreuses autres fonctionnalités si Windows Console se comporte comme bash (Histoire, recherche d'histoire inverse, raccourcis clavier, etc.):

  • la même ligne d'édition que Bash (de la bibliothèque GNU Readline).
  • Histoire de la persistance entre les sessions.
  • sensible au Contexte de l'achèvement;
    • exécutables (et alias).
    • Commandes de répertoire
    • .
    • variables D'environnement
    • Tiers-outils; Git, Mercurial, SVN, Allez, et P4.
  • nouveaux raccourcis clavier;
    • Coller à partir du presse-papiers ( Ctrl-V ).
    • Incrémentielle de l'histoire de la recherche ( Ctrl-R/Ctrl-S ).
    • Puissant d'achèvement ( ONGLET ).
    • Undo ( Ctrl-Z ).
    • Automatique "de cd .."( Ctrl-PgUp ).
    • expansion des variables d'Environnement ( Ctrl-Alt-E ).
    • (appuyez sur la touche Alt-H pour beaucoup plus...)
  • Scriptable achèvement avec Lua.
  • invite colorée et scriptable.
  • réponse automatique de la" terminer le travail par lot? invite".
0
répondu Dawid Ferenczy 2018-02-20 13:31:36

j'ai trouvé que cet outil travaillait pour moi. Microsoft Outil de Couleur à partir de GitHub

décompresse le fichier compressé puis ouvre CMD avec la permission de l'Administration.

Allez dans le dossier où vous décompressez le fichier CMD.

puis exécuter cette commande " colortool -b scheme-name

le nom du schéma doit être remplacé par l'une des options ci-dessous:

  • campbell.ini
  • campbell-legacy.ini
  • cmd-legacy.ini
  • deuternopia.itermcolors
  • OneHalfDark.itermcolors
  • OneHalfLight.itermcolors
  • solarized_dark.itermcolors
  • solarized_light.itermcolors

Dans mon cas, la commande serait comme ceci " colortool -b solarized_dark.itermcolors "

cliquez sur le bouton droit de la souris dans la fenêtre de la console et sélectionnez Propriétés.

vous n'avez pas besoin de changer une valeur, cliquez simplement sur" OK " pour enregistrer le paramètre. (Vous remarquerez que votre police contient déjà les couleurs).

Console De Propriété

puis redémarrez votre cmd ou powerShell.

la couleur ANSI doit être activée et travailler avec le schéma de couleur que vous avez choisi avant.

0
répondu Arung Isyadi 2018-07-26 13:33:47

Dans les derniers win10, il peut être fait par SetConsoleMode(originMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING) . Voir https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example

0
répondu bitlixi 2018-08-10 01:35:11