Effacer la moitié de l'écran de la ligne de commande

11

Y a-t-il un moyen d'effacer le terminal mais au lieu de laisser l'invite en haut de l'écran, le laisser au milieu? Il semble que clearfondamentalement, il ignore tous les paramètres de ligne de commande.

Je pensais qu'il y aurait un moyen de le faire, tputmais je n'en trouve pas.

fizzyh2o
la source

Réponses:

12

Vous pouvez utiliser tputpour déplacer le curseur sur une ligne donnée de l'écran, par exemple,

tput cup 11 0

pour le déplacer jusqu'à la douzième ligne (les valeurs comptent à partir de zéro).

Dans le même ordre d'idées, vous pouvez utiliser tputpour effacer de cette position jusqu'à la fin de l'écran, en utilisant la edcapacité. Combiner,

tput cup 11 0 && tput ed

pourrait être ce que l'on voulait.

Si vous voulez aller à mi-chemin sur l'écran, le premier chiffre renvoyé par

stty size

est (sur la plupart des systèmes) le nombre de lignes de l'écran. Ajout de cela à la commande:

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

Le clearprogramme diffère de tput ed:

  • il déplace le curseur sur la position d' origine (en haut à gauche) et
  • s'efface de ce point à la fin de l'écran.

Avertissement: sur certaines plates tput ed- formes, il est possible que certaines fonctionnalités ne fonctionnent pas en raison de problèmes résolus depuis longtemps. Dans ces cas, la mise à niveau de votre configuration curses / ncurses résoudra le problème.

Thomas Dickey
la source
sous unix, cela n'efface pas le texte pour moi, mais déplace le curseur
James Owers
1
Cela ressemble à un bug corrigé il y a dix ans. Peut-être le temps de mettre à niveau les choses.
Thomas Dickey
0

Si le nombre de lignes est impair, tput cupefface toute la page.
l'écrire comme ceci devrait corriger cela:

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

Si vous souhaitez effacer la moitié inférieure de l'écran tout en conservant le reste, cela fonctionnera:

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

EDIT: Pour clarifier, si vous exécutez seq $(stty size | cut -d' ' -f1)les autres réponses laisseront la première moitié de la sortie, tandis que cette commande laissera la seconde moitié (c'est-à-dire la sortie la plus récente).

GjjvdBurg
la source