Subject: bug#947: Recursive load of ido after unload-feature and reload

From: "Juanma Barranquero" <[email-masked]>
Date: Tue, 9 Sep 2008 16:29:40 +0200

Package: emacs
Severity: minor

emacs -Q -D
M-x ido-mode <RET>
M-x unload-feature <RET> ido <RET>
M-x ido-mode <RET>

Recursive load: "c:/emacs/trunk/lisp/ido.elc",
"c:/emacs/trunk/lisp/ido.elc", "c:/emacs/trunk/lisp/ido.elc",
"c:/emacs/trunk/lisp/ido.elc", "c:/emacs/trunk/lisp/ido.elc"

The problem is that after unloading ido, the variable ido-mode is
void, and calling ido-mode without an argument runs this code:

  (setq ido-mode
	(cond
	 ((null arg) (if ido-mode nil 'both))
         ; ...

and setting the variable ido-mode runs this code:

  :set #'(lambda (symbol value)
	   (ido-mode value))

so there's really a recursion.

I can think of several crude workarounds, but they aren't pretty and
I'm not sure they will play fair with customize.