Die Verwendung von ANSI-Escape-Codes in der Powershell-Eingabeaufforderung zum Hinzufügen von Farbe verliert nach dem Ausführen einiger Konsolenprozesse, z. B. git, an Bedeutung

4

Ich habe eine Powershell-Konfigurationsdatei erstellt, die die Eingabeaufforderung zum Hinzufügen von Farbe ändert (abhängig von Dingen wie Git Branch usw.).

Das sieht gut aus, bis ich ein Konsolenprogramm wie git ausgeführt habe, das auch farbigen Text ausgibt. Danach scheint sich Powershell entschlossen zu haben, Escape-Codes wörtlich auszugeben.

Einfacher mit einem Screenshot zu verstehen:

Beispiel für die Ausgabe

  1. ist die Ausgabe bevor ich git starte, beachte die kolorierte Ausgabe des Textes "colorized>"
  2. ist die Ausgabe, nachdem ich git ausgeführt habe, beachten Sie, dass die Escape-Codes wörtlich ausgegeben werden

Hier ist meine Powershell-Konfigurationsdatei:

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

Gibt es einen Trick, um die Funktionalität der ANSI-Codes wieder zu aktivieren? Beachten Sie, dass Git nur ein Beispiel ist. Ich habe mehrere Programme gefunden, die dies vermasseln, aber nicht alle.

MSBuild funktioniert beispielsweise einwandfrei.

Lasse Vågsæther Karlsen
quelle
Ich kann das wiederholen. Ich frage mich, ob ANSICON helfen würde.
root
Sie können die Färbung in der promptFunktion verwenden, ohne dass Sie einen Escape-Code benötigen ( Write-Hoststattdessen verwenden).
Bill_Stewart
@ Bill_Stewart OK, ich werde das testen.
Lasse Vågsæther Karlsen
Das hat mich auch schon lange verrückt gemacht. Würde gerne eine Lösung sehen!
Collin Chaffin

Antworten:

2

Oh hallo! Ich bin selbst auf dieses Problem gestoßen, als ich aufgeregt ALLES mit ANSI kolorierte.

Zunächst habe ich dies genommen (ich kann mich nicht erinnern, wie ich anfangs darauf gestoßen bin, aber vielen Dank an den Original-Codierer) https://github.com/bozho/AnsiColorOut/blob/master/AnsiColorOut/Console.cs

Dann stelle ich in meinem Profil sicher, dass ich es hinzufüge

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

Und dann erstelle ich in meinem Profil einen schnellen benutzerdefinierten Wrapper für bekannte Problemprogramme, die ich häufig verwende, nämlich git

$gitPath = (Get-Command -Name git).Source
function git {
    & $gitPath $args
    [Bozho.PowerShell.Console]::EnableVirtualTerminalProcessing()
}
audaxdreik
quelle