@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
