unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* With lexical-binding t, how do I bind an external symbol dynamicall?
@ 2015-08-29 16:35 Alan Mackenzie
  2015-08-29 17:30 ` Philipp Stephani
  0 siblings, 1 reply; 3+ messages in thread
From: Alan Mackenzie @ 2015-08-29 16:35 UTC (permalink / raw)
  To: emacs-devel

Hello, Emacs!

In some Elisp with no knowledge of the variable `some-flag', which will
be defined elsewhere, I want to write

	(let (some-flag) ....)

to bind `some-flag' dynamically.  The byte-compiler give me the warning:

    Unused lexical variable `some-flag'

.  Somehow, I need to tell the byte-compiler that `some-flag' will be an
external dynamic variable.  How do I do this?

I've had a look around the "Variables" page, and its sub-pages, in the
elisp manual, yet didn't find any instructions on how to get round this
problem.  Where in the manual is it described?

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: With lexical-binding t, how do I bind an external symbol dynamicall?
  2015-08-29 16:35 With lexical-binding t, how do I bind an external symbol dynamicall? Alan Mackenzie
@ 2015-08-29 17:30 ` Philipp Stephani
  2015-08-29 18:07   ` Alan Mackenzie
  0 siblings, 1 reply; 3+ messages in thread
From: Philipp Stephani @ 2015-08-29 17:30 UTC (permalink / raw)
  To: Alan Mackenzie, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1089 bytes --]

Alan Mackenzie <acm@muc.de> schrieb am Sa., 29. Aug. 2015 um 18:34 Uhr:

> Hello, Emacs!
>
> In some Elisp with no knowledge of the variable `some-flag', which will
> be defined elsewhere, I want to write
>
>         (let (some-flag) ....)
>
> to bind `some-flag' dynamically.  The byte-compiler give me the warning:
>
>     Unused lexical variable `some-flag'
>
> .  Somehow, I need to tell the byte-compiler that `some-flag' will be an
> external dynamic variable.  How do I do this?
>
>
Use (defvar some-flag) before using some-flag. That will do nothing except
marking some-flag as special (dynamic).


> I've had a look around the "Variables" page, and its sub-pages, in the
> elisp manual, yet didn't find any instructions on how to get round this
> problem.  Where in the manual is it described?
>
>
It's mentioned in 16.6 Compiler Errors, but without mentioning dynamic
binding. I discovered the behavior by looking at the Emacs source code; but
this should be stated more prominently in the Elisp manual because it can
lead to subtle errors if the warning is ignored or silenced.

[-- Attachment #2: Type: text/html, Size: 1605 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: With lexical-binding t, how do I bind an external symbol dynamicall?
  2015-08-29 17:30 ` Philipp Stephani
@ 2015-08-29 18:07   ` Alan Mackenzie
  0 siblings, 0 replies; 3+ messages in thread
From: Alan Mackenzie @ 2015-08-29 18:07 UTC (permalink / raw)
  To: Philipp Stephani; +Cc: emacs-devel

Hello, Philipp.

On Sat, Aug 29, 2015 at 05:30:20PM +0000, Philipp Stephani wrote:
> Alan Mackenzie <acm@muc.de> schrieb am Sa., 29. Aug. 2015 um 18:34 Uhr:

> > Hello, Emacs!

> > In some Elisp with no knowledge of the variable `some-flag', which will
> > be defined elsewhere, I want to write

> >         (let (some-flag) ....)

> > to bind `some-flag' dynamically.  The byte-compiler give me the warning:

> >     Unused lexical variable `some-flag'

> > .  Somehow, I need to tell the byte-compiler that `some-flag' will be an
> > external dynamic variable.  How do I do this?


> Use (defvar some-flag) before using some-flag. That will do nothing except
> marking some-flag as special (dynamic).

Ah!  It's obvious, isn't it?  ;-)  Thank you very much indeed!  I've now
restored the lexical-binding to the pertinent file.el

> > I've had a look around the "Variables" page, and its sub-pages, in the
> > elisp manual, yet didn't find any instructions on how to get round this
> > problem.  Where in the manual is it described?


> It's mentioned in 16.6 Compiler Errors, but without mentioning dynamic
> binding. I discovered the behavior by looking at the Emacs source code; but
> this should be stated more prominently in the Elisp manual because it can
> lead to subtle errors if the warning is ignored or silenced.

Yes.  I think a bug report is in order.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-08-29 18:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-29 16:35 With lexical-binding t, how do I bind an external symbol dynamicall? Alan Mackenzie
2015-08-29 17:30 ` Philipp Stephani
2015-08-29 18:07   ` Alan Mackenzie

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).