zsh 바인딩키에 대한 코드는 어디서 얻을 수 있나요? 특히 왼쪽으로 이동해야 합니다.
지금까지 코드를 얻는 다양한 방법을 찾았습니다.
1) key[Down]=${terminfo[kcud1]}
그런데 terminfo의 모든 키 이름은 어디서 찾을 수 있나요?
2) 오른쪽 화살표 sudo showkey -a
와 같은 특정 값의 출력을 인쇄 ^[[C
하지만 ctrl, Shitf, Space 등의 출력은 비어 있습니다.
3) Ctrl+V
터미널에서는
일부 값을 반환하지만 Shift, Ctrl 등의 경우에는 다시 비어 있습니다.
xmodmap -pk | grep Shift
return 도 있지만 0xffe1 (Shift_L)
이 코드를 바인딩하려고 하면 작동하지 않습니다. 왜 이런 일이 발생합니까?
답변1
그것은 터미널이 작동하는 방식이 아닙니다.
터미널은 수정자 키를 보내지 않습니다. 수정자는 터미널에 의해 흡수되며 유선을 통해 호스트로 전송되지 않습니다. 터미널 입력의 형태는 다음과 같습니다.문자 순서아니요키보드 이벤트. (예, DEC VT520과 같은 일부 실제 터미널은 "스캔 코드" 모드를 지원하지만 이로 인해 상황이 해결되지는 않습니다.실제로시도해 보세요. 그러면 거의 확실하게 될 것입니다.아니요DEC VT520 또는 이를 완전히 에뮬레이트하는 모든 것을 사용하십시오. ) 이러한 시퀀스는 특정 비그래픽 키(예: 기능, 커서 키보드, 편집 키보드 및 계산기 키보드 키)를 나타내는 사전 구성된 문자 또는 ECMA-48 제어 시퀀스입니다.
터미널 I/O를 사용하는 프로그램은 이를 I/O 패러다임의 일부로 사용하지 않습니다.
그런데 Terminfo에는 ECMA-48 제어 시퀀스의 거의 전부 또는 대부분이 없습니다. 이것은 실제로 터미널 입력을 처리하는 매우 열악한 방법입니다. 이는 키를 매우 제대로 처리하지 못하기 때문에 아이러니합니다.현그래픽이 아닌 키와 수정자 키를 포함합니다. 따라서 터미널 입력에 대해 알려주기 위해 terminfo를 찾지 마십시오.
GUI, 다른 운영 체제의 "콘솔", 커널(및 일부 사용자 공간) 가상 터미널의 기반이 되는 하위 수준 HID는 서로 다른 개념입니다. 그것들하다애플리케이션에서 볼 수 있는 키보드 누르기/떼기 입력 이벤트 개념이 있습니다. 하지만POSIX 범용 터미널 인터페이스는 Z 셸에서 ZLE가 사용하는 것처럼 생각한 대로 작동하지 않습니다.
추가 읽기
답변2
이 스레드에는 몇 가지 흥미로운 점이 있는데, 그중 어느 것도 Shift 키에 대한 키 바인딩을 보여주지 않습니다.
시스템 환경설정 -> 키보드 -> 수정자 키에 수정자 키를 보면 Shift 키 모두 변경할 수 없는 것 같습니다. Shift 잠금은 있지만 Shift 키는 아님