모든 키 조합을 처리할 수 있는 Linux 터미널이 있습니까?

모든 키 조합을 처리할 수 있는 Linux 터미널이 있습니까?

나는 터미널 모드( )에서 emacs를 사용하는 것을 좋아 하지만 대부분의(모두?) 터미널은 특정 키 조합(예: 또는 -nw)을 처리할 수 없는 것 같습니다 . 대부분의 터미널이 이러한 조합이 없는 VT-100을 에뮬레이트하기 때문에 나는 이것을 알고 있습니다. 이러한 키 조합을 처리할 수 있는 Linux 터미널(가급적 KDE)이 있습니까? 아니면 이것이 모든 터미널의 기본 제한 사항입니까?C-<RET>C-M-%

답변1

터미널에서 키나 키 조합을 누르면 하나 이상의 문자 시퀀스로 터미널에서 실행 중인 애플리케이션에 전송됩니다. 예를 들어 을 누르면 a애플리케이션이 을 수신합니다 a. 을 누르면 Enter애플리케이션이 문자 CR( ^M즉, "control-emm"으로 발음), 기호 13, 또는 \r또는 \015)를 수신합니다. 관련된 키 조합은 Alt일반적으로 문자 ESC(또는 또는 ^[라고도 함 ) 뒤에 일련의 키 또는 가 없는 키 조합이 오는 방식으로 전송됩니다 . 기능 키 및 기타 키 조합은 또는 로 시작하는 이스케이프 시퀀스로 전송됩니다 .\e\033Alt\e[\eO

이스케이프 시퀀스는 완전히 표준화되지 않았으며 터미널은 종종 특정 키의 특정 속성을 무시합니다. 예를 들어 Ctrl++는 일반적으로 Shift기본적으로 +와 letter정확히 동일하게 전송 됩니다.Ctrlletter

CtrlV쉘 프롬프트에서 +를 누르고 키 조합을 누르거나 Emacs에서 C-q또는 C-h c키 조합을 눌러 터미널에서 보낸 키 조합이 무엇인지 확인할 수 있습니다 .

일부 터미널 에뮬레이터에서는 각 키에 대한 이스케이프 시퀀스를 구성할 수 있습니다. Xterm에서는 다음을 통해 수행됩니다.XResources. 대부분의 설정은 ~/.XresourcesX가 시작될 때부터 리소스를 읽으며 xrdb -merge ~/.Xresources.

Term.VT100.translations:       #override \n\
    Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\
    Ctrl Shift ~Meta <key>percent: string("\033[37;6~")

ESC [ number1 ; number2 ~일반적인 규칙은 수정자와 함께 기능 키 형태로 이스케이프 시퀀스를 사용하는 것입니다. number1기능 키( 15to 24for F5to F12— 역사적인 이유로 F1 to는 F4다른 이스케이프 시퀀스를 가짐)를 나타내고 number2수정자( 2for Shift, 3for Meta, 5for Ctrl, 7for Ctrl+ Meta, Shift적어도 1개 Ctrl또는 그 중 하나를 추가함 Meta)를 나타냅니다.

Emacs는 다음과 같은 방법으로 이스케이프 시퀀스를 내부 키 표현으로 변환합니다:input-decode-map또는local-function-key-map(또는 function-key-mapEmacs 23 이전).

(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])

답변2

제한적이지만 중요한 키 세트의 경우 KDE의 konsole을 사용한다고 가정하면 다음을 수행하여 emacs -nw에서 효율적이고 복잡한 키 바인딩을 얻을 수 있습니다:

S-<RET>작업을 시작한 구현을 예로 들어 보겠습니다 .

  1. 새 콘솔을 열고 설정->현재 프로필->키보드->편집으로 이동하세요.
  2. 추가를 클릭하고 이에 대한 새 항목을 생성하고 Return+Shift유용한 키 시퀀스를 제공합니다. ( \E[27;3xev를 사용할 때 X에서 보낸 키 시퀀스라고 생각한 것을 선택했지만 이는 잘못되었을 수 있습니다. 적절한 이스케이프가 있는지 확인하는 것이 중요합니다. 다른 것과 충돌하지 않습니다.)
  3. 하단의 작은 테스트 영역에서 작업하여 제대로 작동하는지 확인하세요.
  4. 콘솔을 다시 시작하십시오.
  5. emacs -nw스테이징 버퍼에서 시작 하고 평가합니다.

    (read-key-sequence-vector "Type your new key:")

    그런 다음 새 키 조합을 입력하십시오.

    • 이 내용이 처음이라면 줄을 작성하고 커서를 줄 끝에 두고 Cx Ce를 눌러 emacs가 해당 줄을 실행하도록 하면 따옴표 안에 넣은 내용을 알려주고 사용자가 입력할 때까지 기다려야 합니다. 무엇.
  6. 바인딩할 수 있는 키 시퀀스를 출력해야 합니다. ( 콘솔 키 바인딩을 엉망으로 만들기 전의 지루하고 오래된 일 대신에
    다시 돌아왔습니다 .)[27 91 50 55 59 51][13]

  7. Emacs 구성에 추가하십시오:

    (define-key function-key-map [27 91 50 55 59 51] [(shift return)])
    
  8. emacs -nw다음을 사용하여 스크린 세션에서 테스트했습니다.

    (define-key ess-mode-map [(shift return)] #'ess-eval-line-and-step)
    (define-key sh-mode-map [(shift return)]  #'send-line-to-shell)
    

답변3

무손실 키보드 입력(그래픽과 같은 기타 기능 포함)을 허용하는 방식으로 VT 프로토콜을 확장하려는 노력이 진행 중입니다.

notty는 예입니다.https://github.com/withoutboats/notty

답변4

한마디로 이는 모든 단말기의 근본적인 한계이다.

약간 더 긴 답변은 설사 누군가가 당신이 원하는 것을 수행하는 터미널을 만들었다고 해도 이 가상의 터미널과 작동하려면 Emacs 자체가 상당한 변경이 필요할 것이라는 것입니다.

관련 정보