Emacs의 kbd 매크로에 대한 문자열 구문

Emacs의 kbd 매크로에 대한 문자열 구문

중복 가능성:
Mxdescribe-key를 사용하여 Emacs에서 코드를 찾고 기능을 연결하세요

.emacs내 파일에 다음 매크로를 입력했습니다.

(global-set-key (kbd "M-<left>") 'windmove-left)          ; move to left windnow
(global-set-key (kbd "M-<right>") 'windmove-right)        ; move to right window
(global-set-key (kbd "M-<up>") 'windmove-up)              ; move to upper window
(global-set-key (kbd "M-<down>") 'windmove-down)          ; move to lower window

Alt하지만 + left나 다른 키보드 조합을 누르면 아래와 같이 미니버퍼에 오류가 발생합니다 M-o 3 c is undefined.

왜 작동하지 않나요? 설명된 구문을 따랐다고 생각했습니다.여기( kbd매크로).

답변1

터미널은 키가 아닌 문자에 대해 알고 있으므로 해당 문자가 없는 키는 이스케이프 시퀀스로 변환했다가 다시 되돌려야 합니다. Alt+를 누르면 Left문자 시퀀스로 변환됩니다. 여기서 이스케이프 문자는 다음과 같습니다 \eO3d. \e불행하게도 이러한 문자 시퀀스 중 일부는 표준화되지 않았으므로 터미널이 Emacs로 보내는 내용을 선언해야 합니다.

Ctrl+를 누른 Q다음 키 조합(예: Alt+ Left)을 눌러 버퍼에 키 시퀀스를 입력합니다. Ctrl+ 명령은 QEmacs에게 선행 이스케이프 문자를 문자 그대로 해석하도록 지시합니다. 두 문자 대신 Emacs Lisp 문자열로 작성하는 것이 가장 좋은 이스케이프 문자가 있는 ^[O3d것과 같은 것을 볼 수 있습니다 .^[^[\e

각 키 조합에 대한 이스케이프 시퀀스를 추가합니다.input-decode-map. 예를 들어(이 코드는 귀하의 코드에 들어갑니다 .emacs):

(define-key input-decode-map "\eO3a" [M-up])
(define-key input-decode-map "\eO3b" [M-down])
(define-key input-decode-map "\eO3c" [M-right])
(define-key input-decode-map "\eO3d" [M-left])

(kbd "M-<up>")아니면 (kbd "<M-up>")다른 글쓰기 방법도 있습니다 [M-up].

이러한 번역을 선언하면 Emacs는 터미널이 예를 ^[O3d들어 키 조합 Alt+ 를 보낼 때 Left바인딩이 작동한다는 것을 알고 있습니다.

관련 정보