실행 취소를 위한 Ctrl+/(^/) bash 단축키는 어디에 정의되어 있나요?

실행 취소를 위한 Ctrl+/(^/) bash 단축키는 어디에 정의되어 있나요?

bind -p어느 쪽에서도 매핑을 찾을 수 없습니다 stty -a. 또한 Linux 시스템 콘솔이 아닌 제가 시도한 터미널 에뮬레이터(xterm, konsole, gnome-terminal)에서만 작동합니다. 나는 그것이 전통적으로 emacs 지도라고 생각합니다.

^V^/편집: bash prints 를 입력하면 ^_바인딩에서 실행 취소되도록 매핑됩니다. 하지만 ^/어디에 매핑되나요 ^_?

답변1

이는 터미널 에뮬레이터(원시 X 이벤트를 가져와 바이트 스트림을 생성하고 의사 터미널은 ^_코드 037의 제어 문자인 수정자 키 개념을 처리하지 않음)에 의해 생성됩니다.

이 매핑의 출처는 VT100일 수 있습니다.매핑된둘 다 문자 037에 CTRL-?매핑되지만 아무 것도 매핑되지 않는 것 같습니다 . 터미널 에뮬레이터를 177 또는 037에 매핑해 보았습니다 .CTRL-/CTRL-_CTRL-?

VT220다른 작업도 수행하지만 최소한 XTerm에서는 일부 매핑을 계속 사용할 수 있습니다.

답변2

일반적으로 control수정자는 마지막 5비트에서 모든 문자를 제거하여 ASCII 문자에 대해 작동합니다. 다양한 문자를 0..31다양한 ASCII 제어 문자에 매핑합니다.

규칙에 따르면 수정자를 사용하여 031에 매핑될 것으로 예상됩니다 control.

037   31    1F    US  (unit separator)
077   63    3F    ?
137   95    5F    _
177   127   7F    DEL

다음은 수행되지 않습니다.

057   47    2F    /
117   79    4F    O
157   111   6F    o

아니면 control수식어할 수 있다범위를 (대문자/소문자) 에 매핑하기 위해 ASCII에서 사용되는 32..63키와 유사하게 범위 내의 문자에만 적용됩니다 . 이 경우 이는 다음에 매핑될 수 있습니다 .shift64..9496..126031

037   31    1F    US  (unit separator)
057   47    2F    /
077   63    3F    ?

그리고 (오랜만에) @aprogrammer의 관찰은 친숙하게 들립니다. 하지만 VT100 매뉴얼에는 없습니다. 존재하다3 장, 이는 키와 그에 상응하는 제어 항목을 기록하는 테이블을 가리킵니다. 전체 95자 범위(32..126)의 코드를 사용하지만 각 제어 문자에 대해 한 가지 경우만 기록합니다. 다른 가능한 문자는 문서화되어 있지 않습니다. 하지만 테이블 파일에 주의하세요 control?. 키보드에 ?하나 있어요옮기다열쇠. VT100 키보드에서 찾은 사진에는 움직이지 않은 키가 표시되지 않았습니다. 그리고 (놀랍지도 않게) 해당 특정 키에 대한 이동되지 않은 코드는 입니다 /. DEC는 이전 터미널의 기존 키를 기반으로 이를 기록했을 수도 있지만 테이블을 짧게 유지하기 위해 기록했을 수도 있습니다.

그러나 변환이 제대로 이루어지지 않았습니다 xterm. 특정 키코드 및 수정자 정보가 포함된 X 이벤트를 수신합니다. 일반적으로 이러한 키코드는 키보드에 표시되는 문자에 해당하는 반면 수정자(예: shift및 )는 control개별적으로 전달됩니다. xterm다음과 같은 X 런타임 기능을 사용하십시오.Xutf8LookupString또는 XmbLookupString일부 이벤트를 결합합니다(예 shift: ). 여기서 번역이 결정됩니다이것들제어 문자. xterm나중에 정보를 구체화/수정특수 키(예 backspace: ), 그러나 대부분의 변환은 키보드 구성을 사용하여 X 라이브러리에서 수행됩니다.

추가 자료:

관련 정보