Seite 2 von 3

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 30. September 2010, 12:10
von lynadge
Hi, ich finde das Thema Markup recht Interessant.

Um deine Syntax ein bisschen simpler zu halten, wie wäre es wenn du es ähnlich machst wie defnull es schon auf der ersten seite angesprochen hatte, nur halt mit spitzen Klammern: <bold,#red TEXT>

Ich bin der meinung das sich das um ein vielfaches leichter schreiben lässt. Evtl kannst du den Text ja noch mit einer Pipe abgrenzen: <bold,#red|TEXT>

Natürlich hat man auch noch die Möglichkeit zu verschachteln: <bold,#red|ROT <#blue|BLAU>>

Was hälst du von diesem Vorschlag?

#Edit
Ich sehe gerade, jerch hat einen ähnlichen Vorschlag gemacht. ;)

Re: Terminalausgabe bunt machen

Verfasst: Freitag 1. Oktober 2010, 11:45
von snafu
Der Parser wird wohl folgende Syntax kriegen: `[[attr1,attr2,attr3: bla bla bla]]`.

Re: Terminalausgabe bunt machen

Verfasst: Samstag 2. Oktober 2010, 05:58
von snafu
Tefos 0.0.2 ist draußen. :)

Bild

Bitte beachtet, dass der Parser entsprechend der Versionierung noch sehr dumm ist. Es werden bisher stumpf Klammernpaare ersetzt. Weder Verschachtelung, noch Escaping klappt derzeit. Wenn man sich genau an die Regeln hält und keine "unerwarteten" Klammern einbaut, läuft es jedoch wie im Beispiel. Weitere Verbesserungen folgen natürlich noch.

Re: Terminalausgabe bunt machen

Verfasst: Dienstag 5. Oktober 2010, 15:19
von jens
Hab mir auch was gebastelt, allerdings ohne ein "markup":
http://paste.pocoo.org/show/271344/

sieht dann so aus:

Code: Alles auswählen

    >>> c = ColorOut()
    >>> c.colorize('no color')
    'no color'
    >>> c.colorize('bold', opts=("bold",))
    '\\x1b[1mbold\\x1b[0m'
    >>> c.colorize("colors!", foreground="red", background="blue", opts=("bold", "blink"))
    '\\x1b[31;44;1;5mcolors!\\x1b[0m'
Es wird auch geprüft, ob überhaupt Escape Sequenzen nutzbar sind...

Das ganze ist geklaut von django, siehe: http://code.djangoproject.com/browser/d ... mcolors.py

Re: Terminalausgabe bunt machen

Verfasst: Dienstag 5. Oktober 2010, 16:51
von Dav1d
Sphinx hat da auch was dabei...

Re: Terminalausgabe bunt machen

Verfasst: Dienstag 5. Oktober 2010, 17:36
von snafu
Pygments hat auch was ausgeklügeltes.

Re: Terminalausgabe bunt machen

Verfasst: Dienstag 5. Oktober 2010, 17:49
von DasIch
Quasi jedes größere Python Projekt hat so eine Implementierung, logbook und Inyoka haben da auch was.

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 14. Oktober 2010, 13:16
von USER67
Hallo

ich habe tefos 0.0.2 ausprobiert, aber ich bekomme einen atrribute error von wegen

"str" object has no attribute "format"

dabei habe ich es genaus so wie oben gemacht :(
ich habe übrigens WinXP...

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 14. Oktober 2010, 13:19
von cofi
USER67 hat geschrieben: ich habe übrigens WinXP...
und eine Python-Version < 2.6

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 14. Oktober 2010, 14:07
von USER67
Ja...nämlich 2.5

ist das der grund?

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 14. Oktober 2010, 14:14
von BlackJack
@USER67: Ja das ist der Grund.

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 14. Oktober 2010, 14:15
von USER67
Kann ich es auch für 2.5 anwenden, ohne 2.6 zu installieren.

ich wende es auf der arbeit an und ich muss mit der aktuellen zurecht kommen.

vielleicht brauche ich dafür nur ein bestimmtes class aus 2.6 importieren?

Grus

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 14. Oktober 2010, 14:37
von derdon
Das kommt ganz darauf an, ob snafu (oder jemand anders) Lust dazu hat, Support für 2.5 zu implementieren. Wenn snafu aber str.format verwendet, denke ich, dass er ganz bewusst auf Support für 2.5 verzichtet hat.

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 14. Oktober 2010, 21:50
von snafu
Ich möchte mal anmerken, dass bisher nur Unix-Escape-Sequenzen implementiert sind. Ich glaube nicht, dass die auch für Windows gelten. Für Windows werde ich die Veränderungen vermutlich über die Windows API handlen. Letztlich plane ich die Abstraktion soweit, dass man nur noch Dinge wie `State('bold')` oder `TextColor('yellow')` auf Bibliotheksebene hat. Die begonnene Grammatik wird letztlich wohl so enden, wie in diesem Beispiel:

`"blink,#yellow,uline,&green,!bold"` -> blinkende, unterstrichene Schrift in gelb mit grünem Hintergrund und deaktiviertem Fett-Modus

Bei der Syntax bleiben die eckigen Klammern bestehen. Verschachtelungen sind möglich. Das soll auch für verschachtelte Farben gelten.

Über kurz oder lang soll über die API auch der aktuelle Status des Cursors oder die Fähigkeiten abgefragt werden können (`is_bold()`, `can_blink()` usw.) und das halt für die unterschiedlichen Terminaltypen wie `xterm`, `libvte-based`, `wincon` etc.

Wenn, ja wenn, es einmal fertig ist, sollen auf beliebigen Plattformen ohne viel Aufwand diverse Features zur Textformatierung genutzt werden können. Sei es für Syntaxhighlighter (Farben) oder für Hilfetexte (z.B. Hervorheben einzelner Wörter, Hilfen zur Einrückung, Aufzählungszeichen oder Rahmen um einen Textabschnitt). Also mir fällt da noch jede Menge ein. Es muss nur umgesetzt werden. :)

