Newer Older
GNU Emacs NEWS -- history of user-visible changes.

Paul Eggert's avatar
Paul Eggert committed
Copyright (C) 2017-2019 Free Software Foundation, Inc.
See the end of the file for license conditions.
Dave Love's avatar
Dave Love committed

6 7
Please send Emacs bug reports to ''.
If possible, use 'M-x report-emacs-bug'.

This file is about changes in Emacs version 27.

Paul Eggert's avatar
Paul Eggert committed
See file HISTORY for a list of GNU Emacs versions and release dates.
12 13
See files NEWS.26, NEWS.25, ..., NEWS.18, and NEWS.1-17 for changes
in older Emacs versions.

Paul Eggert's avatar
Paul Eggert committed
You can narrow news to a specific version by calling 'view-emacs-news'
with a prefix argument or by typing 'C-u C-h C-n'.

Temporary note:
+++ indicates that all relevant manuals in doc/ have been updated.
--- means no change in the manuals is needed.
21 22
When you add a new item, use the appropriate mark if you are sure it
applies, and please also update docstrings as needed.
Eli Zaretskii's avatar
Eli Zaretskii committed

Michael Albinus's avatar
Michael Albinus committed
* Installation Changes in Emacs 27.1
Paul Eggert's avatar
Paul Eggert committed

27 28 29
** Emacs now uses GMP, the GNU Multiple Precision library.
By default, if 'configure' does not find a suitable libgmp, it
arranges for the included mini-gmp library to be built and used.
The new 'configure' option '--without-libgmp' uses mini-gmp even if a
suitable libgmp is available.
Tom Tromey's avatar
Tom Tromey committed

33 34
** Emacs can now use HarfBuzz as its shaping engine.
The new configure option '--with-harfbuzz' adds support for the
Paul Eggert's avatar
Paul Eggert committed
HarfBuzz text shaping engine.  It is on by default; use './configure
36 37
--without-harfbuzz' to build without it.  The HarfBuzz text shaping is
available via new font backend drivers 'xfthb' and 'ftcrhb' for Xft
and Cairo drawings, respectively, and via the 'harfbuzz' backend on
39 40 41 42 43
MS-Windows.  The Harfbuzz text shaping is preferred to the previously
supported ones, so the font backends that use older shaping engines
(FLT on GNU and Unix systems and Uniscribe on MS-Windows) are not
enabled by default; they can be enabled via the 'font-backend' frame
parameter or via X resources.
Paul Eggert's avatar
Paul Eggert committed

** The new configure option '--with-json' adds support for JSON using
the Jansson library.  It is on by default; use './configure
47 48 49 50 51
--with-json=no' to build without Jansson support.  The new JSON
functions 'json-serialize', 'json-insert', 'json-parse-string', and
'json-parse-buffer' are typically much faster than their Lisp
counterparts from json.el.

Michael Albinus's avatar
Michael Albinus committed
** The configure option '--with-cairo' is no longer experimental.
53 54 55
This builds Emacs with Cairo drawing, and supports built-in printing
when Emacs is built with GTK+.

56 57 58 59
** Emacs no longer defaults to using ImageMagick to display images,
due to security and stability concerns.  To override the default, use
'configure --with-imagemagick'.

60 61
** Several configure options now accept an option-argument 'ifavailable'.
For example, './configure --with-xpm=ifavailable' now configures Emacs
62 63 64
to attempt to use libxpm but to continue building even if libxpm is
absent.  The other affected options are '--with-gif', '--with-gnutls',
'--with-jpeg', '--with-png', and '--with-tiff'.

Paul Eggert's avatar
Paul Eggert committed
66 67 68 69 70 71 72
** The etags program now uses the C library's regular expression matcher
when possible, and a compatible regex substitute otherwise.  This will
let developers maintain Emacs's own regex code without having to also
support other programs.  The new configure option '--without-included-regex'
forces etags to use the C library's regex matcher even if the regex
substitute ordinarily would be used to work around compatibility problems.

** Emacs has been ported to the '-fcheck-pointer-bounds' option of GCC.
74 75 76 77 78 79
This causes Emacs to check bounds of some arrays addressed by its
internal pointers, which can be helpful when debugging the Emacs
interpreter or modules that it uses.  If your platform supports it you
can enable it when configuring, e.g., './configure CFLAGS="-g3 -O2
-mmpx -fcheck-pointer-bounds"' on Intel MPX platforms.

80 81 82
** Emacs now normally uses a C pointer type instead of a C integer
type to implement Lisp_Object, which is the fundamental machine word
type internal to the Emacs Lisp interpreter.  This change aims to
83 84
catch typos and supports '-fcheck-pointer-bounds'.  The 'configure'
option '--enable-check-lisp-object-type' is therefore no longer as
85 86 87
useful and so is no longer enabled by default in developer builds,
to reduce differences between developer and production builds.

88 89 90 91 92 93 94 95 96 97 98 99 100
** Emacs now uses a "portable dumper" instead of unexec.
This improves compatibility with memory allocation on modern systems,
and in particular better supports the Address Space Layout
Randomization (ASLR) feature, a security technique used by most modern
operating systems.

