어떤 파일에서 키 바인딩이 정의 되었습니까?
-
03-07-2019 - |
문제
EMACS의 키 스트로크를 고려합니다 CX CS. 입력하여 어떤 기능을 호출하는지 알아낼 수 있습니다. ch c 키 스트로크, 그러나이 키 바인딩이 어디에 정의되었는지 어떻게 찾을 수 있습니까?
(아마도 정답은 Keymaps가 이런 종류의 정보를 저장하지 않기 때문에 결정될 수 없다는 것입니다.)
해결책
KeyBindings가 함수와 관련된 위치에 대한 정보는 EMAC에 의해 보관되지 않습니다. 실제로 대답은 일반적으로 정의되지 않습니다.
여러 번 키 바인딩은 마이너 모드의 부작용 또는 모드 훅을 통해 설정됩니다. 마이너 모드에 대한 주요 바인딩은 종종 같은 변수에 저장됩니다. comint-mode-map
. 이 keymap은 모드 변수를 설정하여 활성화됩니다 comint-mode
. 그러나이 모드 맵은 글로벌 변수이며 누구나 어디서나 키 바인딩을 추가 할 수 있습니다. 따라서 원하는 것을 수행하는 것은 본질적으로 특정 값으로 변수를 설정하는 사람을 추적하는 것입니다. 모드 후크를 통해 로컬로 설정된 주요 바인딩의 경우 (사용 local-set-key
). 또한 주요 바인딩을 설정할 수도 있습니다 파일 변수. 이 모든 것은 EMAC의 주요 바인딩이 일시적이라고 말하는 것입니다.
최선을 다하면 키와 관련된 기능을 찾아서 해당 파일 (또는 모드가 여러 파일로 분할 된 경우 관련 파일)을 찾는 것입니다.
Key Strokes (전 세계, 주요 모드, 사소한 모드, 사소한 모드 재정의 사소한 모드, 버퍼, 텍스트 속성 등)를 설정/연결할 수있는 수많은 방법으로 인해 EMAC의 주요 바인딩 조회가 상당히 관여합니다. 빠른 개요를 보려면 확인하십시오 이 문서.
키 바인딩이 설정 될 수있는 위치를 확인하기 위해 작은 모드에서 이와 같은 함수를 작성할 수 있지만, 첫 번째 테스트에서 키 바인딩이 정의되지 않았다는 것을 보여주었습니다. 그러나 아마도 코드는 유익 할 것입니다.
(defun guess-where-keybinding-is-defined (key)
"try to guess where a key binding might be defined"
(interactive (list (read-key-sequence "Describe key: ")))
(let ((bindings (minor-mode-key-binding key))
found)
(while (and bindings (not found))
(if (setq found (caar bindings))
(find-function (cdar bindings)))
(setq bindings (cdr bindings)))))
이 질문을 제외하고 해결하려는 구체적인 문제가 있습니까?
다른 팁
MX 찾기 기능 만 수행하십시오
EMACS DOC :
(찾기 기능)
근처의 함수의 정의를 찾으십시오.
버퍼에서 포인트 근처의 함수 정의 ( 'function-called-at point'에 의해 선택됨)를 포함하는 소스 파일을 찾아 정의 전에 장소 지점을 찾습니다. 버퍼가 이미 존재 한 경우 이동하기 전에 마크를 설정하십시오.