2009-05-04 2 views
6

Emacs의 키 입력을 고려하십시오. C-x C-s. C-h c 키 입력을 입력하여 어떤 기능이 호출되는지 파악할 수 있지만이 키 바인딩이 정의 된 위치는 어떻게 찾을 수 있습니까? 키 바인딩이 정의 된 파일은 무엇입니까?

은 (아마도 정답은 키맵은 이러한 종류의 정보를 저장하지 않기 때문에 그것이 결정되지 않을 수 있다는 것입니다.)

답변

5

키 바인딩이 기능과 관련된 위치에 관한 정보는 Emacs가 보관하지 않습니다. 사실, 대답은 일반적으로 정의되지 않습니다.

여러 번 키 바인딩은 부 모드 또는 부작용으로 설정됩니다. 부 모드에 대한 키 바인딩은 종종 comint-mode-map과 같은 변수에 저장됩니다. 이 키맵은 모드 변수 comint-mode을 설정하여 활성화됩니다. 그러나 모드 맵은 전역 변수이며 아무 데나 아무 곳에서나 키 바인딩을 추가 할 수 있습니다. 그래서, 당신이 원하는 것을하는 것은 근본적으로 누가 특정 가치를 가진 변수를 설정했는지 추적하는 것입니다. 마찬가지로 모드 훅 (local-set-key 사용)을 통해 로컬로 설정된 키 바인딩에 대해서도 마찬가지입니다. 또한 file variables을 통해 키 바인딩을 설정할 수도 있습니다. 이 모든 것은 Emacs의 핵심 바인딩이 일시적이라고 말하는 것입니다.

당신이 할 수있는 최선의 방법은 키와 관련된 기능을 찾고 해당 파일 (또는 모드가 여러 파일로 분리되어있는 경우 관련된 파일)을 살펴 보는 것입니다.

키 스트로크 (전체적으로, 메이저 모드, 마이너 모드, 마이너 모드 오버라이드, 버퍼에 로컬, 텍스트 속성 등)를 설정/연관시킬 수있는 방법이 많기 때문에 emacs에서 키 바인딩 검색이 상당히 관련되어 있습니다. 간략한 개요는 this documentation을 확인하십시오.

키 바인딩이 설정 될 수있는 부분을보기 위해 마이너 모드를보기 위해 함수를 작성할 수 있지만 물론 첫 번째 테스트에서 키 바인딩이 정의되지 않았 음을 알 수 있습니다. 그러나 아마도 코드는 유익 할 것입니다.

(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))))) 

(이 질문 외에) 해결하려는 특정 문제가 있습니까?

+0

자세한 답변을 보내 주셔서 감사합니다. 어제 핵심 모드 또는 외부 패키지에 정의 된 특정 키 바인딩인지를 파악하려고 할 때 질문이 어제 마음에 들었습니다. –

1

그냥 할 MX 찾기 기능

이맥스 문서에서 :

(찾기 기능 함수)

근처에있는 함수 의 정의를 찾습니다.

포인트 근처 함수의 정의를 포함하는 소스 파일을 검색한다 (의해 선택된 `함수에서 소수점 소위 ')가 버퍼 장소는 정의 전에 가리. 버퍼가 이미있는 경우 이동하기 전에 표시를 설정하십시오.

+0

그건 내가 원하는 것이 아닙니다. 이것은 * keybinding *이 아닌 * function *이 정의 된 곳을 알려줍니다. –

+0

나는 그걸 알아낼 수 있다고 생각하지 않아. –

관련 문제