이맥스 25
주석에서 @YoungFrog가 언급 한 것처럼 Emacs 25.1부터C-h k
키 바인드를 설명하는 오래된 방법은 키가 발견 된 키 맵을 알려줍니다.
이맥스 이전 25
여기
에 몇 가지 코드가
있지만 모든 것을 다루지는 않으므로 불완전합니다. 아래는 개선 된 버전입니다.
키는 9 (!) 방식으로 바인딩 될 수 있습니다. 덕분에 대해 @ 드류하는 링크 (또한 보충 이 전체 목록). 우선 순위에 따라 다음과 같습니다.
- 키의 단자 별 집합
overriding-terminal-local-map
. 이것은 set-transient-map
함수에 의해 정의됩니다 .
- 버퍼 - 지방 재정의지도
overriding-local-map
. 이 항목을 설정하면 항목 3–8을 건너 뜁니다 (아마도 이러한 항목이 많이 표시되지 않는 이유).
keymap
텍스트 전문성을 통한 시점 (실제 텍스트 또는 오버레이로 진행될 수 있음)
- 서로 다른 가능한 활성화 된 마이너 모드 세트를 시뮬레이트하는 변수
emulation-mode-map-alists
.
- 주요 모드가 보조 모드의 키 바인드를 대체 할 수있는 변수
minor-mode-overriding-map-alist
.
- 키 바인드가에 저장된 실제 마이너 모드
minor-mode-map-alist
.
local-map
텍스트 속성을 통해 (다시) 지점에서 . 이 항목이 있으면 항목 8을 건너 뜁니다.
- 표준 완충액 로컬 키맵 함수에 의해 리턴 (주요 모드 또는 로컬 버퍼 keybinds 간다)
current-local-map
.
- 에 의해 반환되는 전역 키맵
current-global-map
.
반 항목 10도 있습니다. 위의 절차를 통해 찾은 명령은 모두 다시 매핑되었을 수 있습니다.
다음 함수 는 이러한 가능성 중 일부 (가장 가능성이 높은 가능성)를 쿼리 하여 결과를 반환하거나 인쇄합니다.
(defun locate-key-binding (key)
"Determine in which keymap KEY is defined."
(interactive "kPress key: ")
(let ((ret
(list
(key-binding-at-point key)
(minor-mode-key-binding key)
(local-key-binding key)
(global-key-binding key))))
(when (called-interactively-p 'any)
(message "At Point: %s\nMinor-mode: %s\nLocal: %s\nGlobal: %s"
(or (nth 0 ret) "")
(or (mapconcat (lambda (x) (format "%s: %s" (car x) (cdr x)))
(nth 1 ret) "\n ")
"")
(or (nth 2 ret) "")
(or (nth 3 ret) "")))
ret))
첫 번째를 제외하고 각각에 대해 내장 함수가 있으므로 하나를 작성해야합니다 (또한 위에 링크 된 코드의 개선 된 버전).
(defun key-binding-at-point (key)
(mapcar (lambda (keymap) (when (keymapp keymap)
(lookup-key keymap key)))
(list
;; More likely
(get-text-property (point) 'keymap)
(mapcar (lambda (overlay)
(overlay-get overlay 'keymap))
(overlays-at (point)))
;; Less likely
(get-text-property (point) 'local-map)
(mapcar (lambda (overlay)
(overlay-get overlay 'local-map))
(overlays-at (point))))))
포인트가 첨부 파일에있을 때 동작이 활성화되었다고 말하고 있기 때문에이 키 바인드가 오버레이 또는 텍스트 속성에서 발생할 가능성이 높습니다.
그래도 작동하지 않으면 다음 명령도 시도하십시오. 첨부 파일에 커서를 놓고 수행하십시오 M-x
keymaps-at-point
.
(defun keymaps-at-point ()
"List entire keymaps present at point."
(interactive)
(let ((map-list
(list
(mapcar (lambda (overlay)
(overlay-get overlay 'keymap))
(overlays-at (point)))
(mapcar (lambda (overlay)
(overlay-get overlay 'local-map))
(overlays-at (point)))
(get-text-property (point) 'keymap)
(get-text-property (point) 'local-map))))
(apply #'message
(concat
"Overlay keymap: %s\n"
"Overlay local-map: %s\n"
"Text-property keymap: %s\n"
"Text-property local-map: %s")
map-list)))
Searching Keymaps
: Elisp manual, node . 또한 노드를 참조Functions for Key Lookup
하고Active Keymaps
.