LESS_TERMCAP_ * 변수에 대한 설명서?


답변:


45

Termcap 은 Less가 터미널에 액세스하는 데 사용하는 라이브러리입니다. Termcap은 Terminfo 로 대체되어 더 이상 사용되지 않지만 Terminfo는 애플리케이션에 대한 Termcap 호환성 인터페이스를 제공합니다. Termcap 인터페이스의 내용이 적고이를 사용합니다.

Termcap 라이브러리는 터미널 기능에 대한 설명입니다. 각 시설은 2 자리 (또는 일반적으로 2 자리) 코드로 식별됩니다. 예를 들어, hc하드 카피 터미널 (예 : 스크린이 아닌 프린터)을 식별합니다. co열 수입니다. md굵은 텍스트 표시를 시작합니다. 각 기능에는 값이 있으며,이 값은 부울 ( hc), 정수 ( co) 또는 문자열 ( md)이 될 수 있습니다. 많은 문자열은 애플리케이션이 특정 효과를 얻기 위해 터미널로 보낼 수있는 이스케이프 시퀀스입니다.

왜 이스케이프 시퀀스? 터미널과 응용 프로그램 사이의 인터페이스는 문자 스트림이기 때문에 (보다 정확하게는 각 방향에서 하나의 문자 스트림 : 사용자 입력 용, 하나는 표시 할 출력용)입니다. 응용 프로그램이 문자를 터미널에 쓰면 일반적으로 표시됩니다. 일부 문자는 동작이 다릅니다. 제어 문자이며 커서 이동, 표시 속성 전환 등과 같은 작업을 수행합니다. 제어 문자보다 명령이 훨씬 많으므로 대부분의 명령은 이스케이프 시퀀스로 시작됩니다. 특수 문자 (종종 이스케이프 문자, 따라서 이름).

예를 들어 Less가 굵은 텍스트를 표시하려고하면 md기능 값을 찾습니다 . 이것은 문자열이며 Less는 터미널에 씁니다. 터미널은이 문자열을 이스케이프 시퀀스로 인식하고 내부 문자를 조정하여 후속 문자가 굵게 표시되도록합니다.

하드웨어 터미널 초기에는 브랜드마다 다른 이스케이프 시퀀스와 기능이있었습니다. Termcap 데이터베이스와 인터페이스는 응용 프로그램이 모든 터미널 모델에 대해 알 필요가 없도록 발명되었습니다. 오늘날 대부분의 터미널 에뮬레이터는 매우 유사한 기능을 가지고 있지만 Termcap 또는 Terminfo 데이터베이스는 여전히 약간의 차이를 처리하는 데 유용합니다.

LESS_TERMCAP_*변수는 환경에서 사용하거나 설정할 수 있습니다 .lesskey파일 . 터미널 기능에 대한 대체 값으로 Less를 제공합니다. Less는 터미널 기능을 사용하려고 할 때 (예 : 굵은 체로 전환) 먼저 LESS_TERMCAP_md변수 가 있는지 확인 합니다. 이 변수가 존재하면 Less는이 값을 이스케이프 시퀀스로 사용하여 굵게 전환합니다. 그렇지 않은 경우 Termcap 데이터베이스의 값을 사용합니다. 이 메커니즘을 통해 사용자는 Less에 대한 Termcap 데이터베이스 설정을 무시할 수 있습니다.

가장 유용한 LESS_TERMCAP_*설정은 이스케이프 시퀀스입니다. 속성을 다른 속성에 매핑 할 수 있습니다. 이 tput명령을 사용하여 시스템의 Termcap 또는 Terminfo 데이터베이스 에서 현재 터미널의 기능 값을 찾을 수 있습니다 . 터미널에 의존하지 않는다면 이스케이프 시퀀스를 직접 사용할 수 있습니다. 예를 들어,이 설정은 굵게 표시되도록 지시 할 때 Less에 굵은 빨간색으로 표시합니다.

LESS_TERMCAP_md=$(tput md; tput AF 1)

또는 tput명령이 Termcap 이름을 지원하지 않는 경우 :

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

Man은 대담하고 이탤릭체 만 표현할 수있는 매우 간단한 서식으로 적은 텍스트를 보냅니다. 또한 Less는 검색 결과를 강조 표시하고 하단에 모드 행을 표시하는 등 내부 용도로 다양한 형식 지정 기능을 사용합니다. Less가 사용하는 이스케이프 시퀀스 중 일부는 다음과 같습니다 (재 맵핑하는 것이 합리적으로 유용한 기능 만 나열합니다).

termcap terminfo  
ks      smkx      make the keypad send commands
ke      rmkx      make the keypad send digits
vb      flash     emit visual bell
mb      blink     start blink
md      bold      start bold
me      sgr0      turn off bold, blink and underline
so      smso      start standout (reverse video)
se      rmso      stop standout
us      smul      start underline
ue      rmul      stop underline

출력을 컬러로 표시하려면 setaf기능을 사용하십시오 (또는 AFTermcap과 함께).

LESS_TERMCAP_*설정은 언급되지 않은 LESS문서. 내가 제공 할 수있는 가장 좋은 참고 자료는 여기 내 대답 입니다.


8
감사. 또한 소스 코드 less를 간단히 살펴보고 LESS_TERMCAP_DEBUG를 무언가로 설정하고 man을 열면 man 페이지의 소스와 사용되는 모든 기능 태그와 같은 것을 볼 수 있음을 알았습니다. 설정하려는 항목을보다 쉽게 ​​결정할 수 있습니다.
anselm

1
이스케이프 문자 대신 모든 환경 변수 를 설정하는 방법에 대한 이 답변 을 참조하십시오 . LESS_TERMCAP_*tput
Kaushal Modi

3

Gilles의 답변 은 훌륭하지만이 점이 궁금합니다.

Termcap은 Terminfo로 대체되어 더 이상 사용되지 않습니다.

  1. Termcap이 더 이상 사용되지 않으면 Terminfo로 전환하고 싶습니다

  2. 또한 버그를 발견했기 때문에 Termcap에서 전환하고 싶습니다. termcap 변수를 ~/.profile비슷한 곳에 넣으십시오 .

    export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
    export LESS_TERMCAP_se=$(printf '\33[m')

    그런 다음을 입력 set하면 Termcap 변수가 색상 출력을 엉망으로 만듭니다.

Terminfo로 전환하기 위해 파일을 만들 수 있습니다 xterm-pretty.ti.

xterm-pretty|xterm with pretty colors,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

파일을 컴파일하고 설치하십시오.

tic xterm-pretty.ti

라인 추가 ~/.profile또는 유사 :

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