"-X"없이 "less -F"를 사용하는 방법은 있지만 한 페이지 만 있으면 여전히 출력을 표시합니까?


11

Git의 호출기를 조정하고 있지만 문제가 있습니다.

내가 원하는 것은 :

  1. 항상 컬러 출력
  2. 터치 패드 또는 마우스로 스크롤
  3. 한 화면 종료

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

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

이것은 마지막 것을 제외한 모든 것을 수행합니다.

그러나를 제거하면 -+F한 화면의 경우 출력이 없습니다. -+X또한 제거 하면 출력이 다시 나타나지만의 터치 패드로 스크롤 할 수 없습니다 less.

위의 모든 요구 사항을 충족시킬 수있는 해결 방법이 있습니까?


이것은 매우 흥미로운 질문입니다. -F(한 화면이면 종료)를 사용하면 항상 -X(termcap init 및 de-init 비활성화) 와 함께 사용하지만 마우스로 스크롤 할 수는 없습니다. (스크롤이 전혀 가능 -X하지 않은지 의심 스럽습니다 .) 질문 제목을 수정했지만 너무 많은 의미를 잃어 버렸다고 생각하면 자유롭게 되돌릴 수 있습니다. :)
와일드 카드

답변:


8

최신 정보

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 : //.com/a/18000433/2487227에서 제공됩니다.

이 스크립트를 저장 /usr/local/bin/pager한 다음git config --global core.pager /usr/local/bin/pager

강박 장애 환자 치료, 만세!


파일이 줄 바꿈되어 있으면 작동하지 않습니다.
Thomas Dickey

@ThomasDickey 나는 그것을 fold처리해야한다고 생각합니다 ...하지만, 그렇습니다 , 버그는 ... 당신은 친절하게 예제를 제공 할 수 있습니까?
Frederick Zhang

@ThomasDickey paste.kde.org/ph9vl7es5 이것은 나를 위해 일했다
Frederick Zhang

fold실제로 탭을 이해하지 못합니다. 을 사용하여 복구 할 수 있습니다 expand. 그것은 여전히 ​​임베디드 이스케이프 시퀀스를 처리하지 않습니다 (종종 문맥에서 요청됩니다 git).
Thomas Dickey

1
터미널 너비가 여러 개의 탭 중지 지점 일 경우 탭은 "작동"합니다. 이것을 테스트 할 때 fold공백을 사용하여 줄 바꿈을 조정하지 않았지만 자르기에 가장 가까운 지점을 발견했습니다. 따라서 외관이 잘못 될 수 있습니다.
Thomas Dickey

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.