L'uso di codici di escape ANSI nel prompt di Powershell per aggiungere colore, perde significato dopo aver eseguito alcuni processi della console, come git


4

Ho creato un file di configurazione PowerShell che modifica la richiesta di aggiungere un po 'di colore (a seconda di cose come git branch, ecc.)

Questo sembra buono, fino a quando non ho eseguito un programma console, come git, che produce anche testo colorato. Dopo questo sembra che Powershell decida di emettere testualmente i codici di escape.

Più facile da capire con uno screenshot:

esempio di output

  1. è l'output prima di eseguire git, notare l'output colorato del testo "colorized>"
  2. è l'output dopo aver eseguito git, si noti che i codici di escape vengono emessi testualmente

Ecco il mio file di configurazione Powershell:

function prompt {
    "" + [char]0x001b + "[35m colorized >" + [char]0x001b + "[0m"
}

Esiste un trucco per riattivare la funzionalità dei codici ANSI o è solo una stranezza di come Powershell o git generano testo? Nota che git è solo un esempio, ho trovato diversi programmi che rovinano tutto, ma non tutti lo fanno.

MSBuild, ad esempio, funziona perfettamente.


Sono in grado di replicare questo. Mi chiedo se ANSICON sarebbe d'aiuto.
radice

È possibile utilizzare la colorazione nella promptfunzione senza bisogno di codici di escape (utilizzare Write-Hostinvece).
Bill_Stewart,

@Bill_Stewart OK, lo proverò.
Lasse Vågsæther Karlsen,

Questo mi sta facendo impazzire anche da molto tempo. Mi piacerebbe vedere una soluzione!
Collin Chaffin,

Risposte:


2

Oh Ehi! Mi sono imbattuto in questo problema anche io quando sono entusiasta di colorare TUTTO con ANSI.

Prima di tutto, ho preso questo (non ricordo come mi sono imbattuto inizialmente, ma molte grazie al programmatore originale) https://github.com/bozho/AnsiColorOut/blob/master/AnsiColorOut/Console.cs

Quindi nel mio profilo mi assicuro di aggiungerlo

Add-Type -Path C:\Users\audaxdreik\Documents\WindowsPowerShell\Console.cs

E poi creo un rapido wrapper personalizzato nel mio profilo per programmi con problemi noti che utilizzo molto, vale a dire git

$gitPath = (Get-Command -Name git).Source
function git {
    & $gitPath $args
    [Bozho.PowerShell.Console]::EnableVirtualTerminalProcessing()
}
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.