When built with the portable dumping support (which is the default),
Emacs looks for the 'emacs.pdmp' file, generated during the build, in
its data directory at startup, and loads the dumped state from there.
The new command-line argument '--dump-file=FILE' allows to specify a
non-default '.pdmp' file to load the state from; see the node "Initial
Options" in the Emacs manual for more information.
Daniel Colascione's avatar
Daniel Colascione committed

An Emacs started via a dump file can create a new dump file only if it
Michael Albinus's avatar
Michael Albinus committed
was invoked with the '-batch' option.
104 105 106 107 108 109 110

Although the portable dumper has been tested, it may have a bug on
unusual platforms.  If you require traditional unexec dumping you can
use the configure-time option '--with-dumping=unexec'; however, please
file a bug report describing the situation, as unexec dumping is

Paul Eggert's avatar
Paul Eggert committed
111 112 113 114 115
** The new configure option '--enable-checking=structs' attempts to
check that the portable dumper code has been updated to match the last
change to one of the data structures that it relies on.

117 118 119
** The configure options '--enable-checking=conslist' and
'--enable-checking=xmallocoverrun' have been withdrawn.  The former
made Emacs irredeemably slow, and the latter made it crash.  Neither
120 121 122
option was useful with modern debugging tools such as AddressSanitizer.
(See etc/DEBUG for the details of using the modern replacements of the
removed configure options.)

124 125 126 127
** The distribution tarball now has test cases; 'make check' runs them.
This is intended mostly to help developers.

128 129 130 131
** Emacs now requires GTK 2.24 and GTK 3.10 for the GTK 2 and GTK 3
builds respectively.

Stefan Kangas's avatar
Stefan Kangas committed
132 133
** New make target 'help' shows a summary of common make targets.

Philipp Stephani's avatar
Philipp Stephani committed
134 135 136
** Emacs now builds with dynamic module support by default.  Pass
'--without-modules' to 'configure' to disable dynamic module support.

* Startup Changes in Emacs 27.1

140 141
** Emacs now uses the XDG convention for init files.
For example, it looks for init.el in "~/.config/emacs/init.el", and
143 144
similarly for other init files.

The XDG_CONFIG_HOME environment variable (which defaults to "~/.config")
146 147
specifies the parent directory of these and other configuration files,
and will override their traditional locations (the home directory,
"~/.emacs.d", etc.).
149 150 151 152 153 154

Emacs will still look for init files in their traditional locations if
XDG_CONFIG_HOME does not exist, so invoking Emacs with
XDG_CONFIG_HOME='/nowhere' might be useful if your new-location init
files are scrambled, or if you want to force Emacs to ignore files
under XDG_CONFIG_HOME for some other reason.

156 157 158 159 160 161 162 163 164
** Emacs can now be configured using an early init file.
The file is called 'early-init.el', in 'user-emacs-directory'.  It is
loaded very early in the startup process: before graphical elements
such as the tool bar are initialized, and before the package manager
is initialized.  The primary purpose is to allow customizing how the
package system is initialized given that initialization now happens
before loading the regular init file (see below).

165 166 167 168
We recommend against putting any customizations in this file that
don't need to be set up before initializing installed add-on packages,
because the early init file is read too early into the startup
process, and some important parts of the Emacs session, such as
'window-system' and other GUI features, are not yet set up, which could
170 171
make some customization fail to work.

** Installed packages are now activated *before* loading the init file.
174 175 176 177 178 179 180 181
As a result of this change, it is no longer necessary to call
'package-initialize' in your init file.

Previously, a call to 'package-initialize' was automatically inserted
into the init file when Emacs was started.  This call can now safely
be removed.  Alternatively, if you want to ensure that your init file
is still compatible with earlier versions of Emacs, change it to:

