Ctrl-PageUp을 누를 때 xterm-termite가 "5~"를 인쇄하는 이유는 무엇입니까?

Ctrl-PageUp을 누를 때 xterm-termite가 "5~"를 인쇄하는 이유는 무엇입니까?

xterm-termite를 사용하는 동안 Ctrl-PageUp을 누르면 화면에 "5~" 문자가 나타납니다. 왜 이런거야?

Linux 콘솔에서 같은 키를 눌렀을 때 로그인 후 바로 누르면 명령 기록에서 뒤로 이동하면서 "cd exp2111/"이 인쇄됩니다.

답변1

이는 터미널의 프로토콜(및 의사 터미널 등 xterm) 때문입니다. 그들은 단순히 입력(예: 누른 키) 또는 인쇄된 출력(일반 텍스트)으로 데이터 바이트를 보냅니다.

그러나 일반 ASCII 문자(또는 UTF-8 코드 확장자)를 사용하여 모든 작업을 수행할 수 있는 것은 아닙니다. 예를 들어 키에 공통 문자가 없으면 일반적으로 다음과 같은 이스케이프 시퀀스로 전송됩니다.

<esc> '[' (<keycode>) (';'<modifier>) '~'

예를 들어 Wikipedia에서 이러한 시퀀스를 많이 찾을 수 있습니다.https://en.wikipedia.org/wiki/ANSI_escape_code#Terminal_input_sequences

예를 들어 vt 시퀀스는 다음과 같습니다.

<esc>[5~    - PgUp

따라서 예상대로 터미널은 PageUp 코드를 보냅니다. 이것은 절대적으로 정확합니다.

그래서 진짜 질문은: 왜 터미널 인쇄 코드가 이와 같습니까? 잘못된 터미널 설정( TERM) 등 여러 가지 이유가 있을 수 있습니다. 그러나 일반적으로 수신 프로그램이 이를 해석할 수 없기 때문에 화면에 그대로 표시될 수 있습니다. 예를 들어 PageUp은 일반적으로 bash인식되지만 쉘 유틸리티(예: cat)는 인식되지 않으므로 포그라운드 프로세스가 이면 cat에코(즉, 코드)를 얻지만 bash가 포그라운드(따라서 입력을 기다리는 중)이면 시퀀스를 올바르게 해석합니다).

참고: PageUp은 일반적으로 프로그램으로 전송되며 의사 터미널(예: 스크롤)에서 사용되지 않습니다. 그러나 이는 설정에서 변경될 수 있으며 전경 프로그램의 표시 모드에 따라 변경될 수 있습니다.

참고: 일부 운영 체제는 다른 이스케이프 시퀀스를 사용할 수 있습니다(제 기억이 맞다면 macos 터미널은 다른 PageUp 시퀀스를 사용합니다). 이는 일부 프로그램을 혼란스럽게 할 수 있습니다(주로 터미널이 올바르게 설정되지 않은 경우).

관련 정보