Subject: bug#45125: Subject: 28.0.50; defvar dynamics

From: Drew Adams <[email-masked]>
Date: Tue, 8 Dec 2020 13:54:15 -0800 (PST)

> See NEWS:
> 
> ** 'eval-last-sexp' now handles 'defvar'/'defcustom'/'defface'
> specially.
> This command would previously not redefine values defined by these
> forms, but this command has now been changed to work more like
> 'eval-defun', and reset the values as specified.

Yes, well, this does mean that you can no longer realize
the old behavior.

It's good to be able to interactively evaluate an
individual defvar, to have updated text take effect.

But by putting this on `C-x C-e' it means that you can no
longer select a whole bunch of code that might include
some defvars, and be able to count on the defvars having
their normal behavior (eval only when not yet initialized).

It might be good to have some way of getting the best of
both worlds.  Unfortunately, prefix args of various sorts
are already defined, and there's no easy way to have a
prefix arg that's orthogonal (i.e., can apply across the
other prefix-arg behaviors).

Of course, we still have `eval-region'.  Still, there's a
loss here, even if there's some gain.

IIRC, the main motivation for this change was the repeated
complaint that `C-M-x' doesn't update a `defface'.  How we
ended up with a wholesale change of `C-x C-e', including
for `defvar', I'm not certain.  Seems a bit of a shame, no?