Bildschirmbeschriftung in der ersten Zeile des Terminals anzeigen

8

Wenn ich ein neues Terminal starte, befindet sich die Eingabeaufforderung in der ersten Zeile. Nachdem Sie eine Weile gearbeitet haben (oder einen Befehl ausgeführt haben, der eine Ausgabe erzeugt), befindet sich die Eingabeaufforderung in der letzten Zeile. Dort bleibt es während des Restes der Sitzung, es sei denn, ich drücke Ctrl- l, laufe clearoder resetähnliches.

Um ein gewisses Maß an Kontinuität in der Arbeit zu erreichen, verwende ich screeneinen Trick, um den Sitzungsnamen in der Beschriftung anzuzeigen (ich verwende den letzten mit den beiden screenBefehlen in .screenrc).

Um kognitiven Overhead durch Überfüllung des Arbeitsbereichs zu vermeiden, möchte ich, dass diese Beschriftung oben im Terminal angezeigt wird.

l0b0
quelle

Antworten:

3

Sie haben Glück, der Bildschirm berücksichtigt Befehle zum Speichern und Wiederherstellen. Mit Bash kann es also gemacht werden.

Dies gibt Anweisungen zum Bewegen des Cursors mit speziellen Escape-Sequenzen. Sie können "Hallo Welt!" in die obere linke Ecke mit diesem:

echo -e "\033[s\033[2;0HHello World!            \n                        \033[u"

Erklärt: Das Zeichen \033[sspeichert die aktuelle Cursorposition, was wir wollen. Die Größe der B / C-Bildschirmterminals kann sehr unterschiedlich sein. Dann \033[2;0bewegt sie den Cursor auf die dritte Zeile zu dem ersten Zeichen (wir beginnen das Zählen in der linken oberen Ecke und mit 0). Dann kommt der Text und eine kleine Illustration dessen, was möglich ist. Schließlich \033[usetzt der Code den Cursor wieder an die Stelle, an der er \033[sausgegeben wurde.

In diesem Beispiel wird der Cursor in die zweite Zeile bewegt, da bei der Ausgabe des Befehls 2 Zeilenumbrüche gedruckt werden, sodass die aktuelle dritte Zeile die erste Zeile ist.

Sie können dies zusammen mit der Sitzungsbeschriftung verwenden, die Sie bereits anhand der bereits verknüpften Erklärung erhalten.

Bananguin
quelle
2
Sie können tputdies terminalunabhängig tun, ohne diese Escape-Codes fest codieren zu müssen. Zum Beispiel:echo -n "$(tput sc)$(tput cup 0 0)----Hello, world----$(tput rc)"
Jim Paris
Ich bin mir sicher, dass jede Shell eine Möglichkeit hat, diese Zeichen zu emittieren, aber ich kenne nur bash :-) Danke für die Eingabe von tput, das wusste ich nicht.
Bananguin
@ user1129682: Ich habe es versucht screen $SHELL -c 'echo -n "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'und screen $SHELL -c 'screen -X caption always "$(tput sc)$(tput cup 0 0)${STY}$(tput rc)"'aber keiner hat funktioniert. Irgendwelche Ideen?
10b0
Kommt darauf an was du willst. Wenn Sie nur den Titel aus der aktuellen Sitzung in Ihrer Bildunterschrift entfernen möchten, würden Sie dies tun screen -X caption always; screen -X caption string "%t". Wenn Sie den aktuellen Titel in der oberen linken Ecke haben möchten, müssen Sie Ihre PS1Umgebungsvariable ändern , um die tputMagie einzuschließen .
Bananguin
@ l0b0: und wenn ich das noch einmal lese, könnte tput cup 0 0 das doppelte Zeilenumbruchproblem haben, weshalb ich meinen Text in die dritte Zeile setze, nicht in die erste. Haben Sie versucht, tput cup 2 0 oder 0 2 ... noch nicht auf tput nachgelesen ...
Bananguin