Windows 또는 Mac Cmd 키에 대한 터미널 키 바인딩의 선례

Windows 또는 Mac Cmd 키에 대한 터미널 키 바인딩의 선례

Unix 터미널은 Ctrl+ 다른 키에 대해 32 미만의 ASCII 코드를 보내고 "메타"를 보내는 데 최소한 두 가지 방법이 있습니다(즉, 앞에 코드 27을 붙이거나 ASCII 문자의 상위 비트를 설정하는 것). "super"나 Windows 로고 키 또는 Mac 키와 같은 다른 수정자 키의 사용을 인코딩하는 방법에 대한 선례가 있습니까 Cmd?

iTerm2에서 +화살표 키를 매핑하고 싶은데 Cmd어떤 코드를 할당해야 할지 모르겠습니다. 이미 Option화살표 키와 함께 "메타" 키를 사용하고 있습니다 .

답변1

메타를 누를 때 8번째 비트를 설정하는 규칙은 다소 구식이며 더 이상 사용되지 않으며 실제로 ASCII보다 더 많은 문자를 지원하는 최신 터미널에서는 전혀 사용되지 않습니다. ESC 접두사를 붙이는 관례는 오늘날에도 흔하지 않습니다.

32개의 ASCII 제어 문자는 실제로 ASCII 제어 문자(32 미만의 코드 포인트)로 전송되지만 이는 Ctrl-@, Ctrl-A부터 Ctrl-Z까지, ESC, Ctrl-\, Ctrl-], Ctrl-^ 및 Ctrl 키-_. 예를 들어 Ctrl-4와 같은 다른 항목은 ASCII에 존재하지 않으며 터미널을 통해 전송하는 규칙도 없습니다.

기본적으로 요점은 다음과 같습니다. 일반 문자로 보낼 수 없는 모든 것(즉, 최신 유니코드 지원 터미널의 경우 유니코드로 존재함)은 이스케이프 시퀀스로 보내야 합니다. 이스케이프 시퀀스는 실제로 터미널 에뮬레이션 프로토콜에 의해 정의됩니다. 오늘날 사용되는 거의 모든 터미널 에뮬레이션 프로토콜은 VT100에서 파생되거나 유사하며 키보드에서 문자로 존재하지 않는 일반 키(예: 화살표 키, 기능 키 등)에 이스케이프 시퀀스를 사용할 수 있습니다.

VT100 및 관련 터미널 에뮬레이션 프로토콜에는 Shift 및 Control과 같은 표준 키 누름을 전달하는 규칙이 포함되어 있지 않습니다. tty에서 실행되는 소프트웨어는 Enter 키 누르기와 Shift-Enter 키 누르기 간의 차이를 구분할 수 없습니다. Enter 키를 누르는 것과 Control-M 키를 누르는 것의 차이조차 알 수 없습니다.

이러한 수정자 시퀀스가 ​​단말을 통해 전송될 수 없다는 사실은 좋은 것으로 간주될 수 있습니다. 예를 들어, MacOS 터미널 애플리케이션은 어쨌든 tty로 보낼 수 없기 때문에 자체 사용(붙여넣기)을 위해 ⌘V 키 입력을 요구할 수 있습니다.

관련 정보