编辑:这现在是MELPA 提供的 Emacs 包。它已扩展为成熟的次要模式。开发发生在 GitHub 上。
原帖:
这是我对 Jacobo 答案的改进。归功于他的原始魔法。我添加了一个覆盖变量,您可以使用它来防止ido-completing-read
在特定函数中使用。我还添加了一个检查,如果没有完成,则使用原始的完成读取(这种情况偶尔会发生,例如在org-remember-apply-template
来自 org-mode 的情况下,这与 Jacobo 的原始建议不同)。
(defvar ido-enable-replace-completing-read t
"If t, use ido-completing-read instead of completing-read if possible.
Set it to nil using let in around-advice for functions where the
original completing-read is required. For example, if a function
foo absolutely must use the original completing-read, define some
advice like this:
(defadvice foo (around original-completing-read-only activate)
(let (ido-enable-replace-completing-read) ad-do-it))")
;; Replace completing-read wherever possible, unless directed otherwise
(defadvice completing-read
(around use-ido-when-possible activate)
(if (or (not ido-enable-replace-completing-read) ; Manual override disable ido
(boundp 'ido-cur-list)) ; Avoid infinite loop from ido calling this
ad-do-it
(let ((allcomp (all-completions "" collection predicate)))
(if allcomp
(setq ad-return-value
(ido-completing-read prompt
allcomp
nil require-match initial-input hist def))
ad-do-it))))
哦,对于使用 ido in M-x,请使用amx。