emacs, flyspell, деактивировать "C-". связывание ключей
У меня есть эта маленькая проблема, у меня есть некоторые привязки клавиш, как так C-. C-x
или же C-. C-m
, После активации режима flyspell я не могу использовать эти команды. В моем файле.emacs у меня есть следующие 2 строки перед
(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, и у меня та же проблема.
1 ответ
Как насчет:
(eval-after-load "flyspell"
'(define-key flyspell-mode-map (kbd "C-.") nil))
Ваше первое решение почти правильное, но вы должны помнить, что текущая локальная карта настроена на основной режим, а не второстепенный режим. Лучший вариант у вас есть прямой доступ flyspell-mode-map
и изменить его (другой вариант будет найти его в minor-mode-map-alist
но я думаю это было бы излишне сложно).
Кроме того, я предпочитаю помещать такие специфичные для режима настройки в eval-after-load
(что означает, что они будут оцениваться один раз), а не в ловушке (в этом случае настройки оцениваются несколько раз: каждый раз, когда активируется один буфер) flyspell-mode
). Но это вопрос предпочтений, и в любом случае это нормально.