Borrar la mitad de la pantalla desde la línea de comandos

11

¿Hay alguna forma de borrar el terminal pero en lugar de dejar el mensaje en la parte superior de la pantalla lo deja en el medio? Parece que clearbásicamente ignora todos los parámetros de la línea de comandos.

Pensé que habría alguna forma de hacer esto, tputpero no puedo encontrar una.

fizzyh2o
fuente

Respuestas:

12

Puede usar tputpara mover el cursor a una línea determinada en la pantalla, por ejemplo,

tput cup 11 0

para moverlo a la duodécima línea (los valores cuentan desde cero).

En la misma línea, puede usar tputpara borrar desde esa posición hasta el final de la pantalla, utilizando la edcapacidad. Combinatorio,

tput cup 11 0 && tput ed

podría ser lo que se quería.

Si desea ir a la mitad de la pantalla, el primer número devuelto por

stty size

es (en la mayoría de los sistemas) el número de filas de la pantalla. Agregando eso al comando:

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

El clearprograma difiere de tput ed:

  • mueve el cursor a la posición de inicio (arriba a la izquierda) y
  • se borra desde ese punto hasta el final de la pantalla.

Advertencia: en algunas plataformas tput edpuede no funcionar debido a problemas solucionados hace mucho tiempo. En esos casos, la actualización de la configuración de curses / ncurses solucionará el problema.

Thomas Dickey
fuente
en Unix, esto no me borra el texto, pero mueve el cursor
James Owers
1
Suena como un error solucionado hace diez años. Quizás es hora de actualizar las cosas.
Thomas Dickey
0

Si el recuento de líneas es impar, tput cupborra toda la página.
escribirlo así debería arreglar eso:

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

Si está interesado en limpiar la mitad inferior de la pantalla mientras mantiene el resto, esto funcionará:

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

EDITAR: para aclarar, si ejecuta seq $(stty size | cut -d' ' -f1)las otras respuestas, dejará la primera mitad de la salida, mientras que este comando dejará la segunda mitad (es decir, la salida más reciente).

GjjvdBurg
fuente