Я нахожусь на терминале, который поддерживает альтернативный экран, который используется less, vim и т. Д. Для восстановления предыдущего дисплея после выхода. Это хорошая функция, но она действительно отключает --quit-if-one-screen
переключатель, less
так как в этом случае менее переключается на альтернативный экран, отображает его данные, обнаруживает, что есть только один экран, и выходит, забирая с собой содержимое альтернативного экрана.
Обычно предлагаемое решение - использовать --no-init
переключатель, чтобы вообще не использовать альтернативный экран. Однако, это несколько некрасиво , потому что я действительно хочу , чтобы использовать его в случае , если менее фактически выступает в качестве пейджера. Поэтому я ищу решение использовать альтернативный экран, только если меньше не завершается автоматически.
Я в основном буду использовать это как пейджер Git, так что сценарий оболочки-обертки, который запускается меньше только в случае достаточного количества вывода, тоже подойдет. По крайней мере, если нет способа сделать это без него.
Ответы:
Поскольку меньше 530 (выпущено в декабре 2017 года),
less --quit-if-one-screen
не переключается на альтернативный экран, если на нем отображается менее одного экрана. Таким образом, у вас не будет этой проблемы, если ваша версия менее свежая.В более ранних версиях меньше приходится решать, использовать ли альтернативный экран при запуске. Вы не можете отложить этот выбор, когда он заканчивается.
Вы могли бы звонить меньше, позволить ему использовать альтернативный экран, и отслеживать контент на основном экране, если меньше завершается автоматически. Однако я не знаю, как обнаружить автоматическое завершение.
С другой стороны, не так сложно вызвать cat для коротких входов и меньше для больших входов, даже сохраняя буферизацию, так что вам не нужно ждать, пока весь ввод начнет видеть вещи в меньшем количестве (буфер может быть немного больше - вы ничего не увидите, пока у вас не будет хотя бы одного скриншота данных - но не намного).
Вы можете предпочесть видеть линии на главном экране по мере их появления и переключаться на альтернативный экран, если линии вызывают прокрутку.
источник
$n
#!/bin/bash
свой скрипт, так как вы используете специфичную для bash конструкцию, так как ваш скрипт не будет работать в системах (таких как Ubuntu), где/bin/sh
нет bash.less
также может (но не) иметь дополнительный способ выйти, где он печатает текущее содержимое экрана после отправки строки un-init. Таким образом, вы могли бы воспользоваться преимуществом альтернативного экрана, не загромождая прокрутку, но по-прежнему оставляя соответствующую часть man-страницы или что-либо еще в терминале после выхода.GNU less v. 530 включает в себя исправление Fedora, на которое ссылается @ paul-antoine-arras, и больше не будет выводить последовательность инициализации терминала, когда
--quit-if-one-screen
она используется и вход помещается на один экран.источник
brew install less
и убедившись, что у$LESS
него F и пропущено X.Для медленных входов, например
git log -Gregex
, вы хотите:A) строки, которые должны появиться на главном экране по мере их появления, затем переключитесь на альтернативный экран, когда необходима прокрутка (поэтому первый
$LINES
результат вывода всегда будет отображаться в вашем прокрутке); если так, продолжайте со вторым из ответов Жиля .B) строки, которые должны появиться на альтернативном экране, но выйдите из альтернативного экрана и распечатайте строки на главном экране, если прокрутка окажется ненужной (таким образом, никакой вывод не будет отображаться в вашем прокрутке, если требуется прокрутка); если это так, используйте скрипт ниже:
Он
tee
вводит во временный файл, а затемless
выходитcat
из временного файла, если он содержит меньше строк, чем высота экрана:Используйте это с
export PAGER='/path/to/script'
. Этого должно быть достаточно, чтобыgit
использовать его, если вы уже не переопределеныcore.pager
.Для возможных улучшений, см. Также мою чуть более конкретную версию этого скрипта по адресу: https://github.com/johnmellor/scripts/blob/master/bin/least
источник
Это долго решалось в дистрибутивах на основе Red Hat путем изменения поведения опции -F в
less
исходном коде: посмотрите этот патч из проекта Fedora, чья первая версия датируется 2008 годом. Идея состоит в том, чтобы просто получить высоту терминал (т. е. максимальное количество строк, которые могут быть отображены одновременно) и пропустить последовательности инициализации и деинициализации, когда файл помещается на одном экране. Таким образом, нет необходимости использовать опцию -X и -F для любой длины файла.источник