Mi guión hace algo como:
while :;
clear
do_a_lot_of_output_here
sleep 1
done
¿Hay alguna opción para evitar que la pantalla parpadee cuando estoy limpiando y produciendo? Quiero hacerlo como al watch
mando (pero está escrito en C
). ¿Algún consejo?
clear | hexdump -C
00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J|
00000007
PD. Solo estoy usando bash
.
clear | hexdump -C
?echo -en "\ec"
Flash también?Respuestas:
El parpadeo se produce porque el script borra toda la pantalla. Si pinta sobre el texto existente y se borra solo según sea necesario, entonces no habrá parpadeo.
Aquí hay un ejemplo:
Hace esto:
ed
capacidad de su terminal para imprimir desde la ubicación actual hasta el final de la pantalla.Si desea manejar una pantalla de tamaño variable, puede mover las asignaciones hacia
ROWS
yCOLS
dentro del bucle externo, por ejemplo,porque
tput
pide el tamaño de pantalla actual del sistema.Otras lecturas:
terminfo
- base de datos de capacidad terminaltput
,reset
- inicializar un terminal o consultar la base de datos terminfofuente
#!/bin/bash
y desean usarwatchit
incrustado en un pequeño script independiente con algunas funciones, puede hacerloexport -f function_name; watchit function_name
.head
). Parece que el problema es un error off-by-one (al menos en mi configuración: sesión ssh en paneles divididos, iTerm2) al calcular el número de filas.ROWS=`expr $(tput lines) - 1`
Abordó esto perfectamente.Una forma de ayudar a evitar el parpadeo es obtener toda la salida antes de borrar la pantalla para que haya un tiempo mínimo entre borrarla y volver a dibujarla. Esto es similar al concepto de doble búfer:
Esto no elimina por completo el parpadeo, pero ocurre con mucha menos frecuencia en mi experiencia.
fuente
clear
en el búfer, es deciroutput=$(clear; do_a_lot_of_output_here)
.El parpadeo es un resultado inevitable de borrar la pantalla cada vez que se rodea el bucle. Puede mover el cursor a la parte superior de la pantalla y sobrescribir partes de su salida anterior.
Este script dejará artefactos si su salida se reduce. Tampoco es muy probable que sea portátil. Solo lo probé con urxvt, xterm y st.
fuente
tput clear
con los mismos resultados (parpadeando)tput ed
. Pero causa parpadeotput ed
justo antes de lado_a_lot...
línea, veo parpadear en urxvt pero no xterm o st.Como una extensión de la respuesta de Cristian, hice la siguiente función bash que funciona si la ventana de la consola es más pequeña que la salida del comando:
Esto le permite pasar cualquier comando al observador. Si está usando git, use
git config --global color.status always
y luego:Mostrará una salida de estado de git siempre actualizada.
fuente