[LINUX] "CSI", das ich Anfängern der interaktiven Konsolenanwendungsproduktion beibringen möchte

Einführung

Ich bin keine erweiterte Konsolen-App ** Ich kannte CSI gerade, als ich verschiedene Dinge machte, also schrieb ich es.

Was ist CSI?

Eine Art von ** Escape-Sequenz **. Das erste, was Ihnen einfällt, wenn Sie das Wort "Flucht" hören, ist "\ n". \ n ist ein sehr einfaches Escape, das einen Zeilenumbruch im Unix-System bedeutet, aber dieses Mal werden wir einen etwas komplizierteren Sonderausdruck verwenden.

CSI ist übrigens eine Abkürzung für * Control Sequence Introducer *.

Was kann ich tun

Typische

** hier ** enthält alle Steuerelementtypen und -methoden.

Über den Betrieb

~~ ** Bash scheint nicht leicht zu entkommen ** (Referenz). ~~ [Ergänzung: Kommentarinformationen] Es scheint, dass Sie mit Bash entkommen können. Das Escaping wird mit der Option "-e" angewendet, z. B. "echo -e". Auch der obige Link war eine weitere Diskussion. Wir werden korrigieren.

Versuchen Sie es mit CSI

Im vorherigen Beispiel haben wir nun "\ n" gezeigt, um eine Linie zu brechen. Da CSI mehrere Dinge steuern kann, ist der Steuercode nicht einer, aber es gibt ein Präfix, um zu erkennen, dass es sich um CSI handelt. Das ist ** \ e [ ** oder ** \ 033 [ ** oder ** \ 0x1b [ **.

[Zusatz] Ich dachte, Bash könnte nicht entkommen, nur "\ e [" hat es nicht unterstützt. Es ist möglich mit \ 033 [.

Da e ein Zeichentyp ist, 033 eine Oktalzahl und 0x1b eine Hexadezimalzahl ist, ist es im Wesentlichen dasselbe, aber e ist einfacher. CSI ist eine Art [^ 1] Escape-Sequenz im engeren Sinne. Wenn Sie am Anfang "\ e" einfügen, wird der Beginn der Escape-Sequenz angezeigt, und "[" zeigt an, dass es sich um CSI handelt.

Die Steuerung von CSI ändert sich je nachdem, was Sie danach schreiben.

CSI-Kontrollliste (Teil)

Steuerzeichen (kein Platz erforderlich) Bewegung
n A n Zeilen(1 Zeile, falls nicht angegeben)Heben Sie den Cursor an
n B n Zeilen(1 Zeile, falls nicht angegeben)Senken Sie den Cursor
n C n Zeichen(1 Zeichen, sofern nicht anders angegeben)Bewegen Sie den Cursor
n D n Zeichen(1 Zeichen, sofern nicht anders angegeben)Bewegen Sie den Cursor zurück
n E Bewegen Sie den Cursor auf n Zeilen(1 Zeile, falls nicht angegeben)Am Anfang unten ausrichten
n F Bewegen Sie den Cursor auf n Zeilen(1 Zeile, falls nicht angegeben)An den Anfang von oben passen
n G Setzen Sie den Cursor auf das n-te Zeichen der aktuellen Zeile(1. Zeichen, falls nicht angegeben)Passen
n; m H Platzieren Sie den Cursor in der n-ten Zeile, m Zeichen(1 Zeichen pro Zeile, sofern nicht anders angegeben:Oben links)Passen
n J Bildschirm löschen (Details werden später beschrieben)
n K Zeile löschen (Details werden später beschrieben)
n S n Zeilen (1 Zeile, falls nicht angegeben) Blättern Sie durch den Bildschirm, um fortzufahren
n T n Zeilen (1 Zeile, falls nicht angegeben) Scrollen Sie zurück zum Bildschirm
n L Fügen Sie n Zeilen (1 Zeile, falls nicht angegeben) vor der Zeile ein, in der sich der Cursor befindet
n M Löschen Sie n Zeilen (1 Zeile, falls nicht angegeben) aus der Zeile, in der sich der Cursor befindet
n P Löschen Sie n Zeichen (1 Zeichen, falls nicht angegeben) von der Cursorposition
n P Ersetzen Sie n Zeichen (1 Zeichen, falls nicht angegeben) durch Leerzeichen an der Position des Cursors
n ` Bewegen Sie den Cursor auf das n-te Zeichen der aktuellen Zeile (1. Zeichen, falls nicht angegeben)
n a Bewegen Sie den Cursor um n Zeichen (1 Zeichen, falls nicht angegeben)
n d Heben Sie den Cursor n Zeilen an der aktuellen Position an (1 Zeile, falls nicht angegeben)
n m SGR(Select Graphic Rendition)Parameter angeben (Details werden später beschrieben)
s Merken Sie sich die aktuelle Cursorposition
u Rufen Sie die gespeicherte Cursorposition auf
> 3; a; b; c; d J (b, a)Von(d, c)Rechteck bis löschen
> 3; a; b; K Löschen Sie die Zeichen a bis b in der aktuellen Zeile

Verhalten beim Löschen des Bildschirms (* CSI * * n * J) und beim Löschen von Zeilen (* CSI * * n * K)

n Verhalten
Nicht spezifiziert Löschen Sie hinter dem Cursor zum Anfang des Bildschirms (Zeile)
0 Löschen Sie hinter dem Cursor zum Anfang des Bildschirms (Zeile)
1 Vor dem Cursor zum Ende des Bildschirms löschen (Zeile)
2 Löschen Sie den gesamten Bildschirm (Zeile)

SGR-Parameter (typisch)

n Bedeutung
Keiner Parameter zurücksetzen
0 Parameter zurücksetzen
1 Fett gedruckt
2 Leichter Druck (nicht weit verbreitet)
3 Schräg (nicht weit verbreitet, invertiert)(n=7)Kann auch sein)
4 Unterstreichen
5 Blinken: 150 mal/In Minuten
6 Schnelles Blinken: 150 mal/Mehr als eine Minute (nicht allgemein unterstützt)
7 Rückwärtsanzeige: Vordergrund- und Hintergrundfarben werden vertauscht
8 Zeichen ausblenden (nicht weit verbreitet)
9 Stornierungslinie (nicht allgemein unterstützt)
10 Standardschriftart
11–19 (n-10)Verwenden Sie die zweite alternative Schriftart
20 Bruchschrift(Meistensnichtunterstützt)
21 Fett ausgeschaltet (nicht allgemein unterstützt),Doppelte Unterstreichung (fast nicht unterstützt)
22 Farbe und Betonung wiederherstellen (fett / hell)
23 Stellen Sie die Schräge und den Bruch wieder her
24 Unterstreichen abbrechen
25 Blinken abbrechen
28 Text einblenden
29 Löschen Sie den Durchgestrichenen
30–37 Vordergrundfarbe (im Wesentlichen Textfarbe)(n-30)Wechsel zur Nummer (Farbnummer wird später beschrieben)
38 Erweiterung der Vordergrundfarbeneinstellung.\e[38;5;nSie können den Farbindex mit angeben(0...255)。\e[38;2;r;g;bRGB kann mit eingestellt werden(Jeweils 0...255)。
39 Vordergrundfarbe zurücksetzen
40–47 Hintergrundfarbe(n-40)Wechsel zur Nummer (Farbnummer wird später beschrieben)
48 Erweiterung der Hintergrundkulisseneinstellung.\e[48;5;nSie können den Farbindex mit angeben(0...255)。\e[48;2;r;g;bRGB kann mit eingestellt werden(Jeweils 0...255)。
49 Hintergrundfarbe zurücksetzen

Was ist das für ein nicht unterstützter Sturm ...

Farbnummer

Nummer Farbe
0 schwarz
1 rot
2 Grün
3 Gelb
4 Blau
5 Magenta
6 Cyan
7 Weiß

Es sieht so aus, wenn Sie jede Farbe grob anzeigen. スクリーンショット 2016-08-05 10.39.55.png

Wie benutzt man SGR?

Beim tatsächlichen Einstellen des SGR

echo "\e[31mred\e[m"

Wenn Sie dies tun, wird es als "rot" in rot angezeigt.

Ebenfalls,

echo "\e[31;43mred&yellow\e[m"

Wenn Sie dies tun, wird "rot & gelb" mit einem roten gelben Hintergrund angezeigt. Sie können mehrere Optionen gleichzeitig festlegen, indem Sie die durch ; getrennten Optionen auf diese Weise eingeben. ** Deaktivieren Sie die Option am Ende mit "\ e [m" oder "\ e [0m" ", um unerwartetes Verhalten nach dem Beenden des CSI zu vermeiden. ** **.

[^ 1]: Genau genommen ist \ n keine Escape-Sequenz. Im engeren Sinne bezieht es sich auf eine Steuerbytezeichenfolge, die mit "ESC (0x1B)" beginnt.

Recommended Posts

"CSI", das ich Anfängern der interaktiven Konsolenanwendungsproduktion beibringen möchte
Praktische Linux-Tastaturbedienung, die ich mir selbst beibringen möchte, als ich in der Schule war
Ich möchte kühl auf die Konsole ausgeben
Ich möchte in der Einschlussnotation drucken
Ich möchte IPython Qt Console verwenden
Ich möchte Matplotlib in PySimpleGUI einbetten
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich möchte die Django Debug Toolbar in Ajax-Anwendungen verwenden
Ich möchte Datetime.now in Djangos Test reparieren
Ich möchte mit Python ein Fenster erstellen
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
Ich möchte DB-Informationen in einer Liste speichern
Ich möchte verschachtelte Dicts in Python zusammenführen
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
Ich möchte den Fortschritt in Python anzeigen!
Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
Selbst Anfänger möchten sagen "Ich verstehe Python voll und ganz"
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Python, das ich Anfängern in der Programmierung empfehlen möchte
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte mich mit Backpropagation (tf.custom_gradient) (Tensorflow) selbst verwenden.
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Auch mit JavaScript möchte ich Python `range ()` sehen!
Ich möchte Android-Apps auf Android entwickeln (Debug)
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Ich möchte sagen, dass es eine Datenvorverarbeitung gibt ~
Ich möchte R-Datensatz mit Python verwenden
Ich möchte am Ende etwas mit Python machen
Ich möchte Strings in Kotlin wie Python manipulieren!
Super einfache molekulare phylogenetische Baumerstellungstechnik, die ich niemandem beibringen möchte
[Für Anfänger] Ich möchte die Anzahl der Lernerfahrungen leicht verständlich erklären.
Ich möchte eine Spalte mit NA in R einfach löschen
Ich möchte so etwas wie Uniq in Python sortieren
[Django] Ich möchte mich nach einer neuen Registrierung automatisch anmelden
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
[Einführung in Pytorch] Ich möchte Sätze in Nachrichtenartikeln generieren
Ich möchte eindeutige Werte in einem Array oder Tupel zählen
Ich möchte die gültigen Zahlen im Numpy-Array ausrichten
Ich möchte Python mit VS-Code ausführen können
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Ich wollte den AWS-Schlüssel nicht in das Programm schreiben
[Python] Ich habe versucht, Wörter, die für Anfänger schwer zu verstehen sind, auf leicht verständliche Weise zu erklären.
Ich möchte SUDOKU lösen
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Ich möchte Rails mit Rails auch in einer vagabundierenden Umgebung betreiben
Qiskit: Ich möchte eine Schaltung erstellen, die beliebige Zustände erzeugt! !!
LINEbot-Entwicklung möchte ich den Betrieb in der lokalen Umgebung überprüfen
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Ich möchte die zweite Zeile zum Spaltennamen in Pandas machen
Ich möchte den G-Test in einem Monat Tag 1 bestehen
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
[Für Anfänger] Ich möchte den Index eines Elements erhalten, das einen bestimmten bedingten Ausdruck erfüllt