Commit 41d9d51c authored by Glenn Morris's avatar Glenn Morris

Merge from origin/emacs-27

f0ebd919 (origin/emacs-27) ; * doc/lispref/anti.texi (Antinews): Fi...
6f059159 Update Acknowledgments sections
e1262d45 Update Antinews in ELisp manual
fd8128f0 ; Move the description of define-inline to a different nod...
524441d6 Improve wording in the ELisp manual
8addfa91 Reset to the standard value when reverting session's custo...
d6f9b097 Fix saving multiple themes
c556aabd Calc: fix interval entry (bug#39040)
91cd3c13 Fix horizontal line display in Custom buffers
15c8e984 ; * etc/NEWS: Fix a typo.
ff8996a3 flymake: fix typo in variable binding (bug#38752)
16eaaa07 ; Minor spelling fixes
5efe7956 Update Antinews in the Emacs manual
58412402 Use NSNumber instead of BOOL (bug#39047)
beec9f64 Add comment on fido-mode's file-sorting semantics
eb3c6ad3 Consider non-string minibuffer-default in icomplete

# Conflicts:
#	etc/NEWS
parents 17cfd708 f0ebd919
Pipeline #4537 passed with stage
in 54 minutes and 12 seconds
......@@ -235,6 +235,12 @@ use it, Snake and Tetris.
Andrew Cohen wrote @file{spam-wash.el}, to decode and clean email before
it is analyzed for spam.
Daniel Colascione wrote the portable dumping code in @file{pdumper.c}
and elsewhere. He also implemented double-buffering for X-based GUI
frames, and the original support for loading shared-object modules
into Emacs.
Theresa O'Connor wrote @file{json.el}, a file for parsing and
generating JSON files.
......@@ -502,6 +508,10 @@ expansion package.
Tassilo Horn wrote DocView mode, allowing viewing of PDF, PostScript and
DVI documents.
Khaled Hosny, Yamamoto Mitsuharu, and Eli Zaretskii implemented
text shaping with HarfBuzz for Emacs.
Joakim Hove wrote @file{html2text.el}, a html to plain text converter.
......@@ -702,7 +712,9 @@ files.
Juri Linkov wrote @file{misearch.el}, extending isearch to multi-buffer
searches; the code in @file{files-x.el} for handling file- and
directory-local variables; and the @code{info-finder} feature that
creates a virtual Info manual of package keywords.
creates a virtual Info manual of package keywords. He also
implemented the Tab Bar and window tab-lines, and added numerous
enhancements and improvements in I-search.
Leo Liu wrote @file{pcmpl-x.el}, providing completion for
......@@ -817,6 +829,11 @@ David Megginson wrote @file{derived.el}, which allows one to define new
major modes by inheriting key bindings and commands from existing major
Jimmy Aguilar Mena wrote the code to support the @code{:extend} face
attribute, and also implemented the optional
@code{display-fill-column-indicator} feature.
Will Mengarini wrote @file{repeat.el}, a command to repeat the preceding
command with its arguments.
......@@ -1083,6 +1100,10 @@ Wolfgang Rupprecht wrote Emacs 19's floating-point support (including
Kevin Ryde wrote @file{info-xref.el}, a library for checking
references in Info files.
Phil Sainty wrote @file{so-long.el}, a set of features for easier
editing of files with very long lines.
James B. Salem and Brewster Kahle wrote @file{completion.el}, providing
dynamic word completion.
......@@ -1234,6 +1255,10 @@ buffers.
Tibor Šimko and Milan Zamazal wrote @file{slovak.el}, support for
editing text in Slovak language.
João Távora wrote many improvements for @file{flymake.el}, an
on-the-fly syntax-checking package.
Luc Teirlinck wrote @file{help-at-pt.el}, providing local help through
the keyboard.
......@@ -4,103 +4,113 @@
@c See file emacs.texi for copying conditions.
@node Antinews
@appendix Emacs 25 Antinews
@appendix Emacs 26 Antinews
@c Update the emacs.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 25.3. We hope you will enjoy the
about downgrading to Emacs version 26.3. We hope you will enjoy the
greater simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@itemize @bullet
Emacs no longer defaults to requiring the GnuTLS library when you
build it. Those who want the TLS functionality built-in will have to
explicitly request it at build time---or forever hold their peace. We
decided that having the TLS functionality doesn't justify annoying
users or package builders with error messages about libgnutls absence.
We also decided that if you do build with GnuTLS, we will allow
versions of the library older than 2.12.2, as that version will become
less and less available/popular as you move farther back in time.
Emacs no longer uses @acronym{GMP}, the GNU Multiple Precision
library, and doesn't support Lisp integers greater than
@code{most-positive-fixnum} or smaller than
@code{most-negative-fixnum}. We now have only one kind of a Lisp
integer. This simplifies many Lisp programs that use integers, and
makes integer calculations always fast. If you want larger values,
use Lisp floats, as Emacs has done since day one.
For similar reasons, we've reverted back to building our own version
of @command{movemail} that retrieves POP3 mail as clear text via
insecure channels. As you move back in time, the availability of
secure alternatives to POP3 will diminish, and we are only keen to
support that. We've also removed the @option{--with-mailutils}
configure-time option, as it no longer makes sense for the observable
Emacs no longer supports HarfBuzz as the engine for shaping complex
text. As you move back in time, we will gradually shed off all traces
of support for complex text shaping, and this is one step in that
We have removed support for @command{systemd} and similar services: we
no longer provide a user init file for enabling Emacs support via
those services, and we removed from the Emacs server the
socket-launching support important for Emacs client operation under
these services. Again, these services will lose popularity as you
move back in time, so the code supporting them will be just dead code,
bloating Emacs unnecessarily.
We have removed support for building with the Jansson library, and
consequently the native support for JSON parsing is gone. The
importance of JSON decreases as we go back in time, so for now using
the Lisp code for handling it should be good enough; in one of the
past Emacs versions, we intend to remove even that, as useless bloat.
The library for supporting JSONRPC applications was removed for the
same reason.
Reproducible builds of Emacs are no longer supported, as past
development will make that unnecessary.
The ``portable dumper'' feature is gone. We are once again using the
field-proven ``unexec'' way of dumping Emacs. With that, the hope for
being able to re-dump your customized Emacs session is also gone: why
would anyone want to record their random customization experiments on
disk, and restore them the next time they start Emacs? And true
Emacsers don't restart their Emacs sessions anyway.
The @option{--fg-daemon} is gone, leaving only @option{--daemon}. No
need to procrastinate on the dilemma whether you do or do not want the
new shiny ``headless Emacs'' thingy. Hail, simplicity!
We dropped the support for @acronym{XDG}-style configuration
directories and the @env{XDG_CONFIG_HOME} environment variable.
There's once again only one place where Emacs looks for its init
files: the @file{~/.emacs.d} directory, with the @file{~/.emacs} file
as fallback. We think this will go a long way towards preventing
confusion among users who for some reason have @env{XDG_CONFIG_HOME}
set, thus risking to have their init files randomly spread between two
places. In one of the past Emacs versions, we intend to further
simplify this, removing the @file{~/.emacs.d} place and leaving only
@file{~/.emacs}; stay tuned.
For similar reasons, we've removed the ``early init'' file. You can
now again use all the tricks you want to initialize variables like
@code{package-user-dir} and @code{package-load-list} just in time for
the packages to load.
@command{emacsclient} no longer supports @acronym{XDG}-style directory
trees, either.
As text terminals supporting true color will lose ground as you move
back in time, we've removed support for 24-bit colors on text
terminals. If you want colors on a text terminal, you should be fine
with just 8 of them. (Truth being told, we think text terminals
should be monochrome, but you will have to keep downgrading to older
Emacs versions to have that feature back.)
TLS connections are back to their lenient security settings. We
decided that too tight security settings are an annoyance for users,
and make little sense considering the world-wide tendency to have
fewer and fewer network security problems as we move back in time
(those issues will be completely gone when networks disappear in some
distant past).
Emacs 25.3 no longer supports magic signatures of the form
@samp{#!/usr/bin/env @var{interpreter}} in scripts. Moving back in
time means you are getting closer to the ideal of the original Unix
design where all the interpreters lived in a single directory
@file{/bin}, so this fancy feature is simply becoming unnecessary
The @code{server-after-make-frame-hook} hook was deleted, in
preparation for removing the entire daemon business in some past Emacs
version. You will be glad to learn that setting up the GUI
customizations of your sessions is now once again as easy as it ever
was, with just the @code{after-make-frame-functions} to use.
The double-buffering feature of Emacs display on X has been removed.
We decided that its complexity and a few random surprising
side-effects aren't justified by the gains, even though those gains
were hailed in some quarters. Yes, Emacs 25.3 will flicker in some
use cases, but we are sure Emacs users will be able to suck it, as
they have been doing for years. Since this feature is gone, we've
also removed the @code{inhibit-double-buffering} frame parameter,
which is now unnecessary.
The @code{flex} completion style was removed. We feel that it
unnecessarily complicates the Emacs user experience, and therefore
will continue to remove other tricky completion styles, until in some
past Emacs version we get to a single original style Emacs pioneered
decades ago. Long live simplicity; down with complications!
Non-breaking hyphens and ASCII characters displayed instead of
unsupported quote characters are now again displayed using the
@code{escape-glyph} face. We think having a single face instead of 3
different ones will make Emacs customization a much simpler job for
users. For the same reason, we've removed the
@code{header-line-highlight} face, leaving just @code{highlight} for
any element of the Emacs display besides the mode line.
The optional display of the fill-column indicator is no longer
supported. With the display sizes becoming smaller and smaller as you
move back in time, we feel that the display itself will always show
you where to fill or wrap your text, and do this much more easily and
reliably than eny such display indicator.
You can no longer disable attempts of recovery from fatal exceptions
such as C stack overflows and fatal signals. Since the recovery
included in Emacs is reliable enough, we decided there was no reason
to put your edits in danger of becoming lost when these situations
happen. The variables @code{attempt-stack-overflow-recovery} and
@code{attempt-orderly-shutdown-on-fatal-signal} are therefore removed.
We removed the features that made visiting large files easier. Thus,
Emacs will no longer suggest visiting a large file literally, nor will
offer the @code{so-long} mode to deal with overly-long lines. We
decided that this simplification is worthwhile, given that the general
tendency of having very large files is becoming a rarity as we move
back in time.
The @code{list-timers} command was removed, as we decided timers are
not a user-level feature, and therefore users should not be allowed to
mess with them. Ask an Emacs Lisp guru near you for help if you have
a runaway timer in your session. (Of course, as you move back in
time, such runaway timers will become less and less frequent, and
actually timers might start shutting down automatically, as they
cannot cope with time reversal.)
We have removed the feature that displayed echo-area messages without
hiding content of the active minibuffer. This should prevent user
confusion from having two unrelated pieces of text staring at them,
with no clear separation between them. Users with good memories (and
Emacs users are all expected to be of that kind) will have no trouble
keeping the minibuffer text in their minds, and typing the responses
without actually seeing the prompts.
Horizontal scrolling using the mouse or touchpad has been removed. In
......@@ -110,14 +120,20 @@ horizontal scrolling is the first step towards its complete removal in
prior Emacs versions.
We have found the @option{--tramp} option of @command{emacsclient} too
risky and too complicated, so we removed it to simplify the client
code and its usage.
The @code{main-thread} variable and @code{list-threads} were removed,
and @code{thread-join} no longer returns the result of the finished
thread. We intend to remove the support for Lisp threads in some past
Emacs version, so we continue removing the associated complexities and
features as we go back in time.
The @code{display-raw-bytes-as-hex} variable is gone, so raw bytes can
only be displayed as octal escapes. Emacs users should be able to
convert from octal to any other base in their sleep!
Tab bar and window tab-lines were removed. This should make the Emacs
display simpler and less cluttered, and help those users who disable
menu bar and tool bar in their GUI sessions. The fashion to provide
tabs in every GUI application out there is gaining less and less
popularity as we move back in time, and will completely disappear at
some past point; removing the tabs from Emacs is the step in that
Displaying line numbers for a buffer is only possibly using add-on
......@@ -129,42 +145,15 @@ Consequently, @code{display-line-numbers-mode} was removed.
On our permanent quest for simplifying Emacs, we've removed the
support for passing command-line arguments and options to Emacs via
the @option{--alternate-editor} option of @command{emacsclient} and
@env{ALTERNATE_EDITOR} environment variable. There's only one True
Emacs---the one that comes up when invoked as @kbd{emacs}, no need for
all those fancy options!
The complication known as ``single-line horizontal scrolling'' is no
longer with you in Emacs 25.3. This feature was a bow to ``other
editors''; instead, let those other editors bow to Emacs by hscrolling
the entire window at all times. Repeat after me: ``The Emacs way is
the Only Way!''
The fancy case conversions of non-ASCII characters used in several
locales, like Turkish and Greek, are removed, leaving the relations
between upper and lower letter-case simple again, as they were in
7-bit ASCII. Likewise with ligatures that turn into multiple
characters when their letter-case changes---gone.
Enchant is no longer supported by @code{ispell-buffer} and similar
spell-checking commands. As Enchant will gradually disappear while
you move back in time, its support will become unnecessary anyway.
Tramp lost its support for Google Drive repositories. Cloud storage
is on its way to extinction as you move back in time, thus making this
feature redundant.
support for changing the font size by turning the mouse wheel.
Several commands, deemed to be unnecessary complications, have been
removed. Examples include @code{replace-buffer-contents} and
removed. Examples include @code{make-empty-file},
@code{font-lock-refontify}, @code{xref-find-definitions-at-mouse},
@code{make-frame-on-monitor}, and @code{diff-buffers}.
To keep up with decreasing computer memory capacity and disk space, many
other functions and files have been eliminated in Emacs 25.3.
other functions and files have been eliminated in Emacs 26.3.
@end itemize
......@@ -219,7 +219,7 @@ Appendices
* GNU Free Documentation License:: The license for this documentation.
* Emacs Invocation:: Hairy startup options.
* X Resources:: X resources for customizing Emacs.
* Antinews:: Information about Emacs version 25.
* Antinews:: Information about Emacs version 26.
* Mac OS / GNUstep:: Using Emacs under macOS and GNUstep.
* Microsoft Windows:: Using Emacs on Microsoft Windows and MS-DOS.
* Manifesto:: What's GNU? Gnu's Not Unix!
......@@ -1404,6 +1404,7 @@ Berry, Anna M. Bigatti, Ray Blaak, Martin Blais, Jim Blandy, Johan
Bockgård, Jan Böcker, Joel Boehland, Lennart Borgman, Per Bothner,
Terrence Brannon, Frank Bresz, Peter Breton, Emmanuel Briot, Kevin
Broadey, Vincent Broman, Michael Brouwer, David M. Brown, Ken Brown, Stefan Bruda,
Daniel Colascione,
Georges Brun-Cottan, Joe Buehler, Scott Byer, Włodek Bzyl, Tino Calancha,
Bill Carpenter, Per Cederqvist, Hans Chalupsky, Chris Chase, Bob
Chassell, Andrew Choi, Chong Yidong, Sacha Chua, Stewart Clamen, James
......@@ -1429,7 +1430,7 @@ Guillaume, Dmitry Gutov, Doug Gwyn, Bruno Haible, Ken'ichi Handa, Lars Hansen, C
Hanson, Jesper Harder, Alexandru Harsanyi, K. Shane Hartman, John
Heidemann, Jon K. Hellan, Magnus Henoch, Markus Heritsch, Dirk
Herrmann, Karl Heuer, Manabu Higashida, Konrad Hinsen, Anders Holst,
Jeffrey C. Honig, Tassilo Horn, Kurt Hornik, Tom Houlder, Joakim
Jeffrey C. Honig, Tassilo Horn, Kurt Hornik, Khaled Hosny, Tom Houlder, Joakim
Hove, Denis Howe, Lars Ingebrigtsen, Andrew Innes, Seiichiro Inoue,
Philip Jackson, Martyn Jago, Pavel Janik, Paul Jarc, Ulf Jasper,
Thorsten Jolitz, Michael K. Johnson, Kyle Jones, Terry Jones, Simon
......@@ -1449,7 +1450,7 @@ Lüdecke, Greg McGary, Roland McGrath, Michael McNamara, Alan Mackenzie,
Christopher J. Madsen, Neil M. Mager, Artur Malabarba, Ken Manheimer, Bill Mann,
Brian Marick, Simon Marshall, Bengt Martensson, Charlie Martin,
Yukihiro Matsumoto, Tomohiro Matsuyama, David Maus, Thomas May, Will Mengarini, David
Megginson, Stefan Merten, Ben A. Mesander, Wayne Mesard, Brad
Megginson, Jimmy Aguilar Mena, Stefan Merten, Ben A. Mesander, Wayne Mesard, Brad
Miller, Lawrence Mitchell, Richard Mlynarik, Gerd Möllmann, Dani Moncayo, Stefan
Monnier, Keith Moore, Jan Moringen, Morioka Tomohiko, Glenn Morris,
Don Morrison, Diane Murray, Riccardo Murri, Sen Nagata, Erik Naggum,
......@@ -1468,7 +1469,7 @@ Reitter, Alex Rezinsky, Rob Riepel, Lara Rios, Adrian Robert, Nick
Roberts, Roland B. Roberts, John Robinson, Denis B. Roegel, Danny
Roozendaal, Sebastian Rose, William Rosenblatt, Markus Rost, Guillermo
J. Rozas, Martin Rudalics, Ivar Rummelhoff, Jason Rumney, Wolfgang
Rupprecht, Benjamin Rutt, Kevin Ryde, James B. Salem, Masahiko Sato,
Rupprecht, Benjamin Rutt, Kevin Ryde, Phil Sainty, James B. Salem, Masahiko Sato,
Timo Savola, Jorgen Schäfer, Holger Schauer, William Schelter, Ralph
Schleicher, Gregor Schmid, Michael Schmidt, Ronald S. Schnell,
Philippe Schnoebelen, Jan Schormann, Alex Schroeder, Stefan Schoef,
......@@ -1481,9 +1482,9 @@ South, Andre Spiegel, Michael Staats, Thomas Steffen, Ulf Stegemann,
Reiner Steib, Sam Steingold, Ake Stenhoff, Philipp Stephani, Peter Stephenson, Ken
Stevens, Andy Stewart, Jonathan Stigelman, Martin Stjernholm, Kim F.
Storm, Steve Strassmann, Christopher Suckling, Olaf Sylvester, Naoto
Takahashi, Steven Tamm, Jan Tatarik, Luc Teirlinck, Jean-Philippe Theberge, Jens
T. Berger Thielemann, Spencer Thomas, Jim Thompson, Toru Tomabechi,
David O'Toole, Markus Triska, Tom Tromey, Eli
Takahashi, Steven Tamm, Jan Tatarik, João Távora, Luc Teirlinck,
Jean-Philippe Theberge, Jens T.@: Berger Thielemann, Spencer Thomas,
Jim Thompson, Toru Tomabechi, David O'Toole, Markus Triska, Tom Tromey, Eli
Tziperman, Daiki Ueno, Masanobu Umeda, Rajesh Vaidheeswarran, Neil
W. Van Dyke, Didier Verna, Joakim Verona, Ulrik Vieth, Geoffrey
Voelker, Johan Vromans, Inge Wallin, John Paul Wallington, Colin
......@@ -6,276 +6,184 @@
@c This node must have no pointers.
@node Antinews
@appendix Emacs 25 Antinews
@appendix Emacs 26 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 25.3. We hope you will enjoy the greater
downgrading to Emacs version 26.3. We hope you will enjoy the greater
simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@section Old Lisp Features in Emacs 25
@itemize @bullet
The concurrency features have been removed. Even in its limited
``mostly cooperative'' form, with only one Lisp thread running at any
given time, it made Emacs significantly more complex for Lisp programs
that need to work correctly in the presence of additional threads.
Handling of file attributes has been simplified by discarding the
accessor functions, such as @code{file-attribute-type} and
@code{file-attribute-modification-time}. Real Lisp programmers always
access the individual attributes by their ordinal numbers, and can
recite those numbers in their sleep.
The networking code is back at its pristine simplicity, as we deleted
the use of asynchronous DNS resolution, connection, and TLS
negotiation for TLS streams. You no longer need to consider the
resulting complexity and interesting race conditions when you write
Lisp programs that use network communications. As a direct
consequence, the @code{:complete-negotiation} parameter of
@code{gnutls-boot} has become unnecessary, and was removed---just one
example of how removal of asynchronicity simplifies Emacs.
We've removed the @file{puny.el} library, so Web sites with
non-@acronym{ASCII} URLs are no longer easily accessible. But such
sites become more and more rare as you move back in time, so having a
specialized library for their support was deemed an unnecessary
maintenance burden.
The time conversion functions @code{current-time-string},
@code{current-time-zone}, @code{decode-time},
@code{format-time-string}, and @code{set-time-zone-rule} no longer
accept integer offsets as time zone rules, to make it more of a
challenge to convert foreign timestamps. Also,
@code{format-time-string} no longer converts @samp{%q} to the calendar
quarter, as that is something you can easily do for yourself.
Field numbers like @samp{%2$} in format specifiers are no longer
available. We decided that their use makes code reading and
comprehension much harder, and that having them is unjustified in the
past where similar features in popular C libraries will also be gone.
Since the built-in capability to display line numbers has been removed
(@pxref{Antinews,,, emacs, The GNU Emacs Manual}), we've also deleted
the @code{line-number-display-width} function and the support for the
@code{display-line-numbers-disable} property, as Lisp programs that do
their own display layout decisions no longer need to cater to this
tricky feature.
Regular expressions have been simplified by removing support for
Unicode character properties in the @code{[:blank:]} regexp class. As
result, this class will match only spaces and tabs. Once again, this
is in line with diminishing importance of Unicode as you move back in
For similar reasons, we removed the function @code{char-from-name}.
It should be easy enough to access the full list of Unicode characters
returned by @code{ucs-names} instead, for as long as Unicode support
in Emacs exists (which shouldn't be too long).
Various functions that accept file names as arguments, such as
@code{file-attributes}, @code{file-symlink-p}, and
@code{make-symbolic-link} gained back the special support for file
names quoted with @samp{/:}, and they now interpret @samp{~} in
symlink targets as you'd expect: to mean your home directory. The
confusing differences between the operation of these functions in
interactive and non-interactive invocations has been removed.
Several functions that create or rename their files now treat their
destination specially if it happens to be a directory, even when its
name does not appear to be that of a directory. For example,
@code{(rename-file "A" "B")} no longer renames @file{A} to @file{B} if
@file{B} happens to be a directory. This is so that dealing with
files becomes more of an adventure.
Lisp objects are again implemented on the C level as integer types,
not as pointers. This might be a small step for Emacs Lisp users, but
it's a giant leap for the Emacs developers who work on the C level,
since it is now again easy to print Lisp object in the debugger in the
decimal format, which is so much easier for debugging. It also makes
calling Emacs functions from the debugger easier, and allows us to
freely mix integers and Lisp objects in the C code.
The @code{format} function now returns new strings in more cases, to
place more stress on the Emacs memory manager and thereby test Emacs
The test suite was removed from the distribution tarball. We believe
that tests need seldom if ever be run, certainly not by the end
users. Removing the tests from the tarball makes it much smaller,
which is important since disk space becomes more and more at premium
as you move back in time.
The function @file{assoc} has been simplified by removing its third
optional argument. It now always uses @code{equal} for comparison.
Likewise, @code{alist-get} always uses @code{assq}, and @code{map-get}
and @code{map-put} always use @code{eql} for their comparisons.
Dynamic module support is disabled by default. This both makes Emacs
smaller (a worthy goal by itself), and removes the complications and
additional complexity related with installing module support files and
letting random shared objects an opportunity to be loaded into Emacs
and mess with it.
Numeric comparisons and the functions @code{format},
@code{make-hash-table}, @code{min}, @code{max} and @code{logb} now
occasionally round values internally to make their results less
You now must activate any installed packages only after loading your
init files. That requires an explicit call to
@code{package-initialize} in your init file, which is a Good Thing, as
it makes you think seriously where and indeed whether you'd like your
packages to become available to your sessions. Simplicity should
tramp convenience!
The functions @code{ffloor}, @code{fceiling}l, @code{ftruncate} and
@code{fround} now accept integer arguments. Conversely, functions
like @code{decode-char} that accept floating-point integers now accept
arguments that are not integers. In both cases the results are
amusingly nonsensical sometimes.
To reduce the amount of code in Emacs related to unimportant features,
we've removed native rotation and resizing of images. You will have
to build Emacs with ImageMagick if you want to resize or rotate images
inside Emacs. We don't expect anyone to miss that.
GnuTLS cryptographic functions are no longer available in Emacs. We
have decided that the needs for such functionality are deteriorating,
and their cumbersome interfaces make them hard to use.
We've re-enabled color fonts usage by the XFT font back-end. We
consider the availability of these fonts more important than a random
crash here and there, especially since the use of these fonts for
displaying Emoji will become less and less important as we travel back
in time, and will completely disappear in some past Emacs version.
We have removed support for records of user-defined types, and
@code{cl-defstruct} no longer uses records. This removes the
potential for quite a few places where existing and past code could be
broken by records.
The function @code{network-interface-list} can now return only IPv4
addresses. We consider the complexity introduced by IPv6 to be too
much to be justified, and on the other hand its removal is the step in
the right direction, given that IPv6 is expected to be completely
removed as we move back in time.
You can again use @code{string-as-unibyte},
@code{string-make-multibyte}, and other similar functions, without
being annoyed by messages about their deprecation. This is in
preparation for removal of multibyte text from Emacs in the distant
The limit on repetitions in regular expressions was reduced to
2**15 @minus{} 1.
@end ifnottex
@end tex
We envision that regular expressions will become more and more simple
as we move towards the distant past.
The @code{string-version-lessp} function has been removed, to
encourage programmers to use their own idiosyncratic methods to
determine whether one version string precedes another.
To simplify code and reduce complexity, we removed the capability of
searching programs on remote hosts in @code{executable-find}. If you
really need this feature (why would you?), you can always write your
own shell script and run it on the remote.
The function @code{read-color} no longer displays color names using
each color as the background. We have determined that this surprises
users and produces funny inconsistent results on color-challenged
The @code{:extend} face attribute is no longer available; all faces
have their background color extended by default past end of line.
This should significantly simplify face management and remove
unnecessary code bloat, as well as make faces significantly simpler to
understand and use.
Support for 24-bit color on text terminals has been dropped, since
it wasn't needed long ago.
The predicates @code{display-blink-cursor-p} and
@code{display-symbol-keys-p} were deleted. They are rarely if ever
needed, and can easily be substituted by appropriate calls to old and
proven APIs like @code{display-graphic-p}. As an additional bonus,
writing Lisp programs that depend on this functionality will make sure
the programmer understands better what exactly is the required
features of the display terminal.
We removed the function @code{file-name-case-insensitive-p}, as
testing for the OS symbol should be enough for the observable past to
come, and learning to use yet another API is a burden.
Relative directories in the value of the @env{HOME} environment
variable are once again interpreted relative to the
@code{default-directory} of the current buffer. This is much simpler,
and also allows @env{HOME} to resolve to a different place in
different buffers, which allows some interesting applications.
The function @code{read-multiple-choice} is also gone, in recognition
of the fact that nothing makes Emacs Lisp hackers rejoice more than
the need to sit down and write yet another interactive
question-and-answer function, and make it optimal for each specific
The function @code{add-variable-watcher} and the corresponding
debugger command @code{debug-on-variable-change} have been removed.
They make debugging more complicated, while examining the value of a
variable at each stop point is easy enough to cover the same use
cases. Let simplicity rule!
The function @code{mapcan} is gone; use @code{mapcar} instead, and
process the resulting list as you see fit.
Low-level list functions like @code{length} and @code{member} can now
loop indefinitely when given cyclic lists, causing Emacs to freeze.
This can help these functions run a tiny bit faster in the usual case
where the input is not cyclic.
The @code{write-region} function no longer propagates its
@var{lockname} argument to file name handlers.
You can once again write a Lisp program that returns funny random
values from @code{file-attributes} by having another process alter the
filesystem while Emacs is accessing the file. This can give rise to
some interesting applications in the near past.
The functions @code{file-attributes}, @code{file-symlink-p}, and
@code{make-symbolic-link} now quietly mutate the target of a local
symbolic link in some cases, to make it more of a challenge to deal
with arbitrary symlinks in Emacs code.
The error @code{file-missing} has been removed; operations now lump
such errors into the @code{file-error} category instead.
The function @code{delete-directory} now signals an error if operating
recursively and some other process deletes the directory before this
function gets to it.
The @code{dutch} input method now attempts to support Turkish too,
albeit incorrectly. Also, it converts @samp{IJ} and @samp{ij} to
special characters instead of leaving them alone.
Non-breaking hyphens and approximations to quotes are now displayed
just with the @code{escape-glyph} face instead of having faces of
their own. This is simpler and gives the user amusing puzzles to
solve when viewing text containing these characters.
For the same reasons, @code{file-name-absolute-p} now again considers
@file{~foo} an absolute file name, even if there's no known user
@samp{foo}. This means a Lisp program which uses such file names will