2013-04-18 6 views
5

У меня есть эта небольшая проблема, у меня есть некоторые ключевые привязки вроде C-. C-x или C-. C-m. После активации режима flyspell я не могу использовать эти команды. В моем файле .emacs у меня есть следующие 2 строки доemacs, flyspell, деактивировать "C-." ключевое связывание

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

Тогда, мой C-. C-l работает, но это не делает, когда Flyspell-режим. Команда, связанная с C-., равна flyspell-auto-correct-word. Я попытался отключить его следующим образом:

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

Ни одна из попыток не работает, что мне делать? Я пробовал в Emacs 23 и 24, и у меня такая же проблема.

ответ

9

насчет:

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

Ваше первое решение почти правильно, но вы должны помнить, что текущая локальная карта устанавливается в основном режиме, а не второстепенные режимы. Лучший вариант, который у вас есть для прямого доступа к flyspell-mode-map и его модификации (другой вариант - найти его в minor-mode-map-alist, но я думаю, что это было бы бесполезно сложно).

Кроме того, я предпочитаю устанавливать такие параметры для режима в пределах eval-after-load (что означает, что они будут оцениваться один раз), а не крючком (в этом случае настройки оцениваются несколько раз: каждый раз, когда один буфер активирует flyspell-mode). Но это вопрос предпочтения, и в любом случае все в порядке.

+0

Спасибо большое, он работает гладко сейчас =) – silgon

+0

У меня такая же проблема, но теперь с php-режимом, на этот раз я попробовал (eval-after-load "php" (define-key php-mode- map (kbd «C-.») nil)), но он не работает. Я знаю, я должен изменить свое ключевое слово, но я хотел бы знать, почему он не работает, спасибо! – silgon

+0

У меня нет 'php-mode', установленного в моей системе; это стандарт? Вы должны проверить, какая библиотека определяет «php-mode» и «php-mode-map». Это можно сделать, обратившись в систему документации emacs с помощью 'C-h v php-mode-map' или' C-h f php-mode'. Имя, которое вы должны ввести в форму «eval-after-load», - это имя библиотеки без суффикса «.el». – Francesco

 Смежные вопросы

  • Нет связанных вопросов^_^