접이식 터미널 호출기

접이식 터미널 호출기

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를 개요 모드로 전환합니다. 그런 다음 cat0개 이상의 지정된 파일이 추가됩니다. 마지막으로 편집기를 사용하면 원하는 모드에서 입력 텍스트를 볼 수 있으며 trap EXIT임시 파일을 정리할 수 있습니다.

0 파일은 표준 입력에서 읽는 것을 의미합니다.

git log | pager파이프가 키보드에 연결된 표준 입력을 방해할 수 있기 때문에 일반적 으로 잘 지원되지 않습니다. (이 경우 진단은 "emacs: 표준 입력이 tty가 아닙니다."입니다.) 우리는 stdout이 터미널, 즉 pager파이프의 끝 부분에 연결될 것으로 예상합니다. 따라서 0<&1stdout이 연결된 동일한 터미널 pty에 stdin을 연결하여 성공적인 편집 세션을 허용함으로써 이러한 상황을 복구할 수 있습니다.

관련 정보