Control 이외의 키가 SIG*를 보낼 수 있습니까?

Control 이외의 키가 SIG*를 보낼 수 있습니까?

복사/붙여넣기/모두 선택/찾기/등에 물리적 슈퍼/메타 키를 사용할 수 있도록 Ctrl과 Super를 바꾸고 싶습니다. 일반적으로 존재하지 않는 애플리케이션별 구성은 없습니다.

그러나 물리적 제어 키에는 SIGINT, EOF, 일시 중지 등을 유지하고 싶습니다.

설정을 시도했는데 예를 들어 로 변경할 수 있다는 것을 URxvt.keysym.M-c: ^C알고 있지만 제가 아는 한 수정자 키를 다른 키 기호로 변경하거나 키 코드로 직접 변경할 수는 없습니다.stty^K

가능합니까?

답변1

일부 키 입력-신호 변환은 매우 낮은 수준에서 수행됩니다. 이는 터미널 에뮬레이터 프로세스 또는 물리적 터미널 하드웨어와 터미널에서 실행되는 프로그램 사이를 중계할 때 커널의 일반 터미널 드라이버에 의해 수행됩니다. 드라이버는 문자만 이해합니다(문자란 바이트를 의미합니다. 이러한 인터페이스를 설계할 때는 멀티바이트 문자 세트가 중요하지 않았습니다).

기능 키 이외의 수정자를 포함하거나 Shift기능 키를 포함하는 대부분의 키 입력에는 해당 문자가 없으므로 터미널은 다중 문자 이스케이프 시퀀스(ASCII로 시작)를 보내야 합니다.이스케이프 문자). 바라보다bash - Ctrl+Alt+Space를 사용한 키 시퀀스 바인딩 오류그리고키보드 입력과 텍스트 출력은 어떻게 작동합니까?이 주제에 대한 추가 배경 정보입니다.

Ctrl+ letter(ASCII) 에 해당하는 문자가 있습니다 .제어 문자), 하지만 Super+ 는 아닙니다 letter. Meta+는 C두 문자의 시퀀스를 보내고 ESC C+ 는 Super대부분의 터미널에서 기본적으로 C만 보냅니다 . 따라서 C+(및 일부 구두점)의 신호를 단일 바이트 인쇄 가능 문자로 다시 바인딩할 수 있습니다(ASCII가 아닌 바이트에도 바인딩되지만 UTF-8에서는 큰 혼란을 초래할 수 있음).Ctrlletter

유일한 해결책은 CtrlSIGINT를 트리거하려는 키 입력에 대해 +를 보내도록 터미널 에뮬레이터를 구성하는 것입니다. CRxvt의 경우 올바른 방향으로 가고 있지만 ^C두 문자 ^와 를 삽입하려면 C8진수 이스케이프를 사용하여 지정할 수 있는 control-c 문자가 필요합니다. 또한 + 및 실행 의 경우 + 가 아니라 + M-c입니다 . 예를 들어 through 에서 Super 가 무엇인지 확인 하고 해당 숫자를 수정자로 사용하세요.MetaCSuperCSuperCxmodmap -pmmod1mod5

URxvt.keysym.5-c: \003

관련 정보