Support for Common Lisp style destructive splicing (",.") was incomplete and broken for a long time. It has now been removed.
This means that backquote substitution now works for identifiers starting with a period ("."). Consider the following example:
(let ((.foo 42)) `,.foo)
In the past, this would have incorrectly evaluated to '(\,\. foo)',
but will now instead evaluate to
Likewise for magic-fallback-mode-alist.
add-hookdoes not always add to the front or the end any more.
The replacement of
depth implies that the function is
not always added to the very front (when append/depth is nil) or the
very end (when append/depth is t) any more because other functions on
the hook may have specified higher/lower depths. This makes it
possible to control the ordering of functions more precisely, as was
already possible in
compilation-error-regexp-alistthe old undocumented feature
line could be a function of 2 arguments has been dropped.
define-fringe-bitmapis always defined, even when Emacs is built
without any GUI support.
Loading a theme with 'M-x load-theme' still activates the theme, as it
did before. However, loading the theme's file with 'M-x load-file',
load in a Lisp program, doesn't actually apply
the theme's settings until you either invoke 'M-x enable-theme' or
type 'M-x load-theme'. (In a Lisp program, calling
load-theme with NO-ENABLE argument omitted or nil has the
same effect of activating a theme whose file has been loaded.) The
special case of the
user theme is an exception: it is frequently
used for ad-hoc customizations, so the settings of that theme are by
default applied immediately.
The variable 'custom–inhibit-theme-enable' controls this behavior; its default value changed in Emacs 27.1.
benchmark-runcan now also be a variable.
HOMEdirectory has changed.
$HOME is set to a relative file name,
interprets it relative to the directory where Emacs was started, not
relative to the default-directory of the current buffer. We recommend
$HOME to an absolute file name, so that its meaning is
independent of where Emacs was started.
file-name-absolute-pno longer considers
~footo be an absolute
file name if there is no user named "foo".
file-name-baseis now mandatory and no
longer defaults to
other serious errors prevent them from determining the result.
Formerly, these functions often (though not always) silently returned
nil. For example, if there is an access error, I/O error or low-level
integer overflow when getting the attributes of a file F,
'(file-attributes F)' now signals an error instead of returning nil.
These functions still behave as before if the only problem is that the
file does not exist. The affected primitives are
eldoc-messagenow accepts a single argument.
Programs that called it with multiple arguments before should pass
format first. Even that is discouraged: for ElDoc
support, you should set eldoc-documentation-function instead of
They have been generating warnings for a decade. To interpret old-style backquotes as new-style, bind the new variable force-new-style-backquotes to t.
cl-struct-define whose name clashes with a builtin type (e.g.,
hash-table) now signals an error.
integer, Emacs now signals an error if the number is too large for the implementation to format.
logbnow returns infinity when given an infinite or zero argument,
and returns a NaN when given a NaN. Formerly, it returned an extreme fixnum for such arguments.
they are now allocated like any other pseudovector. As a result, the
memory-use-count functions no longer return a
misc component, and the
misc-objects-consed variable has been
Previously, ranges where the starting character is greater than the
ending character were silently omitted.
For example, '(rx (any "@z-a" (?9 . ?0)))' would match '@' only.
rx expressions generate an error.
rxfunctions and variables have been removed,
as a consequence of an improved implementation. Packages using
these should use the public
rx-constituents is still available for compatibility, but the new
extension mechanism is preferred:
text-modeno longer sets the value of indent-line-function.
The global value of indent-line-function, which defaults to
indent-relative, will no longer be reset locally when turning on
To get back the old behavior, add a function to text-mode-hook which performs '(setq-local indent-line-function #'indent-relative)'.
make-processno longer accepts a non-nil ':stop' key. This has
never worked reliably, and now causes an error.
eventpno longer returns non-nil for lists whose car is nil.
This is consistent with the fact that nil, though a symbol, is not a valid event type.
be specified in image specs representing the entire bitmap as a single bool vector.
regexp-quotemay return its argument string.
If the argument needs no quoting, it can be returned instead of a copy.
Previously, the control key modifier was used to scroll up or down by an amount which was close to near a full screen. This is now instead available by scrolling with the meta modifier key.
To get the old behavior back, customize the user option mouse-wheel-scroll-amount, or add the following to your init file:
(customize-set-variable 'mouse-wheel-scroll-amount '(5 ((shift) . 1) ((control) . nil)))
By default, the font size will be changed in the window that the mouse pointer is over. To change this behavior, you can customize the user option mouse-wheel-follow-mouse. Note that this will also affect scrolling.
where it scales the image under the mouse pointer.
user-errorif point (or the
position pointed to by the argument POS) is not in a symbol.
It was obsolete since Emacs 22.1, replaced by customize.
Use of built-in libgnutls based functionality (described in the Emacs GnuTLS manual) is recommended instead.
This library is used to open configuration files for the long defunct web browser Netscape, and is no longer relevant.