Domanda Come rendere la console win32 riconoscere le sequenze di escape ANSI / VT100?


Sto costruendo una versione leggera della libreria ncurses. Finora, funziona abbastanza bene con i terminali compatibili VT100, ma la console win32 non riesce a riconoscere il \033 codice come inizio di una sequenza di escape:

# 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 a livello di codice C, in modo che il driver ANSI.SYS sia caricato e riconosciute le sequenze di escape ANSI / VT100?


44
2018-05-26 00:25


origine


risposte:


[AGGIORNAMENTO] Prima dell'aggiornamento dell'anniversario di Windows 10:

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

Microsoft KB 101875 spiega come abilitare ANSI.SYS in una finestra di comando, ma non si applica a Windows NT. Secondo l'articolo: amiamo tutti i colori, le versioni moderne di Windows non hanno questo bel supporto ANSI.

Invece, Microsoft ha creato molte funzioni, ma questo è ben lungi dall'esigenza di operare la sequenza di escape ANSI / VT100.

Per una spiegazione più dettagliata, vedere il Articolo di Wikipedia:

ANSI.SYS funziona anche in sistemi derivati ​​da NT per programmi legacy a 16 bit in esecuzione in NTVDM.

La console Win32 non supporta affatto le sequenze di escape ANSI. Software come Ansicon può tuttavia fungere da wrapper per la console Win32 standard e aggiungere il supporto per le sequenze di escape ANSI.

Quindi penso ANSICON  di Jason Hood è la tua soluzione. È scritto in C, supporta le versioni a 32 e 64 bit di Windows e la fonte è disponibile.

Inoltre ho trovato altre domande o post simili a cui alla fine è stato risposto di utilizzare ANSICON:


46
2018-05-28 18:43



A partire da Windows 10 TH2 (v1511), conhost.exe e cmd.exe supporta ANSI e VT100 Sequenze di escape fuori dalla scatola (anche se devono essere abilitati).

Vedere la mia risposta a superuser per ulteriori dettagli.


27
2018-03-08 10:33



A partire da Windows 10, è possibile utilizzare ENABLE_VIRTUAL_TERMINAL_PROCESSING abilitare le sequenze di escape ANSI:

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


10
2018-06-13 07:04



Se ANSICON non è accettabile dal momento che richiede l'installazione di qualcosa sul sistema, una soluzione più leggera che analizza e converte i codici ANSI nel relativo Funzioni della console API Win32 ad esempio SetConsoleTextAttribute.

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


6
2018-03-03 16:21



Per Python 2.7 il seguente script funziona perfettamente 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

5
2017-09-24 09:59



Per colorare il cmd che ti serve Windows.h e usare SetConsoleTextAttribute() maggiori dettagli possono essere trovati in http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx


5
2018-05-26 01:40



Può essere ANSICON può aiutarti

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

Installalo con: ansicon -i


1
2017-12-14 14:40



Ansi.sys (nella cartella system32) è un "driver MSDOS" fornito come parte di Windows XP, 2000 e versioni precedenti di NT. Nel 2000 e XP, si trova nella cartella system32 (non ricordo la struttura delle precedenti versioni di NT). I programmi eseguiti nel sottosistema DOS e che utilizzano l'output standard possono utilizzare ANSI.SYS esattamente come potrebbero eseguire su MSDOS.

Per caricare ansi.sys, è necessario utilizzare il device = o devicehigh = command in config, proprio come si farebbe con MSDOS. Su Windows NT 5 (2K e XP), a ciascuna copia del sottosistema DOS può essere assegnato un file di configurazione separato nel pif / shortcut (usare il pulsante "avanzato"), e c'è un file predefinito chiamato CONFIG.NT (anche in la cartella system32), che viene utilizzata se pif / shortcut non specifica un file di configurazione speciale.

Quando ansi.sys è caricato correttamente, mem / d segnalerà che è stato caricato. Nelle versioni precedenti di NT, è possibile e necessario caricare un ambiente DOS appropriato per caricare ansi.sys e ansi art funzionerà al prompt. Su Win 2K e XP, il caricamento di ansi.sys non avrà alcun effetto sul "prompt CMD" perché CMD non è un programma DOS: è un programma di console Windows a 32 bit. Per qualche ragione che non capisco, su WinXP, anche se si carica una copia fissa di command.com usando "command.com / p", il prompt dei comandi non sarà abilitato ANSI: forse quando lo si fa in questo modo solo emula il caricamento di command.com?

In ogni caso, quando si utilizza una versione DOS attuale di command.com, ansi è abilitato dopo essere stato caricato: puoi dimostrare che è usato con un po 'di arte ansi come questo:

command /c type ansiart.ans

(ecco un esempio: http://artscene.textfiles.com/ansi/artwork/beastie.ans)

CONFIG.NT (nella cartella system32) contiene un esempio della sintassi per il caricamento dei driver di dispositivo. Dovrai essere un amministratore per modificare quel file predefinito, oppure puoi crearne una copia.

Su Win 2K e XP, il "collegamento" predefinito per MSDOS è un file .PIF, non un file .LNK. Se si crea un file .lnk su CMD, non sarà possibile impostare file config e autoexec speciali, verrà utilizzato il CONFIG.NT predefinito. Se si desidera utilizzare uno speciale file di configurazione per una sola applicazione DOS, è possibile creare una copia del "collegamento MSDOS", oppure è possibile creare una copia di "_default.pif", trovata nella cartella di Windows.


1
2018-03-22 02:52



Mi piace personalmente tintinnio. Non elabora solo i codici ANSI, ma aggiunge anche molte altre funzionalità in modo che la console di Windows si comporti come bash (cronologia, ricerca inversa, scorciatoie da tastiera, ecc.):

  • La stessa linea di editing di Bash (dalla libreria Readline di GNU).
  • Persistenza della storia tra le sessioni.
  • Completamento sensibile al contesto;      
    • Eseguibili (e pseudonimi).
    • Comandi della directory.
    • Variabili ambientali
    • Strumenti di terze parti; Git, Mercurial, SVN, Go e P4.
  • Nuove scorciatoie da tastiera;      
    • Incolla dagli appunti (Ctrl-V).
    • Ricerca cronologica incrementale (Ctrl-R / Ctrl-S).
    • Completamento potente (TAB).
    • Disfare (Ctrl-Z).
    • "Cd .." automatico (Ctrl-PgUp).
    • Espansione variabile ambientale (Ctrl-Alt-E).
    • (stampa Alt-H per molti altri ...)
  • Completamento programmabile con Lua.
  • Prompt colorato e programmabile.
  • Risposta automatica del "Termina il lavoro in batch?" richiesta.

0
2018-02-20 13:31