2013-04-18 12 views
5

Mam ten mały problem, mam pewne kluczowe wiązania, takie jak C-. C-x lub C-. C-m. Po aktywowaniu trybu "flyspell" nie mogę używać tych poleceń. W moim pliku .emacs mam kolejne 2 linie przedemacs, flyspell, dezaktywuj "C-." key binding

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

Następnie moich C-. C-l działa, ale nie kiedy jest włączony flyspell-mode. Polecenie powiązane z C-. to flyspell-auto-correct-word. Próbowałem dezaktywować go w następujący sposób:

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

Żadna z prób pracy, co mogę zrobić? Próbowałem w Emacs 23 i 24 i mam ten sam problem.

Odpowiedz

9

Co o:

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

Pierwszym rozwiązaniem jest prawie poprawne, ale trzeba pamiętać, że obecna lokalna mapa jest ustanowiony przez tryb dur, a nie drobne trybach. Najlepszą opcją jest bezpośredni dostęp do flyspell-mode-map i modyfikowanie go (inną opcją byłoby znalezienie go w minor-mode-map-alist, ale myślę, że byłoby to niepotrzebnie skomplikowane).

Również wolę wprowadzać takie ustawienia specyficzne dla trybu w ramach eval-after-load (co oznacza, że ​​będą one oceniane raz), a nie w hakowaniu (w takim przypadku ustawienia są oceniane wiele razy: za każdym razem, gdy jeden bufor aktywuje flyspell-mode). Ale jest to kwestia preferencji i tak czy inaczej jest w porządku.

+0

Wielkie dzięki, działa sprawnie teraz =) – silgon

+0

Mam ten sam problem, ale teraz z php-mode, tym razem próbowałem (eval-after-load "php" (define-key php-mode- map (kbd "C-.") nil)), ale nie działa. Wiem, powinienem zmienić moje klawisze, ale chciałbym wiedzieć, dlaczego to nie działa, dziękuję! – silgon

+0

Nie mam zainstalowanego 'php-mode' w moim systemie; czy to standard? Powinieneś sprawdzić, która biblioteka definiuje 'php-mode' oraz' php-mode-map'. Można to zrobić, uzyskując dostęp do systemu dokumentacji emacsa za pomocą 'C-h v php-mode-map' lub' C-h f php-mode'. Nazwa, którą powinieneś umieścić w formularzu 'eval-after-load' jest nazwą biblioteki bez przyrostka" .el ". – Francesco

Powiązane problemy