mirrored from git://git.sv.gnu.org/emacs.git
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
NEWS.29
4395 lines (3379 loc) · 184 KB
/
NEWS.29
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) 2021-2025 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 29.
See file HISTORY for a list of GNU Emacs versions and release dates.
See files NEWS.28, NEWS.27, ..., 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'.
* Changes in Emacs 29.4
Emacs 29.4 is an emergency bugfix release intended to fix the
security vulnerability described below.
** Arbitrary shell commands are no longer run when turning on Org mode.
This is for security reasons, to avoid running malicious commands.
* Changes in Emacs 29.3
Emacs 29.3 is an emergency bugfix release intended to fix several
security vulnerabilities described below.
** Arbitrary Lisp code is no longer evaluated as part of turning on Org mode.
This is for security reasons, to avoid evaluating malicious Lisp code.
** New buffer-local variable 'untrusted-content'.
When this is non-nil, Lisp programs should treat buffer contents with
extra caution.
** Gnus now treats inline MIME contents as untrusted.
To get back previous insecure behavior, 'untrusted-content' should be
reset to nil in the buffer.
** LaTeX preview is now by default disabled for email attachments.
To get back previous insecure behavior, set the variable
'org--latex-preview-when-risky' to a non-nil value.
** Org mode now considers contents of remote files to be untrusted.
Remote files are recognized by calling 'file-remote-p'.
* Startup Changes in Emacs 29.2
** On GNU/Linux, Emacs is now the default application for 'org-protocol'.
Org mode provides a way to quickly capture bookmarks, notes, and links
using 'emacsclient':
emacsclient "org-protocol://store-link?url=URL&title=TITLE"
Previously, users had to manually configure their GNU/Linux desktop
environment to open 'org-protocol' links in Emacs. These links should
now open in Emacs automatically, as the "emacsclient.desktop" file now
arranges for Emacs to be the default application for the 'org-protocol'
URI scheme. See the Org mode manual, Info node "(org) Protocols" for
more details.
* Changes in Emacs 29.2
This is a bug-fix release with no new features.
* Changes in Specialized Modes and Packages in Emacs 29.2
** Tramp
*** New user option 'tramp-show-ad-hoc-proxies'.
When non-nil, ad-hoc definitions are kept in remote file names instead
of showing the shortcuts.
* Incompatible Lisp Changes in Emacs 29.2
** 'with-sqlite-transaction' rolls back changes if its BODY fails.
If the BODY of the macro signals an error, or committing the results
of the transaction fails, the changes will now be rolled back.
* Installation Changes in Emacs 29.1
** Ahead-of-time native compilation can now be requested via configure.
Use '--with-native-compilation=aot' to request that all the Lisp files
in the Emacs tree should be natively compiled ahead of time. (This is
slow on most machines.)
This feature existed in Emacs 28.1, but was less easy to request.
** Emacs can be built with the tree-sitter parsing library.
This library, together with separate grammar libraries for each
language, provides incremental parsing capabilities for several
popular programming languages and other formatted files. Emacs built
with this library offers major modes, described elsewhere in this
file, that are based on the tree-sitter's parsers. If you have the
tree-sitter library installed, the configure script will automatically
include it in the build; use '--without-tree-sitter' at configure time
to disable that.
Emacs modes based on the tree-sitter library require an additional
grammar library for each mode. These grammar libraries provide the
tree-sitter library with language-specific lexical analysis and
parsing capabilities, and are developed separately from the
tree-sitter library itself. If you don't have a grammar library
required by some Emacs major mode, and your distro doesn't provide it
as an installable package, you can compile and install such a library
yourself. Many libraries can be downloaded from the tree-sitter site:
https://github.com/tree-sitter
Emacs provides a user command, 'treesit-install-language-grammar',
that automates the download and build process of a grammar library.
It prompts for the language, the URL of the language grammar's VCS
repository, and then uses the installed C/C++ compiler to build the
library and install it.
You can also do this manually. To compile such a library after
cloning its Git repository, compile the files "scanner.c" and
"parser.c" (sometimes named "scanner.cc" and "parser.cc") in the "src"
subdirectory of the library's source tree using the C or C++ compiler,
then link these two files into a shared library named
"libtree-sitter-LANG.so" ("libtree-sitter-LANG.dll" on MS-Windows,
"libtree-sitter-LANG.dylib" on macOS), where LANG is the name of the
language supported by the grammar as it is expected by the Emacs major
mode (for example, "c" for 'c-ts-mode', "cpp" for 'c++-ts-mode',
"python" for 'python-ts-mode', etc.). Then place the shared library
you've built in the same directory where you keep the other shared
libraries used by Emacs, or in the "tree-sitter" subdirectory of your
'user-emacs-directory', or in a directory mentioned in the variable
'treesit-extra-load-path'.
You only need to install language grammar libraries required by the
Emacs modes you will use, as Emacs loads these libraries only when the
corresponding mode is turned on in some buffer for the first time in
an Emacs session.
We generally recommend to use the latest versions of grammar libraries
available from their sites, as these libraries are in constant
development and occasionally add features and fix important bugs to
follow the advances in the programming languages they support.
** Emacs can be built with built-in support for accessing SQLite databases.
This uses the popular sqlite3 library, and can be disabled by using
the '--without-sqlite3' option to the 'configure' script.
** Support for the WebP image format.
This support is built by default when the libwebp library is
available, and includes support for animated WebP images. To disable
WebP support, use the '--without-webp' configure flag. Image
specifiers can now use ':type webp'.
** Emacs now installs the ".pdmp" file using a unique fingerprint in the name.
The file is typically installed using a file name akin to
"...dir/libexec/emacs/29.1/x86_64-pc-linux-gnu/emacs-<fingerprint>.pdmp".
If a constant file name is required, the file can be renamed to
"emacs.pdmp", and Emacs will find it during startup anyway.
** Emacs on X now uses XInput 2 for input events.
If your X server has support and you have the XInput 2 development
headers installed, Emacs will use the X Input Extension for handling
input. If this causes problems, you can configure Emacs with the
option '--without-xinput2' to disable this support.
'(featurep 'xinput2)' can be used to test for the presence of XInput 2
support from Lisp programs.
** Emacs can now be optionally built with the Cairo XCB backend.
Configure Emacs with the '--with-cairo-xcb' option to use the Cairo
XCB backend; the default is not to use it. This backend makes Emacs
moderately faster when running over X connections with high latency,
but is currently known to crash when Emacs repeatedly closes and opens
a display connection to the same terminal; this could happen, for
example, if you repeatedly visit files via emacsclient in a single
client frame, each time deleting the frame with 'C-x C-c'.
** Emacs now supports being built with pure GTK.
To use this option, make sure the GTK 3 (version 3.22.23 or later) and
Cairo development files are installed, and configure Emacs with the
option '--with-pgtk'. Unlike the default X and GTK build, the
resulting Emacs binary will work on any underlying window system
supported by GDK, such as Wayland and Broadway. We recommend that you
use this configuration only if you are running a window system other
than X that's supported by GDK. Running this configuration on X is
known to have problems, such as undesirable frame positioning and
various issues with keyboard input of sequences such as 'C-;' and
'C-S-u'. Running this on WSL is also known to have problems.
Note that, unlike the X build of Emacs, the PGTK build cannot
automatically switch to text-mode interface (thus emulating '-nw') if
it cannot determine the default display; it will instead complain and
ask you to invoke it with the explicit '-nw' option.
** Emacs has been ported to the Haiku operating system.
The configuration process should automatically detect and build for
Haiku. There is also an optional window-system port to Haiku, which
can be enabled by configuring Emacs with the option '--with-be-app',
which will require the Haiku Application Kit development headers and a
C++ compiler to be present on your system. If Emacs is not built with
the option '--with-be-app', the resulting Emacs will only run in
text-mode terminals.
To enable Cairo support, ensure that the Cairo and FreeType
development files are present on your system, and configure Emacs with
'--with-be-cairo'.
Unlike X, there is no compile-time option to enable or disable
double-buffering; it is always enabled. To disable it, change the
frame parameter 'inhibit-double-buffering' instead.
** Emacs no longer reduces the size of the Japanese dictionary.
Building Emacs includes generation of a Japanese dictionary, which is
used by Japanese input methods. Previously, the build included a step
of reducing the size of this dictionary's vocabulary. This vocabulary
reduction is now optional, by default off. If you need the Emacs
build to include the vocabulary reduction, configure Emacs with the
option '--with-small-ja-dic'. In an Emacs source tree already
configured without that option, you can force the vocabulary reduction
by saying
make -C leim generate-ja-dic JA_DIC_NO_REDUCTION_OPTION=''
after deleting "lisp/leim/ja-dic/ja-dic.el".
** The docstrings of preloaded files are not in "etc/DOC" any more.
Instead, they're fetched as needed from the corresponding ".elc"
files, as was already the case for all the non-preloaded files.
* Startup Changes in Emacs 29.1
** '--batch' and '--script' now adjust the garbage collection levels.
These switches now set 'gc-cons-percentage' to 1.0 (up from the
default of 0.1). This means that batch processes will typically use
more memory than before, but use less time doing garbage collection.
Batch jobs that are supposed to run for a long time should adjust the
limit back down again.
** Emacs can now be used more easily in an executable script.
If you start an executable script with
#!/usr/bin/emacs -x
Emacs will start without reading any init files (like with '--quick'),
and then execute the rest of the script file as Emacs Lisp. When it
reaches the end of the script, Emacs will exit with an exit code from
the value of the final form.
** Emacs now supports setting 'user-emacs-directory' via '--init-directory'.
Use the '--init-directory' command-line option to set
'user-emacs-directory'.
** Emacs now has a '--fingerprint' option.
This will output a string identifying the current Emacs build, and exit.
** New hook 'after-pdump-load-hook'.
This is run at the end of the Emacs startup process, and is meant to
be used to reinitialize data structures that would normally be done at
load time.
** Native Compilation
*** New command 'native-compile-prune-cache'.
This command deletes old subdirectories of the eln cache (but not the
ones for the current Emacs version). Note that subdirectories of the
system directory where the "*.eln" files are installed (usually, the
last entry in 'native-comp-eln-load-path') are not deleted.
*** New function 'startup-redirect-eln-cache'.
This function can be called in your init files to change the
user-specific directory where Emacs stores the "*.eln" files produced
by native compilation of Lisp packages Emacs loads. The default
eln cache directory is unchanged: it is the "eln-cache" subdirectory
of 'user-emacs-directory'.
* Incompatible changes in Emacs 29.1
** The image commands have changed key bindings.
In previous Emacs versions, the '+', '-' and 'r' keys were bound when
point was over an image. In Emacs 29.1, additional commands have been
added, and this made it more likely that users would trigger the image
commands by mistake. To avoid this, all image commands have been
moved to the 'i' prefix keymap, so '+' is now 'i +', '-' is now 'i -',
and 'r' is now 'i r'. In addition, these commands are now repeating,
so you can rotate an image twice by saying 'i r r', for instance.
** Emacs now picks the correct coding-system for X input methods.
Previously, Emacs would use 'locale-coding-system' for input
methods, which could in some circumstances be incorrect, especially
when the input method chose to fall back to some other coding system.
Emacs now automatically detects the coding-system used by input
methods, and uses that to decode input in preference to the value of
'locale-coding-system'. This unfortunately means that users who have
changed the coding system used to decode X keyboard input must adjust
their customizations to 'locale-coding-system' to the variable
'x-input-coding-system' instead.
** Bookmarks no longer include context for encrypted files.
If you're visiting an encrypted file, setting a bookmark no longer
includes excerpts from that buffer in the bookmarks file. This is
implemented by the new hook 'bookmark-inhibit-context-functions',
where packages can register a function which returns non-nil for file
names to be excluded from adding such excerpts.
** 'show-paren-mode' is now disabled in 'special-mode' buffers.
In Emacs versions previous to Emacs 28.1, 'show-paren-mode' defaulted
off. In Emacs 28.1, the mode was switched on in all buffers. In
Emacs 29.1, this was changed to be switched on in all editing-related
buffers, but not in buffers that inherit from 'special-mode'. To go
back to how things worked in Emacs 28.1, put the following in your
init file:
(setopt show-paren-predicate t)
** Explicitly-set read-only state is preserved when reverting a buffer.
If you use the 'C-x C-q' command to change the read-only state of the
buffer and then revert it, Emacs would previously use the file
permission bits to determine whether the buffer should be read-only
after reverting the buffer. Emacs now remembers the decision made in
'C-x C-q'.
** The Gtk selection face is no longer used for the region.
The combination of a Gtk-controlled background and a foreground color
controlled by the internal Emacs machinery led to low-contrast faces
in common default setups. Emacs now uses the same 'region' face on
Gtk and non-Gtk setups.
** 'C-h f' and 'C-h x' may now require confirmation when you press 'RET'.
If the text in the minibuffer cannot be completed to a single function
or command, typing 'RET' will not automatically complete to the shortest
candidate, but will instead ask for confirmation. Typing 'TAB' will
complete as much as possible, and another 'TAB' will show all the
possible completions. This allows you to insist on the functions name
even if Help doesn't appear to know about it, by confirming with a
second 'RET'.
** Dired
*** 'w' ('dired-copy-filename-as-kill') has changed behavior.
If there are several files marked, file names containing space and
quote characters will be quoted "like this".
*** The 'd' command now more consistently skips dot files.
In previous Emacs versions, commands like 'C-u 10 d' would put the "D"
mark on the next ten files, no matter whether they were dot files
(i.e., "." and "..") or not, while marking the next ten lines with the
mouse (in 'transient-mark-mode') and then hitting 'd' would skip dot
files. These now work equivalently.
** Warning about "eager macro-expansion failure" is now an error.
** Previously, the X "reverseVideo" value at startup was heeded for all frames.
This meant that if you had a "reverseVideo" resource on the initial
display, and then opened up a new frame on a display without any
explicit "reverseVideo" setting, it would get heeded there, too. (This
included terminal frames.) In Emacs 29, the "reverseVideo" X resource
is handled like all the other X resources, and set on a per-frame basis.
** 'E' in 'query-replace' now edits the replacement with exact case.
Previously, this command did the same as 'e'.
** '/ a' in "*Packages*" buffer now limits by archive name(s) instead of regexp.
** Setting the goal columns now also affects '<prior>' and '<next>'.
Previously, 'C-x C-n' only affected 'next-line' and 'previous-line',
but it now also affects 'scroll-up-command' and 'scroll-down-command'.
** Isearch in "*Help*" and "*info*" now char-folds quote characters by default.
This means that you can say 'C-s `foo' (GRAVE ACCENT) if the buffer
contains "‘foo" (LEFT SINGLE QUOTATION MARK) and the like. These
quotation characters look somewhat similar in some fonts. To switch
this off, disable the new 'isearch-fold-quotes-mode' minor mode.
** Sorting commands no longer necessarily change modification status.
In earlier Emacs versions, commands like 'sort-lines' would always
change buffer modification status to "modified", whether they changed
something in the buffer or not. This has been changed: the buffer is
marked as modified only if the sorting ended up actually changing the
contents of the buffer.
** 'string-lines' handles trailing newlines differently.
It no longer returns an empty final string if the string ends with a
newline.
** 'TAB' and '<backtab>' are now bound in 'button-map'.
This means that if point is on a button, 'TAB' will take you to the
next button, even if the mode has bound it to something else. This
also means that 'TAB' on a button in an 'outline-minor-mode' heading
will move point instead of collapsing the outline.
** 'outline-minor-mode-cycle-map' is now parent of 'outline-minor-mode'.
Instead of adding text property 'keymap' with 'outline-minor-mode-cycle'
on outline headings in 'outline-minor-mode', the keymap
'outline-minor-mode-cycle' is now active in the whole buffer.
But keybindings in 'outline-minor-mode-cycle' still take effect
only on outline headings because they are bound with the help of
'outline-minor-mode-cycle--bind' that checks if point is on a heading.
** 'Info-default-directory-list' is no longer populated at Emacs startup.
If you have code in your init file that removes directories from
'Info-default-directory-list', this will no longer work.
** 'C-k' no longer deletes files in 'ido-mode'.
To get the previous action back, put something like the following in
your Init file:
(require 'ido)
(keymap-set ido-file-completion-map "C-k" #'ido-delete-file-at-head)
** New user option 'term-clear-full-screen-programs'.
By default, term.el will now work like most terminals when displaying
full-screen programs: When they exit, the output is cleared, leaving
what was displayed in the window before the programs started. Set
this user option to nil to revert back to the old behavior.
** Support for old EIEIO functions is not autoloaded any more.
You need an explicit '(require 'eieio-compat)' to use 'defmethod'
and 'defgeneric' (which were made obsolete in Emacs 25.1 by
'cl-defmethod' and 'cl-defgeneric').
Similarly you might need to '(require 'eieio-compat)' before loading
files that were compiled with an old EIEIO (Emacs<25).
** 'C-x 8 .' has been moved to 'C-x 8 . .'.
This is to open up the 'C-x 8 .' map to bind further characters there.
** 'C-x 8 =' has been moved to 'C-x 8 = ='.
You can now use 'C-x 8 =' to insert several characters with macron;
for example, 'C-x 8 = a' will insert U+0101 LATIN SMALL LETTER A WITH
MACRON. To insert a lone macron, type 'C-x 8 = =' instead of the
previous 'C-x ='.
** Eshell
*** Eshell's PATH is now derived from 'exec-path'.
For consistency with remote connections, Eshell now uses 'exec-path'
to determine the execution path on the local or remote system, instead
of using the PATH environment variable directly.
*** 'source' and '.' no longer accept the '--help' option.
This is for compatibility with the shell versions of these commands,
which don't handle options like '--help' in any special way.
*** String delimiters in argument predicates/modifiers are more restricted.
Previously, some argument predicates/modifiers allowed arbitrary
characters as string delimiters. To provide more unified behavior
across all predicates/modifiers, the list of allowed delimiters has
been restricted to "...", '...', /.../, |...|, (...), [...], <...>,
and {...}. See the "(eshell) Argument Predication and Modification"
node in the Eshell manual for more details.
*** Eshell pipelines now only pipe stdout by default.
To pipe both stdout and stderr, use the '|&' operator instead of '|'.
** The 'delete-forward-char' command now deletes by grapheme clusters.
This command is by default bound to the '<Delete>' function key
(a.k.a. '<deletechar>'). When invoked without a prefix argument or
with a positive prefix numeric argument, the command will now delete
complete grapheme clusters produced by character composition. For
example, if point is before an Emoji sequence, pressing '<Delete>'
will delete the entire sequence, not just a single character at its
beginning.
** 'load-history' does not treat autoloads specially any more.
An autoload definition appears just as a '(defun . NAME)' and the
'(t . NAME)' entries are not generated any more.
** The Tamil input methods no longer insert Tamil digits.
The input methods 'tamil-itrans' and 'tamil-inscript' no longer insert
the Tamil digits, as those digit characters are not used nowadays by
speakers of the Tamil language. To get back the previous behavior,
use the new 'tamil-itrans-digits' and 'tamil-inscript-digits' input
methods instead.
** New variable 'current-time-list' governing default timestamp form.
Functions like 'current-time' now yield '(TICKS . HZ)' timestamps if
this new variable is nil. The variable defaults to t, which means
these functions default to timestamps of the forms '(HI LO US PS)',
'(HI LO US)' or '(HI LO)', which are less regular and less efficient.
This is part of a long-planned change first documented in Emacs 27.
Developers are encouraged to test timestamp-related code with this
variable set to nil, as it will default to nil in a future Emacs
version and will be removed some time after that.
** Functions that recreate the "*scratch*" buffer now also initialize it.
When functions like 'other-buffer' and 'server-execute' recreate
"*scratch*", they now also insert 'initial-scratch-message' and set
the major mode according to 'initial-major-mode', like at Emacs
startup. Previously, these functions ignored
'initial-scratch-message' and left "*scratch*" in 'fundamental-mode'.
** Naming of Image-Dired thumbnail files has changed.
Names of thumbnail files generated when 'image-dired-thumbnail-storage'
is 'image-dired' now always end in ".jpg". This fixes various issues
on different platforms, but means that thumbnails generated in Emacs 28
will not be used in Emacs 29, and vice-versa. If disk space is an
issue, consider deleting the 'image-dired-dir' directory (usually
"~/.emacs.d/image-dired/") after upgrading to Emacs 29.
** The 'rlogin' method in the URL library is now obsolete.
Emacs will now display a warning if you request a URL like
"rlogin://foo@example.org".
** Setting 'url-gateway-method' to 'rlogin' is now obsolete.
Emacs will now display a warning when setting it to that value.
The user options 'url-gateway-rlogin-host',
'url-gateway-rlogin-parameters', and 'url-gateway-rlogin-user-name'
are also obsolete.
** The user function 'url-irc-function' now takes a SCHEME argument.
The user option 'url-irc-function' is now called with a sixth argument
corresponding to the scheme portion of the target URL. For example,
this would be "ircs" for a URL like "ircs://irc.libera.chat".
** The linum.el library is now obsolete.
We recommend using either the built-in 'display-line-numbers-mode', or
the 'nlinum' package from GNU ELPA instead. The former has better
performance, but the latter is closer to a drop-in replacement.
1. To use 'display-line-numbers-mode', add something like this to your
init file:
(global-display-line-numbers-mode 1)
;; Alternatively, to use it only in programming modes:
(add-hook 'prog-mode-hook #'display-line-numbers-mode)
2. To use 'nlinum', add this to your Init file:
(package-install 'nlinum)
(global-nlinum-mode 1)
;; Alternatively, to use it only in programming modes:
(add-hook 'prog-mode-hook #'nlinum-mode)
3. To continue using the obsolete package 'linum', add this line to
your Init file, in addition to any existing customizations:
(require 'linum)
** The thumbs.el library is now obsolete.
We recommend using the 'image-dired' command instead.
** The autoarg.el library is now marked obsolete.
This library provides the 'autoarg-mode' and 'autoarg-kp-mode' minor
modes to emulate the behavior of the historical editor Twenex Emacs.
We believe it is no longer useful.
** The quickurl.el library is now obsolete.
Use 'abbrev', 'skeleton' or 'tempo' instead.
** The rlogin.el library, and the 'rsh' command are now obsolete.
Use something like 'M-x shell RET ssh <host> RET' instead.
** The url-about.el library is now obsolete.
** The autoload.el library is now obsolete.
It is superseded by the new loaddefs-gen.el library.
** The netrc.el library is now obsolete.
Use the 'auth-source-netrc-parse-all' function in auth-source.el
instead.
** The url-dired.el library is now obsolete.
** The fast-lock.el and lazy-lock.el libraries have been removed.
They have been obsolete since Emacs 22.1.
The variable 'font-lock-support-mode' is occasionally useful for
debugging purposes. It is now a regular variable (instead of a user
option) and can be set to nil to disable Just-in-time Lock mode.
** The 'utf-8-auto' coding-system now produces BOM on encoding.
This is actually a bugfix, since this is how 'utf-8-auto' was
documented from day one; it just didn't behave according to
documentation. It turns out some Lisp programs were using this
coding-system on the wrong assumption that the "auto" part means some
automagic handling of the end-of-line (EOL) format conversion; those
programs will now start to fail, because BOM signature in UTF-8 encoded
text is rarely expected. That is the reason we mention this bugfix
here.
In general, this coding-system should probably never be used for
encoding, only for decoding.
* Changes in Emacs 29.1
** New user option 'major-mode-remap-alist' to specify favorite major modes.
This user option lets you remap the default modes (e.g. 'perl-mode' or
'latex-mode') to your favorite ones (e.g. 'cperl-mode' or
'LaTeX-mode') instead of having to use 'defalias', which can have
undesirable side effects.
This applies to all modes specified via 'auto-mode-alist', file-local
variables, etc.
** Emacs now supports Unicode Standard version 15.0.
** New user option 'electric-quote-replace-consecutive'.
This allows you to disable the default behavior of consecutive single
quotes being replaced with a double quote.
** Emacs is now capable of editing files with very long lines.
The display of long lines has been optimized, and Emacs should no
longer choke when a buffer on display contains long lines. The
variable 'long-line-threshold' controls whether and when these display
optimizations are in effect.
A companion variable 'large-hscroll-threshold' controls when another
set of display optimizations are in effect, which are aimed
specifically at speeding up display of long lines that are truncated
on display.
If you still experience slowdowns while editing files with long lines,
this may be due to line truncation, or to one of the enabled minor
modes, or to the current major mode. Try turning off line truncation
with 'C-x x t', or try disabling all known slow minor modes with
'M-x so-long-minor-mode', or try disabling both known slow minor modes
and the major mode with 'M-x so-long-mode', or visit the file with
'M-x find-file-literally' instead of the usual 'C-x C-f'.
In buffers in which these display optimizations are in effect, the
'fontification-functions', 'pre-command-hook' and 'post-command-hook'
hooks are executed on a narrowed portion of the buffer, whose size is
controlled by the variables 'long-line-optimizations-region-size' and
'long-line-optimizations-bol-search-limit', as if they were in a
'with-restriction' form. This may, in particular, cause occasional
mis-fontifications in these buffers. Modes which are affected by
these optimizations and by the fact that the buffer is narrowed,
should adapt and either modify their algorithm so as not to expect the
entire buffer to be accessible, or, if accessing outside of the
narrowed region doesn't hurt performance, use the
'without-restriction' form to temporarily lift the restriction and
access portions of the buffer outside of the narrowed region.
The new function 'long-line-optimizations-p' returns non-nil when
these optimizations are in effect in the current buffer.
** New command to change the font size globally.
To increase the font size, type 'C-x C-M-+' or 'C-x C-M-='; to
decrease it, type 'C-x C-M--'; to restore the font size, type 'C-x
C-M-0'. The final key in these commands may be repeated without the
leading 'C-x' and without the modifiers, e.g. 'C-x C-M-+ C-M-+ C-M-+'
and 'C-x C-M-+ + +' increase the font size by three steps. When
'mouse-wheel-mode' is enabled, 'C-M-wheel-up' and 'C-M-wheel-down' also
increase and decrease the font size globally. Additionally, the
user option 'global-text-scale-adjust-resizes-frames' controls whether
the frames are resized when the font size is changed.
** New config variable 'syntax-wholeline-max' to reduce the cost of long lines.
This variable is used by some operations (mostly syntax-propertization
and font-locking) to treat lines longer than this variable as if they
were made up of various smaller lines. This can help reduce the
slowdowns seen in buffers made of a single long line, but can also
cause misbehavior in the presence of such long lines (though most of
that misbehavior should usually be limited to mis-highlighting). You
can recover the previous behavior with:
(setq syntax-wholeline-max most-positive-fixnum)
** New bindings in 'find-function-setup-keys' for 'find-library'.
When 'find-function-setup-keys' is enabled, 'C-x L' is now bound to
'find-library', 'C-x 4 L' is now bound to 'find-library-other-window'
and 'C-x 5 L' is now bound to 'find-library-other-frame'.
** New key binding after 'M-x' or 'M-X': 'M-X'.
Emacs allows different completion predicates to be used with 'M-x'
(i.e., 'execute-extended-command') via the
'read-extended-command-predicate' user option. Emacs also has the
'M-X' (note upper case X) command, which only displays commands
especially relevant to the current buffer. Emacs now allows toggling
between these modes while the user is inputting a command by hitting
'M-X' while in the minibuffer.
** Interactively, 'kill-buffer' will now offer to save the buffer if unsaved.
** New commands 'duplicate-line' and 'duplicate-dwim'.
'duplicate-line' duplicates the current line the specified number of times.
'duplicate-dwim' duplicates the region if it is active. If not, it
works like 'duplicate-line'. An active rectangular region is
duplicated on its right-hand side. The new user option
'duplicate-line-final-position' specifies where to move point
after duplicating a line.
** Files with the ".eld" extension are now visited in 'lisp-data-mode'.
** 'network-lookup-address-info' can now check numeric IP address validity.
Specifying 'numeric' as the new optional HINTS argument makes it
check if the passed address is a valid IPv4/IPv6 address (without DNS
traffic).
(network-lookup-address-info "127.1" 'ipv4 'numeric)
=> ([127 0 0 1 0])
** New command 'find-sibling-file'.
This command jumps to a file considered a "sibling file", which is
determined according to the new user option 'find-sibling-rules'.
** New user option 'delete-selection-temporary-region'.
When non-nil, 'delete-selection-mode' will only delete the temporary
regions (usually set by mouse-dragging or shift-selection).
** New user option 'switch-to-prev-buffer-skip-regexp'.
This should be a regexp or a list of regexps; buffers whose names
match those regexps will be ignored by 'switch-to-prev-buffer' and
'switch-to-next-buffer'.
** New command 'rename-visited-file'.
This command renames the file visited by the current buffer by moving
it to a new name or location, and also makes the buffer visit this new
file.
** Menus
*** The entries following the buffers in the "Buffers" menu can now be altered.
Change the 'menu-bar-buffers-menu-command-entries' variable to alter
the entries that follow the buffer list.
** 'delete-process' is now a command.
When called interactively, it will kill the process running in the
current buffer (if any). This can be useful if you have runaway
output in the current buffer (from a process or a network connection),
and want to stop it.
** New command 'restart-emacs'.
This is like 'save-buffers-kill-emacs', but instead of just killing
the current Emacs process at the end, it starts a new Emacs process
(using the same command line arguments as the running Emacs process).
'kill-emacs' and 'save-buffers-kill-emacs' have also gained new
optional arguments to restart instead of just killing the current
process.
** Drag and Drop
*** New user option 'mouse-drag-mode-line-buffer'.
If non-nil, dragging on the buffer name part of the mode-line will
drag the buffer's associated file to other programs. This option is
currently only available on X, Haiku and Nextstep (GNUstep or macOS).
*** New user option 'mouse-drag-and-drop-region-cross-program'.
If non-nil, this option allows dragging text in the region from Emacs
to another program.
*** New user option 'mouse-drag-and-drop-region-scroll-margin'.
If non-nil, this option allows scrolling a window while dragging text
around without a scroll wheel.
*** The value of 'mouse-drag-copy-region' can now be the symbol 'non-empty'.
This prevents mouse drag gestures from putting empty strings onto the
kill ring.
*** New user options 'dnd-indicate-insertion-point' and 'dnd-scroll-margin'.
These options allow adjusting point and scrolling a window when
dragging items from another program.
*** The X Direct Save (XDS) protocol is now supported.
This means dropping an image or file link from programs such as
Firefox will no longer create a temporary file in a random directory,
instead asking you where to save the file first.
** New user option 'record-all-keys'.
If non-nil, this option will force recording of all input keys,
including those typed in response to passwords prompt (this was the
previous behavior). The default is nil, which inhibits recording of
passwords.
** New function 'command-query'.
This function makes its argument command prompt the user for
confirmation before executing.
** The 'disabled' property of a command's symbol can now be a list.
The first element of the list should be the symbol 'query', which will
cause the command disabled this way prompt the user with a y/n or a
yes/no question before executing. The new function 'command-query' is
a convenient method of making commands disabled in this way.
** 'count-words' will now report buffer totals if given a prefix.
Without a prefix, it will only report the word count for the narrowed
part of the buffer.
** 'count-words' will now report sentence count when used interactively.
** New user option 'set-message-functions'.
It allows more flexible control of how echo-area messages are displayed
by adding functions to this list. The default value is a list of one
element: 'set-minibuffer-message', which displays echo-area messages
at the end of the minibuffer text when the minibuffer is active.
Other useful functions include 'inhibit-message', which allows
specifying, via 'inhibit-message-regexps', the list of messages whose
display should be inhibited; and 'set-multi-message' that accumulates
recent messages and displays them stacked together.
** New user option 'find-library-include-other-files'.
If set to nil, commands like 'find-library' will only include library
files in the completion candidates. The default is t, which preserves
previous behavior, whereby non-library files could also be included.
** New command 'sqlite-mode-open-file' for examining an sqlite3 file.
This uses the new 'sqlite-mode' which allows listing the tables in a
DB file, and examining and modifying the columns and the contents of
those tables.
** 'write-file' will now copy some file mode bits.
If the current buffer is visiting a file that is executable, the
'C-x C-w' command will now make the new file executable, too.
** New user option 'process-error-pause-time'.
This determines how long to pause Emacs after a process
filter/sentinel error has been handled.
** New faces for font-lock.
These faces are primarily meant for use with tree-sitter. They are:
'font-lock-bracket-face', 'font-lock-delimiter-face',
'font-lock-escape-face', 'font-lock-function-call-face',
'font-lock-misc-punctuation-face', 'font-lock-number-face',
'font-lock-operator-face', 'font-lock-property-name-face',
'font-lock-property-use-face', 'font-lock-punctuation-face',
'font-lock-regexp-face', and 'font-lock-variable-use-face'.
** New face 'variable-pitch-text'.
This face is like 'variable-pitch' (from which it inherits), but is
slightly larger, which should help with the visual size differences
between the default, non-proportional font and proportional fonts when
mixed.
** New face 'mode-line-active'.
This inherits from the 'mode-line' face, but is the face actually used
on the mode lines (along with 'mode-line-inactive').
** New face attribute pseudo-value 'reset'.
This value stands for the value of the corresponding attribute of the
'default' face. It can be used to reset attribute values produced by
inheriting from other faces.
** New X resource "borderThickness".
This controls the thickness of the external borders of the menu bars
and pop-up menus.
** New X resource "inputStyle".
This controls the style of the pre-edit and status areas of X input
methods.
** New X resources "highlightForeground" and "highlightBackground".
Only in the Lucid build, this controls colors used for highlighted
menu item widgets.
** On X, Emacs now tries to synchronize window resize with the window manager.
This leads to less flicker and empty areas of a frame being displayed
when a frame is being resized. Unfortunately, it does not work on
some ancient buggy window managers, so if Emacs appears to freeze, but
is still responsive to input, you can turn it off by setting the X
resource "synchronizeResize" to "off".
** On X, Emacs can optionally synchronize display with the graphics hardware.
When this is enabled by setting the X resource "synchronizeResize" to
"extended", frame content "tearing" is drastically reduced. This is
only supported on the Motif, Lucid, and no-toolkit builds, and
requires an X compositing manager supporting the extended frame
synchronization protocol (see
https://fishsoup.net/misc/wm-spec-synchronization.html).
This behavior can be toggled on and off via the frame parameter
'use-frame-synchronization'.
** New frame parameter 'alpha-background' and X resource "alphaBackground".
This controls the opacity of the text background when running on a
composited display.
** New frame parameter 'shaded'.
With window managers which support this, it controls whether or not a
frame's contents will be hidden, leaving only the title bar on display.
** New user option 'x-gtk-use-native-input'.
This controls whether or not GTK input methods are used by Emacs,
instead of XIM input methods. Defaults to nil.
** New user option 'use-system-tooltips'.
This controls whether to use the toolkit tooltips, or Emacs's own
native implementation of tooltips as small frames. This option is
only meaningful if Emacs was built with GTK+, Nextstep, or Haiku
support, and defaults to t, which makes Emacs use the toolkit
tooltips. The existing GTK-specific option
'x-gtk-use-system-tooltips' is now an alias of this new option.
** Non-native tooltips are now supported on Nextstep.
This means Emacs built with GNUstep or built on macOS is now able to
display different faces and images inside tooltips when the
'use-system-tooltips' user option is nil.
** New minor mode 'pixel-scroll-precision-mode'.
When enabled, and if your mouse supports it, you can scroll the
display up or down at pixel resolution, according to what your mouse
wheel reports. Unlike 'pixel-scroll-mode', this mode scrolls the
display pixel-by-pixel, as opposed to only animating line-by-line
scrolls.
** Terminal Emacs
*** Emacs will now use 24-bit colors on terminals that support "Tc" capability.
This is in addition to previously-supported ways of discovering 24-bit
color support: either via the "RGB" or "setf24" capabilities, or if
the 'COLORTERM' environment variable is set to the value "truecolor".
*** Select active regions with xterm selection support.
On terminals with xterm "setSelection" support, the active region may be
saved to the X primary selection, following the
'select-active-regions' variable. This support is enabled when
'tty-select-active-regions' is non-nil.
*** New command to set up display of unsupported characters.
The new command 'standard-display-by-replacement-char' produces Lisp
code that sets up the 'standard-display-table' to use a replacement
character for display of characters that the text-mode terminal
doesn't support. This code is intended to be used in your init files.
This feature is most useful with the Linux console and similar
terminals, where Emacs has a reliable way of determining which
characters have glyphs in the font loaded into the terminal's memory.
*** New functions to set terminal output buffer size.
The new functions 'tty--set-output-buffer-size' and
'tty--output-buffer-size' allow setting and retrieving the output
buffer size of a terminal device. The default buffer size is and has
always been BUFSIZ, which is defined in your system's stdio.h. When
you set a buffer size with 'tty--set-output-buffer-size', this also
prevents Emacs from explicitly flushing the tty output stream, except
at the end of display update.
** ERT
*** New ERT variables 'ert-batch-print-length' and 'ert-batch-print-level'.
These variables will override 'print-length' and 'print-level' when
printing Lisp values in ERT batch test results.
*** Redefining an ERT test in batch mode now signals an error.
Executing 'ert-deftest' with the same name as an existing test causes
the previous definition to be discarded, which was probably not
intended when this occurs in batch mode. To remedy the error, rename
tests so that they all have unique names.
*** ERT can generate JUnit test reports.
When environment variable 'EMACS_TEST_JUNIT_REPORT' is set, ERT
generates a JUnit test report under this file name. This is useful
for Emacs integration into CI/CD test environments.
*** Unbound test symbols now signal an 'ert-test-unbound' error.
This affects the 'ert-select-tests' function and its callers.
** Emoji
*** Emacs now has several new methods for inserting Emoji.
The Emoji commands are under the new 'C-x 8 e' prefix.
*** New command 'emoji-insert' (bound to 'C-x 8 e e' and 'C-x 8 e i').
This command guides you through various Emoji categories and
combinations in a graphical menu system.
*** New command 'emoji-search' (bound to 'C-x 8 e s').
This command lets you search for and insert an Emoji based on names.
*** New command 'emoji-list' (bound to 'C-x 8 e l').
This command lists all Emoji (categorized by themes) in a special
buffer and lets you choose one of them to insert.
*** New command 'emoji-recent' (bound to 'C-x 8 e r').
This command lets you choose among the Emoji you have recently
inserted and insert it.
*** New command 'emoji-describe' (bound to 'C-x 8 e d').
This command will tell you the name of the Emoji at point. (It also
works for non-Emoji characters.)
*** New commands 'emoji-zoom-increase' and 'emoji-zoom-decrease'.
These are bound to 'C-x 8 e +' and 'C-x 8 e -', respectively. They
can be used on any character, but are mainly useful for Emoji.
*** New command 'emoji-zoom-reset'.
This is bound to 'C-x 8 e 0', and undoes any size changes performed by
'emoji-zoom-increase' and 'emoji-zoom-decrease'.
*** New input method 'emoji'.
This allows you to enter Emoji using short strings, eg ':face_palm:'
or ':scream:'.
** Help
*** Variable values displayed by 'C-h v' in "*Help*" are now fontified.
*** New user option 'help-clean-buttons'.
If non-nil, link buttons in "*Help*" buffers will have any surrounding
quotes removed.
*** 'M-x apropos-variable' output now includes values of variables.
Such an apropos buffer is more easily viewed with outlining after
enabling 'outline-minor-mode' in 'apropos-mode'.
*** New docstring syntax to indicate that symbols shouldn't be links.