2013-04-18 10 views
5

Ich habe dieses kleine Problem, ich habe einige Tastenbindungen wie so C-. C-x oder C-. C-m. Nachdem ich den Flyspell-Modus aktiviert habe, kann ich diese Befehle nicht mehr verwenden. In meiner .emacs-Datei habe ich die nächsten 2 Zeilen voremacs, flyspell, deaktiviere "C-". Tastenanbindung

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

Dann meine C-. C-l funktioniert, aber es funktioniert nicht, wenn der flyspell-Modus aktiviert ist. Der an C-. gebundene Befehl ist flyspell-auto-correct-word. Ich habe versucht, es wie folgt zu deaktivieren:

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

Keine der Versuche funktionieren, was kann ich tun? Ich habe es in Emacs 23 und 24 versucht und ich habe das gleiche Problem.

Antwort

9

Was:

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

Ihre erste Lösung ist fast richtig, aber man muss bedenken, dass die aktuelle lokale Karte wird durch den Hauptmodus, nicht kleinere Modi eingestellt. Die beste Option ist es, direkt auf flyspell-mode-map zugreifen und ändern (eine andere Option wäre es in minor-mode-map-alist zu finden, aber ich denke, es wäre unnötig kompliziert).

Auch bevorzuge ich setzen solche Modus-spezifische Einstellungen innerhalb eval-after-load (was bedeutet, dass sie einmal ausgewertet werden) und nicht in einem Haken (in diesem Fall werden die Einstellungen mehrfach ausgewertet: jedes Mal aktiviert ein Puffer flyspell-mode). Aber das ist eine Frage der Präferenz und jeder Weg ist in Ordnung.

+0

Vielen Dank, es funktioniert jetzt reibungslos =) – silgon

+0

Ich habe das gleiche Problem, aber jetzt mit PHP-Modus, diesmal habe ich versucht (eval-nach-laden "php" '(define-key php-mode- map (kbd "C-.") nil)) aber es funktioniert nicht. Ich weiß, ich sollte meine Tastatur ändern, aber ich würde gerne wissen, warum es nicht funktioniert, danke! – silgon

+0

Ich habe den 'php-Modus' nicht auf meinem System installiert; ist es Standard? Sie sollten prüfen, welche Bibliothek 'php-mode' und' php-mode-map' definiert. Dies kann durch Zugriff auf das Dokumentationssystem von emacs mit 'C-h v php-mode-map' oder' C-h f php-mode' erfolgen. Der Name, den Sie in das Formular "eval-after-load" schreiben sollten, ist der Name der Bibliothek ohne das Suffix ".el". – Francesco