굵은 글씨와 같은 이스케이프 코드를 사용하여 맨페이지를 생성하는 방법은 무엇입니까?

굵은 글씨와 같은 이스케이프 코드를 사용하여 맨페이지를 생성하는 방법은 무엇입니까?

검사 중소스 코드lessless.man, 포함된 맨페이지( )에서 터미널 이스케이프 코드를 사용하여 굵은 텍스트를 표시하는 것을 확인했습니다 .

^[[1mNAME^[[0m
       less - opposite of more

^[[1mSYNOPSIS^[[0m
       ^[[1mless -?^[[0m
       ^[[1mless --help^[[0m
       ^[[1mless -V^[[0m
       ^[[1mless --version^[[0m
       ^[[1mless [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]^[[0m

생성하는 데 사용되는 명령은 다음과 같습니다 nroff -man.

$ head Makefile.aut 
# Makefile for authoring less.

EMAIL = [email protected]
HOMEPAGE = http://www.greenwoodsoftware.com/less
SHELL = /bin/sh
RCS = rcs
NROFF = nroff -man

그러나 를 실행하면 nroff -man less.nro백스페이스를 사용하여 (일반적인) 맨페이지 출력을 얻습니다.

N^HNA^HAM^HME^HE
       less - opposite of more

S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
       l^Hle^Hes^Hss^Hs -^H-?^H?
       l^Hle^Hes^Hss^Hs -^H--^H-h^Hhe^Hel^Hlp^Hp
       l^Hle^Hes^Hss^Hs -^H-V^HV
       l^Hle^Hes^Hss^Hs -^H--^H-v^Hve^Her^Hrs^Hsi^Hio^Hon^Hn

첫 번째 테이블을 생성하는 방법은 무엇입니까?

답변1

"제1형"의 특징은...groff. "nroff"가 래퍼가 아닌 경우 groff두 번째 형식만 표시됩니다.

이 함수는 매뉴얼 페이지에 언급되어 있습니다.grotty(타자기와 유사한 장치를 위한 groff 드라이버):

기본적으로, 나쁜 텍스트 속성(굵게, 기울임꼴, 색상)을 변경하려면 SGR 이스케이프 시퀀스(ISO 6429, ANSI 색상 이스케이프라고도 함)를 내보냅니다. 이를 통해 8개의 서로 다른 배경색과 전경색을 가질 수 있으며, 굵은 글꼴과 기울임꼴 속성도 사용할 수 있습니다.동시에 (BI 글꼴 사용).

실제로는 잘 작동하지 않습니다. 예를 들어 동일한 주석이 어떻게 처리되는지 확인하세요(이러한 시퀀스를 후처리함).여기에 잘못된 정보가 있습니다.:

기본적으로,나쁜텍스트 속성(굵게, 기울임꼴, 색상)을 변경하려면 SGR 이스케이프 시퀀스(ISO 6429, ANSI 색상 이스케이프라고도 함)를 내보냅니다. 이를 통해 8개의 서로 다른 항목을 가질 수 있습니다.M[녹색]배경M[]그리고m[빨간색] 전경 m[]색상 외에도 볼드체 및 이탤릭체 속성도 사용할 수 있습니다.BI]동시에](BI 글꼴 사용).

따라서 일부 개발자는 이를 사용하지 않기로 결정합니다(예:이 토론Emacs 메일링 리스트에서).

그러나 매뉴얼 페이지에 나와 있듯이"기본적으로". 따라서 groff가 있으면 해당 이스케이프 시퀀스를 생성해야 합니다.

패키저에서는 패치를 적용하여 프로그램을 수정할 수 있습니다. @muru의 의견에 Debian의 버전이 언급되어 있습니다(참조오류 보고서그리고포장 페이지). 패키지 변경 로그에 다음과 같이 나와 있습니다.

 -- Colin Watson <[email protected]>  Sat, 27 Jul 2002 18:41:46 +0100
groff (1.18-1) unstable; urgency=low 

  * Disable the new ANSI colour/bold/underline escapes in nroff mode,
    because most pagers either fail to cope with it or need special options
    to do so. It can be re-enabled by editing /etc/groff/man.local and
    /etc/groff/mdoc.local, or by setting the environment variable GROFF_SGR
    to something non-empty.

그러나 groff 소스는 언급하지 않습니다.GROFF_SGR;그것은 단지 참조만 합니다GROFF_NO_SGR:

./NEWS:1108:  for the GROFF_NO_SGR environment variable also.
./NEWS:1450:o If the environment variable GROFF_NO_SGR is set, SGR output is disa...
./PROBLEMS:33:  1. Set the GROFF_NO_SGR environment variable.
./doc/webpage.ms:1920:.  URL #GROFF_NO_SGR GROFF_NO_SGR
./doc/webpagewebpage.ms:1922:. nop GROFF_NO_SGR
./doc/webpagewebpage.ms:2437:.TAG GROFF_NO_SGR        
./doc/webpagewebpage.ms:2439:If the environment variable GROFF_NO_SGR is set, SGR output is 
./src/devices/grotty/grotty.man:126:.B GROFF_NO_SGR
./src/devices/grotty/grotty.man:394:.B GROFF_NO_SGR
./src/devices/grotty/tty.cpp:864:  if (getenv("GROFF_NO_SGR"))

그리고 변경 로그(ChangeLog.118)는 어떤 단서도 제공하지 않습니다.

2002-02-12  Werner LEMBERG  <[email protected]>

        * src/libs/libgroff/Makefile.sub (snprintf.o): Don't use
        $(COMPILE.c) to not include groff's assert.h.        
        * src/drivers/grotty/tty.cc (main): Add GROFF_NO_SGR environment
        variable.                           
        * NEWS, src/drivers/grotty/grotty.man: Document it. 

설정에서는 GROFF_NO_SGRSGR 시퀀스를 제공하지 않습니다(맨 페이지가 정확함). 데비안 변경 로그 주석은 /etc/groff/man.local데비안이 변수 검사를 추가한 이 블록을 참조합니다 GROFF_SGR.

.  \" Debian: Disable the use of SGR (ANSI colour) escape sequences by
.  \" grotty. 
.  if '\V[GROFF_SGR]'' \
.    output x X tty: sgr 0

환경 변수를 설정하면 굵은 SGR 시퀀스 등이 생성됩니다.

관련 정보