Emacs:更改minibuffer中Ido完成键映射

5
我使用Ido模式和Ergoemacs模式,将find-file命令绑定到C-o。当您浏览文件时,可以通过在minibuffer中按下C-x C-f来暂时禁用Ido。我想将其更改为C-o,这样我就可以按两次以在没有Ido的情况下运行find-file。我该怎么做?
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绑定到minibuffer中的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

然而,当我再次在minibuffer中按下C-o时,我会收到此错误:Debugger entered--Lisp error: (error "Command attempted to use minibuffer while in minibuffer")。在minibuffer中按下C-x C-f仍然可以作为fallback命令工作。

我们发现Ergoemacs包与此有关。当我关闭Ergoemacs-mode时,C-x C-fC-o都可以作为fallback命令工作。我尝试使用以下代码交换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
您可以使用类似以下内容的代码:

您可以使用类似以下内容的代码:

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

我已经尝试过将C-o设置为nil以禁用它,但并没有起作用。 - alper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接