
Eine Funktion der Emacs-Puffer (sogar ansi-term
, shell
, und eshell
), die mir sehr gefällt, ist die Möglichkeit, C-l
die aktuelle Zeile im Terminal zu „zentrieren“, sodass die obere Hälfte des Bildschirms noch einen Teil der vorherigen Ausgabe enthält.
Es scheint, als würde ein Standardterminal (ich bin mir nicht sicher, wie der Standard heißt) die aktuelle Zeile an den oberen Rand des Fensters verschieben, wenn C-l
gedrückt wird. Gibt es eine allgemeine Möglichkeit, die aktuelle Zeile in die Mitte des Bildschirms zu verschieben? Wenn nicht, gibt es eine Möglichkeit, dies speziell für iterm2, Terminal oder einen Terminalemulator zu tun, der auf OS X portiert wurde?
Antwort1
Die meisten Terminalemulatoren können dies, es ist jedoch mit etwas Arbeit verbunden:
- Angenommen, die Zeile, die Sie verschieben möchten, befindet sich am unteren Bildschirmrand.
- Wenn Sie diese Zeile nach oben verschieben möchten, scrollen (oder „indizieren“) Sie die Zeile, indem Sie eine Escape-Sequenz an die unterste Reihe senden und (mitzählen!) die Zeile um die Anzahl der Zeilen nach oben verschieben, um die Sie scrollen möchten.
- Beim Scrollen werden alle Zeilen auf dem Bildschirm verschoben. Sie können die Anzahl der verschobenen Zeilen begrenzen, indem Sie einen Scrollbereich festlegen. Auf diese Weise können Sie verhindern, dass die Zeilen in der oberen Hälfte des Bildschirms verschwinden. Die Zeilen zwischen der ursprünglichen Position Ihrer Linie und ihrem Ziel verschwinden jedoch.
Das verschiebt die Zeile nur nach oben. Sie können eine Zeile auch nach unten verschieben, indem Sie die "umgekehrte Indizierung" verwenden. Diese Operationen sind übrigens nicht imStandardECMA-48, aber in allem ähnlich wie xterm (basierend auf DEC vt100). ansi-term
unterstützt Scrollen/Indizieren.
Schließlich geht es nur nach oben oder unten. Um eine Zeile nach links/rechts zu verschieben, senden Sie Escape-Sequenzen zum Einfügen oder Löschen von Zeichen, während sich der Cursor am Zeilenanfang befindet.
Diese Escape-Sequenzen sind in der terminfo(5)
Manualpage dokumentiert. Ich habe diese hier erwähnt:
csr
(Scrollbereich festlegen)
ind
(Index)
rin
(Index umkehren)
cup
(Cursorposition)
ich
(Zeichen einfügen)
dch
(Zeichen löschen)
Weiterführende Literatur: