2013-04-18 7 views
5

Ho questo piccolo problema, ho alcuni collegamenti chiave come C-. C-x o C-. C-m. Dopo aver attivato la modalità flyspell, non posso usare questi comandi. Nel mio file .emacs ho i prossimi 2 righe primaemacs, flyspell, disattivare "C-" legatura delle chiavi

(global-unset-key (kbd "C-.")) 
(define-key (current-global-map) (kbd "C-.") nil) 
(global-set-key (kbd "C-. C-l") 'global-linum-mode) 

Poi, i miei C-. C-l opere, ma non quando viene attivata la flyspell-mode. Il comando associato a C-. è flyspell-auto-correct-word. Ho provato a disattivarlo come segue:

;; first try 
(defun flyspell-auto-correct-word-disable() (define-key (current-local-map) (kbd "C-.") nil)) 
(add-hook 'flyspell-mode-hook 'flyspell-auto-correct-word-disable) 
;; second try 
(define-key (current-global-map) [remap flyspell-auto-correct-word] nil) 

Nessuno dei tentativi funziona, cosa posso fare? Ho provato in Emacs 23 e 24 e ho lo stesso problema.

risposta

9

Che dire:

(eval-after-load "flyspell" 
    '(define-key flyspell-mode-map (kbd "C-.") nil)) 

tua prima soluzione è quasi corretto, ma bisogna ricordare che la mappa locale corrente è costituita dalla modalità principale, non modalità secondarie. La migliore opzione è quella per accedere direttamente a flyspell-mode-map e modificarlo (un'altra opzione sarebbe trovarlo in minor-mode-map-alist ma penso che sarebbe inutilmente complicato).

Inoltre, preferisco mettere tali impostazioni specifiche modalità entro eval-after-load (che significa che saranno valutate una volta) anziché a un gancio (nel qual caso le impostazioni vengono valutati più volte: ogni volta che un buffer attiva flyspell-mode). Ma questa è una questione di preferenze e in entrambi i casi va bene.

+0

Grazie mille, sta funzionando senza intoppi ora =) – silgon

+0

Sto avendo lo stesso problema, ma ora con php-mode, questa volta ho provato (eval-post-carico "php" '(define-chiave php-Mode- map (kbd "C-.") nil)) ma non funziona. Lo so, dovrei cambiare il mio keybinding ma mi piacerebbe sapere perché non funziona, grazie! – silgon

+0

Non ho 'php-mode' installato sul mio sistema; è standard? Dovresti controllare quale libreria definisce 'php-mode' e' php-mode-map'. Questo può essere fatto accedendo al sistema di documentazione di emacs con 'C-h v php-mode-map' o' C-h f php-mode'. Il nome che dovresti inserire nel modulo 'eval-after-load' è il nome della libreria senza il suffisso" .el ". – Francesco