2012-03-13 2 views
4

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

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

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

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

Emacs: 24.0.94.1

Edit (20.03.12): После обсуждения с Francesco я оценивали: (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-о снова в минибуфере, я получаю эту ошибку: Debugger entered--Lisp error: (error "Command attempted to use minibuffer while in minibuffer")C-й С-е в минибуфере еще работал запасная команда.

Мы обнаружили, что пакет Ergoemacs имеет отношение к этому. Когда я выключаю Ergoemacs-mode, оба C-x C-f и C-o работают как резервные команды. Я пытался поменять Идо и 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

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

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