Emacs: изменить раскладку клавиш завершения Ido в минибуфере

Я использую режим Ido, а также режим Ergoemacs, который привязывает команду find-fileк C-o. Когда вы просматриваете файлы, вы можете временно отключить Ido, нажав C-x C-fвнутри минибуфера. Я хочу изменить его на C-o, чтобы я мог дважды нажать его, чтобы запустить find-fileбез Ido. Как я могу это сделать?

В ido.elя вижу, что Ido использует функцию ido-init-completion-maps, где она определяет ключи, запуская код, подобный

(let ((map (make-sparse-keymap)))
  (define-key map "\C-x\C-f" 'ido-fallback-command))

. Однако я не уверен как использовать это для привязки ido-fallback-commandк Coвнутри минибуфера.

Версия Emacs: 24.0.94.1

Редактировать (20.03.12): После обсуждения с Франческоя оценил: (define-key ido-file-completion-map " \Co" 'идо-резервная-команда).

Теперь, когда я нажимаю C-h k C-o, я вижу эту строку: C-o Возврат к версии текущей команды, отличной от ido.

Однако, когда я снова нажимаю Coв минибуфере, я получаю эту ошибку: Отладчик вошел -- Ошибка Лиспа: (ошибка «Команда попыталась использовать минибуфер, находясь в минибуфере»)Cx Cfв минибуфере по-прежнему работал как резервная команда.

Мы выяснили, что к этому причастен пакет Ergoemacs.Когда я выключаю режим Ergoemacs, обе команды C-x C-f и C-o работают как резервные команды. Я попытался поменять местами раскладки клавиш Ido и Ergoemacs в minor-mode-map-alist, используя следующий код:

(let ((elem (first
         (remove-if-not
          '(lambda (item) (equal 'ido-mode (car item)))
          minor-mode-map-alist))))
  (setq minor-mode-map-alist (remove elem minor-mode-map-alist))
  (add-to-list 'minor-mode-map-alist elem))

(define-key ido-file-completion-map "\C-o" 'ido-fallback-command)'

Не сработало.

5
задан Community 23 May 2017 в 12:20
поделиться