나는 터미널 에뮬레이터로 gnome-terminal을 사용하고 있으며 TERM=xterm-256color
기능 키를 누를 F1때 전송되는 키 시퀀스 F2는 다음과 같이 인쇄됩니다.
$ infocmp -L1 | grep _f | sort -V
key_f1=\EOP,
key_f2=\EOQ,
key_f3=\EOR,
key_f4=\EOS,
# gap 4
key_f5=\E[15~,
# gap 5
key_f6=\E[17~,
key_f7=\E[18~,
key_f8=\E[19~, # no gap 4 here
key_f9=\E[20~,
key_f10=\E[21~,
# gap 5
key_f11=\E[23~,
key_f12=\E[24~,
# gap 4
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R, # no gap 5 here
key_f16=\E[1;2S,
# gap 4
key_f17=\E[15;2~,
# gap 5
key_f18=\E[17;2~,
…
# gap …
키 시퀀스에 간격(마커로 표시)이 있는 이유를 알고 싶습니다. "누락된" 키 시퀀스(예: \E[16~
)는 그림에 표시된 대로 사용되지 않습니다 infocmp -L1 | grep -F '\E[16~'
.
최신 키보드는 기능 키를 4개의 키 그룹으로 나누므로 이러한 그룹 간의 차이를 이해할 수 있습니다. 일부 역사적인 키보드는 일부 기능 키를 5개의 키 그룹으로 그룹화했으므로 이러한 그룹 간의 차이를 이해할 수 있습니다. 그러나 때때로(항상 그런 것은 아님) 4개의 키 그룹과 때로는(항상 그런 것은 아님) 5개의 키 그룹 사이에 간격이 있어 일부 기능 키가 1개 또는 2개의 키 그룹으로만 구성되는 경우가 있습니다. 이 레이아웃의 키보드.
이러한 키 시퀀스의 이유는 무엇입니까?키보드 레이아웃(각각 4개 또는 5개의 기능 키 포함) 간의 호환성은 거의 없어 보입니다. 왜냐하면 한 레이아웃의 공백이 다른 레이아웃의 공백을 깨뜨리고 그 반대의 경우도 마찬가지이기 때문입니다.
답변1
gnome-terminal은 가장 일반적으로 사용되는 xterm의 키보드 구성을 복제합니다.
차례로 xterm은 DEC VT220과 일치하도록 키 할당을 사용합니다.LK201 키보드. 이것들은 대부분의 격차를 해소합니다. F1-F4 및 F13-F16에 사용된 다른 인코딩은 VT220의 인코딩이 아닙니다. VT220의 F1-F5는현지의기본값은 기능 키입니다(일반적으로 호스트에 아무 것도 보내지 않습니다).
이에 비해 F1~F4 코드는 다음과 같습니다.VT100 숫자 키패드의 맨 윗줄X 키보드 구성에는 적합하지 않습니다.숫자 키패드의 첫 번째 키(유지되었습니다. F13-F16은 이 해결 방법을 xterm의 수정된 기능 키에 적용합니다(예:옮기다 수정자;2
xterm이 키 시퀀스의 일부를 보내도록 합니다 ).
일부 VT220 키에는 다른 이름이 있습니다(예: F16은돕다키), 그러나 xterm은 이러한 이름을 사용하지 않습니다(응용 프로그램별로 다르기 때문입니다). 터미널 설명에 이러한 이름을 사용하면 목록에 공백이 더 많아집니다. 그러나 VT220 특유의 차이는 DEC 하드웨어 터미널의 기능 키 세트와 관련이 있습니다.
$ infocmp -L1 | grep _f | sort -V
key_f1=\EOP,
key_f2=\EOQ,
key_f3=\EOR,
key_f4=\EOS,
# gap 4
key_f5=\E[15~,
# gap 5
key_f6=\E[17~,
key_f7=\E[18~,
key_f8=\E[19~, # no gap 4 here
key_f9=\E[20~,
key_f10=\E[21~,
# gap 5
key_f11=\E[23~,
key_f12=\E[24~,
# gap 4
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R, # no gap 5 here
key_f16=\E[1;2S,
# gap 4
key_f17=\E[15;2~,
# gap 5
key_f18=\E[17;2~,
…
xterm-r6 터미널 설명에는 F1-F4(및 F13-F16)에 대한 이러한 변경 사항이 없지만 예상되는 간격이 표시됩니다.
> infocmp -L1 xterm-r6 | grep key_f | sort -V
key_f1=\E[11~,
key_f2=\E[12~,
key_f3=\E[13~,
key_f4=\E[14~,
key_f5=\E[15~,
...
key_f6=\E[17~,
key_f7=\E[18~,
key_f8=\E[19~,
key_f9=\E[20~,
key_f10=\E[21~,
key_f11=\E[23~,
key_f12=\E[24~,
key_f13=\E[25~,
key_f14=\E[26~,
...
key_f15=\E[28~,
key_f16=\E[29~,
...
key_f17=\E[31~,
key_f18=\E[32~,
key_f19=\E[33~,
key_f20=\E[34~,
key_find=\E[1~,
(gnome-terminal은 거의 모든 문자 세트 기능이 부족하기 때문에 실제로 VT220 에뮬레이터는 아니지만 xterm-imitator입니다.)