less
개념: 예를 들어 입력 파일을 대화식으로 "축소" 및 "확장"하는 터미널 호출기 (예: emacs 개요 모드). 축소되면 재귀 디렉터리 목록에 디렉터리 이름만 표시될 수 있습니다. 확장하면 전체 내용을 볼 수 있습니다.
또 다른 예를 들어보세요
git log | pager
사용자가 각 제출물의 제목과 세부정보 보기 사이를 대화형으로 전환할 수 있습니다.
pager xxx.c
함수는 축소/확장될 수 있으므로 사용자는 함수 정의만 보기와 함수 본문 보기 사이를 전환할 수 있습니다.
분명히 호출기는 다루고 있는 콘텐츠의 유형을 말해야 합니다(또는 자체적으로 추론해야 합니다).
그런 프로그램이 존재하나요?
답변1
이것을 "pager"라는 실행 파일에 넣으세요:
#! /usr/bin/env bash
TEMP=/tmp/file-$$.txt
trap "rm -f $TEMP" EXIT HUP INT TERM
echo '-*- outline -*-' > $TEMP
cat "$@" >> $TEMP
emacs $TEMP 0<&1
임시 텍스트 파일의 첫 번째 줄은 emacs를 개요 모드로 전환합니다. 그런 다음 cat
0개 이상의 지정된 파일이 추가됩니다. 마지막으로 편집기를 사용하면 원하는 모드에서 입력 텍스트를 볼 수 있으며 trap EXIT
임시 파일을 정리할 수 있습니다.
0 파일은 표준 입력에서 읽는 것을 의미합니다.
git log | pager
파이프가 키보드에 연결된 표준 입력을 방해할 수 있기 때문에 일반적 으로 잘 지원되지 않습니다. (이 경우 진단은 "emacs: 표준 입력이 tty가 아닙니다."입니다.) 우리는 stdout이 터미널, 즉 pager
파이프의 끝 부분에 연결될 것으로 예상합니다. 따라서 0<&1
stdout이 연결된 동일한 터미널 pty에 stdin을 연결하여 성공적인 편집 세션을 허용함으로써 이러한 상황을 복구할 수 있습니다.