글쎄, 이것은 성가신 일입니다. 무슨 일이야? ( tmux
아래 iTerm.app
)
$ echo test > test ; echo $TERM
screen
그리고 약간의 기록으로
$ script withscreen
Script started, output file is withscreen
$ less -p test test
... q to quit and then exit the shell session ...
$ script withxterm
Script started, output file is withxterm
$ TERM=xterm less -p test test
... q and exit again ...
이제 우리는 사용 된 코드를 봅니다.
$ grep test withscreen | hexdump -C
00000000 24 20 6c 65 73 73 20 2d 70 20 74 65 73 74 20 74 |$ less -p test t|
00000010 65 73 74 0d 0d 0a 1b 5b 33 6d 74 65 73 74 1b 5b |est....[3mtest.[|
00000020 32 33 6d 0d 0a 1b 5b 35 3b 31 48 1b 5b 33 6d 74 |23m...[5;1H.[3mt|
00000030 65 73 74 1b 5b 32 33 6d 0d 0a 1b 5b 33 38 3b 31 |est.[23m...[38;1|
00000040 48 1b 5b 33 6d 74 65 73 74 20 28 45 4e 44 29 1b |H.[3mtest (END).|
00000050 5b 32 33 6d 1b 5b 4b 0d 1b 5b 4b 1b 5b 3f 31 6c |[23m.[K..[K.[?1l|
00000060 1b 3e 24 20 5e 44 0d 0d 0a |.>$ ^D...|
00000069
$ grep test withxterm | hexdump -C
00000000 24 20 54 45 52 4d 3d 78 74 65 72 6d 20 6c 65 73 |$ TERM=xterm les|
00000010 73 20 2d 70 20 74 65 73 74 20 74 65 73 74 0d 0d |s -p test test..|
00000020 0a 1b 5b 37 6d 74 65 73 74 1b 5b 32 37 6d 0d 0a |..[7mtest.[27m..|
00000030 1b 5b 35 3b 31 48 1b 5b 37 6d 74 65 73 74 1b 5b |.[5;1H.[7mtest.[|
00000040 32 37 6d 0d 0a 1b 5b 33 38 3b 31 48 1b 5b 37 6d |27m...[38;1H.[7m|
00000050 74 65 73 74 20 28 45 4e 44 29 1b 5b 32 37 6d 1b |test (END).[27m.|
00000060 5b 4b 0d 1b 5b 4b 1b 5b 3f 31 6c 1b 3e 24 20 65 |[K..[K.[?1l.>$ e|
00000070 78 69 74 0d 0d 0a |xit...|
00000076
$
xterm 컨트롤 시퀀스 문서 를 참조 하여 1b 5b ...
코드를 더 이해하기 쉽게 만들거나, 어떤 시퀀스가 강조 표시의 원인 인지 알기 위해 시퀀스를 수동으로 둘러 볼 수 있습니다.TERM=xterm
$ printf "\033[7mtest\033[27m\n"
test
하는 TERM=screen
경우는하지 않는, 역의 제어 시퀀스 워드 프로세서 당
ESC [
Control Sequence Introducer (CSI is 0x9b).
...
CSI Pm m Character Attributes (SGR).
...
Ps = 7 -> Inverse.
...
Ps = 2 7 -> Positive (not inverse).
그 문서 근처에서 우리는 screen
터미널 \033[3m
이 이탤릭체로되어 있고 이탤릭체로 되어 \033[23m
있지 않다는 것을 알게 될 것입니다 .
이 결과는 몇 가지 옵션을 제공합니다. 기울임 꼴 텍스트를 표시하도록 터미널을 구성하거나 screen
대신 기울임 꼴 대신 역 코드를 사용하도록 터미널 을 만들 수 있습니다. ( less(1)
문서 에서 파고 들었던 일부 는 명확한 "이탤릭체 대신 역으로 사용"노브를 표시하지 않았습니다.) (또한 일부 터미널은 X를 Y로 변환하는 것을 지원할 수 있습니다. 자세한 내용은 터미널 문서를 확인하십시오). 다른 터미널 에뮬레이터를 시도하고 그 기능을 확인하십시오 ...)
와우 이탤릭체로 된 텍스트는 보기 흉하다 . 대신 코드 screen
사용을 반대로 바꾸어 봅시다 . 여기에는 terminfo
(또는 가능한 termcap
) 데이터베이스가 포함되며 ,이 데이터베이스는 다음을 통해 내보내고 infocmp(1)
컴파일 할 수 있습니다.tic(1)
$ TERM=screen infocmp > ti.screen ; TERM=xterm infocmp > ti.xterm
$ fgrep '\E[7' ti.xterm
rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM,
smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m,
$ fgrep rev= ti.screen
nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
$ fgrep '\E[3m' ti.screen
smso=\E[3m, smul=\E[4m, tbc=\E[3g,
$
내가 추측에는 요 그래서이 smso
주어진 사용되는 xterm
용도 \E[7m
와 screen
\E[3m
; 이것에 따르면 terminfo(5)
"스탠드 아웃 모드"이고 반대와 짝을 이룹니다 rmso
. 그것들을 xterm
사용 하는 것으로 변경합시다 ...
$ TERM=screen infocmp | sed -e 's/smso=[^,]*/smso=\\E[7m/;s/rmso=[^,]*/rmso=\\E[27m/' > foo
$ tic -o ~/.terminfo foo
$ rm foo
이봐, 이제 더 좋아 보인다 (그러나 모든 파일 에서 screen
또는 다른 terminfo
파일 을 수행해야 합니다 ...)