Subject: bug#31783: [PATCH v2] ido.el: define a special ido-fallback variable

From: Eli Zaretskii <[email-masked]>
Date: Mon, 11 Jun 2018 18:28:13 +0300

> From: Noam Postavsky <[email-masked]>
> Date: Mon, 11 Jun 2018 08:19:03 -0400
> Cc: [email-masked]
> 
> Christophe Junke <[email-masked]> writes:
> 
> > I agree that it is simpler to rename the existing variable, and just
> > add a defvar declaration. Here is a different version of the patch
> > which does only this.
> 
> > +;; Indicates which fallback command to call when ido-exit is 'fallback.
> > +(defvar ido-fallback nil)
> 
> > -(defun ido-buffer-internal (method &optional fallback prompt default initial switch-cmd)
> > +(defun ido-buffer-internal (method &optional ido-fallback prompt default initial switch-cmd)
> 
> I believe this doesn't work, function parameters are always lexically
> bound.  Compare
> 
>     ; -*- lexical-binding: t -*-
>     (setq lexical-binding t) ; for use in *scratch*
> 
>     (defvar x nil)
> 
>     (disassemble (lambda (x y)
>                    (+ x y)))
> 
>     (let ((x 1))
>       (disassemble (lambda (y)
>                      (+ x y))))
> 
> So I think your first patch was fine.

There's some misunderstanding here, most probably mine.  Sorry; please
help me understand what am I missing.

The original report said that the problem was caused by using
lexical-binding in ido.el, so I proposed to defvar the offending
variable to make it dynamically bound, which is the boilerplate
solution for all such problems.  I thought that was all that was
needed, and I definitely didn't suggest to rename anything.

What did I miss?