나는 터미널 모드( )에서 emacs를 사용하는 것을 좋아 하지만 대부분의(모두?) 터미널은 특정 키 조합(예: 또는 -nw
)을 처리할 수 없는 것 같습니다 . 대부분의 터미널이 이러한 조합이 없는 VT-100을 에뮬레이트하기 때문에 나는 이것을 알고 있습니다. 이러한 키 조합을 처리할 수 있는 Linux 터미널(가급적 KDE)이 있습니까? 아니면 이것이 모든 터미널의 기본 제한 사항입니까?C-<RET>
C-M-%
답변1
터미널에서 키나 키 조합을 누르면 하나 이상의 문자 시퀀스로 터미널에서 실행 중인 애플리케이션에 전송됩니다. 예를 들어 을 누르면 a애플리케이션이 을 수신합니다 a
. 을 누르면 Enter애플리케이션이 문자 CR
( ^M
즉, "control-emm"으로 발음), 기호 13, 또는 \r
또는 \015
)를 수신합니다. 관련된 키 조합은 Alt일반적으로 문자 ESC
(또는 또는 ^[
라고도 함 ) 뒤에 일련의 키 또는 가 없는 키 조합이 오는 방식으로 전송됩니다 . 기능 키 및 기타 키 조합은 또는 로 시작하는 이스케이프 시퀀스로 전송됩니다 .\e
\033
Alt\e[
\eO
이스케이프 시퀀스는 완전히 표준화되지 않았으며 터미널은 종종 특정 키의 특정 속성을 무시합니다. 예를 들어 Ctrl++는 일반적으로 Shift기본적으로 +와 letter정확히 동일하게 전송 됩니다.Ctrlletter
CtrlV쉘 프롬프트에서 +를 누르고 키 조합을 누르거나 Emacs에서 C-q
또는 C-h c
키 조합을 눌러 터미널에서 보낸 키 조합이 무엇인지 확인할 수 있습니다 .
일부 터미널 에뮬레이터에서는 각 키에 대한 이스케이프 시퀀스를 구성할 수 있습니다. Xterm에서는 다음을 통해 수행됩니다.XResources. 대부분의 설정은 ~/.Xresources
X가 시작될 때부터 리소스를 읽으며 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
기능 키( 15
to 24
for F5to F12— 역사적인 이유로 F1 to는 F4다른 이스케이프 시퀀스를 가짐)를 나타내고 number2
수정자( 2
for Shift, 3
for Meta, 5
for Ctrl, 7
for Ctrl+ Meta, Shift적어도 1개 Ctrl또는 그 중 하나를 추가함 Meta)를 나타냅니다.
Emacs는 다음과 같은 방법으로 이스케이프 시퀀스를 내부 키 표현으로 변환합니다:input-decode-map
또는local-function-key-map
(또는 function-key-map
Emacs 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>
작업을 시작한 구현을 예로 들어 보겠습니다 .
- 새 콘솔을 열고 설정->현재 프로필->키보드->편집으로 이동하세요.
- 추가를 클릭하고 이에 대한 새 항목을 생성하고
Return+Shift
유용한 키 시퀀스를 제공합니다. (\E[27;3
xev를 사용할 때 X에서 보낸 키 시퀀스라고 생각한 것을 선택했지만 이는 잘못되었을 수 있습니다. 적절한 이스케이프가 있는지 확인하는 것이 중요합니다. 다른 것과 충돌하지 않습니다.) - 하단의 작은 테스트 영역에서 작업하여 제대로 작동하는지 확인하세요.
- 콘솔을 다시 시작하십시오.
emacs -nw
스테이징 버퍼에서 시작 하고 평가합니다.(read-key-sequence-vector "Type your new key:")
그런 다음 새 키 조합을 입력하십시오.
- 이 내용이 처음이라면 줄을 작성하고 커서를 줄 끝에 두고 Cx Ce를 눌러 emacs가 해당 줄을 실행하도록 하면 따옴표 안에 넣은 내용을 알려주고 사용자가 입력할 때까지 기다려야 합니다. 무엇.
바인딩할 수 있는 키 시퀀스를 출력해야 합니다. ( 콘솔 키 바인딩을 엉망으로 만들기 전의 지루하고 오래된 일 대신에
다시 돌아왔습니다 .)[27 91 50 55 59 51]
[13]
Emacs 구성에 추가하십시오:
(define-key function-key-map [27 91 50 55 59 51] [(shift return)])
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 자체가 상당한 변경이 필요할 것이라는 것입니다.