it-swarm.com.de

Wie kann die win32-Konsole ANSI/VT100-Escape-Sequenzen erkennen?

Ich baue eine leichtere Version der ncurses-Bibliothek. Bis jetzt funktioniert es mit VT100-kompatiblen Terminals ziemlich gut, aber die Win32-Konsole erkennt den \033-Code nicht als Beginn einer Escape-Sequenz:

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

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

Screenshot

Was ist auf C-Code-Ebene zu tun, damit der ANSI.SYS-Treiber geladen und die ANSI/VT100-Escape-Sequenzen erkannt werden?

50
Witiko

[UPDATE] Für das neueste Windows 10 lesen Sie bitte den nützlichen Beitrag von @ brainslugs83, unten in den Kommentaren zu dieser Antwort.

Während für Versionen vor Windows 10 Anniversary Update

ANSI.SYS unterliegt der Einschränkung, dass es unter Windows 95-Vista nur im Kontext des MS-DOS-Subsystems ausgeführt werden kann.

Microsoft KB101875 erläutert, wie ANSI.SYS in einem Befehlsfenster aktiviert wird. Dies gilt jedoch nicht für Windows NT. Laut dem Artikel: wir alle lieben Farben verfügen moderne Windows-Versionen nicht über diese Nice-ANSI-Unterstützung.

Stattdessen hat Microsoft viele Funktionen entwickelt, aber dies ist weit davon entfernt, eine ANSI/VT100-Escape-Sequenz auszuführen. 

Eine ausführlichere Erklärung finden Sie im Wikipedia-Artikel :

ANSI.SYS funktioniert auch in von NT abgeleiteten Systemen für 16-Bit-Legacy-Programme, die unter NTVDM ausgeführt werden.

Die Win32-Konsole unterstützt ANSI-Escape-Sequenzen nicht nativ. Software wie Ansicon kann jedoch als Wrapper für die Standard-Win32-Konsole fungieren und Unterstützung für ANSI-Escape-Sequenzen hinzufügen.

Ich denke, ANSICON von Jason Hood ist Ihre Lösung. Es ist in C geschrieben, unterstützt 32-Bit- und 64-Bit-Versionen von Windows und die Quelle ist verfügbar .

Ich habe auch eine andere ähnliche Frage oder einen ähnlichen Beitrag gefunden, die letztendlich für die Verwendung von ANSICON beantwortet wurde: 

51
Franco Rondini

Ab Windows 10 TH2 (v1511) unterstützen conhost.exe und cmd.exe ANSI- und VT100-Escape-Sequenzen aus der Box (obwohl sie müssen aktiviert sein ).

Siehe meine Antwort bei Superuser für weitere Details.

33
rolve

Ab Windows 10 können Sie ENABLE_VIRTUAL_TERMINAL_PROCESSING verwenden, um ANSI-Escape-Sequenzen zu aktivieren:

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

11
Star Brilliant

Für Python 2.7 funktioniert das folgende Skript unter Windows 10 (v1607) gut}

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"

Ergebnis sollte sein:

