Estoy en un terminal que admite la pantalla alternativa que es utilizada por less, vim, etc. para restaurar la pantalla anterior después de salir. Esa es una buena característica, pero realmente rompe el --quit-if-one-screen
cambio less
ya que en ese caso menos cambia a la pantalla alternativa, muestra sus datos, descubre que solo hay una pantalla y sale, llevándose el contenido de la pantalla alternativa.
La solución alternativa comúnmente sugerida es usar el --no-init
interruptor para evitar usar la pantalla alternativa por completo. Sin embargo, esto es algo feo, ya que no quiero usarlo en caso menos en realidad actúa como un localizador. Por lo tanto, estoy buscando una solución para usar la pantalla alternativa solo si menos no termina automáticamente.
Lo usaré principalmente como el buscapersonas de Git, por lo que un script de shell de envoltura que solo se ejecuta menos en caso de que haya suficiente salida también estaría bien. Al menos si no hay forma de hacerlo sin uno.
Respuestas:
Dado que menos de 530 (lanzado en diciembre de 2017),
less --quit-if-one-screen
no cambia a la pantalla alternativa si lee menos de una pantalla completa. Por lo tanto, no tendrá este problema si su versión de less es lo suficientemente reciente.En versiones anteriores, menos tiene que decidir si usar la pantalla alternativa cuando se inicia. No puede diferir esa elección cuando termine.
Podría llamar menos, dejar que use la pantalla alternativa y colocar el contenido en la pantalla principal si menos termina automáticamente. Sin embargo, no conozco una forma de detectar la terminación automática.
Por otro lado, no es tan difícil llamar a cat para entradas cortas y menos para entradas más grandes, incluso preservando el almacenamiento en búfer para que no tenga que esperar a que toda la entrada comience a ver cosas en menos (el búfer puede ser un poco más grande, no verá nada hasta que tenga al menos una pantalla llena de datos, pero no mucho más).
Es posible que prefiera ver las líneas en la pantalla principal a medida que entran y cambiar a la pantalla alternativa si las líneas causan desplazamiento.
fuente
$n
)#!/bin/bash
su script ya que está utilizando una construcción específica de bash, ya que es su script que no funcionará en sistemas (como Ubuntu) donde/bin/sh
no es bash.less
también podría (pero no tiene) una forma opcional de salir donde imprime el contenido actual de la pantalla después de enviar la cadena un-init. Por lo tanto, podría tener el beneficio de que la pantalla alternativa no satura el desplazamiento hacia atrás, pero aún así deja la parte relevante de la página de manual o lo que sea en el terminal después de salir.GNU less v. 530 incorpora el parche Fedora al que hace referencia @ paul-antoine-arras y ya no generará la secuencia de inicialización del terminal cuando
--quit-if-one-screen
se usa y la entrada cabe en una pantalla.fuente
brew install less
y asegurarse de que$LESS
tiene F y omite X.Para entradas lentas, como
git log -Gregex
, ¿quieres:A) las líneas que aparecen en la pantalla principal a medida que entran, luego cambian a la pantalla alternativa una vez que se necesita desplazamiento (por lo que el primero
$LINES
de la salida siempre aparecerá en su desplazamiento hacia atrás); Si es así, vaya con la segunda de las respuestas de Gilles .B) aparecerán líneas en la pantalla alternativa, pero salga de la pantalla alternativa e imprima las líneas en la pantalla principal si el desplazamiento resulta innecesario (por lo que no aparecerá ningún resultado en su desplazamiento hacia atrás si fuera necesario); Si es así, utilice el siguiente script:
Es
tee
la entrada a un archivo temporal, luego, una vez queless
sale,cat
es el archivo temporal si contiene menos líneas que la altura de la pantalla:Úselo con
export PAGER='/path/to/script'
. Eso debería ser suficiente paragit
usarlo, a menos que ya lo haya anuladocore.pager
.Para posibles mejoras, vea también mi versión un poco más carnosa de este script en: https://github.com/johnmellor/scripts/blob/master/bin/least
fuente
Esto se ha resuelto durante mucho tiempo en distribuciones basadas en Red Hat modificando el comportamiento de la opción -F en el
less
código fuente: vea este parche del Proyecto Fedora, cuya primera versión se remonta a 2008. La idea es simplemente obtener la altura de la terminal (es decir, el número máximo de líneas que se pueden mostrar a la vez) y para omitir las secuencias de inicialización y desinicialización cuando el archivo cabe en una pantalla. Por lo tanto, no es necesario utilizar la opción -X y -F se puede usar de forma coherente independientemente de la longitud del archivo.fuente