Як використовувати "менше -F" без "-X", але все одно відображати вихід, якщо лише одна сторінка?


11

Я налаштовую пейджер Git, але у мене є деякі проблеми з цим.

Що я хочу:

  1. Завжди кольоровий вихід
  2. Прокручування тачпада або миші
  3. Закрити, якщо на одному екрані

І моя поточна конфігурація:

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

Це робить все, крім останнього.

Але, якщо я вийму -+F, у випадку одноекранного виходу не буде. Якщо я -+Xтакож видаляю, вихід повертається назад, але я не можу прокручуватися на сенсорній панелі less.

Чи існує рішення, яке може відповідати всім вимогам вище?


Це дуже цікаве питання. Коли я використовую -F(закриваю, якщо на одному екрані), я завжди це роблю в поєднанні з -X(вимкнути termcap init і de-init), але, як ви кажете, це не дозволить прокручувати мишу. (Я сумніваюсь, що прокрутка взагалі можлива -X.) Я змінив назву питання, але не соромтеся повернути це назад, якщо відчуваєте, що він втрачає занадто багато значення. :)
Wildcard

Відповіді:


8

ОНОВЛЕННЯ

tl; dr Рішення: оновлення до менше 530

Від http://www.greenwoodsoftware.com/less/news.530.html :

Не виводите послідовність init терміналу, якщо на одному екрані використовується -F та файл.

Тож із цим виправленням нам навіть не потрібно заважати визначати, чи потрібно використовувати їх -Xсамостійно, less -Fпросто ми беремося за це.

PS. Деякі інші менш конфігурації, які я використовую:

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'

Я врешті-решт закінчився написанням обгортки самостійно.

#!/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"

Користувачі BSD / OSX повинні встановити вручну gnu-sed. Дивовижна regexp, яка допомагає видалити кольорові коди, з /programming//a/18000433/2487227

Я зберег цей сценарій до /usr/local/bin/pagerі потімgit config --global core.pager /usr/local/bin/pager

Лікування пацієнтів з ОКР, ура!


Він не працюватиме, якщо у вашому файлі є загорнуті рядки.
Томас Дікі

@ThomasDickey Я вважаю, що це foldмає вирішити ... але, так, помилки, можливо ... ви могли б ласкаво надати приклад?
Фредерік Чжан

@ThomasDickey paste.kde.org/ph9vl7es5 цей для мене працював
Фредерік Чжан

foldнасправді не розуміє вкладки. Можливо, ви зможете його відремонтувати за допомогою expand. Це все ще не обробляє вбудовані послідовності втечі (що часто запитують у контексті git).
Томас Дікі

1
вкладки "працюватимуть" лише тоді, коли ширина вашого термінала буде кратною зупинці вкладок. Коли я тестував це, я помітив, що foldне коригував загорнуті лінії за допомогою пробілів, а просто знайшов найближчу точку для подрібнення. Так зовнішність буде вводити в оману.
Томас Дікі

0

Я використовую наступну обгортку як свій пейджер. Це не настільки фантазії, як інша обгортка, показана тут (адже вона завжди використовується less -Sдля обрізання довгих ліній), але це проклято просто. Здається, добре працює з 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.