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

时间:2012-03-13 15:19:06

标签: 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))

但是我不知道如何使用它来将ido-fallback-command绑定到迷你缓冲区内的 C-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-f C-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)'

没用。

1 个答案:

答案 0 :(得分:6)

您可以使用以下内容:

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