Не використовуйте альтернативний екран, але тільки якщо весь файл не вміститься на одному екрані


0

Я б хотів 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).


Пов’язано: superuser.com/a/106644/322531
wincent

Відповіді:


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

який перевіряє, чи є стандартним входом термінал, і якщо так, підраховує кількість рядків у файлі, порівнюючи його з номером на екрані. Варіанти поводження, звичайно, ускладнюватимуть речі.

Хтось може опублікувати більш стислий сценарій; це працює в швидкому тесті тут.



так ... але баш $LINESі $COLUMNSненадійні. Я б ніколи не використовував їх у сценарії (ymmv).
Томас Дікі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.