문제

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'에 의해 선택됨)를 포함하는 소스 파일을 찾아 정의 전에 장소 지점을 찾습니다. 버퍼가 이미 존재 한 경우 이동하기 전에 마크를 설정하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top