Emacs 27 Antinews
For those users who live backwards in time, here is information about downgrading to Emacs version 27.2. We hope you will enjoy the greater simplicity that results from the absence of many Emacs 28.2 features.
- The annoying
lexical-bindinglocal variable now heeds the value ofenable-local-variables: if it'snil, thelexical-bindingcookie is ignored. We are working hard on removing the lexical-binding support in some past Emacs version, and this small step advances us back to that change. - The
load-dangerous-librariesvariable is not obsolete, as it must be used to allow loading Lisp compiled by XEmacs, which will become more and more important as you move back in time. - The optional modes argument of
interactiveis not supported, and every command is deemed applicable to any major mode. We believe this makes the life of Lisp programmers much simpler, as there's now no need to tag commands with the modes where they make sense. - Shorthands for Lisp symbols have been removed, which makes loading Lisp files and handling Lisp symbols much simpler and more efficient. This is important for decent performance on slower CPUs as you move back in time.
- To reduce the amount of code in Emacs related to unimportant features, we've removed the variables
global-minor-modesandlocal-minor-modes. If your Lisp program needs to determine whether some minor mode is in effect, it will have to test explicitly for every mode. We don't expect anyone to miss those fancy variables. - The default preference for servicing sub-processes that produce output at a high rate, and the associated variable
process-prioritize-lower-fds, have been removed. Moving back in time means fewer and fewer programs can produce such high-rate output, so this features becomes just useless crud. - The encodings that are variants of EBCDIC were removed. This includes
ibm256,ibm273, and others—variants of the EBCDIC encoding tailored for some Japanese and European locales. You won't need those where you are going. - The "Bindat type expression" description language has been removed, as the existing data layout specifications are perfectly suited for this job.
- To simplify code and reduce complexity, we removed the capability of specifying the success handler in
condition-casevia the:successkeyword. If you really need this feature (why would you?), you can always write some simple Lisp that has the same effect. - Emacs modules can no longer provide interactive functions, or install finalizers, nor open channels to existing pipe sub-processes. All this is extra ballast, especially since we plan on removing modules in some past Emacs version. The
make_unibyte_stringmodule API was removed for the same reason. - To keep Emacs clean and elegant, we've removed the
print-integers-as-charactersoption. Recognizing characters by their decimal codes is a basic requirement for Emacs Lisp programmers, and with the expected decrease in use of Unicode characters, this will be soon limited to ASCII only: surely something you all can master! - The optional count argument of the
directory-filesfunction has been removed. Extracting the first n members from the full list is trivial, so this is a significant simplification for an insignificant cost. - Functions that create sub-processes and network connections no longer accept the
:codingargument; useset-process-coding-systemor bindcoding-system-for-read/writeinstead: again, a significant reduction in Emacs complexity for little or no cost. - We deleted from the macros
define-derived-modeanddefine-minor-modethe code which allowed using the:interactiveargument. The possibility of marking a mode non-interactive makes very little sense, - The possibility of having links to man pages in doc strings has been removed. Use plain text instead, if you need such references.
- Temporary buffers are no longer exempt from running any buffer-related hooks. Programs that don't want such hooks in some buffer can always disable it locally, whereas making that simpler complicates Emacs for no good reason.
- Several features that complicated the byte compiler have been removed:
- The checks for missing declarations of dynamic variables. This will continue making less and less sense as we move away of lexical-binding support.
- The ability of compiling symlinked
*.elfiles, which is really gross: copy the files instead. - The warnings about too-wide doc strings—that is just a nuisance, as the programmers should be trusted to know what they are doing.
- We deleted several features of the
pcasemacro, in accordance with our general plan to removepcasefrom Emacs: - The
cl-typepattern. - the
pcase-setqmacro. - The
pcase-compile-patternsfunction. - Some of the keywords used in Edebug specification lists were deemed to be of little use, and were therefore removed:
&interpose,&error, and&name. The long-term plane is for Emacs to drop Edebug entirely, leaving only the trusted Lisp debugger, and we continue working according to that plan. - The function
object-intervalswas dropped, as a Lisp program can easily collect the intervals of a buffer or a string by iterating through them one by one. - We decided that the
require-themefunction is an unnecessary complication, so we deleted it. Lisp programs can easily search alongcustom-theme-load-pathinstead. - The convenience functions
length<,length>, andlength=were removed, as usinglengthfollowed by a comparison should be good enough for everyone, especially considering that the typical length of a list keeps going down as you move back through time. - The variable
current-minibuffer-commandis no longer available, as we found little justification for keeping it. - 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 23, have been added back, in preparation for releasing Emacs 23 in some distant past.