Console di Windows con gestione dei colori ANSI


34

Esiste un emulatore di console per Windows che interpreta la colorazione ANSI?

Usiamo rspec e una parte del nostro team usa Windows e la stringa speciale per colorare non è molto utile per loro;).

Risposte:


40

ConEmu supporta ANSI X3.64 con estensione colore Xterm 256. Sono l'autore di questo emulatore di console.

Le sequenze Ansi sono gestite per tutti i processi, in esecuzione nelle schede ConEmu.

AFAIK, ConEmu supporta più codici di Ansicon.

ConEmu e ANSI X3.64 / Xterm 256 colori


1
Questo scoglio! Come giocatore adoro la funzione di terremoto. La console sembra essere bloccata nella parte superiore dello schermo (anche se l'opzione bloccata nella parte superiore è disabilitata). Grazie
Ced

come si esegue cmd con le schede?
Mikey,

@ Mike Cosa? Leggi prima la risposta.
Massimo

35

Nessuna delle risposte in questa pagina menziona un aspetto importante del nuovo supporto per ANSI Terminal Control che è stato aggiunto all'host della console di Windows 10 nella build 16257 (e successive). Vale a dire, per impostazione predefinita non è e̲n̲a̲b̲l̲e defaultd̲. A meno che il software specifico che si sta utilizzando consente l'elaborazione ANSI chiamando il SetConsoleMode API con la ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)bandierina, non sarà possibile vedere i colori o ottenere ANSI elaborazione per tale applicazione.

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

Quando si scrive con WriteFile o WriteConsole , i caratteri vengono analizzati per VT100 e sequenze di caratteri di controllo simili che controllano il movimento del cursore, la modalità colore / carattere e altre operazioni che possono anche essere eseguite tramite le API della console esistenti. Per ulteriori informazioni, consultare Sequenze di terminali virtuali della console.

Sto indovinando il motivo per cui gli esempi mostrati in questa pagina funzionano, a quanto pare il echocomando (o forse la parte di elaborazione batch di CMD.EXEo conhost) abilita l'elaborazione ANSI chiamando l'API appena menzionata. Ma molti altri strumenti o eseguibili che scrivono stdino stdoutpotrebbero non farlo, nel qual caso non vedrai il colore per quei processi.

Per fortuna, il default globale può essere modificato da opt-in a opt-out . La chiave del Registro di sistema all'indirizzo HKEY_CURRENT_USER\Console\VirtualTerminalLevelimposta il comportamento predefinito globale per l'elaborazione delle sequenze di escape ANSI. Creare una DWORDchiave (se necessario) e impostarne il valore per 1abilitare (o 0disabilitare`) globalmente l'elaborazione ANSI per impostazione predefinita.

[HKEY_CURRENT_USER \ Console]
"VirtualTerminalLevel" = dword: 00000001

Si noti che questa impostazione del registro controlla un valore predefinito , il che significa che interessa solo le app della console che non manipolano esplicitamente la modalità console chiamando SetConsoleMode(...). Ne consegue che, sebbene il valore del Registro di sistema possa aiutare ad abilitare ANSI per le app ignari in modalità console , non avrà alcun effetto su alcuna app esperta in modalità console che (per qualche motivo) potrebbe disabilitare esplicitamente ANSI.

inserisci qui la descrizione dell'immagine


21

A partire da Windows 10 TH2 (v1511), conhost.exe(e, per estensione,cmd.exe ) supporta ANSI Escape Sequences, in particolare i colori:

immagine dalla pagina MSDN menzionata di seguito

Il pagina MSDN sulle sequenze di terminali virtuali della console spiega quali sequenze sono supportate e come abilitarle:

Puoi usare GetConsoleMode e SetConsoleMode per configurare questo comportamento. [...]

Il comportamento delle seguenti sequenze si basa sul VT100 e sulle tecnologie dell'emulatore di terminale derivato, in particolare l'emulatore di terminale xterm. Ulteriori informazioni sulle sequenze di terminali sono disponibili su http://vt100.net e http://invisible-island.net/xterm/ctlseqs/ctlseqs.html .


2
Le sequenze supportate sono descritte msdn.microsoft.com/en-us/library/windows/desktop/...
dbenham

Puoi anche cambiare i colori predefiniti usando Colortool . Le nuove installazioni di Windows 10 avranno colori leggermente modificati che sono più facili da leggere (specialmente blu su nero), ma gli aggiornamenti manterranno i colori vecchi e difficili da leggere.

10

Esiste un emulatore di console per Windows che interpreta la colorazione ANSI?

Windows prima delle 10 - nessun supporto nativo per i colori ANSI sulla console

Per la versione di Windows inferiore a 10, la console di comando di Windows non supporta la colorazione dell'output per impostazione predefinita. È possibile installare Cmder , ConEmu , ANSICON o Mintty (utilizzati per impostazione predefinita in GitBash e Cygwin) per aggiungere il supporto per la colorazione alla console dei comandi di Windows.

Windows 10 - Colori della riga di comando

A partire da Windows 10 la console di Windows supporta le sequenze di escape ANSI e alcuni colori per impostazione predefinita.

Documentazione MSDN

dimostrazione

inserisci qui la descrizione dell'immagine

Comando batch

Il è win10colors.cmdstato scritto da 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

A partire dalla versione 1607 (build del sistema operativo 14393.693), il colore in Windows 10 è stato disabilitato.
geff_chang,

2
Perché dovrei crederlo? Fatti per favore. a) Non c'è nulla nel log delle modifiche : support.microsoft.com/en-us/help/4009938 b) Funziona per me: imgur.com/a/MNPNm
Jens A. Koch

1
Non sono sicuro dell'esatta versione di Win10, ma è menzionata qui: github.com/symfony/symfony/issues/19520 Sul mio portatile aziendale - Ver 1511 (build del sistema operativo 10586.753) - Non ne avevo bisogno. Sul mio PC di casa, ho dovuto usare Ansicon, perché i colori non erano attivi per impostazione predefinita.
geff_chang,

4
Hanno appena introdotto un flag, che controlla l'output colorato ed è falso per impostazione predefinita. Vedi wpdev.uservoice.com/forums/… ) --- Symfony sta usando PHP.exe su Windows, dove la bandiera era spenta, quindi hanno dovuto aspettare una patch, che è arrivata qui: github.com/php/php- src / pull / 2103 . Situazione risolta. --- Per cmd.exe il flag è sempre true. Ecco perché hai il supporto del colore sulla console.
Jens A. Koch,

1
questi codici funzionerebbero anche in uno script di shell in Linux? o è fatto in un modo diverso?
Mikey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.