왜 그런지 궁금하네요 Shift+ Arrow Key중 하나의 결과 A
, B
, C
또는 D
편지를.
왜 다른 편지가 아닌가? 왜 어떤 편지?
Shift + Arrow Keys
에서는 아무것도하지 않습니다.
왜 그런지 궁금하네요 Shift+ Arrow Key중 하나의 결과 A
, B
, C
또는 D
편지를.
왜 다른 편지가 아닌가? 왜 어떤 편지?
Shift + Arrow Keys
에서는 아무것도하지 않습니다.
답변:
같은 터미널 에뮬레이터 gnome-terminal
(우분투에서 "터미널")뿐만 아니라 xterm
과 urxvt
가 컴퓨터의 유일한 표시했다 구형 단말기의 동작을 재현하기 때문에 "에뮬레이터"이름이 지정됩니다. 이러한 터미널은 텍스트 기반 프로토콜로 컴퓨터와 통신했으며 처음에는 텍스트 만 수신하도록 설계되었습니다. 신속하게 더 많은 제어가 필요했습니다. 라인을 지우는 방법? 색을 사용합니까? 아니면 커서 위치를 변경 하시겠습니까?
출처 : 유닉스 유용성-명령 행 인터페이스
이스케이프 시퀀스는 모든 터미널이 이러한 작업을 수행하도록 설계되었습니다. ASCII 이스케이프 코드로 시작하기 때문에 이스케이프 로 이름이 지정 33
됩니다. 이러한 문자를 직접 인쇄 할 수있는 방법이 없으므로 이러한 순서에 적합합니다. 우리가 여전히이 문자를 표시하고 싶을 때이 단어 ^[[
가 사용됩니다. 이것이 제가 설명에 사용할 것입니다.
단말기가 수신했을 때 ^[[A
"print ^ [[A" "가 아니라"사용자가 위쪽 화살표 키를 눌렀습니다 "라는 의미입니다. 여기서 "A"는 완전히 임의적입니다. DEC VT-52와 그 후속 버전 인 인기있는 VT-100 터미널이 사용했기 때문에 모두가 동의 한 문자 일뿐입니다.
출처 : DEC VT-52 Maintenance Manual 1976
이것은 오늘날 터미널 에뮬레이터가 작동하는 방식입니다. $TERM
변수에 따라 데이터베이스 terminfo
는 셸 (bash, sh, zsh ...)에 어떤 코드를 보내야하는지 알려주는 역할을합니다. 그들에게.
지금의 코드 Shift+가 up될 일이 ^[[1;2A
: 터미널 에뮬레이터는 해석을 시도 쉘,이 코드를 전송 ^[[1;2
하지만 그 이스케이프 시퀀스에 대해 알고하지 않기 때문에 아무것도 표시되지 않습니다. 그러나 A
남겨져 표시됩니다.
^[[A
프로세스가 터미널에서 실행되는 동안 화살표 키를 클릭하면 모든 것이 의미가 있습니다.
cat >/dev/null
하고 입력 한 다음 완료되면 Ctrl + C (또는 Enter, Ctrl + D)를 누릅니다.