Привязка в режиме ido, маскируемая глобальным ключом набора
Переполнение стека! В последние несколько дней я пытался немного настроить свой emacs и столкнулся с проблемой, к которой я не знаю, как подойти.
То, что я пытаюсь сделать, - это определить глобальную привязку клавиш и привязку в режиме ido-mode, которые будут использовать одни и те же клавиши для выполнения разных задач.
Связывание клавиш в режиме Ido определяется следующим образом:
(defun ido-my-keys ()
"Add my keybindings for ido."
(define-key ido-completion-map (kbd "M-<return>")
'ido-invoke-in-vertical-split)
)
(add-hook 'ido-setup-hook 'ido-my-keys)
И это работает нормально, пока я не помещу следующую строку в мой файл.emacs:
(global-set-key (kbd "M-<return>") 'insert-newline-and-indent)
С этой строкой присутствует M-return вызывает insert-newline-and-indent даже из ido-switch-buffer. Интересно, что когда я использую глобальный набор ключей в интерактивном режиме (то есть не из файла инициализации, а из вызова Mx), все работает, как и ожидалось.
Спасибо за вашу помощь. Извините за мой английский.
Проблема оказалась в режиме ergoemacs, который я включил. Этот режим определяет совет для global-set-key, который вызывает этот эффект.
Я решил проблему, переместив вызов глобального набора ключей над инициализацией ergoemacs. Не лучшее решение, но простое.
1 ответ
Проблема была вызвана пакетом ergoemacs-keybindings или, если быть более точным, файлом ergoemacs-mode.el
Этот пакет определяет совет для global-set-key, который фактически заменяет его собственным ergoemacs-global-set-key. Но так как ergoemacs является второстепенным режимом, его раскладка ключей имеет более высокий приоритет, чем глобальная карта, таким образом переопределяя связывание клавиш в режиме ido minor.
Я вижу три решения этой проблемы:
- Советы по комментированию в ergoemacs-mode.el.
- Используйте глобальный набор ключей ДО ТОГО, как вы включите режим ergoemacs.
- Подождите, пока автор ergoemacs исправит ошибку;)