Я использую режим 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
к C-o внутри минибуфера.
Версия Emacs: 24.0.94.1
Изменить (20.03.12): после обсуждения с Франческо я оценил: (define-key ido-file-completion-map "\C-o" 'ido-fallback-command)
.
Теперь, когда я нажимаю C-h k C-o, я вижу эту строку: C-o Fallback to non-ido version of current command
.
Однако, когда я снова нажимаю C-o в минибуфере, я получаю эту ошибку: Debugger entered--Lisp error: (error "Command attempted to use minibuffer while in minibuffer")
C-x C-f в минибуфере по-прежнему работает как резервная команда.
Мы выяснили, что тут дело в пакете 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)'
Не сработало.