Cada vez que alguien establece un tamaño diferente para una consola virtual, less
reconoce la resolución de la ventana (supongo que ...); de acuerdo con eso, cambia cuántas líneas de texto debe visualizar. ¿Cómo se calcula ese parámetro?
12
Respuestas:
Si está buscando una forma de verificar desde un script, puede hacer cualquiera de estos:
tput cols
ytput lines
, como sugiere manatworkPero si quieres los detalles, aquí vamos:
Para terminales virtuales (xterm, et al) hay una
ioctl()
llamada al sistema que le indicará el tamaño de la ventana. Si puede,less
utiliza esta llamada. Además, cuando cambia el tamaño de la ventana, todo lo que se está ejecutando en esa ventana recibe unaSIGWINCH
señal que le permiteless
saber que debe verificar un nuevo tamaño de ventana. Por ejemplo, comencé aless
ejecutar (como ID de proceso 16663), me conecté a élstrace
y cambié el tamaño de la ventana. Esto es lo que vi:Esto también es qué
tput cols
ytput lines
hacer detrás de escena, si pueden. Para obtener más información sobre este método, consulteman tty-ioctl
y busque TIOCGWINSZ.Sin embargo, para otros terminales, como los conectados a puertos serie, no hay forma de obtener esta información directamente. En ese caso,
less
comienza a buscar pistas en las variables de entorno.LINES
yCOLUMNS
a menudo se establecerá en las dimensiones del terminal. De hecho, si puedebash
o nozsh
puede encontrar las dimensiones del terminal, establecerá automáticamente estas variables para facilitar que los programas no tan inteligentes vean el tamaño del terminal. Sin embargo, la mayoría de los otros shells, incluidosdash
ytcsh
, no establecen estas variables.TERM
generalmente se establece en el tipo de terminal, en cuyo caso la base de datos terminfo puede contener el tamaño esperado del terminal. Sitput rows
no puede usar el IOCTL (por ejemplo, si está conectado a través de un puerto serie), volverá a los valores registrados aquí. Para un terminal cuyo tamaño puede cambiar, esto es solo una suposición y es probable que esté equivocado.Para obtener más información, consulte
man tput
el comando para controlar el terminal yman terminfo
una lista de cosas que puede indicarle al terminal que haga.fuente
Si observa el código fuente, sabrá las
less
llamadasioctl()
para recuperar el tamaño de la ventana en Linux.fuente
No estoy seguro de si esta es la información que está buscando. Supongo que
less
registra un controlador de señal paraSIGWINCH
. Cuando la dimensión del terminal cambia, obtiene unaSIGWINCH
señal y sondea la información tty para la dimensión actual del terminal. http://www.gnu.org/software/libc/manual/html_node/Miscellaneous-Signals.htmlfuente