Terminal

Das Kernproblem jedes Terminals: In jeder anderen Anwendung kopiert Strg+C, im Terminal sendet es SIGINT. tessera löst das über den Selektionszustand statt über einen Modus, den man vergisst.

Zwischenablage

Markierung aktivkeine Markierung
Strg+Ckopieren, Markierung aufheben, kein SIGINT0x03
Strg+Umschalt+Ckopierennichts — nie SIGINT
Cmd+Ckopierennichts — nie SIGINT
Strg+A0x01 (Zeilenanfang)0x01
EscMarkierung aufheben, kein Byte0x1b

Rechtsklick fügt ein — wie in PuTTY. Umschalt+Rechtsklick öffnet das Kontextmenü, damit es nicht unerreichbar wird. Wahlweise auch PuTTY-Vollstil: mit Markierung kopieren, ohne einfügen. Einmal drücken kopiert, zweimal bricht ab.

Drei Modi stehen zur Wahl: smart (Vorgabe), klassisch und macOS-Stil.

Kopiert wird ohne Rand. Ein Terminal hat keine Zeilenenden, sondern Zellen — wer eine Zeile markiert, markiert die Auffüllung bis zum rechten Rand mit. tessera schneidet sie weg: Leerraum am Zeilenende fällt immer, leere Zeilen am Anfang und am Ende des Ausschnitts ebenfalls. Bei einer einzelnen Zeile fällt auch der Leerraum davor weg — dort ist er ein Griff daneben und kein Teil des Textes. Bei mehreren Zeilen bleibt die Einrückung stehen: ein Block, dem nur die erste Zeile ausgerückt wird, ist beim Einfügen kaputt. Das gilt für jeden Weg in die Zwischenablage, auch für „Alles kopieren“.

Was aus dem Bild läuft, bleibt markiert. Wer mit gedrückter Maustaste zieht und dabei scrollt, hält den Anfang der Markierung fest — er hängt an seiner Pufferzeile und nicht an einem Punkt auf dem Schirm. Ohne das wanderte der Anfang mit dem Ausschnitt nach unten, und die Zeilen, die oben herauslaufen, fielen aus der Markierung heraus. Man merkt es erst beim Einfügen, und dann fehlt genau der Teil, den man sehen wollte.

Kürzel, die readline gehören, bleiben bei readline. Strg+A, Strg+K und Strg+U werden nicht umbelegt. Wer in der Shell arbeitet, vermisst kill-line sofort. Neue Kürzel liegen auf Strg+Umschalt. Strg+V ist die Ausnahme — unter Windows erwartet dort jeder das Einfügen.

Eingefügter Text wird gefiltert

Steuerzeichen und ESC-Sequenzen raus, Zeilenenden vereinheitlicht. Bei mehreren Zeilen ohne Bracketed Paste kommt eine Rückfrage mit Vorschau: Was hier ankommt, wird gleich von einer Shell ausgeführt.

Paste-Injection ist ein realer Angriffsweg, kein theoretischer. Eine kopierte Zeile von einer Webseite kann ein Zeilenende und einen zweiten Befehl enthalten, den man nie gesehen hat.

Suche im Puffer

Strg+Umschalt+F. Enter blättert vorwärts, Umschalt+Enter zurück, Esc schließt — wie in jedem Editor. Auf Wunsch als regulärer Ausdruck.

Nicht auf Strg+F: Das ist in readline „ein Zeichen nach rechts“ und wird von jedem gebraucht, der ohne Pfeiltasten arbeitet.

Der Puffer und clear

Der Puffer hält 10.000 Zeilen: den Bildschirm und alles, was oben herausgelaufen ist. clear räumt beides weg — den Bildschirm und die Zeilen darüber.

Das Aufräumen macht tessera selbst, statt es der Terminalkomponente zu überlassen. Die kürzt zwar richtig, vergibt danach aber falsche Zeilennummern: Jede Zeile, die den Löschvorgang übersteht, liegt für sie weiter unten, als sie steht. Sichtbar wurde das beim Markieren — man zieht mit der Maus, und es passiert nichts; Strg+C kopiert nichts oder die falsche Zeile, und zwar bis zum nächsten Tab.

