mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-02-06 20:49:33 +00:00
Merge from origin/emacs-27
f0ebd919c1 (origin/emacs-27) ; * doc/lispref/anti.texi (Antinews): Fi... 6f059159ee Update Acknowledgments sections e1262d45f9 Update Antinews in ELisp manual fd8128f0c1 ; Move the description of define-inline to a different nod... 524441d6b3 Improve wording in the ELisp manual 8addfa91c8 Reset to the standard value when reverting session's custo... d6f9b09777 Fix saving multiple themes c556aabde8 Calc: fix interval entry (bug#39040) 91cd3c1372 Fix horizontal line display in Custom buffers 15c8e984ae ; * etc/NEWS: Fix a typo. ff8996a337 flymake: fix typo in variable binding (bug#38752) 16eaaa07e6 ; Minor spelling fixes 5efe795659 Update Antinews in the Emacs manual 5841240295 Use NSNumber instead of BOOL (bug#39047) beec9f64a5 Add comment on fido-mode's file-sorting semantics eb3c6ad325 Consider non-string minibuffer-default in icomplete # Conflicts: # etc/NEWS
This commit is contained in:
commit
41d9d51cf5
@ -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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
Khaled Hosny, Yamamoto Mitsuharu, and Eli Zaretskii implemented
|
||||
text shaping with HarfBuzz for Emacs.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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
|
||||
modes.
|
||||
|
||||
@item
|
||||
Jimmy Aguilar Mena wrote the code to support the @code{:extend} face
|
||||
attribute, and also implemented the optional
|
||||
@code{display-fill-column-indicator} feature.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
Phil Sainty wrote @file{so-long.el}, a set of features for easier
|
||||
editing of files with very long lines.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
João Távora wrote many improvements for @file{flymake.el}, an
|
||||
on-the-fly syntax-checking package.
|
||||
|
||||
@item
|
||||
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
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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
|
||||
past.
|
||||
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
|
||||
direction.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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).
|
||||
|
||||
@item
|
||||
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
|
||||
ballast.
|
||||
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.
|
||||
|
||||
@item
|
||||
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!
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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
|
||||
direction.
|
||||
|
||||
@item
|
||||
Displaying line numbers for a buffer is only possibly using add-on
|
||||
@ -129,42 +145,15 @@ Consequently, @code{display-line-numbers-mode} was removed.
|
||||
|
||||
@item
|
||||
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!
|
||||
|
||||
@item
|
||||
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!''
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
Several commands, deemed to be unnecessary complications, have been
|
||||
removed. Examples include @code{replace-buffer-contents} and
|
||||
@code{apropos-local-variable}.
|
||||
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}.
|
||||
|
||||
@item
|
||||
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
|
||||
@item
|
||||
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.
|
||||
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.
|
||||
|
||||
@item
|
||||
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 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.
|
||||
|
||||
@item
|
||||
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.
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
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!
|
||||
|
||||
@item
|
||||
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.
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
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.
|
||||
|
||||
@item
|
||||
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
|
||||
time.
|
||||
The limit on repetitions in regular expressions was reduced to
|
||||
@ifnottex
|
||||
2**15 @minus{} 1.
|
||||
@end ifnottex
|
||||
@tex
|
||||
@math{2^{15}-1}.
|
||||
@end tex
|
||||
We envision that regular expressions will become more and more simple
|
||||
as we move towards the distant past.
|
||||
|
||||
@item
|
||||
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).
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
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.
|
||||
|
||||
@item
|
||||
The @code{format} function now returns new strings in more cases, to
|
||||
place more stress on the Emacs memory manager and thereby test Emacs
|
||||
better.
|
||||
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.
|
||||
|
||||
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
|
||||
always work the same on any system, regardless of its known users.
|
||||
|
||||
@item
|
||||
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.
|
||||
File-related primitives like @code{file-attributes},
|
||||
@code{file-modes}, @code{file-newer-than-file-p}, and some others once
|
||||
again return @code{nil} when the underlying low-level APIs fail,
|
||||
instead of signaling an error. We decided that functions which signal
|
||||
errors require more complex code from Lisp programs which use them,
|
||||
and found this complexity unjustified when returning @code{nil} will
|
||||
do.
|
||||
|
||||
@item
|
||||
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
|
||||
predictable.
|
||||
Similarly, old-style backquotes no longer signal errors; they generate
|
||||
warnings instead. You can remove error handling from programs that
|
||||
use backquotes.
|
||||
|
||||
@item
|
||||
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.
|
||||
Formatting floating-point numbers has been sped up by letting the
|
||||
underlying implementation produce unpredictable values, instead of
|
||||
signaling errors when the number is too large to format correctly. We
|
||||
believe the Emacs Lisp programmers should always know what they are
|
||||
doing when they deal with floating-point values.
|
||||
|
||||
@item
|
||||
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.
|
||||
The function @code{read-char-from-minibuffer} was deleted. We decided
|
||||
that @code{read-char} should be enough for any Lisp program that needs
|
||||
to ask the user for a single-character input, 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 case. Consequently,
|
||||
no history is provided for such responses (why would someone want
|
||||
history of single-key strokes, anyway?).
|
||||
|
||||
@item
|
||||
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{ngettext} was deleted. Non-English languages will
|
||||
become less and less widespread, let alone useful, as you move back in
|
||||
time, so we took this small step in that direction, and simplified
|
||||
Emacs as a nice bonus.
|
||||
|
||||
@item
|
||||
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
|
||||
past.
|
||||
Focus-change notifications on text-mode frames are no longer
|
||||
recognized or supported. You can now safely disregard the possibility
|
||||
of receiving such notifications on TTY frames. This is one small step
|
||||
on the long road of removing all non-character input events Emacs
|
||||
supports on TTY frames.
|
||||
|
||||
@item
|
||||
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.
|
||||
Face specifications in @code{face-remapping-alist} now have to be
|
||||
buffer-specific, without any differences between windows showing the
|
||||
same buffers. This allowed us to remove a lot of unneeded code bloat
|
||||
from Emacs, and make the face handling much simpler.
|
||||
|
||||
@item
|
||||
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
|
||||
terminals.
|
||||
The @samp{%o} and @samp{%x} formats now always produce unsigned
|
||||
values, as you'd expect. This allows you to reveal the underlying
|
||||
machine representation, which is different on each architecture,
|
||||
something we consider a valuable feature.
|
||||
|
||||
@item
|
||||
Support for 24-bit color on text terminals has been dropped, since
|
||||
it wasn't needed long ago.
|
||||
We no longer highlight in @code{font-lock-warning-face} symbols with
|
||||
confusable quote characters, such as U+2018. Detecting them
|
||||
needed non-trivial amount of code, and we firmly believe that Lisp
|
||||
programmers always know what they are doing, and don't need to be
|
||||
annoyed with typefaces that stand out and distract.
|
||||
|
||||
@item
|
||||
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.
|
||||
The function @code{file-system-info} was dropped on Posix platforms,
|
||||
since you can always invoke @command{df} instead and parse its
|
||||
output.
|
||||
|
||||
@item
|
||||
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
|
||||
case.
|
||||
|
||||
@item
|
||||
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!
|
||||
|
||||
@item
|
||||
The function @code{mapcan} is gone; use @code{mapcar} instead, and
|
||||
process the resulting list as you see fit.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
The @code{write-region} function no longer propagates its
|
||||
@var{lockname} argument to file name handlers.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
The error @code{file-missing} has been removed; operations now lump
|
||||
such errors into the @code{file-error} category instead.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
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.
|
||||
|
||||
@item
|
||||
The user option @code{electric-quote-context-sensitive} and the
|
||||
variable @code{electric-quote-inhibit-functions}, so that electric
|
||||
quoting is simpler and more likely to do the wrong thing.
|
||||
|
||||
@item
|
||||
The user option @code{text-quoting-style} has been removed, and is now
|
||||
just a variable.
|
||||
|
||||
@item
|
||||
We have removed the functions @code{file-name-quote},
|
||||
@code{file-name-unquote}, and @code{file-name-quoted-p}. Writing code
|
||||
that checks whether a file name is already quoted is easy, and doubly
|
||||
quoting a file name should not produce any problems for well-written
|
||||
Lisp code.
|
||||
|
||||
@item
|
||||
Frame parameters like @code{z-group}, @code{min-width},
|
||||
@code{parent-frame}, @code{delete-before}, etc. have been removed.
|
||||
Emacs should not replace your window-manager, certainly not as
|
||||
window-managers become less and less capable.
|
||||
|
||||
@item
|
||||
We decided that the format of mode line and header line should be
|
||||
customizable only based on buffers; the @code{mode-line-format} and
|
||||
@code{header-line-format} window parameters have been removed.
|
||||
|
||||
@item
|
||||
Emacs now normally builds a limited @command{movemail} substitute that
|
||||
retrieves POP3 email only via insecure channels, and the
|
||||
configure-time option @option{--with-mailutils} has been removed.
|
||||
This simplifies Emacs setup when security is not important.
|
||||
|
||||
@item
|
||||
The configure-time option @option{--enable-gcc-warnings=warn-only}
|
||||
has been removed, so that build-time warnings are always fatal now.
|
||||
|
||||
@item
|
||||
The configure-time option @option{--disable-build-details} has been
|
||||
removed. This way, Emacs builds are unique and irreproducible.
|
||||
|
||||
@item
|
||||
The variable @code{emacs-version} now includes the build number
|
||||
instead of storing it separately in @code{emacs-build-number}.
|
||||
|
||||
@item
|
||||
Emacs has been ported to IRIX.
|
||||
|
||||
@item
|
||||
Several options and variables have been removed to simplify Emacs and
|
||||
potentially make it less reliable. These include the
|
||||
@option{--module-assertions} option, the
|
||||
@code{attempt-stack-overflow-recovery} variable, and the
|
||||
@code{attempt-orderly-shutdown-on-fatal-signal} variable.
|
||||
The functions that implement the @samp{base64url} encoding were
|
||||
removed, as they can always be emulated by suitable tweaking of the
|
||||
normal base-64 encoding. No need to bloat Emacs and force Lisp
|
||||
programmers learn more interfaces on this account.
|
||||
|
||||
@item
|
||||
As part of the ongoing quest for simplicity, many other functions and
|
||||
|
@ -233,7 +233,7 @@ To view this manual in other formats, click
|
||||
|
||||
Appendices
|
||||
|
||||
* Antinews:: Info for users downgrading to Emacs 25.
|
||||
* Antinews:: Info for users downgrading to Emacs 26.
|
||||
* GNU Free Documentation License:: The license for this documentation.
|
||||
* GPL:: Conditions for copying and changing GNU Emacs.
|
||||
* Tips:: Advice and coding conventions for Emacs Lisp.
|
||||
|
@ -576,8 +576,9 @@ naming conventions, which are being phased out.
|
||||
@cindex defining a function
|
||||
|
||||
We usually give a name to a function when it is first created. This
|
||||
is called @dfn{defining a function}, and it is done with the
|
||||
@code{defun} macro.
|
||||
is called @dfn{defining a function}, and we usually do it with the
|
||||
@code{defun} macro. This section also describes other ways to define
|
||||
a function.
|
||||
|
||||
@defmac defun name args [doc] [declare] [interactive] body@dots{}
|
||||
@code{defun} is the usual way to define new Lisp functions. It
|
||||
@ -682,95 +683,8 @@ definition will have no effect on them.
|
||||
and tells the Lisp compiler to perform inline expansion on it.
|
||||
@xref{Inline Functions}.
|
||||
|
||||
Alternatively, you can define a function by providing the code which
|
||||
will inline it as a compiler macro. The following macros make this
|
||||
possible.
|
||||
|
||||
@c FIXME: Can define-inline use the interactive spec?
|
||||
@defmac define-inline name args [doc] [declare] body@dots{}
|
||||
Define a function @var{name} by providing code that does its inlining,
|
||||
as a compiler macro. The function will accept the argument list
|
||||
@var{args} and will have the specified @var{body}.
|
||||
|
||||
If present, @var{doc} should be the function's documentation string
|
||||
(@pxref{Function Documentation}); @var{declare}, if present, should be
|
||||
a @code{declare} form (@pxref{Declare Form}) specifying the function's
|
||||
metadata.
|
||||
@end defmac
|
||||
|
||||
Functions defined via @code{define-inline} have several advantages
|
||||
with respect to macros defined by @code{defsubst} or @code{defmacro}:
|
||||
|
||||
@itemize @minus
|
||||
@item
|
||||
They can be passed to @code{mapcar} (@pxref{Mapping Functions}).
|
||||
|
||||
@item
|
||||
They are more efficient.
|
||||
|
||||
@item
|
||||
They can be used as @dfn{place forms} to store values
|
||||
(@pxref{Generalized Variables}).
|
||||
|
||||
@item
|
||||
They behave in a more predictable way than @code{cl-defsubst}
|
||||
(@pxref{Argument Lists,,, cl, Common Lisp Extensions for GNU Emacs
|
||||
Lisp}).
|
||||
@end itemize
|
||||
|
||||
Like @code{defmacro}, a function inlined with @code{define-inline}
|
||||
inherits the scoping rules, either dynamic or lexical, from the call
|
||||
site. @xref{Variable Scoping}.
|
||||
|
||||
The following macros should be used in the body of a function defined
|
||||
by @code{define-inline}.
|
||||
|
||||
@defmac inline-quote expression
|
||||
Quote @var{expression} for @code{define-inline}. This is similar to
|
||||
the backquote (@pxref{Backquote}), but quotes code and accepts only
|
||||
@code{,}, not @code{,@@}.
|
||||
@end defmac
|
||||
|
||||
@defmac inline-letevals (bindings@dots{}) body@dots{}
|
||||
This is similar to @code{let} (@pxref{Local Variables}): it sets up
|
||||
local variables as specified by @var{bindings}, and then evaluates
|
||||
@var{body} with those bindings in effect. Each element of
|
||||
@var{bindings} should be either a symbol or a list of the form
|
||||
@w{@code{(@var{var} @var{expr})}}; the result is to evaluate
|
||||
@var{expr} and bind @var{var} to the result. The tail of
|
||||
@var{bindings} can be either @code{nil} or a symbol which should hold
|
||||
a list of arguments, in which case each argument is evaluated, and the
|
||||
symbol is bound to the resulting list.
|
||||
@end defmac
|
||||
|
||||
@defmac inline-const-p expression
|
||||
Return non-@code{nil} if the value of @var{expression} is already
|
||||
known.
|
||||
@end defmac
|
||||
|
||||
@defmac inline-const-val expression
|
||||
Return the value of @var{expression}.
|
||||
@end defmac
|
||||
|
||||
@defmac inline-error format &rest args
|
||||
Signal an error, formatting @var{args} according to @var{format}.
|
||||
@end defmac
|
||||
|
||||
Here's an example of using @code{define-inline}:
|
||||
|
||||
@lisp
|
||||
(define-inline myaccessor (obj)
|
||||
(inline-letevals (obj)
|
||||
(inline-quote (if (foo-p ,obj) (aref (cdr ,obj) 3) (aref ,obj 2)))))
|
||||
@end lisp
|
||||
|
||||
@noindent
|
||||
This is equivalent to
|
||||
|
||||
@lisp
|
||||
(defsubst myaccessor (obj)
|
||||
(if (foo-p obj) (aref (cdr obj) 3) (aref obj 2)))
|
||||
@end lisp
|
||||
To undefine a function name, use @code{fmakunbound}.
|
||||
@xref{Function Cells}.
|
||||
|
||||
@node Calling Functions
|
||||
@section Calling Functions
|
||||
@ -2155,8 +2069,12 @@ this:
|
||||
An @dfn{inline function} is a function that works just like an
|
||||
ordinary function, except for one thing: when you byte-compile a call
|
||||
to the function (@pxref{Byte Compilation}), the function's definition
|
||||
is expanded into the caller. To define an inline function, use
|
||||
@code{defsubst} instead of @code{defun}.
|
||||
is expanded into the caller.
|
||||
|
||||
The simple way to define an inline function, is to write
|
||||
@code{defsubst} instead of @code{defun}. The rest of the definition
|
||||
looks just the same, but using @code{defsubst} says to make it inline
|
||||
for byte compilation.
|
||||
|
||||
@defmac defsubst name args [doc] [declare] [interactive] body@dots{}
|
||||
This macro defines an inline function. Its syntax is exactly the same
|
||||
@ -2194,9 +2112,95 @@ argument of an inline function is evaluated exactly once, you needn't
|
||||
worry about how many times the body uses the arguments, as you do for
|
||||
macros.
|
||||
|
||||
As an alternative to @code{defsubst}, you can use
|
||||
@code{define-inline} to define functions via their exhaustive compiler
|
||||
macro. @xref{Defining Functions, define-inline}.
|
||||
Alternatively, you can define a function by providing the code which
|
||||
will inline it as a compiler macro. The following macros make this
|
||||
possible.
|
||||
|
||||
@c FIXME: Can define-inline use the interactive spec?
|
||||
@defmac define-inline name args [doc] [declare] body@dots{}
|
||||
Define a function @var{name} by providing code that does its inlining,
|
||||
as a compiler macro. The function will accept the argument list
|
||||
@var{args} and will have the specified @var{body}.
|
||||
|
||||
If present, @var{doc} should be the function's documentation string
|
||||
(@pxref{Function Documentation}); @var{declare}, if present, should be
|
||||
a @code{declare} form (@pxref{Declare Form}) specifying the function's
|
||||
metadata.
|
||||
@end defmac
|
||||
|
||||
Functions defined via @code{define-inline} have several advantages
|
||||
with respect to macros defined by @code{defsubst} or @code{defmacro}:
|
||||
|
||||
@itemize @minus
|
||||
@item
|
||||
They can be passed to @code{mapcar} (@pxref{Mapping Functions}).
|
||||
|
||||
@item
|
||||
They are more efficient.
|
||||
|
||||
@item
|
||||
They can be used as @dfn{place forms} to store values
|
||||
(@pxref{Generalized Variables}).
|
||||
|
||||
@item
|
||||
They behave in a more predictable way than @code{cl-defsubst}
|
||||
(@pxref{Argument Lists,,, cl, Common Lisp Extensions for GNU Emacs
|
||||
Lisp}).
|
||||
@end itemize
|
||||
|
||||
Like @code{defmacro}, a function inlined with @code{define-inline}
|
||||
inherits the scoping rules, either dynamic or lexical, from the call
|
||||
site. @xref{Variable Scoping}.
|
||||
|
||||
The following macros should be used in the body of a function defined
|
||||
by @code{define-inline}.
|
||||
|
||||
@defmac inline-quote expression
|
||||
Quote @var{expression} for @code{define-inline}. This is similar to
|
||||
the backquote (@pxref{Backquote}), but quotes code and accepts only
|
||||
@code{,}, not @code{,@@}.
|
||||
@end defmac
|
||||
|
||||
@defmac inline-letevals (bindings@dots{}) body@dots{}
|
||||
This is similar to @code{let} (@pxref{Local Variables}): it sets up
|
||||
local variables as specified by @var{bindings}, and then evaluates
|
||||
@var{body} with those bindings in effect. Each element of
|
||||
@var{bindings} should be either a symbol or a list of the form
|
||||
@w{@code{(@var{var} @var{expr})}}; the result is to evaluate
|
||||
@var{expr} and bind @var{var} to the result. The tail of
|
||||
@var{bindings} can be either @code{nil} or a symbol which should hold
|
||||
a list of arguments, in which case each argument is evaluated, and the
|
||||
symbol is bound to the resulting list.
|
||||
@end defmac
|
||||
|
||||
@defmac inline-const-p expression
|
||||
Return non-@code{nil} if the value of @var{expression} is already
|
||||
known.
|
||||
@end defmac
|
||||
|
||||
@defmac inline-const-val expression
|
||||
Return the value of @var{expression}.
|
||||
@end defmac
|
||||
|
||||
@defmac inline-error format &rest args
|
||||
Signal an error, formatting @var{args} according to @var{format}.
|
||||
@end defmac
|
||||
|
||||
Here's an example of using @code{define-inline}:
|
||||
|
||||
@lisp
|
||||
(define-inline myaccessor (obj)
|
||||
(inline-letevals (obj)
|
||||
(inline-quote (if (foo-p ,obj) (aref (cdr ,obj) 3) (aref ,obj 2)))))
|
||||
@end lisp
|
||||
|
||||
@noindent
|
||||
This is equivalent to
|
||||
|
||||
@lisp
|
||||
(defsubst myaccessor (obj)
|
||||
(if (foo-p obj) (aref (cdr obj) 3) (aref obj 2)))
|
||||
@end lisp
|
||||
|
||||
@node Declare Form
|
||||
@section The @code{declare} Form
|
||||
|
@ -135,13 +135,26 @@ non-@code{nil} value, it returns that value; otherwise it returns
|
||||
@node Setting Hooks
|
||||
@subsection Setting Hooks
|
||||
|
||||
Here's an example that uses a mode hook to turn on Auto Fill mode when
|
||||
in Lisp Interaction mode:
|
||||
Here's an example that adds a funtion to a mode hook to turn
|
||||
on Auto Fill mode when in Lisp Interaction mode:
|
||||
|
||||
@example
|
||||
(add-hook 'lisp-interaction-mode-hook 'auto-fill-mode)
|
||||
@end example
|
||||
|
||||
The value of a hook variable should be a list of functions. You can
|
||||
manipulate that list using the normal Lisp facilities, but the modular
|
||||
way is to use the functions @code{add-hook} and @code{remove-hook},
|
||||
defined below. They take care to handle some unusual situations and
|
||||
avoid problems.
|
||||
|
||||
It works to put a @code{lambda}-expression function on a hook, but
|
||||
we recommend avoiding this because it can lead to confusion. If you
|
||||
add the same @code{lambda}-expression a second time but write it
|
||||
slightly differently, you will get two equivalent but distinct
|
||||
functions on the hook. If you then remove one of them, the other will
|
||||
still be on it.
|
||||
|
||||
@defun add-hook hook function &optional depth local
|
||||
This function is the handy way to add function @var{function} to hook
|
||||
variable @var{hook}. You can use it for abnormal hooks as well as for
|
||||
|
@ -1687,7 +1687,7 @@ If non-nil, the default, buffers opened during pdbtracking session are
|
||||
killed when pdbtracking session is finished.
|
||||
|
||||
---
|
||||
*** New function 'python-shell-send-region'.
|
||||
*** New function 'python-shell-send-statement.
|
||||
It sends the statement delimited by 'python-nav-beginning-of-statement'
|
||||
and 'python-nav-end-of-statement' to the inferior Python process.
|
||||
|
||||
|
@ -2288,7 +2288,7 @@ the United States."
|
||||
(calc-alg-digit-entry)
|
||||
(setq calc-aborted-prefix nil)
|
||||
(let* ((calc-digit-value nil)
|
||||
(calc-prev-char nil)
|
||||
(calc-prev-char last-command-event)
|
||||
(calc-prev-prev-char nil)
|
||||
(calc-buffer (current-buffer))
|
||||
(buf
|
||||
|
@ -3035,17 +3035,18 @@ Update the widget to show that value. The value that was current
|
||||
before this operation becomes the backup value."
|
||||
(let* ((symbol (widget-value widget))
|
||||
(saved-value (get symbol 'saved-value))
|
||||
(comment (get symbol 'saved-variable-comment)))
|
||||
(comment (get symbol 'saved-variable-comment))
|
||||
value)
|
||||
(custom-variable-backup-value widget)
|
||||
(if (not (or saved-value comment))
|
||||
;; If there is no saved value, remove the setting.
|
||||
(custom-push-theme 'theme-value symbol 'user 'reset)
|
||||
;; Otherwise, apply the saved value.
|
||||
(put symbol 'variable-comment comment)
|
||||
(custom-push-theme 'theme-value symbol 'user 'set (car-safe saved-value))
|
||||
(ignore-errors
|
||||
(funcall (or (get symbol 'custom-set) 'set-default)
|
||||
symbol (eval (car saved-value)))))
|
||||
;; If there is no saved value, remove the setting.
|
||||
(custom-push-theme 'theme-value symbol 'user 'reset)
|
||||
(setq value (car-safe saved-value))
|
||||
(custom-push-theme 'theme-value symbol 'user 'set value)
|
||||
(put symbol 'variable-comment comment))
|
||||
(ignore-errors
|
||||
(funcall (or (get symbol 'custom-set) #'set-default) symbol
|
||||
(eval (or value (car (get symbol 'standard-value))))))
|
||||
(put symbol 'customized-value nil)
|
||||
(put symbol 'customized-variable-comment nil)
|
||||
(widget-put widget :custom-state 'unknown)
|
||||
@ -4295,6 +4296,7 @@ This works for both graphical and text displays."
|
||||
(widget-put widget :children children)
|
||||
(custom-group-state-update widget))
|
||||
;; End line
|
||||
(insert "\n")
|
||||
(custom-group--draw-horizontal-line)))))
|
||||
|
||||
(defvar custom-group-menu
|
||||
|
@ -1381,7 +1381,7 @@ function runs. To disable other themes, use `disable-theme'."
|
||||
(custom-theme-recalc-variable symbol)))))))
|
||||
(unless (eq theme 'user)
|
||||
(setq custom-enabled-themes
|
||||
(cons theme (delq theme custom-enabled-themes)))
|
||||
(cons theme (remq theme custom-enabled-themes)))
|
||||
;; Give the `user' theme the highest priority.
|
||||
(enable-theme 'user)))
|
||||
|
||||
|
@ -448,13 +448,14 @@ Usually run by inclusion in `minibuffer-setup-hook'."
|
||||
with end = (icomplete--field-end)
|
||||
with all = (completion-all-sorted-completions beg end)
|
||||
for fn in (cond ((and minibuffer-default
|
||||
(stringp minibuffer-default) ; bug#38992
|
||||
(= (icomplete--field-end) (icomplete--field-beg)))
|
||||
;; When we have a non-nil default and no input
|
||||
;; whatsoever: we want to make sure that default
|
||||
;; is bubbled to the top so that
|
||||
;; When we have a non-nil string default and
|
||||
;; no input whatsoever: we want to make sure
|
||||
;; that default is bubbled to the top so that
|
||||
;; `icomplete-force-complete-and-exit' will
|
||||
;; select it (do that even if the match doesn't
|
||||
;; match the completion perfectly.
|
||||
;; select it (do that even if the match
|
||||
;; doesn't match the completion perfectly.
|
||||
`(,(lambda (comp)
|
||||
(equal minibuffer-default comp))
|
||||
,(lambda (comp)
|
||||
@ -462,6 +463,12 @@ Usually run by inclusion in `minibuffer-setup-hook'."
|
||||
((and fido-mode
|
||||
(not minibuffer-default)
|
||||
(eq (icomplete--category) 'file))
|
||||
;; `fido-mode' has some extra file-sorting
|
||||
;; semantics even if there isn't a default,
|
||||
;; which is to bubble "./" to the top if it
|
||||
;; exists. This makes M-x dired RET RET go to
|
||||
;; the directory of current file, which is
|
||||
;; what vanilla Emacs and `ido-mode' both do.
|
||||
`(,(lambda (comp)
|
||||
(string= "./" comp)))))
|
||||
thereis (cl-loop
|
||||
|
@ -851,7 +851,7 @@ can also be executed interactively independently of
|
||||
(interactive (list "Interrupted by user"))
|
||||
(dolist (buf (buffer-list))
|
||||
(with-current-buffer buf
|
||||
(let (p flymake-proc--current-process)
|
||||
(let ((p flymake-proc--current-process))
|
||||
(when (process-live-p p)
|
||||
(kill-process p)
|
||||
(process-put p 'flymake-proc--interrupted reason)
|
||||
|
@ -499,11 +499,11 @@ ns_set_represented_filename (struct frame *f)
|
||||
#if defined (NS_IMPL_COCOA) && defined (MAC_OS_X_VERSION_10_7)
|
||||
/* Work around for Mach port leaks on macOS 10.15 (bug#38618). */
|
||||
NSURL *fileURL = [NSURL fileURLWithPath:fstr isDirectory:NO];
|
||||
BOOL isUbiquitousItem = YES;
|
||||
NSNumber *isUbiquitousItem = @YES;
|
||||
[fileURL getResourceValue:(id *)&isUbiquitousItem
|
||||
forKey:NSURLIsUbiquitousItemKey
|
||||
error:nil];
|
||||
if (isUbiquitousItem)
|
||||
if ([isUbiquitousItem boolValue])
|
||||
fstr = @"";
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user