2013-04-18 3 views
5

J'ai ce petit problème, j'ai quelques raccourcis clavier comme C-. C-x ou C-. C-m. Après avoir activé le mode flyspell, je ne peux pas utiliser ces commandes. Dans mon .emacs j'ai les 2 lignes suivantes avantemacs, flyspell, désactiver "C-." touche de liaison

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

Ensuite, mes C-. C-l œuvres, mais il n'a pas lorsque le Flyspell-mode est activé. La commande liée à C-. est flyspell-auto-correct-word. J'ai essayé de le désactiver comme suit:

;; 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) 

Aucun des essais fonctionne, que puis-je faire? J'ai essayé dans Emacs 23 et 24 et j'ai le même problème.

Répondre

9

Qu'en est-:

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

Votre première solution est presque correcte, mais il faut se rappeler que la carte locale actuelle est mis en place par le mode majeur, pas de modes mineurs. La meilleure option que vous avez pour accéder directement flyspell-mode-map et le modifier (une autre option serait de le trouver dans minor-mode-map-alist mais je pense que ce serait inutilement compliqué). En outre, je préfère mettre ces paramètres spécifiques au mode dans eval-after-load (ce qui signifie qu'ils seront évalués une fois) plutôt que dans un crochet (auquel cas les paramètres sont évalués plusieurs fois: chaque fois qu'un tampon active flyspell-mode). Mais c'est une question de préférence et l'un ou l'autre moyen est bon.

+0

Merci beaucoup, ça marche bien maintenant =) – silgon

+0

J'ai le même problème mais maintenant avec le mode php, cette fois j'ai essayé (eval-after-load "php" '(define-key php-mode- map (kbd "C-.") nil)) mais ça ne marche pas. Je sais, je devrais changer ma reliure mais j'aimerais savoir pourquoi ça ne marche pas, merci! – silgon

+0

Je n'ai pas 'php-mode' installé sur mon système; Est-ce standard? Vous devriez vérifier quelle bibliothèque définit 'php-mode' et' php-mode-map'. Cela peut être fait en accédant au système de documentation d'emacs avec 'C-h v php-mode-map' ou' C-h f php-mode'. Le nom que vous devriez mettre dans le formulaire 'eval-after-load' est le nom de la bibliothèque sans son suffixe" .el ". – Francesco

Questions connexes