.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바인딩이 작동한다는 것을 알고 있습니다.