화면의 특정 키 입력을 나타내는 일련의 문자를 어떻게 내보낼 수 있습니까? 내 말은, 바인드가 입력으로 취하는 것은 무엇입니까? 예를 들어, "s"는 "s" 키의 명백한 키 입력을 나타냅니다. "S"는 "shift+s"를 의미합니다. 그러나 다른 더 복잡한 조합의 표현은 나에게 명확하지 않으며 그에 따른 계획은 다소 모호해 보입니다.
주위를 둘러보고 있어요이전에 특정 상황에서 "tab"과 "shift+tab"의 표현이 무엇인지 물어봤습니다., 하지만 답을 찾을 수 없습니다. 그래서 전체적인 흐름을 이해하려고 노력하는 것이 가장 좋은 것 같아요. 나도 본 적 있어이것, 하지만 지금은 나에게 효과적입니다.
이 화면에서 따라야 할 구성/규칙을 설명해 줄 수 있는 사람이 있나요? 키 조합 표현을 내보내는 규칙은 무엇입니까? 화면에 따라 다르나요? 아니면 다른 소프트웨어와 공유되나요? 어쩌면 다른 GNU 소프트웨어가 있을까요? 이건 어디서 녹음됐나요?
답변1
screen
키 입력을 처리하지 않고 터미널 장치에서 읽은 문자 또는 문자 시퀀스를 처리하는 터미널 응용 프로그램과 같은 체계는 없습니다 .
터미널(또는 유사한 터미널 에뮬레이터 xterm
)은 키 입력을 문자 또는 문자 시퀀스로 변환하고 이를 라인(터미널 에뮬레이터의 경우 라인은 가상임)을 통해 시스템에 보냅니다. 최종 장치의 회선 규율은 이를 다소 수정할 수 있습니다(예: CR을 LF로 변경).
screen
터미널에 무언가를 입력할 때 어떤 문자나 문자 시퀀스가 표시되는지 확인하려면 다음을 사용하세요 od
.
od -tc
예를 들어 터미널을 입력하면 od -tc
터미널 장치에서 문자를 읽어 표준 출력에 표시합니다(또는 출력을 리디렉션하지 않는 경우 터미널 장치에 표시).인쇄 가능방법.
예를 들어, 다음은 입력할 때의 출력입니다. ( Up Enter Ctrl+D후자는 od
입력의 끝을 나타냅니다):
0000000 033 [ A \n
0000004
Up3개의 문자 ESC [
가 전송 A
되어 \r
로 변경되었습니다 \n
.
screen
실제로 호스트 터미널을 다음으로 설정합니다.날것의모드에서는 줄 규칙이 변환을 수행하지 않고 문자가 특별히 처리되지 않도록 합니다( 위에서 004
전송된 문자 와 같은 Ctrl+D).
이 모드에서 터미널이 보내는 내용을 확인하려면 다음을 수행하세요.
$ stty raw; stty min 1 time 10; dd count=1 2> /dev/null | od -tc; stty sane
0000000 033 [ A
0000003
\n
by의 출력은 for 의 출력 od
으로 변환되지 않았습니다 ( 개행이므로 터미널로 출력할 때 커서만 아래로 이동하고 캐리지 리턴( )이 필요한 줄의 시작 부분으로 이동하지 않습니다).\r\n
\n
\r
위에서는 터미널을 다음과 같이 설정했습니다.날것의read
모드뿐만 아니라 문자가 수신되면 1/1000초 후에 터미널 장치에서 시간 초과가 발생 하도록 설정합니다 (그렇지 않으면 1
반환을 완료하기 전에 많은 문자를 입력해야 하기 때문입니다).read
od
모든 터미널을 누르면 또는 또는 Tab이라고도 알려진 TAB ASCII 문자가 전송됩니다 . 모든 터미널이 동일한 콘텐츠를 전송하는 것은 아닙니다(예: 일부 터미널은 전송하고 일부는 전송하고 일부는 전송하지 않음).\t
^I
C-I
\011
Shift+TabESC
[
Z
\t
terminfo 데이터베이스는 $TERM
함수 kcbt
(뒷면 라벨, 그러나 반드시 전송되는 것은 아닙니다 Shift-Tab).
현재 터미널의 경우:
$ tput kcbt | od -tc
0000000 033 [ Z
0000003