Emacs 30 Antinews
For those users who live backwards in time, here is information about downgrading to Emacs version 30.2. We hope you will enjoy the greater simplicity that results from the absence of many Emacs 31.1 features.
Lisp strings are now mutable. You can use
aseton unibyte strings to replace single bytes by multibyte characters, andaseton multibyte strings can replace any character by any other character, regardless if they are ASCII or multibyte non-ASCII. We feel those restrictions are un-Emacsy and get in the way of doing all kinds of exciting things with strings.Buffers that are current to a non-main thread cannot be killed by other threads. We decided to get rid of the numerous complications which were needed to allow killing such buffers. If your program needs to kill such buffers, you will need to use a disciplined approach of first making some other buffer current to the thread.
We removed the early detection of faces that inherit from themselves. As you move back in time, Emacs Lisp programmers become more and more proficient, so disallowing such tricks feels wrong. Those who don’t know well enough what they are doing will be amply punished by having their Lisp programs barf at display time or even wedge Emacs cold.
Calling
debugin batch mode now kills Emacs. We decided that there’s no sense in continuing a batch session that entered the debugger: who and how will debug it, anyway?For the same reason, C-c in batch mode now always kills Emacs, it never quits.
The functions that access and manipulate error descriptors were deleted. Functions like
error-type,error-slot-valueand others are useless bloat, since Lisp programs can simply access the data structure directly, as God intended!We removed
frame-initial-p, as its job can easily be done by testing several obscure variables and frame parameters.We’ve added the
redisplay-dont-pausevariable, so we could allow interrupting a runaway redisplay cycle in one of the past versions of Emacs.There’s no longer a guarantee that all the digit characters will have the
digit(?6) category. We feel that such silly consistency robs Lisp programmers of too much fun, whereby they should discover which digits have this category by trial-and-error.For the same reason, not all characters belonging to the
symbolscript will have thesymbol(?5) category.Lisp programs can now easily delete that daemon frame by calling
delete-frame, as with any other frame. We decided there’s no reason to make a special case for the daemon frames, especially as some past Emacs version will remove the daemon feature entirely.Lisp files found on
load-pathare no longer cached. We intend to make theload-pathlist shorter and shorter as we move to previous versions of Emacs, so caching files is an unnecessary complication and bloat of precious memory.The annoying warning about the missing
lexical-bindingcookie when loading Lisp files was removed. This is one more step towards eventual elimination of lexical binding from Emacs in one of the past versions.For the same reason, Lisp files loaded via the
-xand--scriptcommand-line options no longer use lexical binding by default.To keep Emacs clean and elegant, we deleted the
setopt-localmacro. This was one more useless bloat, since it is easy to do the same usingsetq-local, and avoids the annoying warnings about mismatch between the value and expected type defined bydefcustom.Pure storage is now part of Emacs, and is here to stay. The function
purecopyreally copies its argument to pure storage. This is a significant step towards making Emacs more memory-efficient on yesterday’s computers, and more generally towards usingunexecas the only way of dumping Emacs.The
cond*macro was removed. You can still usepcaseinstead, but better start using the venerablecondexclusively, aspcaseand its ilk will disappear from Emacs in the near past. No one should need these fancy and hard-to-read constructs with their obscure semantics and myriads of backticks! The original control-flow special forms of the pristine Emacs Lisp are more than enough.Xref commands automatically suggest visiting a tags table. This is to enable symbol completion,and generally move towards removing all backends except the
etagsone in some past Emacs version.Support for SHA-3 message digests was removed from the function
secure-hash. We plan to continue removing algorithms from this function, so as to keep Emacs as lean as possible. Eventually, just one kind of digest should be enough for everyone!We deleted unnecessary functions like
incf,decf,plusp,minusp,oddp, andevenp. Use the corresponding functions fromcl-libor just write these trivial functions when you need them. For the same reason,all,any,drop-while, andtake-whileare also gone.As part of the ongoing quest for simplicity, many other functions and variables have been eliminated. Other functions and variables, that were declared obsolete since Emacs 25, have been added back, in preparation for releasing Emacs 25 in some distant past.