2016-05-11 2 views
4

Ich schreibe viele kleine Hilfsskripte, und oft drucken diese farbigen Text im Terminal. Für die Einfachheit ihrer Verpackung und Verteilung möchte ich oft, dass diese kleinen Skripts ohne Abhängigkeiten sind.Gibt es irgendwo in den Standardbibliotheken eine Liste von ANSI-Farb-Escape-Codes?

So viel wie diese Daten in Skripten Ich Duplizieren:

ansi_colors = { 
    None: '\x1b[0m', # actually black but whatevs 
    'red': '\x1b[31m', 
    'green' : '\x1b[32m', 
    ... 
} 

Enthält diese Daten existieren überall in den Kernbibliotheken? Ich grub herum und fand, dass curses einige COLOR_* Konstanten hat, aber sie sind nur ganze Zahlen und es ist nicht offensichtlich, wie diese sich in die ANSI-Escape-Codes verwandeln.

Ich bin mir bereits bewusst, Module wie termcolor, colorama, blessings, also bitte nicht vorschlagen, diese zu verwenden - Ich möchte nur Standardbibliotheken abhängen.

+0

'man terminfo' ist ein ein bisschen Hilfe, zwei Standard-Colormaps zeigen. – mpez0

Antwort

2

Sie können die Manpage console_codes(4) überprüfen. Was Sie wollen, ist die ECMA-48 Set Graphics Rendition:

Die ECMA-48 SGR-Sequenz ESC [ parameters m Sätze anzuzeigen Attribute. Mehrere Attribute können in der gleichen Reihenfolge gesetzt werden, getrennt durch Semikolons. Ein leerer Parameter (zwischen Semikolon oder String Initiator oder Terminator) wird als Null interpretiert.

param result 
    0  reset all attributes to their defaults 
    1  set bold 
    2  set half-bright (simulated with color on a color display) 
    4  set underscore (simulated with color on a color display) (the colors used to 
      simulate dim or underline are set using ESC ] ...) 
    5  set blink 
    7  set reverse video 
    10  reset selected mapping, display control flag, and toggle meta flag (ECMA-48 
      says "primary font"). 
    11  select null mapping, set display control flag, reset toggle meta flag 
      (ECMA-48 says "first alternate font"). 
    12  select null mapping, set display control flag, set toggle meta flag (ECMA-48 
      says "second alternate font"). The toggle meta flag causes the high bit of a 
      byte to be toggled before the mapping table translation is done. 
    21  set normal intensity (ECMA-48 says "doubly underlined") 
    22  set normal intensity 
    24  underline off 
    25  blink off 
    27  reverse video off 
    30  set black foreground 
    31  set red foreground 
    32  set green foreground 
    33  set brown foreground 
    34  set blue foreground 
    35  set magenta foreground 
    36  set cyan foreground 
    37  set white foreground 
    38  set underscore on, set default foreground color 
    39  set underscore off, set default foreground color 
    40  set black background 
    41  set red background 
    42  set green background 
    43  set brown background 
    44  set blue background 
    45  set magenta background 
    46  set cyan background 
    47  set white background 
    49  set default background color 

Ich glaube nicht, sie sind in jedem Standard-Python-Modul, wie sie ist. Aber wenn Sie genau hinschauen, werden Sie feststellen, dass die Vordergrundfarben 30 plus die curses Konstante sind, während die Hintergrundfarben 40 plus die curses Konstante sind. So kann man so etwas schreiben:

import curses 
def fcolor(c): 
    return '\x1B[{0}m'.format(30 + c) 
def bcolor(c): 
    return '\x1B[{0}m'.format(40 + c) 
def fbcolor(f, b): 
    return '\x1B[{0};{1}m'.format(30 + f, 40 + b) 

print(fbcolor(curses.COLOR_RED, curses.COLOR_YELLOW) + "hello!") 
2

Es hängt davon ab, was Sie wollen. ANSI-Farben bezieht sich technisch auf die 8-Farben-Palette, die von ECMA-48 (ISO-6429) impliziert wird, die Konstanten in Curses benannt hat. Bibliotheken speichern keine Escape-Sequenzen; Diese sind in einer Datenbank. Für einen ANSI (sic) -Terminal entsprechen diese den Escape-Sequenzen, die Grafikanzeige setzen (Videoattribute wie fett, unterstrichen, umgekehrt — und Farbe).

termcap, terminfo und curses verwenden einen allgemeineren Begriff, bei dem Sie mit einer Farbnummer beginnen und die Escape-Sequenz erzeugen, die die entsprechende Farbe erzeugen kann. Terminals können keine Farben haben, mehrere Farben (8 zum Beispiel, aber möglicherweise 16, 88, 256 für Xterm und ähnliche Terminals). Die Information, wie dies zu tun ist, wird in der Terminal-Datenbank als Fähigkeiten gespeichert. So stellen Sie die ANSI Vordergrundfarbe, würden Sie verwenden setaf, entweder eine Bibliothek-Aufruf oder eine Befehlszeilenanwendung wie tput, zum Beispiel

tput setaf 4 

für Farbe 4 (blau).Einfache Anwendungen verwenden die Low-Level-Termcap- oder -Terminfo-Schnittstellen, normalerweise mit terminfo-Datenbanken. Während Sie vielleicht geneigt sind, Ihre eigenen Escape-Sequenzen zu formatieren, bieten diese Schnittstellen Formatierungsfunktionen, mit denen Sie nicht wissen, wie viele Farben ein Terminal unterstützen könnte. Die Terminal-Datenbank informiert Ihr Programm über die Umgebungsvariable , um die tatsächliche Terminalbeschreibung auszuwählen. Wenn ein Terminal mehr als 8 Farben unterstützt, wird die Escape-Sequenz nicht gebildet, indem 30 oder 40 zur Farbnummer hinzugefügt werden. Hier

ist ein Beispiel für die Low-Level-Schnittstelle von Python term mit:

import curses 

curses.setupterm() 
curses.putp(curses.tparm(curses.tigetstr("setaf"), curses.COLOR_RED)) 
curses.putp(curses.tparm(curses.tigetstr("setab"), curses.COLOR_YELLOW)) 
curses.putp("hello!") 
curses.putp(curses.tigetstr("sgr0")) 
curses.putp("\n") 

Weiterführende Literatur:

Verwandte Themen