Löschen Sie die Hälfte des Bildschirms über die Befehlszeile

11

Gibt es eine Möglichkeit, das Terminal freizugeben, aber anstatt die Eingabeaufforderung oben auf dem Bildschirm zu belassen, bleibt es in der Mitte? Es sieht aus wie clearignoriert grundsätzlich alle Befehlszeilenparameter.

Ich dachte, es gäbe eine Möglichkeit, dies zu tun tput, kann aber keine finden.

fizzyh2o
quelle

Antworten:

12

Sie können tputden Cursor auf eine bestimmte Zeile im Bildschirm bewegen, z.

tput cup 11 0

um es in die zwölfte Zeile zu verschieben (Werte zählen von Null).

In diesem Sinne können Sie tputmithilfe der edFunktion von dieser Position bis zum Ende des Bildschirms löschen . Kombinieren,

tput cup 11 0 && tput ed

könnte sein, was gewollt war.

Wenn Sie zur halben Markierung auf dem Bildschirm wechseln möchten, wird die erste Zahl von zurückgegeben

stty size

ist (auf den meisten Systemen) die Anzahl der Bildschirmzeilen. Hinzufügen des Befehls zum Befehl:

tput cup $(stty size|awk '{print int($1/2);}') 0 && tput ed

Das clearProgramm unterscheidet sich von tput ed:

  • es bewegt den Cursor in die Heimat Position (oben links) und
  • wird von diesem Punkt bis zum Ende des Bildschirms gelöscht.

Vorsichtsmaßnahme: Auf einigen Plattformen tput edfunktioniert dies möglicherweise aufgrund von Problemen, die vor langer Zeit behoben wurden, nicht. In diesen Fällen wird das Problem durch ein Upgrade Ihrer Curses / Ncurses-Konfiguration behoben.

Thomas Dickey
quelle
Unter Unix löscht dies nicht den Text für mich, sondern bewegt den Cursor
James Owers
1
Klingt nach einem Fehler, der vor zehn Jahren behoben wurde. Vielleicht ist es Zeit, Dinge zu aktualisieren.
Thomas Dickey
0

Wenn die Zeilenanzahl ungerade ist, wird tput cupdie gesamte Seite gelöscht.
Wenn Sie es so schreiben, sollte dies Folgendes beheben:

tput cup $(($(stty size|awk '{print $1}')/2)) 0 && tput ed
Farzad Sadeghi
quelle
-1

Wenn Sie daran interessiert sind, die untere Hälfte des Bildschirms zu löschen, während Sie den Rest beibehalten, funktioniert dies:

half=$(stty size | awk '{print int($1/2)-1;}'); for i in `seq ${half}`; do echo '' ; done && tput cup ${half} 0 && tput ed

BEARBEITEN: Wenn Sie seq $(stty size | cut -d' ' -f1)die anderen Antworten ausführen, wird die erste Hälfte der Ausgabe verlassen, während dieser Befehl die zweite Hälfte (dh die letzte Ausgabe) verlässt.

GjjvdBurg
quelle