2013-10-11 11 views
5

Ho creato una chiave personalizzata macro vincolante come segue:Emacs Unbind una modalità di KeyBinding

(global-set-key (kbd "C-C C-c") "\C-a\C- \C-n\M-w\C-y")

Il problema è che C-c C-c definito per python-send-buffer in python-mode. Quindi la mia macro funziona per tutte le modalità eccetto la modalità python. Suppongo che python-mode sia valutato dopo il mio file init, quindi sovrascrive quella keybinding.

Ho provato a disattivare C-c C-c utilizzando (eval-after-load "python-mode") e utilizzando global-unset-key ma ciò non funziona. C-c C-c in python esegue sempre il mapping su python-send-buffer.

Come posso disabilitare completamente Python di C-c C-c, e utilizzare il mio macro, invece?

Sto usando Emacs 24.2.1.

+0

C-c C-c è definito per un sacco di modi. Forse dovresti considerare http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs – scottfrazer

+1

oppure prendere in considerazione l'uso di una chiave diversa. 'Cc' seguito da un tasto di controllo (come' Cc') è "riservato per le principali modalità", il che significa che il codice Lisp che definisce una modalità principale ha il diritto di usarlo (e spesso usano 'Cc Cc', come ScottFrazer disse). Gli utenti hanno comunque il diritto di associare tale chiave, ovviamente, ma sappiate che le modalità principali si sentiranno libere di farlo anche, quindi potrebbe essere necessario trovare una chiave sostitutiva da usare per tali modalità (vedere le risposte qui per quello) . Vedi il manuale Elisp, il nodo 'Convenzioni di rilegatura chiave '. – Drew

+0

@Drew Non riesco a trovare un legame C-x che sia gratuito e di facile accesso/abbia senso per fare questo copia e incolla che uso molto spesso. – darksky

risposta

7
(add-hook 'python-mode-hook 
      (lambda() 
      (local-unset-key (kbd "C-c C-c")))) 
1

Questo dovrebbe farlo:

(add-hook 'python-mode-hook 
      (lambda() 
      (define-key python-mode-map (kbd "C-c C-c") nil)))