2012-12-20 2 views
9

emacs에서 어떻게 현재 버퍼에 대해 섀도우/오버라이드 키 바인딩을 표시 할 수 있습니까? describe-bindings (C-h b)을 실행하면 표시되지 않습니다.오버라이드/섀도우 키 바인딩을 표시하는 방법은 무엇입니까?

다른 말로하면 : 버퍼의 활성 모드에서 충돌하는 키 바인딩이 있는지 어떻게 알 수 있습니까?

+0

를 내가 해결 방법은 http://stackoverflow.com/a에있는 것과 같은 사소한 모드를 사용하는 것입니다 생각/683575/789593을 실행하고 마이너 모드가 꺼져있을 때 특정 키에 다른 명령이 있는지 확인하십시오. emacs를'emacs -q'로 시작하면 구성에있는 키가 구성없이 다른 바인딩을 가지고 있는지 확인할 수 있습니다. –

+0

불행하게도 이것은 부차적 인 모드의 충돌 문제를 해결하지 못합니다. 가능한 모든 부두 모드의 쌍을 개별적으로 테스트해야합니다. – Norswap

답변

7

을 정의 할 때 당신에게 이전 값을주는이 기능은 그냥 describe-mode 전화 여기에 목록을 표시하는 데 사용되는 방법은 바인딩이 음영되었는지 여부를 알려줍니다.

그것은 그것으로 그림자 무슨 말씀하지만, 물론 C-HC 또는 C-HK 확인하기 위해 사소한 것을하지 않습니다.

예컨대 :

key    binding 
---    ------- 
[...] 
C-M-q   indent-sexp 
    (that binding is currently shadowed by another mode) 

텍스트가 documentation 함수가 호출 모드 문서화 문자열 처리 기능 substitute-command-keys에 의해 생성된다.

예 :

(substitute-command-keys "\\{lisp-interaction-mode-map}") 

다음과 같은 기능이 유용 할 수 있습니다

(key-binding KEY &optional ACCEPT-DEFAULT NO-REMAP POSITION) ;; dominant binding 
(global-key-binding KEYS &optional ACCEPT-DEFAULT) 
(local-key-binding KEYS &optional ACCEPT-DEFAULT) 
(minor-mode-key-binding KEY &optional ACCEPT-DEFAULT) ;; discover keymap(s) 
0
내가 이런 짓을 그것의 지옥에 대한

:

(define-key c++-mode-map "\C-c\C-s" 'kaw-sort-projects) 

한 다음 (바인딩을 참조하는) C-시간 B를했다. 이 출력 결과는 다음과 같습니다.

Major Mode Bindings: 
key    binding 
---    ------- 

C-c C-q  c-indent-defun 
C-c C-s  kaw-sort-projects 
C-c C-u  c-up-conditional 
C-c C-w  subword-mode 

표시되는 것처럼 보입니다.

이게 무슨 뜻인가요? 모드 문서화 문자열의 대다수는 자신의 키맵을 표시합니다

m 채널에게, 그리고 :

만들어 당신은 키

(defun define-key-warn (map key fxn) 
    "Bind a key and give info message if already bound" 
    (setq old-fxn (lookup-key map key)) 
    (if old-fxn 
     (message "INFO: key %s was defined as %s" key old-fxn)) 

    (define-key map key fxn) 
) 
+1

내가보고 싶은 것은 C-c C-s에 의해 숨겨진 바인딩입니다. 예를 들어,'define-key'를 호출하기 전에'C-c C-s'가'my-command'에 묶여 있다면,'C-C C-s my-command (shadowed)'가 어딘가에 나타나는지보고 싶습니다. – Norswap

+0

아. 모드에 대한 기본 바인딩을 덤프/액세스하는 방법이 필요합니다. 그 순간을 생각해야합니다. – kdubs

+0

키를 바인딩하면 마치 이전 키의 힌트가 완전히 지워집니다. 키의 바인딩을 풀면 비워 둡니다. 어떤 도움이 될 수없는 것처럼 보입니다. – kdubs

관련 문제