[35mcolor-test[39m test end

color-test test end
8
Guestreader

Wenn ANSICON nicht akzeptabel ist, müssen Sie etwas auf dem System installieren. Eine einfachere Lösung, die die ANSI-Codes analysiert und in die entsprechenden Win32-API-Konsolenfunktionen wie SetConsoleTextAttribute übersetzt.

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

7
Joakim

Zum Einfärben der cmd-Datei benötigen Sie Windows.h und verwenden SetConsoleTextAttribute(). Weitere Informationen finden Sie in http://msdn.Microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx

5
rho

Ich persönlich mag klirren . Es verarbeitet nicht nur ANSI-Codes, sondern fügt viele weitere Funktionen hinzu, sodass sich die Windows-Konsole wie bash verhält (Verlauf, Umkehrverlaufssuche, Tastenkombinationen usw.):

  • Dieselbe Zeilenbearbeitung wie Bash (aus der Readline-Bibliothek von GNU).
  • Historienpersistenz zwischen Sitzungen.
  • Kontextsensitive Vervollständigung;
    • Ausführbare Dateien (und Aliase).
    • Verzeichnisbefehle.
    • Umgebungsvariablen
    • Tools von Drittanbietern; Git, Mercurial, SVN, Go und P4.
  • Neue Tastenkombinationen;
    • Einfügen aus der Zwischenablage (Ctrl-V).
    • Inkrementelle Verlaufssuche (Ctrl-R/Ctrl-S).
    • Leistungsfähiger Abschluss (Register ).
    • Rückgängig machen (Ctrl-Z).
    • Automatisches "cd .." (Ctrl-PgUp).
    • Erweiterung der Umgebungsvariablen (Ctrl-Alt-E).
    • (drücken Sie Alt-H für viele mehr ...)
  • Skriptfähiger Abschluss mit Lua.
  • Farbige und skriptfähige Eingabeaufforderung.
  • Automatische Antwort auf die Aufforderung "Stapeljob beenden?".
1
Dawid Ferenczy

Im neuesten win10 kann dies von SetConsoleMode(originMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING) ausgeführt werden. Siehe https://docs.Microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#example

1
bitlixi

Vielleicht kann ANSICON Ihnen helfen

Laden und extrahieren Sie einfach Dateien, je nach Windows-Betriebssystem: 32-Bit oder 64-Bit

Installieren Sie es mit: ansicon -i

1
user3137537

Ansi.sys (im system32-Ordner) ist ein "MSDOS-Treiber", der in Windows XP, 2000 und früheren NT-Versionen enthalten ist. In 2000 und XP befindet es sich im system32-Ordner (ich erinnere mich nicht an die Struktur früherer NT-Versionen). Programme, die im DOS-Subsystem ausgeführt werden und die Standardausgabe verwenden, können ANSI.SYS genauso verwenden wie über MSDOS.

Um ansi.sys zu laden, müssen Sie wie in MSDOS den Befehl device = oder devicehigh = in config verwenden. Unter Windows NT 5 (2K & XP) kann jeder Kopie des DOS-Subsystems eine eigene Konfigurationsdatei in der pif/shortcut-Datei zugewiesen werden (verwenden Sie die Schaltfläche "Erweitert"), und es gibt eine Standarddatei mit dem Namen CONFIG.NT (ebenfalls in den Ordner system32), der verwendet wird, wenn pif/shortcut keine spezielle Konfigurationsdatei angibt.

Wenn ansi.sys korrekt geladen ist, meldet mem/d, dass es geladen ist. In früheren NT-Versionen können und müssen Sie eine geeignete DOS-Umgebung laden, um ansi.sys zu laden, und ansi art funktioniert an der Eingabeaufforderung. Das Laden von ansi.sys hat unter Windows 2K und XP keine Auswirkung auf Ihre "CMD-Eingabeaufforderung", da CMD kein DOS-Programm ist: Es handelt sich um ein 32-Bit-Windows-Konsolenprogramm. Aus irgendeinem Grund, den ich unter WinXP nicht verstehe, wird der Befehl Prompt nicht aktiviert, auch wenn Sie eine fixierte Kopie von command.com mit "command.com/p" laden. Dies ist möglicherweise nicht der Fall, wenn Sie es nur so tun emuliert das Laden von command.com? 

Wenn Sie eine aktuelle DOS-Version von command.com verwenden, ist ansi nach dem Laden aktiviert: Sie können die Verwendung von ansi art wie folgt demonstrieren:

command /c type ansiart.ans

(Hier ist ein Beispiel: http://artscene.textfiles.com/ansi/artwork/beastie.ans )

CONFIG.NT (im Ordner system32) enthält ein Beispiel für die Syntax zum Laden von Gerätetreibern. Sie müssen ein Administrator sein, um diese Standarddatei zu bearbeiten, oder Sie können eine Kopie davon erstellen.

Unter Windows 2K und XP ist die Standardverknüpfung für MSDOS eine PIF-Datei und keine .LNK-Datei. Wenn Sie eine .lnk-Datei in CMD erstellen, können Sie keine speziellen Konfigurations- und Autoexec-Dateien festlegen. Es wird die Standardeinstellung CONFIG.NT verwendet. Wenn Sie eine spezielle Konfigurationsdatei für nur eine DOS-Anwendung verwenden möchten, können Sie eine Kopie der "MSDOS-Verknüpfung" oder eine Kopie von "_default.pif" in Ihrem Windows-Ordner erstellen.

1
david

Hatte das gleiche Problem. Ich habe ConEmu installiert und dieses Problem gelöst.

0
GeertVc

Ich habe festgestellt, dass dieses Tool für mein Ende arbeitet . Microsoft Color Tool von GitHub

Entpacken Sie die komprimierte Datei und öffnen Sie CMD mit Administratorberechtigung.

Wechseln Sie in den Ordner, in den Sie die Datei in CMD entpacken.

Dann führe den Befehl "colortool -b scheme-name" aus.

Der Schemaname muss durch eine der folgenden Optionen ersetzt werden:

  • campbell.ini
  • campbell-legacy.ini
  • cmd-legacy.ini
  • deuternopia.itermcolors
  • OneHalfDark.itermcolors
  • OneHalfLight.itermcolors
  • solarized_dark.itermcolors
  • solarized_light.itermcolors

In meinem Fall wäre der Befehl wie folgt: "colortool -b solarized_dark.itermcolors"

Klicken Sie mit der rechten Maustaste in das Konsolenfenster und wählen Sie Eigenschaften.

Sie müssen keinen Wert ändern, klicken Sie auf "OK", um die Einstellung zu speichern. (Sie werden feststellen, dass Ihre Schrift bereits Farben enthält).

Konsolen-Eigenschaft

Starten Sie dann Ihre Cmd oder PowerShell neu.

Die ANSI-Farbe sollte aktiviert sein und mit dem zuvor ausgewählten Farbschema arbeiten.

0
Arung Isyadi

Auf der Basis von @ BrainSlugs83 können Sie auf der aktuellen Windows 10-Version über register mit dieser Befehlszeile aktivieren:

REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1
0
Daniel De León