Occasionally ido12 Feb 2015
As I was refactoring my
.emacs, I found a silly wrapper around
describe-function that uses
ido-completing-read. I think I was
aware at the time that
could simply make
problem was that it also affected the
completing-read in functions
(see the corresponding post
if you missed it).
A bit of code to make things right
(defun ido-occasional-completing-read (prompt collection &optional predicate require-match initial-input hist def inherit-input-method) "Use `ido-completing-read' if the collection isn't too large. Fall back to `completing-read' otherwise." (let ((filtered-collection (all-completions "" collection predicate))) (if (<= (length filtered-collection) 30000) (ido-completing-read prompt filtered-collection nil require-match initial-input hist def nil) (completing-read prompt collection predicate require-match initial-input hist def inherit-input-method)))) ;;;###autoload (defmacro with-ido-completion (fun) "Wrap FUN in another interactive function with ido completion." `(defun ,(intern (concat (symbol-name fun) "/with-ido")) () ,(format "Forward to `%S' with ido completion." fun) (interactive) (let ((completing-read-function 'ido-occasional-completing-read)) (call-interactively #',fun))))
The only thing that
ido-occasional-completing-read does is to
predicate and pass it on to
with-ido-completion is just a convenience wrapper.
(global-set-key (kbd "<f1> f") (with-ido-completion describe-function)) (global-set-key (kbd "<f1> v") (with-ido-completion describe-variable)) (global-set-key (kbd "<f2> i") (with-ido-completion info-lookup-symbol))
with-ido-completion will generate
describe-function/with-ido, which will subsequently be bound to
<f1> f. The good-old
describe-function is left unaffected.
Note, that if I turn on
helm-mode at this point, it will override
describe-function with its own completion, but it will not touch
describe-function/with-ido which I bound. This can be useful e.g. if
I want to use
icomplete-mode) for some
completion, but not all.
You can find the package at ido-occasional.