GNU Emacs
ELisp
Emacs 27 Antinews
ELisp 28.2 elisp

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-binding local variable now heeds the value of enable-local-variables: if it's nil, the 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.
  • The 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.
  • The optional modes argument of 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.
  • 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-modes and 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.
  • 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-case via the :success keyword. 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_string module API was removed for the same reason.
  • To keep Emacs clean and elegant, we've removed the 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!
  • The optional count argument of the directory-files function 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 :coding argument; use set-process-coding-system or bind coding-system-for-read/write instead: again, a significant reduction in Emacs complexity for little or no cost.
  • We deleted from the macros define-derived-mode and define-minor-mode the code which allowed using the :interactive argument. 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 *.el files, 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 pcase macro, in accordance with our general plan to remove pcase from Emacs:
  • The cl-type pattern.
  • the pcase-setq macro.
  • The pcase-compile-patterns function.
  • 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-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.
  • We decided that the require-theme function is an unnecessary complication, so we deleted it. Lisp programs can easily search along custom-theme-load-path instead.
  • The convenience functions length<, length>, and length= were removed, as using 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.
  • The variable current-minibuffer-command is 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.
Manual
Emacs Lisp 28.2
Texinfo Node
Antinews
Source Ref
emacs-28.2
Source
View upstream