2012-12-20 8 views
9

In emacs, come posso visualizzare i binding di tasti ombreggiati/sovrascritti per il buffer corrente? Non si visualizzano quando si esegue describe-bindings (C-h b).Come visualizzare i binding chiave sovrascritti/ombreggiati?

In altre parole: come posso vedere se le modalità attive in un buffer hanno binding di tasti in conflitto?

+0

immagino una soluzione consiste nell'utilizzare un modo minore come quello in http://stackoverflow.com/a/683575/789593 e vedere se un determinato tasto ha un altro comando quando quella modalità secondaria è disattivata. Un approccio ancora più rozzo potrebbe essere quello di avviare Emacs con 'emacs -q' per vedere se una chiave nella tua configurazione ha un altro bind senza la tua configurazione. –

+0

Sfortunatamente, questo non risolve il problema delle modalità minori in conflitto: dovresti testare ogni possibile coppia di modi minori individualmente. – Norswap

risposta

7

Basta chiamare describe-mode: Chm

La maggior parte dei docstrings modalità visualizzerà le loro keymap, e il metodo utilizzato per elencarli qui indica anche se un'associazione è in ombra.

E non ti dice che cosa è in ombra da, ma, naturalmente, che è banale per verificare con C-hc o C-hk.

es .:

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

Tale testo viene generato dalla funzione substitute-command-keys che elabora il docstring modalità quando la funzione documentation viene chiamato.

es:

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

Le seguenti funzioni possono anche essere utili:

(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

per il gusto di farlo ho fatto questo:

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

e poi ha fatto C-H B (per vedere le associazioni). E ottenuto questo output:

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 

quindi sembra essere in mostra.

È questo che intendevi?

creato questa funzione che ti dà il valore precedente quando si definisce una chiave

(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

Quello che mi piacerebbe vedere è il binding che è stato ombreggiato da C-c C-s. Per esempio, se prima di invocare 'define-key',' C-c C-s' era legato a 'my-command', quindi mi piacerebbe vedere' C-c C-s my-command (ombreggiato) 'apparire da qualche parte. – Norswap

+0

ah. quindi abbiamo bisogno di un modo per scaricare/accedere ai collegamenti predefiniti per la modalità. devi pensarci un momento – kdubs

+0

sembra che una volta che si lega la chiave, cancella completamente qualsiasi suggerimento della chiave precedente. Svincolando la chiave, la lascia vuota. sembra che non avrò alcun aiuto. – kdubs

Problemi correlati