Emacs: изменить раскладку Ido в минибуфере - PullRequest
5 голосов
/ 13 марта 2012

Я использую режим Ido, а также режим Ergoemacs, который связывает команду find-file с Co .Когда вы просматриваете файлы, вы можете временно отключить Ido, нажав Cx Cf внутри минибуфера.Я хочу изменить его на Co , поэтому я могу нажать его дважды, чтобы запустить 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 "\C-o" 'ido-fallback-command).

Теперь, когда я нажимаю Ch k Co , я вижу эту строку: C-o Fallback to non-ido version of current command.

Однако, когда я снова нажимаю Co в минибуфере, я получаю эту ошибку: Debugger entered--Lisp error: (error "Command attempted to use minibuffer while in minibuffer") Cx Cf в минибуфере все еще работает как команда отката.

Мы обнаружили, чтоПакет Ergoemacs имеет к этому отношение.Когда я отключаю режим Ergoemacs, оба Cx Cf и Co работают как резервные команды.Я попытался обменять таблицы ключей 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)'

Не работает.

1 Ответ

6 голосов
/ 13 марта 2012

Вы можете использовать что-то вроде этого:

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