"-X" 없이 "less -F"를 사용하지만 페이지가 하나만 있는 경우에도 출력을 표시하는 방법은 무엇입니까?

"-X" 없이 "less -F"를 사용하지만 페이지가 하나만 있는 경우에도 출력을 표시하는 방법은 무엇입니까?

Git의 페이지네이터를 조정하고 있는데 몇 가지 문제가 발생했습니다.

내가 원하는 것은:

  1. 항상 컬러로 출력
  2. 터치패드나 마우스를 통해 스크롤
  3. 한 화면에서 종료

내 현재 구성은 다음과 같습니다

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

마지막 항목을 제외하고는 모두 수행할 수 있습니다.

하지만 제거하면 -+F단일 화면의 경우 출력이 없습니다. 해당 항목도 삭제 하면 -+X출력이 다시 표시되지만 터치패드를 통해 스크롤할 수는 없습니다 less.

위의 요구 사항을 모두 충족하는 해결 방법이 있습니까?

답변1

고쳐 쓰다

tl;dr 솔루션: 530 미만으로 업그레이드

~에서http://www.greenwoodsoftware.com/less/news.530.html:

-F를 사용하고 파일이 한 화면에 맞으면 터미널 초기화 시퀀스가 ​​출력되지 않습니다.

-X따라서 이 수정 사항을 사용하면 우리 가 직접 사용 할지 여부를 고민할 필요도 없이 less -F그냥 처리하면 됩니다.

추신. 내가 사용하는 덜 일반적인 구성은 다음과 같습니다.

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. 놀라운 정규식은 색상 코드를 제거하는 데 도움이 됩니다.https://stackoverflow.com/a/18000433/2487227

/usr/local/bin/pager나는이 스크립트를 그때 저장했습니다git config --global core.pager /usr/local/bin/pager

강박장애 환자의 치료가 만세!

답변2

내 호출기에 다음 래퍼를 사용합니다. 여기에 표시된 다른 래퍼만큼 화려하지는 않지만(항상 긴 줄을 자르는 데 사용되므로 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

관련 정보