mirrored from git://git.sv.gnu.org/emacs.git
/
NEWS.27
3206 lines (2424 loc) · 136 KB
/
NEWS.27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
GNU Emacs NEWS -- history of user-visible changes.
Copyright (C) 2017-2020 Free Software Foundation, Inc.
See the end of the file for license conditions.
Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'.
If possible, use 'M-x report-emacs-bug'.
This file is about changes in Emacs version 27.
See file HISTORY for a list of GNU Emacs versions and release dates.
See files NEWS.26, NEWS.25, ..., NEWS.18, and NEWS.1-17 for changes
in older Emacs versions.
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.
When you add a new item, use the appropriate mark if you are sure it
applies, and please also update docstrings as needed.
* Installation Changes in Emacs 27.1
---
** 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.
** Emacs can now use HarfBuzz as its shaping engine.
The new configure option '--with-harfbuzz' adds support for the
HarfBuzz text shaping engine. It is on by default; use './configure
--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
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.
** The new configure option '--with-json' adds native support for JSON.
This uses the Jansson library. The option is on by default; use
'./configure --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.
** The configure option '--with-cairo' is no longer experimental.
This builds Emacs with Cairo drawing, and supports built-in printing
when Emacs is built with GTK+. Some severe bugs in this build were
fixed, and we can therefore offer this to users without caveats. Note
that building with Cairo enabled results in using Pango instead of
libXft for font support, and that Pango 1.44 has removed support for
bitmapped fonts.
+++
** 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 specifying a
non-default ".pdmp" file to load the state from; see the node
"(emacs) Initial Options" in the Emacs manual for more information.
An Emacs started via a dump file can create a new dump file only if it
was invoked with the '-batch' option. (This is a temporary
limitation; we plan on lifting it in a future release.)
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
deprecated, and we plan on removing it in some future release.
** 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.
** 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
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.)
** Emacs no longer defaults to using ImageMagick to display images.
This is due to security and stability concerns with ImageMagick. To
override the default, use 'configure --with-imagemagick'.
** Several configure options now accept an option-argument 'ifavailable'.
For example, './configure --with-xpm=ifavailable' now configures Emacs
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'.
** The 'etags' program now uses the C library's regular expression matcher.
If it's possible, 'etags' will use the regexp matcher from the
system's standard C library, otherwise it will be linked with a
compatible regex substitute. This lets 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.
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.
** 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
catch typos and supports '-fcheck-pointer-bounds'. The configure
option '--enable-check-lisp-object-type' is therefore no longer as
useful and so is no longer enabled by default in developer builds,
to reduce differences between developer and production builds.
** The distribution tarball now has test cases; 'make check' runs them.
This is intended mostly to help developers.
** Emacs now requires GTK 2.24 and GTK 3.10 for the GTK 2 and GTK 3
builds respectively.
** New make target 'help' shows a summary of common make targets.
** Emacs now builds with dynamic module support by default.
Pass '--without-modules' to 'configure' to disable dynamic module
support.
** The ftx font backend driver is now obsolete and will be removed in
Emacs 28.
* Startup Changes in Emacs 27.1
** Emacs can now use the XDG convention for init files.
The 'XDG_CONFIG_HOME' environment variable (which defaults to
"~/.config") specifies the XDG configuration parent directory. Emacs
checks for "init.el" and other configuration files inside the "emacs"
subdirectory of 'XDG_CONFIG_HOME', i.e. "$XDG_CONFIG_HOME/emacs/init.el"
However, Emacs will still initially look for init files in their
traditional locations if "~/.emacs.d" or "~/.emacs" exist, even if
"$XDG_CONFIG_HOME/emacs" also exists. This means that you must delete
or rename any existing "~/.emacs.d" and "~/.emacs" to enable use of
the XDG directory.
If "~/.emacs.d" does not exist, and Emacs has decided to use it
(i.e. "$XDG_CONFIG_HOME/emacs" does not exist), Emacs will create it.
Emacs will never create "$XDG_CONFIG_HOME/emacs".
Whichever directory Emacs decides to use, it will set
'user-emacs-directory' to point to it.
** 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).
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
make some customization fail to work.
** Installed packages are now activated *before* loading the init file.
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)
(package-initialize))
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.
** 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 e.g. "~/.config/systemd/user/", you will need to copy
the new version of the file again.)
* Changes in Emacs 27.1
** Emacs now supports Unicode Standard version 13.0.
** Emacs now supports resizing and rotating images without ImageMagick.
All modern systems support this feature. (On GNU and Unix systems,
Cairo drawing or the XRender extension to X11 is required for this to
be available; the configure script will test for it and, if found,
enable scaling.)
The new function 'image-transforms-p' can be used to test whether any
given frame supports these capabilities.
** The Network Security Manager now allows more fine-grained control
of what checks to run via the 'network-security-protocol-checks'
user option.
** TLS connections have their security tightened by default.
Most of the checks for outdated, believed-to-be-weak TLS algorithms
and ciphers are now switched on by default. (In addition, several new
TLS weaknesses are now warned about.) By default, the NSM will
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).
** 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.
** Native GnuTLS connections can now use client certificates.
Previously, this support was only available when using the external
'gnutls-cli' or 'starttls' command. Call 'open-network-stream' with
':client-certificate t' to trigger looking up of per-server
certificates via 'auth-source'.
** 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
specified if there is no explicit ':client-certificate' parameter.
Defaults to nil.
** '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
compatibility.
** emacsclient
*** emacsclient now supports the '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".
This is used 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.
*** 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.)
** 'xft-ignore-color-fonts' now ignores even more color fonts.
There are color fonts that managed to bypass the existing checks,
causing XFT crashes, they are now filtered out. Setting
'xft-ignore-color-fonts' to nil removes those checks, which might
require setting 'face-ignored-fonts' to filter out problematic fonts.
Known problematic fonts are "Noto Color Emoji" and "Emoji One".
** The GTK+ font chooser now respects 'face-ignored-fonts'.
When using 'menu-set-font' under GTK3, the available fonts are now
matched against 'face-ignored-fonts'.
** The GTK+ font chooser now remembers the previously selected settings.
It now remembers the name, size, style, etc.
** 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.
** New function 'network-lookup-address-info'.
This does IPv4 and/or IPv6 address lookups on hostnames.
** '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.
** 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.
** The function 'read-passwd' uses "*" as default character to hide passwords.
** The function 'read-answer' now accepts not only single character
answers, but also function keys like 'F1', character events such as
'C-M-h', and control characters like 'C-h'.
** Lexical binding is now used by default when evaluating interactive Elisp.
More specifically, 'lexical-binding' is now used by default for 'M-:'
and '--eval' (including in evaluations invoked from 'emacsclient' via
its '--eval' command-line option), as well as in
'lisp-interaction-mode' and 'ielm-mode', used in the "*scratch*" and
"*ielm*" buffers.
We envision that most Lisp code is already either written with
lexical-binding in mind, or will work unchanged under
lexical-binding. If, for some reason, your code used in 'M-:' or
'--eval' doesn't work as result of this change, either modify the code
to work with lexical binding, or wrap it in an extra level of 'eval'.
For example, --eval "FORM" becomes --eval "(eval 'FORM)" (note the extra
quote in 'FORM).
** 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.
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.
** 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.
** 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.
** New function 'logcount' calculates an integer's Hamming weight.
** 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
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
used to remove comments before calling the libxml functions to parse
the data.
** 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.
** 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.
** 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:
x\{32768\}
** The German prefix and postfix input methods now support Capital sharp S.
** New input methods 'hawaiian-postfix' and 'hawaiian-prefix'.
** New input methods 'georgian-qwerty' and 'georgian-nuskhuri'.
** 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'.
** Japanese environments use UTF-8 by default.
In Japanese environments that do not specify encodings and are not
based on MS-Windows, the default encoding is now utf-8 instead of
japanese-iso-8bit.
** 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.
** The function 'executable-find' supports an optional argument REMOTE.
This triggers searching for the program on the remote host as indicated by
'default-directory'.
** New user option 'auto-save-no-message'.
When set to t, no message will be shown when auto-saving (default
value: nil).
** 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.
** New variable 'emacs-repository-branch'.
It reports the git branch from which Emacs was built.
** New user option 'switch-to-buffer-obey-display-actions'.
When non-nil, 'switch-to-buffer' uses 'pop-to-buffer-same-window' that
respects display actions specified by 'display-buffer-alist' and
'display-buffer-overriding-action'.
** The user option 'switch-to-visible-buffer' is now obsolete.
Customize 'switch-to-prev-buffer-skip' instead.
** New user option 'switch-to-prev-buffer-skip'.
This user option allows specifying 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
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.
** The 'completion-common-part' face is now visible by default.
** New face attribute ':extend' to control face extension at EOL.
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 a small
number of faces, notably, 'region'; 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.
This attribute behaves specially when theme definitions are applied:
if the theme doesn't specify an explicit value of this attribute for a
face, the value from the original face definition is inherited.
Consequently, a theme generally shouldn't specify this attribute
unless it has a good reason to do so.
** 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.
** New user option 'next-error-verbose' controls when 'next-error'
outputs a message about the error locus.
** New user option 'grep-search-path' defines the directories searched for
grep hits (this used to be controlled by 'compilation-search-path').
** New user option 'emacs-lisp-compilation-search-path' defines the
directories searched for byte-compiler error messages (this used to
be controlled by 'compilation-search-path').
** Multicolor fonts such as "Noto Color Emoji" can be displayed on
Emacs configured with Cairo drawing and linked with cairo >= 1.16.0.
** 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'
and 'display-fill-column-indicator-character' to activate the
indicator.
The indicator is not displayed at all in minibuffer windows and
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".
** 'progress-reporter-update' now accepts an optional suffix string to display.
** New user option 'xref-file-name-display' controls the display of
file names in xref buffers.
** New user option 'byte-count-to-string-function'.
It is used for displaying file sizes and disk space in some cases.
** 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.
** The toolbar now shows the equivalent key binding in its tooltips.
** The File menu-bar menu was re-arranged.
Print menu items moved to submenu, and also added the new entries for tabs.
** '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.
** '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.
** 'read-from-minibuffer' now works with buffer-local history variables.
The HIST argument of 'read-from-minibuffer' now works correctly with
buffer-local variables. This means that different buffers can have
their own separated input history list if desired.
** 'backup-by-copying-when-privileged-mismatch' applies to file gid, too.
In addition to checking the file owner uid, Emacs also checks that the
group gid is not greater than 'backup-by-copying-when-privileged-mismatch';
if so, 'backup-by-copying-when-mismatch' will be forced on.
* Editing Changes in Emacs 27.1
** When asked to visit a large file, Emacs now offers to visit 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.
** 'zap-to-char' now uses the history of characters you used to zap to.
'zap-to-char' uses the new 'read-char-from-minibuffer' function to allow
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.
** '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.
** More commands support noncontiguous rectangular regions, namely
'upcase-dwim', 'downcase-dwim', 'capitalize-dwim', 'capitalize-region',
'upcase-initials-region', 'replace-string', 'replace-regexp', and
'delimit-columns-region'.
** The new 'amalgamating-undo-limit' variable can be used to control
how many changes should be amalgamated when using the 'undo' command.
** 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).
** New command 'make-empty-file'.
** 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).
** 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
typographic quotes, “like this”, in text modes, and in comments in
non-text modes.
** 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.
** 'write-abbrev-file' now includes special properties.
'write-abbrev-file' now writes special properties like ':case-fixed'
for abbrevs that have them.
** '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.
** 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'.
** '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').
** The command 'replace-buffer-contents' now has two optional
arguments mitigating performance issues when operating on huge
buffers.
** Dragging 'C-M-mouse-1' now marks rectangular regions.
** 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.
** You can now change the font size with the mouse wheel.
Scrolling the mouse wheel with the Ctrl key pressed will now act the
same as the 'C-x C-+' and 'C-x C--' commands.
* Changes in Specialized Modes and Packages in Emacs 27.1
** 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 #'.
** 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.
** Font Lock is smarter about fontifying unterminated strings and comments.
When you type a quote that starts a string, or a comment delimiter
that starts a comment, font-lock will not immediately refontify the
following characters in 'font-lock-string-face' or
'font-lock-comment-face'. Instead, it will delay the fontification
beyond the current line to give you a chance to close the string or
comment. This is controlled by the new user option
'jit-lock-antiblink-grace', which specifies the delay in seconds. The
default is 2 seconds; set to nil to get back the old behavior.
** 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
non-nil.
** 'autoconf-mode' is now used instead of 'm4-mode' for the
"acinclude.m4" / "aclocal.m4" / "acsite.m4" files.
** 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
been removed.
** The 'list-processes' command now includes port numbers in the
network connection information (in addition to the host name).
** The 'cl' package is now officially deprecated in favor of 'cl-lib'.
** desktop
*** When called interactively with a prefix arg 'C-u', 'desktop-read'
now prompts the user for the directory containing the desktop file.
** display-line-numbers-mode
*** New faces 'line-number-major-tick' and 'line-number-minor-tick',
and user options 'display-line-numbers-major-tick' and
'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
an offset to absolute line numbers.
** winner
*** A new user option, 'winner-boring-buffers-regexp', has been added.
** table
*** 'table-generate-source' now supports wiki and mediawiki.
This command can now output wiki and mediawiki format tables.
** telnet-mode
*** Reverting a buffer in 'telnet-mode' will restart a closed connection.
** goto-addr
*** A way to more conveniently specify what URI address schemes should
be ignored has been added via the 'goto-address-uri-schemes-ignored'
variable.
** 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
*** 'byte-compile-dynamic' is now obsolete.
This is because on the one hand it suffers from misbehavior in corner
cases that have plagued it for years, and on the other hand experience
indicates that it doesn't bring any measurable benefit.
*** 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.
** compile.el
*** In 'compilation-error-regexp-alist', 'line' (and 'end-line') can
be functions.
*** '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.
*** 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 recognized as warnings/errors.
** cl-lib.el
*** 'cl-defstruct' has a new ':noinline' argument to prevent inlining
its functions.
*** 'cl-defstruct' slots accept a ':documentation' property.
*** 'cl-values-list' will now signal an error if its argument isn't a list.
** doc-view.el
*** New commands 'doc-view-presentation' and 'doc-view-fit-window-to-page'.
*** Added support for password-protected PDF files.
*** A new user option 'doc-view-pdftotext-program-args' has been added
to allow controlling how the conversion to text is done.
*** The prefix key 's' was changed to 'c' for slicing commands
to avoid conflicts with 'image-mode' key 's'. The new key 'c' still
has good mnemonics of "cut", "clip", "crop".
** 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.
** Minibuffer
*** New user option 'minibuffer-beginning-of-buffer-movement'.
This option allows control of 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). The default is nil, which
preserves the original behavior of 'M-<' moving to the beginning of
the prompt.
*** When the minibuffer is active, echo-area messages are displayed at
the end of the minibuffer instead of hiding the minibuffer by the echo
area display. The new user option 'minibuffer-message-clear-timeout'
controls how messages displayed in this situation are removed from the
minibuffer. To revert to previous behavior, where echo-area messages
temporarily overwrote the minibuffer contents until the user typed
something, set 'set-message-function' and 'clear-message-function' to
nil.
*** Minibuffer now uses 'minibuffer-message' to display error messages
at the end of the active minibuffer. To disable this, remove
'minibuffer-error-initialize' from 'minibuffer-setup-hook'.
*** 'y-or-n-p' now uses the minibuffer to read 'y' or 'n' answer.
*** Some commands that previously used 'read-char-choice' now read
a character using the minibuffer by 'read-char-from-minibuffer'.
** map.el
*** 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 ...)'.
** 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.
The new predicate function 'seq-contains-p' should be used instead of
the now obsolete 'seq-contains'.
** 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.
** New variable 'warning-fill-column' for 'display-warning'.
** Windmove
*** 'windmove-create-window' when non-nil makes a new window.
This happens upon moving off the edge of the frame.
*** Windmove supports directional window display and selection.
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
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,
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'
displays the "*Messages*" buffer in the same window. 'S-M-t C-h r'
displays the Emacs manual in a new tab.
*** Windmove also supports directional window deletion.
The new command 'windmove-delete-default-keybindings' binds default
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.
*** 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.
*** 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'.
** Octave mode
The mode is automatically enabled in files that start with the
'function' keyword.
** project.el
*** New commands 'project-search' and 'project-query-replace-regexp'.
*** New user option 'project-read-file-name-function'.
** Etags
*** 'next-file' is now an obsolete alias of 'tags-next-file'.
*** 'tags-loop-revert-buffers' is an obsolete alias of
'fileloop-revert-buffers'.
*** 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
instead.
*** etags is now able to read Zstandard-compressed files.
** bibtex
*** New commands 'bibtex-next-entry' and 'bibtex-previous-entry'.
In 'bibtex-mode-map', 'forward-paragraph' and 'backward-paragraph' are
remapped to these, respectively.
** Dired
*** New command 'dired-create-empty-file'.
*** New command 'dired-number-of-marked-files'.
It is by default bound to '* N'.
*** The marking commands now report how many files were marked by the
command itself, not how many files are marked in total.
*** 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.
*** 'dired-dwim-target' can be customized to prefer either the next window,
or one of the most recently visited windows with a Dired buffer.
*** When the new user option 'dired-vc-rename-file' is non-nil,
Dired performs file renaming using underlying version control system.
*** Zstandard compression is now supported for 'dired-do-compress' and
'dired-do-compress-to'.
*** On systems that support suid/guid files, Dired now fontifies the
permissions of such files with a special face 'dired-set-id'.
*** A new face, 'dired-special', is used to highlight sockets, named
pipes, block devices and character devices.
** Find-Dired
*** New user option 'find-dired-refine-function'.
The default value is 'find-dired-sort-by-filename'.
*** New sorting options for the user option 'find-ls-option'.
** Change Logs and VC
*** New user option 'vc-tor'.
When non-nil, this user 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'.
This generates ChangeLog entries from the VC fileset diff.
*** Recording ChangeLog entries doesn't require an actual file.
If a ChangeLog file doesn't exist, and if the new user option
'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
previous behavior of always creating a buffer that visits a ChangeLog
file.
*** The new 'd' command ('vc-dir-clean-files') in 'vc-dir-mode'
buffers will delete the marked files (or if no files are marked, the
file under point). This command does not notify the VC backend, and
is mostly useful for unregistered files.
*** 'vc-dir-ignore' now takes a prefix argument to ignore all marked files.
*** 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.
When some files are marked, only those are stashed.
When no files are marked, all modified files are stashed, as before.
*** '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).
*** 'vc-git-stash' is now bound to 'C' in the stash headers.
--
*** 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.
*** The new hook 'vc-retrieve-tag-hook' runs after retrieving a tag.
*** 'vc-hg' now invokes 'smerge-mode' when visiting files.
Code that attempted to invoke 'smerge-mode' when visiting an Hg file
with conflicts existed in earlier versions of Emacs, but incorrectly
never detected a conflict due to invalid assumptions about cached
values.
*** 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.
*** The Hg (Mercurial) back-end now prompts for revision to merge when
you invoke 'C-x v m' ('vc-merge').
*** The Hg (Mercurial) back-end now uses tags, branches and bookmarks
instead of revision numbers as completion candidates when it prompts
for a revision.
*** New user option 'vc-hg-revert-switches'.
It specifies switches to pass to Hg's 'revert' command.
*** 'C-u C-x v D' ('vc-root-version-diff') prompts for two revisions
and compares their entire trees.
*** 'C-x v M D' ('vc-diff-mergebase') and 'C-x v M L' ('vc-log-mergebase')
print diffs and logs between the merge base (common ancestor) of two
given revisions.
*** New command 'vc-log-search' asks for a pattern, searches it
in the revision log, and displays matched log entries in the
log buffer. For example, 'M-x vc-log-search RET bug#36644 RET'
displays all entries whose log messages match the bug number.
With a prefix argument asks for a command, so for example,
'C-u M-x vc-log-search RET git log -1 f302475 RET' will display
just one log entry found by its revision number.
*** It is now possible to display a specific revision given by its ID.
If you invoke 'C-x v L' ('vc-print-root-log') with a numeric argument
of 1, as in 'C-1 C-x v L' or 'C-u 1 C-x v L', it asks for a revision
ID, and shows its log entry together with the diffs introduced by the
revision's commit. (For some less capable VCSes, only the log entry
is shown.)
*** New user option 'vc-find-revision-no-save'.
With non-nil, 'vc-find-revision' doesn't write the created buffer to file.
*** 'C-x v =' can now mimic Magit's diff format.
Set the new user option 'diff-font-lock-prettify' to t for that, see
below under "Diff mode".