에서 + 위쪽 터미널에서 이맥스를 인식하지 시프트 터미널 이스케이프 시퀀스로 대부분의 기능 키를 변환 어떻게, 설명하기 때문에 응용 프로그램 및 단말기의 송신 문자 (또는 오히려 바이트),하지 키 사이의 인터페이스를 제공합니다. 소수의 수정 자 + 문자 조합에만 고유 한 문자가 있습니다.
- Ctrl플러스 문자 또는
@[\]^_
바이트 중 하나는 바이트 0-31 (ASCII 제어 문자 ) 로 바뀝니다 .
- 종종 Ctrl+ ?바이트 (127)에 회전 및 Ctrl+ Space동등 Ctrl+ @(바이트 0).
- 일부 기능 키는 제어 문자와 같습니다 : Tab= Ctrl+ I, Return= Ctrl+ M, Esc= Ctrl+ [.
- 그리고 Backspace= Ctrl+ H나 Ctrl+ ?구성에 따라 달라집니다. Ctrl+는 ?이후, 이맥스에 대한 더 편리 Ctrl+가 H도움이됩니다.
- Meta+ 다음에 문자character 가 전송됩니다 .Esc
Ctrl+ ;또는 Ctrl+ Shift+ 와 같은 다른 조합은 letter어떻습니까? 해당 문자가 없으므로 터미널은 문자를 재사용하거나 이스케이프 시퀀스를 보내야합니다. 많은 터미널은 해당 문자가 없으면 수정자를 무시하므로 Ctrl+ ;보내기 ;
, Ctrl+ Shift+ letter와 Ctrl+ letter등으로 끝납니다 .
터미널 공급 업체는 오랫동안 간단한 일을 계속했습니다. 이스케이프 시퀀스에 대한 표준은 없었으며 자체적으로 지속되었습니다. 터미널 공급 업체는이를 구현하지 않고, 응용 프로그램은이를 지원하지 않으며, 사용자는이를 기대하지 않습니다. 일부 터미널 에뮬레이터는 임의의 이스케이프 시퀀스를 보내도록 구성 할 수 있으므로 가능한 경우 이스케이프 시퀀스를 구성하고 이스케이프 시퀀스를 Emacs에 선언 할 수 있습니다.
최근 이스케이프 시퀀스를 표준화하기위한 두 가지 제안이 있었기 때문에 상황이 변하고 있습니다. 하나는 구문 이있는 LeoNerd의 libtermkey 입니다 . 다른 하나는 Thomas Dickey의 xterm 구문 입니다. 리소스 를 설정하여 현재 버전의 xterm (≥216)을 구문에 맞게 구성 할 수 있습니다 . 를 0이 아닌 값 으로 설정하여 기능을 활성화해야합니다 .ESC [ codepoint ; modifier u
ESC [ 2 7 ; modifier ; codepoint ~
formatOtherKeys
modifyOtherKeys
터미널 에뮬레이터가 이러한 구문을 지원하지 않지만 구성 할 수있는 경우 둘 중 하나를 선택하십시오.
Emacs 24.4부터 Emacs modifyOtherKeys
는 터미널이 xterm 버전 ≥216임을 감지하면 자동으로 기능을 켭니다 . Emacs는 키를 인코딩하기 위해 이스케이프 시퀀스를 감지하여 변수를 통해 작동합니다 local-function-key-map
. Emacs 24.4부터 모든 이스케이프 시퀀스가 지원되는 것은 아닙니다. init 파일에서 다음 코드를 사용하여 작업을 완료 할 수 있습니다.
;; xterm with the resource ?.VT100.modifyOtherKeys: 1
;; GNU Emacs >=24.4 sets xterm in this mode and define
;; some of the escape sequences but not all of them.
(defun character-apply-modifiers (c &rest modifiers)
"Apply modifiers to the character C.
MODIFIERS must be a list of symbols amongst (meta control shift).
Return an event vector."
(if (memq 'control modifiers) (setq c (if (or (and (<= ?@ c) (<= c ?_))
(and (<= ?a c) (<= c ?z)))
(logand c ?\x1f)
(logior (lsh 1 26) c))))
(if (memq 'meta modifiers) (setq c (logior (lsh 1 27) c)))
(if (memq 'shift modifiers) (setq c (logior (lsh 1 25) c)))
(vector c))
(defun my-eval-after-load-xterm ()
(when (and (boundp 'xterm-extra-capabilities) (boundp 'xterm-function-map))
(let ((c 32))
(while (<= c 126)
(mapc (lambda (x)
(define-key xterm-function-map (format (car x) c)
(apply 'character-apply-modifiers c (cdr x))))
'(;; with ?.VT100.formatOtherKeys: 0
("\e\[27;3;%d~" meta)
("\e\[27;5;%d~" control)
("\e\[27;6;%d~" control shift)
("\e\[27;7;%d~" control meta)
("\e\[27;8;%d~" control meta shift)
;; with ?.VT100.formatOtherKeys: 1
("\e\[%d;3u" meta)
("\e\[%d;5u" control)
("\e\[%d;6u" control shift)
("\e\[%d;7u" control meta)
("\e\[%d;8u" control meta shift)))
(setq c (1+ c))))))
(eval-after-load "xterm" '(my-eval-after-load-xterm))
경우] TERM
환경 변수로 설정되어 있지 않은 xterm
등의 변이체 또는 xterm-256color
이멕스 그 시퀀스를 활성화 할 것이다. Emacs가 이미 귀하의 값을 TERM
지원하는 경우, 위와 유사한 함수를 정의하여 이름이 값인 Lisp 파일TERM
을 로드 한 후 실행되도록 지원을 추가 할 수 있습니다 . Emacs가 그러한 지원을 제공하지 않는 경우,에 term
어딘가 라는 서브 디렉토리를 작성하고이라는 함수를 정의하는 where is the value load-path
라는 Lisp 파일 을 작성하여이를 추가 할 수 있습니다 .term/$TERM.el
$TERM
TERM
terminal-init-$TERM
내가 쓰는 것처럼 xterm 이외의 터미널 에뮬레이터는 이러한 이스케이프 시퀀스를 채택하지 않은 것 같습니다. OSX에서는 각 키 조합에 대해 이스케이프 시퀀스를 하나씩 선택하여 iTerm2 를 구성 할 수 있습니다 .
C-;
콤보를 사용 해보고M-x view-lossage
Emacs에 도착하는지 확인하십시오.