Я хотел бы less чтобы выйти немедленно, если весь файл может быть отображен на одном экране. Для этого я бы использовал опцию -F :

-F or --quit-if-one-screen

    Causes less to automatically exit if the entire file can be
    displayed on the first screen.

Гвоздь: когда файл длиннее одного экрана, я бы хотел использовать альтернативный экран. Поэтому я не хочу передавать -X:

-X or --no-init

    Disables sending the termcap initialization and deinitialization
    strings to the terminal. This is sometimes desirable if the
    deinitialization string does something unnecessary, like
    clearing the screen.

Обратите внимание, что если вы установите -F без -X , то при выполнении команды less some-short-file не будет видно видимых результатов, поскольку он появляется только на альтернативном экране, который исчезает, как только выходит less , что происходит немедленно.

Почему я хочу это: у меня есть привязки tmux, настроенные так, что я могу прокручивать колесико мыши, когда в альтернативном режиме экрана (то есть в less и в вещах, которые используют его как пейджер: git , ack , ag , man т.д.).

Интересно, если мне придется заменить less каким-нибудь скриптом-оберткой или функцией, которая проверяет высоту экрана и условно решает, вызывать ли less -FX или less , или будет ли такая вещь слишком сложной для реализации при чтении из канала (в этом случае возможно, придется сделать что-то попроще, например, по умолчанию less).

1 ответ1

1

Вопрос, кажется, содержит всю необходимую информацию. Простой скрипт-обертка будет выглядеть примерно так:

#!/bin/bash
if [ -t 0 && $# = 1 ]
then
    want=$(wc -l "$1" |sed -e 's/[[:space:]].*//')
    have=$(stty -a |grep -E " rows [[:digit:]]" | sed -e 's/^.* rows //' -e 's/;.*//')
    if [ $want -le $have ]
    then
        less -FX "$1"
    else
        less "$1"
    fi
else
    less "$1"
fi

который проверяет, является ли стандартный ввод терминалом, и, если да, подсчитывает количество строк в файле, сравнивая его с числом на экране. Опции обработки, конечно, усложнят ситуацию.

Кто-то может опубликовать более краткий сценарий; это работает в быстром тесте здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .