¿Cómo utilizar "menos -F" sin "-X", pero aún mostrar salida si solo una página?

11

Estoy ajustando el localizador de Git, pero tengo algunos problemas con él.

Lo que quiero es:

  1. Salida siempre coloreada
  2. Desplazarse por el panel táctil o el mouse
  3. Salir si una pantalla

Y mi configuración actual es:

$ git config --global core.pager
less -+F -+X -+S

Esto hace todo excepto el último.

Pero, si elimino -+F, no habrá salida en caso de una pantalla. Si elimino -+Xtambién, la salida está de vuelta pero no puedo desplazarme con el panel táctil less.

¿Existe una solución que pueda cumplir con todos los requisitos anteriores?

Frederick Zhang
fuente
Esta es una pregunta muy interesante. Cuando uso -F(salir si hay una pantalla) siempre lo hago en combinación con -X(deshabilitar termcap init y de-init), pero como usted dice, eso no permitiría desplazarse con el mouse. (Dudo que sea posible desplazarse con -X.) Modifiqué el título de la pregunta, pero siéntase libre de retroceder si siente que pierde demasiado significado. :)
Comodín el

Respuestas:

8

ACTUALIZAR

tl; dr Solución: actualice a menos 530

Desde http://www.greenwoodsoftware.com/less/news.530.html :

No envíe la secuencia de inicio de terminal si usa -F y el archivo se ajusta en una pantalla.

Entonces, con esta solución, ni siquiera tenemos que molestarnos en determinar si la usamos -Xsolos, less -Fsolo nos encargamos de eso.

PD. Algunas otras configuraciones menos que uso:

export PAGER='less -F -S -R -M -i'
export MANPAGER='less -R -M -i +Gg'
git config --global core.pager 'less -F -S -R -i'
#alias less='less -F -S -R -M -i'

Finalmente terminé escribiendo un envoltorio por mi cuenta.

#!/usr/local/bin/bash

# BSD/OSX compatibility
[[ $(type -p gsed) ]] && SED=$(type -p gsed) || SED=$(type -p sed)
CONTEXT=$(expand <&0)
[[ ${#CONTEXT} -eq 0 ]] && exit 0
CONTEXT_NONCOLOR=$( $SED -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" <<< "$CONTEXT")
LINE_COUNT=$( (fold -w $(tput cols) | wc -l) <<< "$CONTEXT_NONCOLOR" )

[[ $LINE_COUNT -ge $(tput lines) ]] && less -+X -+S -R <<< "$CONTEXT" || echo "$CONTEXT"

Los usuarios de BSD / OSX deben instalar manualmente gnu-sed. La increíble expresión regular, que ayuda a eliminar los códigos de color, es de /programming//a/18000433/2487227

He guardado este script en /usr/local/bin/pagery luegogit config --global core.pager /usr/local/bin/pager

El tratamiento para pacientes con TOC, ¡hurra!

Frederick Zhang
fuente
No funcionará si su archivo tiene líneas ajustadas.
Thomas Dickey
@ThomasDickey Creo que eso folddebería manejar eso ... pero, sí, los errores tal vez ... ¿podrían dar un ejemplo?
Frederick Zhang
@ThomasDickey paste.kde.org/ph9vl7es5 esto funcionó para mí
Frederick Zhang
foldRealmente no entiende las pestañas. Es posible que pueda repararlo usando expand. Eso todavía no manejará secuencias de escape incrustadas (que a menudo se solicitan en el contexto de git).
Thomas Dickey
1
las pestañas solo "funcionarán" cuando el ancho de su terminal sea un múltiplo de las tabulaciones. Cuando probé esto, noté que foldno ajustaba las líneas ajustadas usando espacios, sino que simplemente encontraba el punto más cercano para cortar. Entonces la apariencia será engañosa.
Thomas Dickey
0

Yo uso el siguiente contenedor como mi localizador. No es tan elegante como el otro contenedor que se muestra aquí (porque siempre se usa less -Spara truncar líneas largas), pero es muy simple. Parece funcionar bastante bien con iTerm2.

#!/bin/bash
set -e

text=$(</dev/stdin)
text_lines=$(echo "${text}" | wc -l)
term_lines=$(tput lines)

if [[ $text_lines -lt $term_lines ]]; then
    echo "${text}"
else
    echo "${text}" | less -S -R
fi
superbatfish
fuente