5

我使用 Ido 模式,也使用 Ergoemacs 模式,它将find-file命令绑定到C-o. 当你浏览文件时,你可以通过按下C-x C-fminibuffer 来暂时禁用 Ido。我想把它改成,这样我就可以在没有 Ido的情况下C-o按两次来运行。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-commandC-o内部 minibuffer。

Emacs 版本:24.0.94.1

编辑(20.03.12):在与弗朗切斯科讨论后,我评估:(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在 minibuffer 中再次按下时,我得到了这个错误:Debugger entered--Lisp error: (error "Command attempted to use minibuffer while in minibuffer") C-x C-f在 minibuffer 中仍然作为后备命令工作。

我们发现 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)'

没用。

4

1 回答 1

6

你可以使用这样的东西:

(define-key ido-file-completion-map "\C-o" 'ido-fallback-command)
于 2012-03-13T15:30:24.010 回答