Je suis sur un terminal qui prend en charge l'écran alternatif qui est utilisé par less, vim, etc. pour restaurer l'affichage précédent après avoir quitté. C'est une fonctionnalité intéressante, mais cela rompt vraiment le --quit-if-one-screen
commutateur less
car dans ce cas, moins de commutateurs vers l'écran alternatif, affiche ses données, comprend qu'il n'y a qu'un seul écran et quitte, emportant le contenu de l'écran alternatif avec lui.
La solution de contournement couramment suggérée consiste à utiliser le --no-init
commutateur pour éviter d'utiliser complètement l'écran alternatif. Cependant, cela est un peu laid parce que je ne veux l'utiliser en cas moins agit en fait comme un téléavertisseur. Par conséquent, je recherche une solution pour utiliser l'écran alternatif uniquement si less ne se termine pas automatiquement.
Je vais principalement l'utiliser comme pager de Git, donc un script shell wrapper qui ne fonctionne que moins au cas où il y aurait suffisamment de sortie serait bien aussi. Au moins s'il n'y a aucun moyen de le faire sans un.
Réponses:
Depuis moins de 530 (sorti en décembre 2017),
less --quit-if-one-screen
ne passe pas à l'écran alternatif s'il lit moins d'un écran. Vous n'aurez donc pas ce problème si votre version de less est suffisamment récente.Dans les versions antérieures, less doit décider d'utiliser ou non l'autre écran au démarrage. Vous ne pouvez pas reporter ce choix à la fin.
Vous pouvez appeler moins, le laisser utiliser l'écran alternatif et transférer le contenu sur l'écran principal si less se termine automatiquement. Cependant, je ne connais aucun moyen de détecter l'arrêt automatique.
D'un autre côté, ce n'est pas si difficile d'appeler cat pour des entrées courtes et moins pour des entrées plus grandes, même en préservant la mise en mémoire tampon afin que vous n'ayez pas à attendre que l'entrée entière commence à voir des choses en moins (le tampon peut être légèrement plus grand - vous ne verrez rien avant d'avoir au moins un écran de données - mais pas beaucoup plus).
Vous préférerez peut-être voir les lignes sur l'écran principal au fur et à mesure qu'elles apparaissent et passer à l'écran alternatif si les lignes provoquent un défilement.
la source
$n
)#!/bin/bash
votre script car vous utilisez une construction spécifique à bash, car il est que votre script ne fonctionnera pas sur des systèmes (tels que Ubuntu) où/bin/sh
n'est pas bash.less
pourrait également (mais pas) avoir un moyen facultatif de quitter là où il imprime le contenu actuel de l'écran après l' envoi de la chaîne non-init. Ainsi, vous pourriez avoir l'avantage que l'écran alternatif n'encombre pas le défilement, mais laisse toujours la partie pertinente de la page de manuel ou quoi que ce soit sur le terminal après avoir quitté.GNU less v. 530 incorpore le patch Fedora mentionné par @ paul-antoine-arras et ne sortira plus la séquence d'initialisation du terminal lorsqu'il
--quit-if-one-screen
est utilisé et que l'entrée tient sur un seul écran.la source
brew install less
et en s'assurant que$LESS
F et omet X.Pour les entrées lentes, comme
git log -Gregex
, voulez-vous:A) les lignes doivent apparaître sur l'écran principal au fur et à mesure qu'elles apparaissent, puis passer à l'écran alternatif une fois que le défilement est nécessaire (de sorte que la première
$LINES
sortie apparaîtra toujours dans votre défilement); si oui, allez avec la 2e des réponses de Gilles .B) les lignes doivent apparaître sur l'écran secondaire, mais quittez l'écran secondaire et imprimez les lignes sur l'écran principal si le défilement s'avère inutile (donc aucune sortie n'apparaîtra dans votre défilement arrière si le défilement était requis); si oui, utilisez le script ci-dessous:
Il s'agit de
tee
l'entrée d'un fichier temporaire, puis une foisless
qu'il est sorti, ilcat
est du fichier temporaire s'il contient moins de lignes que la hauteur de l'écran:Utilisez-le avec
export PAGER='/path/to/script'
. Cela devrait être suffisant pour l'git
utiliser, sauf si vous l'avez déjà remplacécore.pager
.Pour les améliorations possibles, voir également ma version légèrement plus étoffée de ce script à: https://github.com/johnmellor/scripts/blob/master/bin/least
la source
Cela a longtemps été résolu dans les distributions basées sur Red Hat en modifiant le comportement de l'option -F dans
less
le code source: voir ce correctif du projet Fedora, dont la première version remonte à 2008. L'idée est simplement d'obtenir la hauteur de la (c'est-à-dire le nombre maximum de lignes pouvant être affichées simultanément) et d'omettre les séquences d'initialisation et de désinitialisation lorsque le fichier tient dans un seul écran. Ainsi, aucune option -X et -F ne peuvent être utilisées de manière cohérente quelle que soit la longueur du fichier.la source