Emacs:改变迷你缓冲区中的Ido完成键映射

Mir*_*lov 5 emacs elisp ido

我使用Ido模式并使用Ergoemacs模式,它将find-file命令绑定到C-o.当您浏览文件时,可以通过按下C-x C-f迷你缓冲区暂时禁用Ido .我想把它改成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))
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何使用它来绑定ido-fallback-commandC-o迷你缓冲区内.

Emacs版本:24.0.94.1

编辑(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-o再次按下迷你缓冲区时,我收到此错误:Debugger entered--Lisp error: (error "Command attempted to use minibuffer while in minibuffer") C-x C-f在迷你缓冲区中仍然作为后备命令.

我们发现Ergoemacs包与它有关.当我关闭Ergoemacs模式,都C-x C-fC-o工作作为后备的命令.我尝试minor-mode-map-alist使用以下代码交换Ido和Ergoemacs键映射:

(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)'
Run Code Online (Sandbox Code Playgroud)

没工作.

ffe*_*tte 6

你可以使用这样的东西:

(define-key ido-file-completion-map "\C-o" 'ido-fallback-command)
Run Code Online (Sandbox Code Playgroud)