2013-05-26 12 views
44

Sto costruendo una versione leggera della libreria ncurses. Finora, funziona abbastanza bene con i terminali VT100-compatibili, ma console Win32 non riesce a riconoscere il codice \033 come l'inizio di una sequenza di escape:Come rendere la console win32 riconoscere le sequenze di escape ANSI/VT100?

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

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

Screenshot

Cosa deve essere fatto in C livello di codice, in modo che venga caricato il driver ANSI.SYS e riconosciute le sequenze di escape ANSI/VT100?

+1

c'è 'modulo colorama' per Python: [ ". In Windows, Colorama strisce questi caratteri ANSI da stdout e li converte in chiamate Win32 equivalenti per il testo colorato su altre piattaforme, Colorama non fa nulla"] (https://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python#comment3901803_3332860) – jfs

risposta

4

Per colorare il CMD è necessario WINDOWS.H e utilizzare SetConsoleTextAttribute() maggiori dettagli possono essere trovati in http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx

+2

Questa è una soluzione abbastanza ingombrante, per non parlare del fatto che questo consente solo la colorazione di un testo - Non il resto dei codici ANSI.SYS. http://users.cybercity.dk/~bse26236/batutil/help/ANSI~S_S.HTM – Witiko

42

[UPDATE] Prima di Windows Update 10 ° Anniversario:

ANSI.sys ha una limitazione che può essere eseguito solo nel contesto del sottosistema MS-DOS in Windows 95-Vista.

Microsoft KB101875 spiega come abilitare ANSI.sys in una finestra di comando, ma non si applica a Windows NT. Secondo l'articolo: we all love colors, le versioni moderne di Windows non hanno questo bel supporto ANSI.

Invece, Microsoft ha creato molte funzioni, ma questo è lontano dalla necessità di utilizzare la sequenza di escape ANSI/VT100.

Per una spiegazione più dettagliata, vedere la Wikipedia article:

ANSI.sys funziona anche in sistemi NT-derivati ​​per programmi legacy a 16 bit che eseguono sotto la NTVDM.

La console Win32 non supporta nativamente le sequenze di escape ANSI. Il software come Ansicon può tuttavia fungere da wrapper attorno alla console Win32 standard e aggiungere il supporto per le sequenze di escape ANSI.

Quindi penso ANSICON da Jason Hood è la vostra soluzione. È scritto in C, supporta le versioni a 32 e 64 bit di Windows e the source is available.

Inoltre ho trovato qualche altra domanda simile o inviati che in ultima analisi sono state risposto di utilizzare ANSICON:

+1

Una volta ho fatto un trucco per far funzionare ANSI in Windows XP senza strumenti di terze parti https://groups.google.com/forum /#!topic/alt.msdos.batch.nt/YZnoq80Mcds – est

+1

Come cambiano i tempi;) In Windows 10 Anniversary Update e oltre, Windows Console è stata aggiornata con un supporto piuttosto solido per le sequenze ANSI/VT e in Creators Update è stata aggiornata a supporta anche i colori RGB a 24 bit: https://blogs.msdn.microsoft.com/commandline/2016/09/22/24-bit-color-in-the-windows-console –

+0

Risposta aggiornata in base al contributo di Rich Turner –

24

A partire da Windows 10 TH2 (v1511), conhost.exe e cmd.exe supporto ANSI e VT100 sequenze di escape, fuori dalla scatola (anche se they have to be enabled).

Vedere my answer over at superuser per ulteriori dettagli.

+3

I build 105xx erano le uniche build con sequenze VT100 abilitate di default. Nelle versioni precedenti e successive è disabilitato per impostazione predefinita perché è stato abilitato per errore. Vedi qui per la spiegazione https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/15617610--re-enable-enable-virtual-terminal- elaborazione-by –

5

Per Python 2.7 il seguente script funziona per me bene con Windows 10 (v1607)

import os 

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

Il risultato dovrebbe essere:

[35mcolor-test[39m test end 

color-test test end 
1

Forse ANSICON può aiutare u

Basta scaricare ed estrarre i file, a seconda del vostro sistema operativo Windows: 32bit o 64bit

installarlo con: ansicon -i

0

Personalmente, come clink. Essa non solo elabora codici ANSI, si aggiunge anche molte altre caratteristiche in modo console di Windows si comporta come bash (storia, invertire la cronologia di ricerca, le scorciatoie da tastiera, ecc):

  • La stessa linea, come l'editing Bash (dalla libreria Readline di GNU).
  • Persistenza cronologica tra le sessioni.
  • Completamento sensibile al contesto;
    • Eseguibili (e alias).
    • Comandi della directory.
    • Variabili di ambiente
    • Strumenti di terze parti; Git, Mercurial, SVN, Go e P4.
  • Nuove scorciatoie da tastiera;
    • Incolla dagli appunti (Ctrl-V).
    • Ricerca cronologia incrementale (Ctrl-R/Ctrl-S).
    • Completamento potente (TAB).
    • Annulla (Ctrl-Z).
    • Automatico "cd .." (Ctrl-PgUp).
    • Espansione variabile di ambiente (Ctrl-Alt-E).
    • (stampa Alt-H per molti di più ...)
  • completamento Scriptable con Lua.
  • Prompt colorato e con script.
  • Risposta automatica del messaggio "Termina processo batch?".