Re: Terminalausgabe bunt machen

Verfasst: Montag 18. Oktober 2010, 11:39
von jerch
snafu hat geschrieben:...Ich glaube nicht, dass die auch für Windows gelten. Für Windows werde ich die Veränderungen vermutlich über die Windows API handlen....
Früher zu DOS/Win3.X Zeiten gab es die Möglichkeit, einen Teil der ANSI-Codes auch am DOS-Terminal zu nutzen (ANSI.SYS), laut Wikipedia funktioniert das auch noch mit Vista und den x86-Versionen des Windows Server 2003. Allerdings muss der Nutzer hierfür die Konsole umkonfigurieren und neuere Windowsversionen scheiden offenbar gänzlich aus. Alles in allem - reichlich unpraktikabel.
Besser ist es, wie Du selbst geschrieben hast, auf die Konsolenfunktionen über die API-Calls zuzugreifen, da diese über die verschiedenen Windowsversionen hinweg quasi stabil sind und die Fähigkeiten der Winconsole abbilden. Bei Verwendung von ctypes und direktem Bibliothekszugriff musst Du vermutlich die Bittigkeit der Parameter beachten (habs bisher nur für 32-Bit Windows gemacht), mit der Win32-Erweiterung von Mark Hammond wirds wahrscheinlich noch einfacher.

In puncto Fähigkeiten gibt es ein paar Unterschiede zw. ANSI-Terminals und der Winconsole. So kann z.B. die Winconsole die aktuellen Texteigenschaften für Zelle xy zurückgeben, während die meisten ANSI-Terminals mehr Farben und Darstellungsmodi (z.B. durchgestrichen, unterstrichen) unterstützen. Für eine All-Bibliothek müsstest Du den kleinsten gemeinsamen Funktionalitäts-Nenner finden bzw. wiederum nach Plattformen getrennt die erweiterten Funktionen anbieten.

Re: Terminalausgabe bunt machen

Verfasst: Dienstag 19. Oktober 2010, 14:02
von Xynon1
jerch hat geschrieben: Früher zu DOS/Win3.X Zeiten gab es die Möglichkeit, einen Teil der ANSI-Codes auch am DOS-Terminal zu nutzen (ANSI.SYS), laut Wikipedia funktioniert das auch noch mit Vista und den x86-Versionen des Windows Server 2003.
Ist das nicht eine Abhängigkeit des Sprachsatzes der bei "Schriftart"(glaube ich hieß das) gewählt wird ?

Re: Terminalausgabe bunt machen

Verfasst: Dienstag 19. Oktober 2010, 15:10
von jerch
Nein, das hat damit nichts zu tun.

ANSI.SYS ist eine Treiberdatei, die mittels config.sys bzw. separater Konfigurationsdatei (unter NT Derivaten) zusätzlich geladen werden muss.

Re: Terminalausgabe bunt machen

Verfasst: Dienstag 19. Oktober 2010, 17:58
von Xynon1
Ok, das weiß ich auch noch, aber ich bezog mich eigentlich auf den Terminal unter den "neueren" Windows Version.
Also die Konsole, und diese sollte doch unabhängig von Sprachtreibern laufen, wenn man dort einen True Type Font benutzt kann.
Weil dort doch im Font die Zeichenkodierung definiert wird, oder liege ich hier dennoch daneben ?

Re: Terminalausgabe bunt machen

Verfasst: Dienstag 19. Oktober 2010, 21:06
von BlackJack
@Xynon1: Die Zeichenkodierung hat nichts mit Farben zu tun, sondern sagt nur welche Zahl(en) zu welchem Zeichen abgebildet werden.

Re: Terminalausgabe bunt machen

Verfasst: Donnerstag 21. Oktober 2010, 07:35
von Xynon1
Ok, stimmt das hat damit wirklich nichts zutun.