@c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. @c Copyright (C) 1999, 2002--2022 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @c This node must have no pointers. @node Antinews @appendix Emacs 27 Antinews @c Update the elisp.texi Antinews menu entry with the above version number. 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 @w{Emacs @value{EMACSVER}} features. @itemize @bullet @item The annoying @code{lexical-binding} local variable now heeds the value of @code{enable-local-variables}: if it's @code{nil}, the @code{lexical-binding} cookie 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. @item The @code{load-dangerous-libraries} variable 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. @item The optional @var{modes} argument of @code{interactive} is 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. @item 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. @item To reduce the amount of code in Emacs related to unimportant features, we've removed the variables @code{global-minor-modes} and @code{local-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. @item The default preference for servicing sub-processes that produce output at a high rate, and the associated variable @code{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. @item The encodings that are variants of EBCDIC were removed. This includes @code{ibm256}, @code{ibm273}, and others---variants of the EBCDIC encoding tailored for some Japanese and European locales. You won't need those where you are going. @item The ``Bindat type expression'' description language has been removed, as the existing data layout specifications are perfectly suited for this job. @item To simplify code and reduce complexity, we removed the capability of specifying the success handler in @code{condition-case} via the @code{:success} keyword. If you really need this feature (why would you?), you can always write some simple Lisp that has the same effect. @item 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 @code{make_unibyte_string} module API was removed for the same reason. @item To keep Emacs clean and elegant, we've removed the @code{print-integers-as-characters} option. 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! @item The optional @var{count} argument of the @code{directory-files} function has been removed. Extracting the first @var{n} members from the full list is trivial, so this is a significant simplification for an insignificant cost. @item Functions that create sub-processes and network connections no longer accept the @code{:coding} argument; use @code{set-process-coding-system} or bind @code{coding-system-for-read/write} instead: again, a significant reduction in Emacs complexity for little or no cost. @item We deleted from the macros @code{define-derived-mode} and @code{define-minor-mode} the code which allowed using the @code{:interactive} argument. The possibility of marking a mode non-interactive makes very little sense, @item The possibility of having links to man pages in doc strings has been removed. Use plain text instead, if you need such references. @item 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. @item Several features that complicated the byte compiler have been removed: @itemize @minus @item The checks for missing declarations of dynamic variables. This will continue making less and less sense as we move away of lexical-binding support. @item The ability of compiling symlinked @file{*.el} files, which is really gross: copy the files instead. @item The warnings about too-wide doc strings---that is just a nuisance, as the programmers should be trusted to know what they are doing. @end itemize @item We deleted several features of the @code{pcase} macro, in accordance with our general plan to remove @code{pcase} from Emacs: @itemize @minus @item The @code{cl-type} pattern. @item the @code{pcase-setq} macro. @item The @code{pcase-compile-patterns} function. @end itemize @item Some of the keywords used in Edebug specification lists were deemed to be of little use, and were therefore removed: @code{&interpose}, @code{&error}, and @code{&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. @item The function @code{object-intervals} was dropped, as a Lisp program can easily collect the intervals of a buffer or a string by iterating through them one by one. @item We decided that the @code{require-theme} function is an unnecessary complication, so we deleted it. Lisp programs can easily search along @code{custom-theme-load-path} instead. @item The convenience functions @code{length<}, @code{length>}, and @code{length=} were removed, as using @code{length} followed 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. @item The variable @code{current-minibuffer-command} is no longer available, as we found little justification for keeping it. @item 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. @end itemize