Skip to main content
8 votes
Accepted

Variable scope issue in scratch buffer?

Your Emacs version (29, most likely) has silently changed the value of lexical-binding from nil to t in the *scratch* buffer. When you use C-M-x to evaluate only those functions that variable isn't ...
Drew's user avatar
  • 78k
8 votes
Accepted

Why does defvar scoping work differently without an initvalue?

Why the two are treated differently is mostly "because that's what we needed". More specifically, the single-argument form of defvar appeared a long time ago, but later than the other and was ...
Stefan's user avatar
  • 26.5k
8 votes
Accepted

Why does calling expand-file-name indirectly produce a different result?

In short: dynamic binding. It is maybe a little unfortunate that default-directory was used as the argument to expand-file-name. Note the docstring: (expand-file-name NAME &optional DEFAULT-...
phils's user avatar
  • 51.7k
7 votes
Accepted

How do I temporarily mock a function for testing?

Both macros are lexically scoped, that's why they have no effect on the "distant" call. Either use the deprecated older flet or cl-letf. (cl-letf (((symbol-function 'return-number) (...
politza's user avatar
  • 3,346
7 votes
Accepted

About closure creation

You asked: Will be useful to write/build literal closures? Should it be a good practice? any example? Why the closure is not a real type instead of cons? All three questions are answered ...
Tobias's user avatar
  • 33.3k
5 votes

How does scoping work in emacs lisp

All functions and variables defined in a file that gets loaded are put into the global environment. Although Emacs has installable packages, those packages are not isolated from each other in any way. ...
db48x's user avatar
  • 18.4k
5 votes
Accepted

why is a let binding is ignored in compiled function?

You're compiling the file using lexical binding, so I suspect the problem is that your file does neither of the following: (defvar bibtex-completion-bibliography) (require 'bibtex-completion) either ...
phils's user avatar
  • 51.7k
5 votes

How to temporarily change the definition of a function?

How to temporarily change the definition of a function? Calling a function by its (symbol) name means calling that symbol's function slot. So, to temporarily change the definition of a function that ...
Basil's user avatar
  • 12.5k
4 votes

Why does defvar scoping work differently without an initvalue?

Based on experimentation, I believe the issue is that (defvar VAR) with no init value only has an effect on the library(s) it appears in. When I added (defvar my-dynamic-var) to the *scratch* buffer, ...
phils's user avatar
  • 51.7k
4 votes
Accepted

Inconsistency in emacs' rules of scope?

Lexical scope (recently added to emacs) changes the rules, and some documentation is still out of date. The current documentation for setq is this manual page which says When dynamic variable binding ...
amitp's user avatar
  • 2,541
4 votes

Accessing the global value of a locally altered variable

In addition to what @cyberbisson has said (no, you cannot) ... First, in this: (setq foo 2) (let ((foo 3)) ;; can I access the original value here? ) there is nothing that says that the (setq ...
Drew's user avatar
  • 78k
4 votes
Accepted

How does one "extend" an existing function?

TL;DR: As mentioned by the comments on your initial question, you are looking for Advising Functions. Even though this question has been idle for a while at the time of my writing this, I wanted to ...
cyberbisson's user avatar
3 votes
Accepted

Search in readable eww buffer

You seem to be using dynamic binding which means that str would be evaluated once your lambda function is executed at which time the variable str is no longer in scope. You should turn on lexical ...
martin_joerg's user avatar
3 votes
Accepted

How to avoid variable name collisions in my init file?

Using a should-be-unique prefix is recommended. For init file code I like to use my- because: it is suitably unlikely to conflict with anything. it's short, but meaningful. it's not my name -- so ...
phils's user avatar
  • 51.7k
2 votes
Accepted

How to fix Warning: assignment to free (local) variable in lambda function

As usual for this kind of thing, just put (defvar orig-win-config) near the beginning of the same file. That declares orig-win-config as a dynamic variable. Otherwise, the byte-compiler thinks that (...
Drew's user avatar
  • 78k
2 votes

Top-level variables, local variables, variable scoping and the difference between set and setq

Looking at Using Lexical Binding it appears that a needs to be defined special which in using setq it is not. Modifying your example to use defvar gives the answers expected. ;;; -*- lexical-binding:...
alls0rts's user avatar
  • 376
2 votes

How did `cl-flet` got circumvented?

You are out of luck here; this is the correct intended behavior. #'counsel-fzf-action refers to the global function definition of counsel-fzf-action, not the local one. The cl-flet binding is local, ...
sds's user avatar
  • 6,124
2 votes
Accepted

Why is org-table-calc-current-TBLFM throwing Wrong type argument: integer-or-marker-p Error?

Ah, very nice. Remember that elisp is dynamically scoped, so any function that you call can see and overwrite any variable you define, and any function that you write can do the same for any variable ...
db48x's user avatar
  • 18.4k
2 votes
Accepted

`make-local-variable` Behaves Differently depending on Whether Variable is Special

Variables with dynamic scope can have global and buffer-local values, which are associated with the canonical symbol for the variable. The global vs buffer-local concepts are irrelevant to lexically-...
phils's user avatar
  • 51.7k
2 votes

Warning: assignment to free variable ‘skeleton-pair’

It's just a warning. With your setq you're assigning a value to a global variable. Emacs is just letting you know this. You didn't explicitly tell Emacs that skeleton-pair is a global variable. To do ...
Drew's user avatar
  • 78k
1 vote
Accepted

dynamic scoping rules work differently after redefining an autoloaded function without changing its code

In your example, result is a let-bound lexical variable in the org-babel-execute-src-block function (which is defined in ob-core.el which uses -*- lexical-binding: t; -*-). This means that result is ...
phils's user avatar
  • 51.7k
1 vote

How did `cl-flet` got circumvented?

There are many options for overriding functions, with many different behaviours. https://stackoverflow.com/questions/39550578/in-emacs-what-is-the-difference-between-cl-flet-and-cl-letf will probably ...
phils's user avatar
  • 51.7k
1 vote

How does scoping work in emacs lisp

OP seems to be missing the point already clearly made in the two answers given: you cannot do what you are asking. Emacs uses a voluntary naming convention, not syntax or compilation rules, to define ...
Phil Hudson's user avatar
  • 1,796
1 vote

How does scoping work in emacs lisp

In Elisp, all functions names normaly (but not necessarily) reside as an entry in a global environment (obarray). In Elisp functions can be redefined. Which means the function definition which has ...
jue's user avatar
  • 4,596
1 vote

Accessing the global value of a locally altered variable

The short answer is "no", there's really no means of escaping to a different scope like you might do in a language like C++. There may be a very hacky way of getting to the variable if you use ...
cyberbisson's user avatar
1 vote

Forcing lexical-scope in the middle of dynamic-scope

This is arguably a duplicate of How to avoid use of `lexical-let`, and there are many different questions here. While you may be able to hack something to get some code to sometimes work, I don't ...
Stefan's user avatar
  • 26.5k
1 vote
Accepted

capture and replay a closure later

I was experimenting with the reader macros and I think I figured it out. The problem is that I am trying to evaluate, the let values twice. Once when they are first bound and then again when we rebind ...
Prgrm.celeritas's user avatar
1 vote
Accepted

Changing a mode's keymap for the duration of a command's execution

The comment you wrote on of the other answers was very useful in figuring out what you want to do; I hope I understood correctly. I believe you want to write a command that prompts for a string from ...
Omar's user avatar
  • 4,842

Only top scored, non community-wiki answers of a minimum length are eligible