Der Mitschnitt bleibt roh. Der Eingriff betrifft nur die Anzeige. In die Mitschnittdatei geht, was die Gegenstelle geschickt hat.

Sitzungsmitschnitt

Auf Wunsch schreibt tessera jede Sitzung in eine Datei — eine je Host und Zeitpunkt. Aufgezeichnet wird nur die Ausgabe der Gegenstelle, ohne Steuersequenzen.

Eingaben mitzuschreiben hieße, ein Passwort in einer Datei zu haben, das sonst nirgends steht. Das steht auch in der Kopfzeile jeder Datei, damit man es beim Lesen nicht raten muss.

Als anderer Benutzer weiterarbeiten

Strg+Umschalt+U holt die Benutzerliste vom Host und wechselt. Nicht sudo -u X vor jeden Befehl, sondern eine Untershell: Danach läuft alles als dieser Benutzer, bis man zurückgeht.

Die Liste kommt aus getent passwd, mit /etc/passwd als Rückfall — getent kennt auch Benutzer aus LDAP und NIS. Gezeigt werden nur Konten, in denen sich arbeiten lässt: nologin und /bin/false fallen weg, Systemkonten unter UID 1000 ebenfalls. root ist die Ausnahme und steht oben.

Wie gewechselt wird, steht in den Einstellungen: sudo -u NAME -i (Vorgabe, mit der Umgebung des Ziels), sudo -u NAME -s oder su - NAME für Systeme ohne sudo.

Solange gewechselt wurde, steht ein Band über dem Terminal: deploy › root › postgres. Es nimmt Platz weg, statt sich darüberzulegen — als wer man arbeitet, ist nichts, was einen Moment später wieder verschwinden darf. Ein Klick geht eine Ebene zurück, einer wechselt weiter.

„Laut tessera“ ist wörtlich gemeint. Der Client weiß nur, was er selbst geschickt hat. Wer im Terminal von Hand exit tippt, steht danach woanders, als das Band behauptet. Deshalb lässt es sich mit einem Klick zurücksetzen, ohne dass dabei etwas gesendet wird.

Rechtsklick auf den Tab

Der Tab ist die einzige Stelle, an der Host und laufende Sitzung zugleich bekannt sind. Deshalb hängt dort, wofür man sonst zurück in die Hostliste müsste:

Umschalt+Rechtsklick öffnet am Tab dasselbe Zwischenablagemenü wie im Terminal darunter. Wer sich das für „Kopieren, Einfügen“ angewöhnt hat, trifft damit auch mal die Leiste — und dort etwas anderes zu tun wäre die Art Überraschung, die Text an die falsche Stelle bringt.

Auf einem Gerät ohne Tastatur

Alles auf dieser Seite setzt Tasten voraus, die eine Bildschirmtastatur nicht hat: Esc, Tab, die Pfeile, Strg. Auf dem Telefon liefert sie die Tastenleiste über der Tastatur nach, und Strg wird dort vorgemerkt statt gehalten.

Markiert wird mit langem Drücken — und danach hängen an beiden Enden der Markierung Griffe, mit denen sie sich größer und kleiner ziehen lässt. Ohne sie bliebe es bei dem einen Wort, das das lange Drücken erwischt hat: Umschalt zum Erweitern gibt es dort nicht, und eine Maus auch nicht. Kopiert wird über das Menü der Tastenleiste.

Was hier auf einem Kürzel liegt — Suche, Palette, Snippets, Benutzerwechsel —, steht dort im Menü der Leiste. Der ganze Ablauf steht unter Auf dem Telefon.

Schrift

tessera benennt keine Schriftfamilie, die es nicht mitliefert. Das ist kein Schönheitsthema: Eine benannte Familie, die fehlt, lässt Flutter je Schnitt unterschiedlich ersetzen. Fette oder invertierte Stellen bekommen dann eine andere Schrift als der Rest — und damit andere Zeichenbreiten. Ein Terminal, in dem nicht jede Zelle gleich breit ist, ist kaputt.

Es entscheidet die Ersatzkette: unter Windows Cascadia Mono, sonst Consolas, Menlo oder DejaVu Sans Mono.