화면의 키 입력에 대한 텍스트 표현 체계는 무엇입니까?

화면의 키 입력에 대한 텍스트 표현 체계는 무엇입니까?

화면의 특정 키 입력을 나타내는 일련의 문자를 어떻게 내보낼 수 있습니까? 내 말은, 바인드가 입력으로 취하는 것은 무엇입니까? 예를 들어, "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

\nby의 출력은 for 의 출력 od으로 변환되지 않았습니다 ( 개행이므로 터미널로 출력할 때 커서만 아래로 이동하고 캐리지 리턴( )이 필요한 줄의 시작 부분으로 이동하지 않습니다).\r\n\n\r

위에서는 터미널을 다음과 같이 설정했습니다.날것의read모드뿐만 아니라 문자가 수신되면 1/1000초 후에 터미널 장치에서 시간 초과가 발생 하도록 설정합니다 (그렇지 않으면 1반환을 완료하기 전에 많은 문자를 입력해야 하기 때문입니다).readod

모든 터미널을 누르면 또는 또는 Tab이라고도 알려진 TAB ASCII 문자가 전송됩니다 . 모든 터미널이 동일한 콘텐츠를 전송하는 것은 아닙니다(예: 일부 터미널은 전송하고 일부는 전송하고 일부는 전송하지 않음).\t^IC-I\011Shift+TabESC [ Z\t

terminfo 데이터베이스는 $TERM함수 kcbt(뒷면 라벨, 그러나 반드시 전송되는 것은 아닙니다 Shift-Tab).

현재 터미널의 경우:

$ tput kcbt | od -tc
0000000 033   [   Z
0000003

관련 정보