(when (< emacs-major-version 27)

185 186 187 188 189 190 191 192
However, if your init file changes the values of 'package-load-list'
or 'package-user-dir', or sets 'package-enable-at-startup' to nil then
it won't work right without some adjustment:
- You can move that code to the early init file (see above), so those
  settings apply before Emacs tries to activate the packages.
- You can use the new 'package-quickstart' so activation of packages
  does not need to pay attention to 'package-load-list' or
  'package-user-dir' any more.

194 195 196 197 198
** Emacs now notifies systemd when startup finishes or shutdown begins.
Units that are ordered after 'emacs.service' will only be started
after Emacs has finished initialization and is ready for use.
(If your Emacs is installed in a non-standard location and you copied the
emacs.service file to eg "~/.config/systemd/user/", you will need to copy
200 201
the new version of the file again.)

* Changes in Emacs 27.1

205 206 207 208 209 210 211 212 213 214
** 'next/previous-multiframe-window' have been renamed.
The new names are as follows:

 'next-multiframe-window'     -> 'next-window-any-frame'
 'previous-multiframe-window' -> 'previous-window-any-frame'

The old function names are maintained as aliases for backward

215 216
** emacsclient

Glenn Morris's avatar
Glenn Morris committed
218 219 220
*** emacsclient now supports an 'EMACS_SOCKET_NAME' environment variable.
The command-line argument '--socket-name' overrides it.
(The same behavior as for the pre-existing 'EMACS_SERVER_FILE' variable.)

*** Emacs and emacsclient now default to "$XDG_RUNTIME_DIR/emacs"
as the directory for client/server sockets, if Emacs is running
on a platform or environment that sets the 'XDG_RUNTIME_DIR'
environment variable to indicate where session sockets should go.
To get the old, less-secure behavior, you can set the
'EMACS_SOCKET_NAME' environment variable to an appropriate value.

230 231 232 233
*** When run by root, emacsclient no longer connects to non-root sockets.
(Instead you can use Tramp methods to run root commands in a non-root Emacs.)

234 235 236 237 238
** New user option 'what-cursor-show-names'.
When non-nil, 'what-cursor-position' will show the name of the character
in addition to the decimal/hex/octal representation.  Default nil.

240 241 242
** New function 'network-lookup-address-info'.
This does IPv4 and/or IPv6 address lookups on hostnames.

243 244 245 246 247
** 'network-interface-list' can now return IPv4 and IPv6 addresses.
IPv4 and IPv6 addresses are now returned by default if available,
optionally including netmask/broadcast address information.

248 249 250 251 252 253 254
** Control of the threshold for using the 'distant-foreground' color.
The threshold for color distance below which the 'distant-foreground'
color of the face will be used instead of the foreground color can now
be controlled via the new variable 'face-near-same-color-threshold'.
The default value is 30000, as the previously hard-coded threshold.

Tino Calancha's avatar
Tino Calancha committed
** The function 'read-passwd' uses "*" as default character to hide passwords.
Tino Calancha's avatar
Tino Calancha committed

258 259 260
** Lexical binding is now used when evaluating interactive Elisp forms.
More specifically, lexical-binding is now used for 'M-:', '--eval', as
well as in the "*scratch*" and "*ielm*" buffers.

263 264 265 266
** The new user option 'tooltip-resize-echo-area' avoids truncating
tooltip text on GUI frames when tooltips are displayed in the echo
area.  Instead, it resizes the echo area as needed to accommodate the
full tool-tip text.

** Show mode line tooltips only if the corresponding action applies.
270 271 272
Customize the user option 'mode-line-default-help-echo' to restore the
old behavior where the tooltip text is also shown when the
corresponding action does not apply.

274 275 276 277 278 279 280 281 282
** New hook 'server-after-make-frame-hook'.
This hook is a convenient place to perform initializations in daemon
mode which require GUI features to be available.  One example is
restoration of the previous session using the desktop.el package: put
the call to 'desktop-read' in this hook, if you want the GUI settings
to be restored, or if desktop.el needs to interact with you during
restoration of the session.

283 284 285 286 287
** The functions 'set-frame-height' and 'set-frame-width' are now
commands, and will set the currently selected frame to the height/
width specified by the numeric prefix.

Mark Oteiza's avatar
Mark Oteiza committed
288 289 290
** New function 'logcount' calculates an integer's Hamming weight.

291 292 293 294 295 296 297 298
** New function 'libxml-available-p'.
This function returns non-nil if libxml support is both compiled in
and available at run time.  Lisp programs should use this function to
detect built-in libxml support, instead of testing for that
indirectly, e.g., by checking that functions like
'libxml-parse-html-region' return nil.

** 'libxml-parse-xml-region' and 'libxml-parse-html-region' take
301 302
a parameter that's called DISCARD-COMMENTS, but it really only
discards the top-level comment.  Therefore this parameter is now
obsolete, and the new utility function 'xml-remove-comments' can be
304 305 306
used to remove comments before calling the libxml functions to parse
the data.

307 308 309 310 311 312
** A new DOM (the XML/HTML document structure returned by functions
such as 'libxml-parse-html-region') traversal function has been added:
'dom-search', which takes a DOM and a predicate and returns all nodes
that match.

313 314
** The Network Security Manager now allows more fine-grained control
of what checks to run via the 'network-security-protocol-checks'
user option.

319 320
** TLS connections have their security tightened by default.
Most of the checks for outdated, believed-to-be-weak TLS algorithms
Lars Ingebrigtsen's avatar
Lars Ingebrigtsen committed
321 322
and ciphers are now switched on by default.  (In addition, several new
TLS weaknesses are now warned about.)  By default, the NSM will
323 324 325 326
flag connections using these weak algorithms and ask users whether to
allow them.  To get the old behavior back (where certificates are
checked for validity, but no warnings about weak cryptography are
issued), you can either set 'network-security-protocol-checks' to nil,
or adjust the elements in that user option to only happen on the 'high'
security level (assuming you use the 'medium' level).

330 331 332 333 334 335 336 337
** New user option 'nsm-trust-local-network'.
Allows skipping Network Security Manager checks for hosts on your
local subnet(s).  It defaults to nil.  Usually, there should be no
need to set this non-nil, and doing that risks opening your local
network connections to attacks.  So be sure you know what you are
doing before changing the value.

338 339 340
** Native GnuTLS connections can now use client certificates.
Previously, this support was only available when using the external
'gnutls-cli' command.  Call 'open-network-stream' with
342 343 344
':client-certificate t' to trigger looking up of per-server
certificates via 'auth-source'.

345 346 347 348
** New user option 'network-stream-use-client-certificates'.
When non-nil, 'open-network-stream' performs lookups of client
certificates using 'auth-source' as if ':client-certificate t' were
349 350
specified iff there is no explicit ':client-certificate' parameter.
Defaults to nil.

352 353 354 355 356
** New function 'fill-polish-nobreak-p', to be used in 'fill-nobreak-predicate'.
It blocks line breaking after a one-letter word, also in the case when
this word is preceded by a non-space, but non-alphanumeric character.

357 358 359 360 361 362 363
** The limit on repetitions in regexps has been raised to 2^16-1.
It was previously limited to 2^15-1.  For example, the following
regular expression was previously invalid, but is now accepted:


364 365 366
** The German prefix and postfix input methods now support Capital sharp S.

** New input methods 'hawaiian-postfix' and 'hawaiian-prefix'.

370 371 372
** New input methods 'georgian-qwerty' and 'georgian-nuskhuri'.

373 374 375 376 377 378 379
** New input methods for several variants of the Sami language.
The Sami input methods include: 'norwegian-sami-prefix',
'bergsland-hasselbrink-sami-prefix', 'southern-sami-prefix',
'ume-sami-prefix', 'northern-sami-prefix', 'inari-sami-prefix',
'skolt-sami-prefix', and 'kildin-sami-prefix'.

380 381 382 383 384
** In Japanese environments that do not specify encodings and are not
based on MS-Windows, the default encoding is now utf-8 instead of

386 387
** New function 'exec-path'.
This function by default returns the value of the corresponding
user option, but can optionally return the equivalent of 'exec-path'
from a remote host.
390 391

392 393
** The function 'executable-find' supports an optional argument REMOTE.
This triggers to search the program on the remote host as indicated by
394 395

** New user option 'auto-save-no-message'.
398 399 400
When set to t, no message will be shown when auto-saving (default
value: nil).

401 402 403 404 405 406
** The value of 'make-cursor-line-fully-visible' can now be a function.
In addition to nil or non-nil, the value can now be a predicate
function.  Follow mode uses this to control scrolling of its windows
when the last screen line in a window is not fully visible.

407 408 409 410
** New variable 'emacs-repository-branch'.
It reports the git branch from which Emacs was built.

411 412
** New user option 'switch-to-buffer-obey-display-actions'.
413 414 415
When non-nil, 'switch-to-buffer' uses 'pop-to-buffer-same-window' that
respects display actions specified by 'display-buffer-alist' and

417 418 419 420 421 422 423 424 425 426
** The option 'switch-to-visible-buffer' is now obsolete.
Customize 'switch-to-prev-buffer-skip' instead.

** New option 'switch-to-prev-buffer-skip'.
This option allows to specify the set of buffers that may be shown by
'switch-to-prev-buffer' and 'switch-to-next-buffer' more stringently
than the now obsolete 'switch-to-visible-buffer'.

** New 'flex' completion style
An implementation of popular "flex/fuzzy/scatter" completion which
429 430 431 432
matches strings where the pattern appears as a subsequence.  Put
simply, makes "foo" complete to both "barfoo" and "frodo".  Add 'flex'
to 'completion-styles' or 'completion-category-overrides' to use it.

433 434
** The 'completion-common-part' face is now visible by default.

** New face attribute ':extend' to control face extension at EOL.
437 438
The new face attribute ':extend' controls whether to use the face for
displaying the empty space beyond end of line (EOL) till the edge of
the window.  By default, this attribute is non-nil only for 'region',
440 441 442 443 444 445 446 447 448
'secondary-selection', 'hl-line' and some faces of Diff and Ediff
modes; any other face that crosses end of line will not affect the
display of the empty space at EOL.  This is to make Emacs behave more
like other GUI applications with respect to displaying faces that
cross line boundaries.

Themes that redefine faces should add a non-nil ':extend' attribute to
the above-mentioned faces, to keep the behavior of the default face

450 451 452 453 454 455 456 457
** Connection-local variables

*** Connection-local variables are applied by default like file-local
and directory-local variables.

*** The macro 'with-connection-local-variables' has been renamed from
'with-connection-local-profiles'.  No argument PROFILES needed any longer.

461 462
** New user option 'next-error-verbose' controls when 'next-error'
outputs a message about the error locus.
463 464

** New user option 'grep-search-path' defines the directories searched for
grep hits (this used to be controlled by 'compilation-search-path').
467 468

** New user option 'emacs-lisp-compilation-search-path' defines the
470 471
directories searched for byte-compiler error messages (this used to
be controlled by 'compilation-search-path').

473 474 475
** Multicolor fonts such as "Noto Color Emoji" can be displayed on
Emacs configured with Cairo drawing and linked with cairo >= 1.16.0.

477 478
** Emacs now optionally displays a fill column indicator.

This is similar to what 'fill-column-indicator' package provides, but
much faster and compatible with 'show-trailing-whitespace'.

Customize the buffer-local user options 'display-fill-column-indicator'
483 484 485
and 'display-fill-column-indicator-character' to activate the

The indicator is not displayed at all in minibuffer windows and
487 488 489
in tooltips, as it is not useful there.

There are 2 new buffer local variables and 1 face to customize this
mode they are described in the manual "(emacs) Display".

492 493 494
** 'progress-reporter-update' accepts a suffix string to display.

Stephen Leake's avatar
Stephen Leake committed
496 497
** New user option 'xref-file-name-display' controls the display of
file names in xref buffers.
Eli Zaretskii's avatar
Eli Zaretskii committed

** New user option 'byte-count-to-string-function'.
It is used for displaying file sizes and disk space in some cases.

502 503 504 505 506 507
** Emacs now interprets RGB triplets like HTML, SVG, and CSS do.

The X convention previously used differed slightly, particularly for
RGB triplets with a single hexadecimal digit per component.

508 509 510
** The toolbar now shows the equivalent key binding in its tooltips.

511 512 513 514
** The File menu-bar menu was re-arranged: Print menu items moved to
submenu, and also added the new entries for tabs.

515 516 517 518 519
** 'scroll-lock-mode' is now bound to the 'Scroll_Lock' key globally.
Note that this key binding will not work on MS-Windows systems if
'w32-scroll-lock-modifier' is non-nil.

520 521 522 523 524
** 'global-set-key', called interactively, now no longer downcases a
key binding with an upper case letter - if you can type it, you can
bind it.

* Editing Changes in Emacs 27.1

Eli Zaretskii's avatar
Eli Zaretskii committed
** 'zap-to-char' now uses history of characters you used to zap to.
'zap-to-char' uses the new 'read-char-from-minibuffer' function to allow
531 532 533 534
navigating through the history of characters that have been input.
This is mostly useful for characters that have complex input methods
where inputting the character again may involve many keystrokes.

535 536 537 538
** 'save-some-buffers' now has a new action in the prompt: 'C-f' will
exit the command and switch to the buffer currently being asked about.

539 540 541 542
** The new 'amalgamating-undo-limit' variable can be used to control
how many changes should be amalgamated when using the 'undo' command.

543 544 545 546 547
** The 'newline-and-indent' command (commonly bound to 'RET' in many
modes) now takes an optional numeric argument to specify how many
times is should insert newlines (and indent).

548 549 550
** New command 'make-empty-file'.

551 552 553 554 555
** New variable 'x-wait-for-event-timeout'.
This controls how long Emacs will wait for updates to the graphical
state to take effect (making a frame visible, for example).

557 558 559 560
** New user option 'electric-quote-replace-double'.
This option controls whether '"' is replaced in 'electric-quote-mode',
in addition to other quote characters.  If non-nil, ASCII double-quote
characters that quote text "like this" are replaced by double
561 562
typographic quotes, “like this”, in text modes, and in comments in
non-text modes.

564 565 566 567 568 569 570
** New user option 'flyspell-case-fold-duplications'.
This option controls whether Flyspell mode considers consecutive words
to be duplicates if they are not in the same case.  If non-nil, the
default, words are considered to be duplicates even if their letters'
case does not match.

571 572 573 574 575
** 'write-abbrev-file' now includes special properties.
'write-abbrev-file' now writes special properties like ':case-fixed'
for abbrevs that have them.

Allen Li's avatar
Allen Li committed
Allen Li's avatar
Allen Li committed
577 578 579
** 'write-abbrev-file' skips empty tables.
'write-abbrev-file' now skips inserting a 'define-abbrev-table' form for
tables which do not have any non-system abbrevs to save.
Allen Li's avatar
Allen Li committed

582 583
** The new functions and commands 'text-property-search-forward' and
'text-property-search-backward' have been added.  These provide an
interface that's more like functions like 'search-forward'.

Juri Linkov's avatar
Juri Linkov committed
586 587
** More commands support noncontiguous rectangular regions, namely
'upcase-dwim', 'downcase-dwim', 'capitalize-dwim', 'capitalize-region',
589 590
'upcase-initials-region', 'replace-string', 'replace-regexp', and
Juri Linkov's avatar
Juri Linkov committed

592 593 594 595 596 597 598
** When asked to visit a large file, Emacs now offers visiting it literally.
Previously, Emacs would only ask for confirmation before visiting
large files.  Now it also offers a third alternative: to visit the
file literally, as in 'find-file-literally', which speeds up
navigation and editing of large files.

600 601 602 603
** 'add-dir-local-variable' now uses dotted pair notation syntax to
write alists of variables to ".dir-locals.el".  This is the same
syntax that you can see in the example of a ".dir-locals.el" file in
the node "(emacs) Directory Variables" of the user manual.

** Network connections using 'local' can now use IPv6.
'make-network-process' now uses the correct loopback address when
asked to use ':host 'local' and ':family 'ipv6'.

** The new function 'replace-region-contents' replaces the current
region using a given replacement-function in a non-destructive manner
(in terms of 'replace-buffer-contents').
614 615

** The command 'replace-buffer-contents' now has two optional
617 618 619
arguments mitigating performance issues when operating on huge

620 621 622
** Dragging 'C-M-mouse-1' now marks rectangular regions.

624 625 626 627
** The command 'delete-indentation' now operates on the active region.
If the region is active, the command joins all the lines in the
region.  When there's no active region, the command works on the
current and the previous or the next line, as before.

629 630 631 632 633 634 635
** New customizable variable 'jit-lock-antiblink-grace'.
When typing strings, this helps avoid "blinking", an oscillation
between string and non-string fontification.  The variable holds a
number of seconds (default is 2) before a potentially unwanted
fontification starts.  Set to nil to get back the old behavior.

Michael Albinus's avatar
Michael Albinus committed
* Changes in Specialized Modes and Packages in Emacs 27.1

639 640 641 642 643
** New HTML mode skeleton 'html-id-anchor'.
This new command (which inserts an <a id="foo">_</a> skeleton) is
bound to 'C-c C-c #'.

644 645 646 647 648 649
** New command 'font-lock-refontify'.
This is an interactive convenience function to be used when developing
font locking for a mode.  It recomputes the font locking data and then
re-fontifies the buffer.

650 651
** The 'C' command in 'tar-mode' will now preserve the timestamp of
the extracted file if the new user option 'tar-copy-preserve-time' is
653 654

655 656 657 658
** 'autoconf-mode' is now used instead of 'm4-mode' for the
acinclude.m4/aclocal.m4/acsite.m4 files.

Lars Ingebrigtsen's avatar
Lars Ingebrigtsen committed
660 661
** On GNU/Linux, 'M-x battery' will now list all batteries, no matter
what they're named, and the 'battery-linux-sysfs-regexp' variable has
662 663
been removed.

664 665 666
** The 'list-processes' command now includes port numbers in the
network connection information (in addition to the host name).

Lars Ingebrigtsen's avatar
Lars Ingebrigtsen committed
** The 'cl' package is now officially deprecated in favor of 'cl-lib'.
Stefan Monnier's avatar
Stefan Monnier committed

669 670 671 672 673
** desktop
*** When called interactively with a prefix arg 'C-u', 'desktop-read'
now prompts the user for the directory containing the desktop file.

674 675
** display-line-numbers-mode

*** New faces 'line-number-major-tick' and 'line-number-minor-tick',
and user options 'display-line-numbers-major-tick' and
679 680 681
'display-line-numbers-minor-tick' can be used to highlight the line
numbers of lines multiple of certain numbers.

*** New variable 'display-line-numbers-offset', when non-zero, adds
683 684
an offset to absolute line numbers.

685 686
** winner
*** A new user option, 'winner-boring-buffers-regexp', has been added.

** table
Michael Albinus's avatar
Michael Albinus committed
** 'table-generate-source' and friends now support outputting wiki and
691 692
mediawiki format tables.

693 694
** telnet-mode
Michael Albinus's avatar
Michael Albinus committed
*** Reverting a buffer in 'telnet-mode' will restart a closed connection.

Phil Sainty's avatar
Phil Sainty committed
697 698 699
** goto-addr
*** A way to more conveniently specify what URI address schemes that
should be ignored have been added via the
Michael Albinus's avatar
Michael Albinus committed
'goto-address-uri-schemes-ignored' variable.
Phil Sainty's avatar
Phil Sainty committed

** tex-mode
*** 'latex-noindent-commands' controls indentation of certain commands.
You can use this new user option to control indentation of arguments of
\emph, \footnote, and similar commands.

** byte compiler
Michael Albinus's avatar
Michael Albinus committed
*** 'byte-compile-dynamic' is now obsolete.
710 711 712 713
This is because on the one hand it suffers from various misbehaviors in corner
cases that have plagued it for years, and on the other experiments indicated
that it doesn't bring any measurable benefit.

714 715 716 717 718
*** The 'g' keystroke in *Compile-Log* buffers has been bound to a new
command that will recompile the file previously compiled with 'M-x
byte-compile-file' and the like.

719 720
** compile.el
721 722
*** In 'compilation-error-regexp-alist', 'line' (and 'end-line') can
be functions.
723 724 725 726 727
*** 'compilation-context-lines' can now take the value t; this is like
nil, but instead of scrolling the current line to the top of the
screen when there is no left fringe, it inserts a visible arrow before
column zero.
729 730 731
*** The new 'compilation-transform-file-match-alist' user option can
be used to transform file name matches compilation output, and remove
known false positives being recognised as warnings/errors.

** cl-lib.el
735 736
*** 'cl-defstruct' has a new ':noinline' argument to prevent inlining
its functions.

*** 'cl-defstruct' slots accept a ':documentation' property.

Michael Albinus's avatar
Michael Albinus committed
*** 'cl-values-list' will now signal an error if its argument isn't a list.

744 745
** doc-view.el
*** New commands 'doc-view-presentation' and 'doc-view-fit-window-to-page'.
*** Added support for password-protected PDF files

748 749
*** A new user option 'doc-view-pdftotext-program-args' has been added
to allow controlling how the conversion to text is done.

751 752 753 754 755
** Ido
*** New user option 'ido-big-directories' to mark directories whose
names match certain regular expressions as big.  Ido won't attempt to
list the contents of such directories when completing file names.

756 757
** Minibuffer

758 759 760
*** Scrolling and recentering commands in the minibuffer are invoked
on the original window (that was selected before activating the minibuffer).

*** A new user option, 'minibuffer-beginning-of-buffer-movement', has
763 764 765 766
been introduced to allow controlling how the 'M-<' command works in
the minibuffer.  If non-nil, point will move to the end of the prompt
(if point is after the end of the prompt).

767 768 769 770
*** Minibuffer now uses 'minibuffer-message' to display error messages
at the end of the active minibuffer.

771 772 773 774
*** The function 'message' now displays the message at the end of the minibuffer
when the minibuffer is active.

775 776 777
*** 'y-or-n-p' now uses the minibuffer to read 'y' or 'n' answer.

778 779 780
*** Some commands that previously used read-char-choice now read
a character using the minibuffer by read-char-from-minibuffer.

** map.el
782 783
*** Now also understands plists.
*** Now defined via generic functions that can be extended via 'cl-defmethod'.
*** Deprecate the 'map-put' macro in favor of a new 'map-put!' function.
*** 'map-contains-key' now returns a boolean rather than the key.
*** Deprecate the 'testfn' args of 'map-elt' and 'map-contains-key'.
*** New generic function 'map-insert'.

*** The 'type' arg can be a list '(hash-table :key1 VAL1 :key2 VAL2 ...)'

792 793 794 795
** seq.el
New convenience functions 'seq-first' and 'seq-rest' give easy access
to respectively the first and all but the first elements of sequences.

796 797 798
The new predicate function 'seq-contains-p' should be used instead of
the now obsolete 'seq-contains'.

799 800 801 802
** Follow mode
In the current follow group of windows, "ghost" cursors are no longer
displayed in the non-selected follow windows.  To get the old behavior
back, customize 'follow-hide-ghost-cursors' to nil.

805 806 807
** New variable 'warning-fill-column' for 'display-warning'.

808 809
** Windmove

810 811 812
*** 'windmove-create-window' when non-nil makes a new window on moving off
the edge of the frame.

*** Windmove supports directional window display and selection.
814 815
The new command 'windmove-display-default-keybindings' binds default
keys with provided modifiers (by default, Shift-Meta) to the commands
that display the next buffer in the window at the specified direction.
This is like 'windmove-default-keybindings' that binds keys to commands
818 819
that select the window in the specified direction, but additionally it
displays the buffer from the next command in that window.  For example,
'S-M-right C-h i' displays the "*Info*" buffer in the right window,
821 822
creating the window if necessary.  A special key can be customized to
display the buffer in the same window, for example, 'S-M-0 C-h e'
823 824
displays the "*Messages*" buffer in the same window.  'S-M-t C-h C-n'
displays NEWS in a new tab.

826 827
*** Windmove also supports directional window deletion.
The new command 'windmove-delete-default-keybindings' binds default
828 829
keys with provided prefix (by default, 'C-x') and modifiers (by default,
'Shift') to the commands that delete the window in the specified
direction.  For example, 'C-x S-down' deletes the window below.
With a prefix arg 'C-u', also kills the buffer in that window.
With 'M-0', deletes the selected window and selects the window
that was in the specified direction.

835 836 837 838
*** New command 'windmove-swap-states-in-direction' binds default keys
to the commands that swap the states of the selected window with the
window in the specified direction.

839 840 841 842 843 844 845
*** Windmove code no longer used is now obsolete.  That includes the
user option 'windmove-window-distance-delta' and the functions
'windmove-coord-add', 'windmove-constrain-to-range',
'windmove-constrain-around-range', 'windmove-frame-edges',
'windmove-constrain-loc-for-movement', 'windmove-wrap-loc-for-movement',
'windmove-reference-loc' and 'windmove-other-window-loc'.

846 847 848 849
** Octave mode
The mode is automatically enabled in files that start with the
'function' keyword.

Stefan Monnier's avatar
Stefan Monnier committed
** project.el

*** New commands 'project-search' and 'project-query-replace-regexp'.
Stefan Monnier's avatar
Stefan Monnier committed

*** New user option 'project-read-file-name-function'.

Stefan Monnier's avatar
Stefan Monnier committed
** Etags

Stefan Monnier's avatar
Stefan Monnier committed
859 860 861
*** 'next-file' is now an obsolete alias of 'tags-next-file'.

*** 'tags-loop-revert-buffers' is an obsolete alias of
863 864 865

*** The 'tags-loop-continue' function along with the
'tags-loop-operate' and 'tags-loop-scan' variables are now obsolete;
use the new 'fileloop-initialize' and 'fileloop-continue' functions
Stefan Monnier's avatar
Stefan Monnier committed

869 870 871
*** etags is now able to read Zstandard-compressed files.

** bibtex
873 874

*** New commands 'bibtex-next-entry' and 'bibtex-previous-entry'.
In 'bibtex-mode-map', 'forward-paragraph' and 'backward-paragraph' are
877 878
remapped to these, respectively.

879 880
** Dired

Eli Zaretskii's avatar
Eli Zaretskii committed
882 883
*** On systems that support suid/guid files, Dired now fontifies the
permissions of such files with a special face 'dired-set-id'.

886 887
*** New command 'dired-create-empty-file'.

Michael Albinus's avatar
Michael Albinus committed
889 890
*** New command and keystroke 'dired-number-of-marked-files' bound to
'* N'.

892 893 894
*** The marking commands now report how many files were marked by the
command itself, not how many files are marked in total.

*** A new face, 'dired-special', is used to highlight sockets, named
897 898
pipes, block devices and character devices.

899 900 901 902 903 904
*** The new user option 'dired-create-destination-dirs' controls whether
'dired-do-copy' and 'dired-rename-file' should create non-existent
directories in the destination.

905 906
*** 'dired-dwim-target' can be customized to prefer either the next window,
or one of the most recently visited windows with a Dired buffer.

908 909 910
*** When the new user option 'dired-vc-rename-file' is non-nil,
Dired performs file renaming using underlying version control system.

911 912
** Find-Dired

*** New user option 'find-dired-refine-function'.
914 915
The default value is 'find-dired-sort-by-filename'.

*** New sorting options for the user option 'find-ls-option'.

918 919 920 921
*** Zstandard compression is now supported for 'dired-do-compress' and

922 923
** Change Logs and VC

924 925 926 927 928 929
*** New user option 'vc-tor'.
When non-nil, this option causes the VC commands to communicate with
the repository via Tor's proxy, using the 'torsocks' wrapper script.
The default is nil.

*** New command 'log-edit-generate-changelog-from-diff', bound to 'C-c C-w'.
932 933
This generates ChangeLog entries from the VC fileset diff.

934 935 936 937 938
*** 'vc-dir' now shows a button allowing you to hide the stash list.
Controlled by user option 'vc-git-show-stash'.  Default t means show
the entire list as before.  An integer value limits the list length
(but still allows you to show the entire list via the button).

Eli Zaretskii's avatar
Eli Zaretskii committed
*** Recording ChangeLog entries doesn't require an actual file.
If a ChangeLog file doesn't exist, and if the new user option
Eli Zaretskii's avatar
Eli Zaretskii committed
941 942 943
'add-log-dont-create-changelog-file' is non-nil (which is the
default), commands such as 'C-x 4 a' will add log entries to a
suitable named temporary buffer.  (An existing ChangeLog file will
still be used if it exists.)  Set the user option to nil to get the
Eli Zaretskii's avatar
Eli Zaretskii committed
945 946
previous behavior of always creating a buffer that visits a ChangeLog

*** New user option 'vc-find-revision-no-save'.
949 950
With non-nil, 'vc-find-revision' doesn't write the created buffer to file.

*** 'vc-dir-ignore' now takes a prefix argument to ignore all marked files.

954 955
*** New user option 'vc-git-grep-template'.
This new user option allows customizing the default arguments passed to
'git-grep' when 'vc-git-grep' is used.

*** Command 'vc-git-stash' now respects marks in the "*vc-dir*" buffer.
959 960 961
When some files are marked, only those are stashed.
When no files are marked, all modified files are stashed, as before.

Lars Ingebrigtsen's avatar
Lars Ingebrigtsen committed
962 963 964
*** 'vc-git-stash' has now been bound to the 'C' keystroke in the
stash headers.

Robert Pluim's avatar
Robert Pluim committed
965 966 967 968
*** Some stash keybindings are now available in the stash button.
'vc-git-stash' and 'vc-git-stash-snapshot' can now be run using 'C'
and 'S' respectively, including when there are no stashes.

969 970
*** The new hook 'vc-retrieve-tag-hook' runs after retrieving a tag.

Eli Zaretskii's avatar
Eli Zaretskii committed
971 972 973
*** 'vc-hg' now invokes 'smerge-mode' when visiting files.
Code that attempted to invoke 'smerge-mode' when visiting an Hg file
974 975 976 977
with conflicts existed in earlier versions of Emacs, but incorrectly
never detected a conflict due to invalid assumptions about cached

978 979 980 981 982
*** The Hg (Mercurial) back-end now supports 'vc-region-history'.
The 'C-x v h' command now works in buffers that visit files controlled
by Hg.

983 984 985 986 987 988 989