mirrored from git://git.sv.gnu.org/emacs.git
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
NEWS.28
4014 lines (3082 loc) · 171 KB
/
NEWS.28
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) 2019-2024 Free Software Foundation, Inc.
See the end of the file for license conditions.
Please send Emacs bug reports to '[email protected]'.
If possible, use 'M-x report-emacs-bug'.
This file is about changes in Emacs version 28.
See file HISTORY for a list of GNU Emacs versions and release dates.
See files NEWS.27, NEWS.26, ..., 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'.
* Installation Changes in Emacs 28.3
* Startup Changes in Emacs 28.3
* Changes in Emacs 28.3
* Editing Changes in Emacs 28.3
* Changes in Specialized Modes and Packages in Emacs 28.3
** 'native-comp-driver-options' on macOS.
The value of 'native-comp-driver-options' has been changed to contain
"-Wl,-w" to suppress warnings of the form
ld: warning: -undefined dynamic_lookup may not work with chained fixups
emitted during native compilation on macOS 12.6 with Xcode 14.
* New Modes and Packages in Emacs 28.3
* Incompatible Lisp Changes in Emacs 28.3
* Lisp Changes in Emacs 28.3
* Changes in Emacs 28.3 on Non-Free Operating Systems
* Installation Changes in Emacs 28.2
** To install the Emacs binary in a non-standard directory, use '--bindir='.
If you install Emacs in a way that places the Emacs executable file in
a directory other than "${prefix}/bin", you will now need to specify
that at configure time, if you build Emacs with native-compilation
support. To this end, add the '--bindir=DIRECTORY' switch to the
command line of the 'configure' script, where DIRECTORY is the
directory in which you will install the executable file "emacs". This
is required even if you place a symlink under "${prefix}/bin" that
points to the real executable file in some other DIRECTORY.
It is no longer enough to specify 'bindir=DIRECTORY' on the command
line of the "make install" command.
The reason for this new requirement is that Emacs needs to locate at
startup the directory with its "*.eln" natively-compiled files for the
preloaded Lisp packages, and the relative name of that directory needs
therefore to be recorded in the executable as part of the build.
* Changes in Emacs 28.2
This is a bug-fix release with no new features.
* Changes in Specialized Modes and Packages in Emacs 28.2
** The command 'kdb-macro-redisplay' was renamed to 'kmacro-redisplay'.
This is to fix an embarrassing typo in the original name.
** 'desktop-save-mode' now saves the desktop in 'save-buffers-kill-emacs'.
Previously, the desktop was saved in 'kill-emacs' via
'kill-emacs-hook'. However, that violated the convention that
functions in 'kill-emacs-hook' cannot interact with the user, and in
particular didn't play well with ending daemon sessions of Emacs. So
we moved the saving of the desktop to 'save-buffers-kill-emacs', via
'kill-emacs-query-functions'. To make sure the desktop is saved,
terminate Emacs with 'save-buffers-kill-emacs', not with 'kill-emacs'.
(This change was done in Emacs 28.1, but we didn't announce it in NEWS
back then.)
* Installation Changes in Emacs 28.1
** Emacs now optionally supports native compilation of Lisp files.
To enable this, configure Emacs with the '--with-native-compilation' option.
This requires the libgccjit library to be installed and functional,
and also requires GCC and Binutils to be available when Lisp code is
natively compiled. See the Info node "(elisp) Native Compilation" for
more details.
If you build Emacs with native compilation, but without zlib, be sure
to configure with the '--without-compress-install' option, so that the
installed "*.el" files are not compressed; otherwise, you will not be
able to use JIT native compilation of the installed "*.el" files.
Note that JIT native compilation is done in a fresh session of Emacs
that is run in a subprocess, so it can legitimately report some
warnings and errors that aren't uncovered by byte-compilation. We
recommend examining any such warnings before you decide they are
false.
** The Cairo graphics library is now used by default if present.
'--with-cairo' is now the default, if the appropriate development
files are found by 'configure'. Building with Cairo is known to cause
some problems with bitmap fonts. This may require you to adjust your
font settings, or to build with Xft support instead.
Note also that 'FontBackend' settings in ".Xdefaults" or
".Xresources", or 'font-backend' frame parameter settings in your init
files, may need to be adjusted, as 'xft' is no longer a valid backend
when using Cairo. Use 'ftcrhb' if your Emacs was built with HarfBuzz
text shaping support, and 'ftcr' otherwise. You can determine this by
checking 'system-configuration-features'. The 'ftcr' backend will
still be available when HarfBuzz is supported, but will not be used by
default. We strongly recommend building with HarfBuzz support. 'x' is
still a valid backend.
** 'configure' now warns about building with libXft support.
libXft is unmaintained, and causes a number of problems with modern
fonts including but not limited to crashes; support for it may be
removed in a future version of Emacs. Please consider using
Cairo + HarfBuzz instead.
** 'configure' now warns about not using HarfBuzz if using Cairo.
We want to encourage people to use the most modern font features
available, and this is the Cairo graphics library + HarfBuzz for font
shaping, so 'configure' now recommends that combination.
** Building without double buffering support.
'configure --with-xdbe=no' can now be used to disable double buffering
at build time.
** The configure option '--without-makeinfo' has been removed.
This was only ever relevant when building from a repository checkout.
This now requires makeinfo, which is part of the texinfo package.
** New configure option '--disable-year2038'.
This causes Emacs to use only 32-bit time_t on platforms that have
both 32- and 64-bit time_t. This may help when linking Emacs with a
library with an ABI requiring traditional 32-bit time_t. This option
currently affects only 32-bit ARM and x86 running GNU/Linux with glibc
2.34 and later. Emacs now defaults to 64-bit time_t on these
platforms.
** Support for building with '-fcheck-pointer-bounds' has been removed.
GCC has withdrawn the '-fcheck-pointer-bounds' option and support for
its implementation has been removed from the Linux kernel.
** The ftx font backend driver has been removed.
It was declared obsolete in Emacs 27.1.
** Emacs no longer supports old OpenBSD systems.
OpenBSD 5.3 and older releases are no longer supported, as they lack
proper pty support that Emacs needs.
* Startup Changes in Emacs 28.1
** In GTK builds, Emacs now supports startup notification.
This means that Emacs won't steal keyboard focus upon startup
(when started via the Desktop) if the user is typing into another
application.
** Errors in 'kill-emacs-hook' no longer prevent Emacs from shutting down.
If a function in that hook signals an error in an interactive Emacs,
the user will be prompted on whether to continue. If the user doesn't
answer within five seconds, Emacs will continue shutting down anyway.
** Emacs now supports loading a Secure Computing filter.
This is supported only on capable GNU/Linux systems. To activate,
invoke Emacs with the '--seccomp=FILE' command-line option. FILE must
name a binary file containing an array of 'struct sock_filter'
structures. Emacs will then install that list of Secure Computing
filters into its own process early during the startup process. You
can use this functionality to put an Emacs process in a sandbox to
avoid security issues when executing untrusted code. See the manual
page for 'seccomp' system call, for details about Secure Computing
filters.
** Emacs can support 24-bit color TTY without terminfo database.
If your text-mode terminal supports 24-bit true color, but your system
lacks the terminfo database, you can instruct Emacs to support 24-bit
true color by setting 'COLORTERM=truecolor' in the environment. This is
useful on systems such as FreeBSD which ships only with "etc/termcap".
** File names given on the command line are now pushed onto history.
The file names will be pushed onto 'file-name-history', like the names
of files visited via 'C-x C-f' and other commands.
* Changes in Emacs 28.1
** Emacs now supports Unicode Standard version 14.0.
** Improved support for Emoji.
On capable systems, Emacs now correctly displays Emoji and Emoji
sequences by default, provided that a suitable font is available to
Emacs. With a few exceptions, all of the Emoji sequences specified by
Unicode 14.0 are automatically composed and displayed as a single
colorful glyph. This is achieved by changes in the Emacs font
configuration, and by additional character-composition rules for the
Emoji codepoints that follow from the Unicode-defined sequences.
If your system lacks a suitable font, we recommend to install "Noto
Color Emoji"; Emacs will use it automatically if it's installed. If
you prefer to use another font for Emoji, customize your fontset like
this:
(set-fontset-font t 'emoji
'("My New Emoji Font" . "iso10646-1") nil 'prepend)
The Emoji characters are now assigned to a special script, 'emoji', so
as to make it easier to customize fontsets for Emoji display, as in
the above example. (Previously, the Emoji characters were assigned to
the 'symbol' script, together with other symbol and punctuation
characters.)
** 'glyphless-char-display-control' now applies to Variation Selectors.
VS-1 through VS-16 are now displayed as 'thin-space' by default when
not composed with previous characters (typically, as part of Emoji
sequences).
** New command 'execute-extended-command-for-buffer'.
This new command, bound to 'M-S-x', works like
'execute-extended-command', but limits the set of commands to the
commands that have been determined to be particularly useful with the
current mode.
** New user option 'read-extended-command-predicate'.
This user option controls how 'M-x' performs completion of commands when
you type 'TAB'. By default, any command that matches what you have
typed is considered a completion candidate, but you can customize this
option to exclude commands that are not applicable to the current
buffer's major and minor modes, and respect the command's completion
predicate (if any).
** Completion on 'M-x' shows key bindings for commands.
When 'suggest-key-bindings' is non-nil (as it is by default), the
completion list popped up by 'M-x' shows the key bindings for all the
commands shown in the list of candidate completions that have a key
binding.
** New user option 'completions-detailed'.
When non-nil, some commands like 'describe-symbol' show more detailed
completions with more information in completion prefix and suffix.
The default is nil.
** 'C-s' in 'M-x' now once again searches over completions.
In Emacs 23, typing 'M-x' ('read-extended-command') and then 'C-s' (to
do an interactive search) would search over possible completions.
This was lost in Emacs 24, but is now back again.
** User option 'completions-format' supports a new value 'one-column'.
** New system for displaying documentation for groups of functions.
This can either be used by saying 'M-x shortdoc-display-group' and
choosing a group, or clicking a button in the "*Help*" buffers when
looking at the doc string of a function that belongs to one of these
groups.
** New minor mode 'context-menu-mode' for context menus popped by 'mouse-3'.
When this mode is enabled, clicking 'down-mouse-3' (usually, the
right mouse button) anywhere in the buffer pops up a menu whose
contents depends on surrounding context near the mouse click.
You can change the order of the default sub-menus in the context menu
by customizing the user option 'context-menu-functions'. You can also
invoke the context menu by pressing 'S-<F10>' or, on macOS, by
clicking 'C-down-mouse-1'.
** A new keymap for buffer actions has been added.
The 'C-x x' keymap now holds keystrokes for various buffer-oriented
commands. The new keystrokes are 'C-x x g' ('revert-buffer-quick'),
'C-x x r' ('rename-buffer'), 'C-x x u' ('rename-uniquely'), 'C-x x n'
('clone-buffer'), 'C-x x i' ('insert-buffer'), 'C-x x t'
('toggle-truncate-lines') and 'C-x x f' ('font-lock-update').
** Modifiers now go outside angle brackets in pretty-printed key bindings.
For example, 'RET' with Control and Meta modifiers is now shown as
'C-M-<return>' instead of '<C-M-return>'. Either variant can be used
as input; functions such as 'kbd' and 'read-kbd-macro' accept both
styles as equivalent (they have done so for a long time).
** 'eval-expression' no longer signals an error on incomplete expressions.
Previously, typing 'M-: ( RET' would result in Emacs saying "End of
file during parsing" and dropping out of the minibuffer. The user
would have to type 'M-: M-p' to edit and redo the expression. Now
Emacs will echo the message and allow the user to continue editing.
** 'eval-last-sexp' now handles 'defvar'/'defcustom'/'defface' specially.
This command would previously not redefine values defined by these
forms, but this command has now been changed to work more like
'eval-defun', and reset the values as specified.
** New user option 'use-short-answers'.
When non-nil, the function 'y-or-n-p' is used instead of
'yes-or-no-p'. This eliminates the need to define an alias that maps
one to another in the init file. The same user option also controls
whether the function 'read-answer' accepts short answers.
** New user option 'kill-buffer-delete-auto-save-files'.
If non-nil, killing a buffer that has an auto-save file will prompt
the user for whether that auto-save file should be deleted. (Note
that 'delete-auto-save-files', if non-nil, was previously documented
to result in deletion of auto-save files when killing a buffer without
unsaved changes, but this has apparently not worked for several
decades, so the documented semantics of this variable has been changed
to match the behavior.)
** New user option 'next-error-message-highlight'.
In addition to a fringe arrow, 'next-error' error may now optionally
highlight the current error message in the 'next-error' buffer.
This user option can be also customized to keep highlighting on all
visited errors, so you can have an overview what errors were already visited.
** New choice 'next-error-quit-window' for 'next-error-found-function'.
When 'next-error-found-function' is customized to 'next-error-quit-window',
then typing the numeric prefix argument 0 before the command 'next-error'
will quit the source window after visiting the next occurrence.
** New user option 'file-preserve-symlinks-on-save'.
This controls what Emacs does when saving buffers that visit files via
symbolic links, and 'file-precious-flag' is non-nil.
** New user option 'copy-directory-create-symlink'.
If non-nil, will make 'copy-directory' (when used on a symbolic
link) copy the link instead of following the link. The default is
nil, so the default behavior is unchanged.
** New user option 'ignored-local-variable-values'.
This is the opposite of 'safe-local-variable-values' -- it's an alist
of variable-value pairs that are to be ignored when reading a
local-variables section of a file.
** Specific warnings can now be disabled from the warning buffer.
When a warning is displayed to the user, the resulting buffer now has
buttons which allow making permanent changes to the treatment of that
warning. Automatic showing of the warning can be disabled (although
it is still logged to the "*Messages*" buffer), or the warning can be
disabled entirely.
** ".dir-locals.el" now supports setting 'auto-mode-alist'.
The new 'auto-mode-alist' specification in ".dir-locals.el" files can
now be used to override the global 'auto-mode-alist' in the current
directory tree.
** User option 'uniquify-buffer-name-style' can now be a function.
This user option can be one of the predefined styles or a function to
personalize the uniquified buffer name.
** 'remove-hook' is now an interactive command.
** 'expand-file-name' now checks for null bytes in filenames.
The function will now check for null bytes in both NAME and
DEFAULT-DIRECTORY arguments, as well as in the 'default-directory'
buffer-local variable, when its value is used. If null bytes are
found, 'expand-file-name' will signal an error.
This means that practically all file-related operations will now check
file names for null bytes, thus avoiding subtle bugs with silently
using only the part of file name up to the first null byte.
** Frames
*** The key prefix 'C-x 5 5' displays next command buffer in a new frame.
It's bound to the command 'other-frame-prefix' that requests the buffer
of the next command to be displayed in a new frame.
*** New command 'clone-frame' (bound to 'C-x 5 c').
This is like 'C-x 5 2', but uses the window configuration and frame
parameters of the current frame instead of 'default-frame-alist'.
When called interactively with a prefix arg, the window configuration
is not cloned.
*** Default values of 'frame-title-format' and 'icon-title-format' have changed.
These variables are used to display the title bar of visible frames
and the title bar of an iconified frame. They now show the name of
the current buffer and the text "GNU Emacs" instead of the value of
'invocation-name'. To get the old behavior back, add the following to
your init file:
(setq frame-title-format '(multiple-frames "%b"
("" invocation-name "@" system-name)))
*** New frame parameter 'drag-with-tab-line'.
This parameter, similar to 'drag-with-header-line', allows moving frames
by dragging the tab lines of their topmost windows with the mouse.
*** New optional behavior of 'delete-other-frames'.
When invoked with a prefix argument, 'delete-other-frames' now
iconifies frames, rather than deleting them.
*** Commands 'set-frame-width' and 'set-frame-height' now prompt for values.
These commands now prompt for the value via the minibuffer, instead of
requiring the user to specify the value via the prefix argument.
** Windows
*** The key prefix 'C-x 4 1' displays next command buffer in the same window.
It's bound to the command 'same-window-prefix' that requests the buffer
of the next command to be displayed in the same window.
*** The key prefix 'C-x 4 4' displays next command buffer in a new window.
It's bound to the command 'other-window-prefix' that requests the buffer
of the next command to be displayed in a new window.
*** New command 'recenter-other-window', bound to 'S-M-C-l'.
Like 'recenter-top-bottom', but acting on the other window.
*** New user option 'delete-window-choose-selected'.
This allows specifying how Emacs chooses which window will be the
frame's selected window after the currently selected window is
deleted.
*** New argument NO-OTHER for some window functions.
'get-lru-window', 'get-mru-window' and 'get-largest-window' now accept a
new optional argument NO-OTHER which, if non-nil, avoids returning a
window whose 'no-other-window' parameter is non-nil.
*** New 'display-buffer' function 'display-buffer-use-least-recent-window'.
This is like 'display-buffer-use-some-window', but won't reuse the
current window, and when called repeatedly will try not to reuse a
previously selected window.
*** New function 'window-bump-use-time'.
This updates the use time of a window.
** Minibuffer
*** Minibuffer scrolling is now conservative by default.
This is controlled by the new variable 'scroll-minibuffer-conservatively'.
It is t by default; setting it to nil will cause scrolling in the
minibuffer obey the value of 'scroll-conservatively'.
*** Improved handling of minibuffers on switching frames.
By default, when you switch to another frame, an active minibuffer now
moves to the newly selected frame. Nevertheless, the effect of what
you type in the minibuffer happens in the frame where the minibuffer
was first activated. An alternative behavior is available by
customizing 'minibuffer-follows-selected-frame' to nil. Here, the
minibuffer stays in the frame where you first opened it, and you must
switch back to this frame to continue or abort its command. The old
behavior, which mixed these two, can be approximated by customizing
'minibuffer-follows-selected-frame' to a value which is neither nil
nor t.
*** New user option 'read-minibuffer-restore-windows'.
When customized to nil, it uses 'minibuffer-restore-windows' in
'minibuffer-exit-hook' to remove only the window showing the
"*Completions*" buffer, but keeps all other windows created
while the minibuffer was active.
*** New variable 'redisplay-adhoc-scroll-in-resize-mini-windows'.
Customizing it to nil will disable the ad-hoc auto-scrolling of
minibuffer text shown in mini-windows when resizing those windows.
The default heuristics of that scrolling can be counter productive in
some corner cases, though the cure might be worse than the disease.
This said, the effect should be negligible in the vast majority of
cases anyway.
** Mode Line
*** New user option 'mode-line-compact'.
If non-nil, repeating spaces are compressed into a single space. If
'long', this is only done when the mode line is longer than the
current window width (in columns).
*** New user options to control format of line/column numbers in the mode line.
'mode-line-position-line-format' is the line number format (when
'line-number-mode' is on), 'mode-line-position-column-format' is
the column number format (when 'column-number-mode' is on), and
'mode-line-position-column-line-format' is the combined format (when
both modes are on).
** Tab Bars and Tab Lines
*** The prefix key 'C-x t t' can be used to display a buffer in a new tab.
Typing 'C-x t t' before a command will cause the buffer shown by that
command to be displayed in a new tab. 'C-x t t' is bound to the
command 'other-tab-prefix'.
*** New command 'C-x t C-r' to open file read-only in the other tab.
*** The tab bar now supports more mouse commands.
Clicking 'mouse-2' closes the tab, 'mouse-3' displays the context menu
with items that operate on the clicked tab. Dragging the tab with
'mouse-1' moves it to another position on the tab bar. Mouse wheel
scrolling switches to the previous/next tab, and holding the Shift key
during scrolling moves the tab to the left/right.
*** Frame-specific appearance of the tab bar when 'tab-bar-show' is a number.
When 'tab-bar-show' is a number, the tab bar on different frames can
be shown or hidden independently, as determined by the number of tabs
on each frame compared to the numerical value of 'tab-bar-show'.
*** New command 'toggle-frame-tab-bar'.
It can be used to enable/disable the tab bar on the currently selected
frame regardless of the values of 'tab-bar-mode' and 'tab-bar-show'.
This allows enabling/disabling the tab bar independently on different
frames.
*** New user option 'tab-bar-format' defines a list of tab bar items.
When it contains 'tab-bar-format-global' (possibly appended after
'tab-bar-format-align-right'), then after enabling 'display-time-mode'
(or any other mode that uses 'global-mode-string') it displays time
aligned to the right on the tab bar instead of on the mode line.
When 'tab-bar-format-tabs' is replaced with 'tab-bar-format-tabs-groups',
the tab bar displays tab groups.
*** New optional key binding for 'tab-last'.
If you customize the user option 'tab-bar-select-tab-modifiers' to
allow selecting tabs using their index numbers, the '<MODIFIER>-9' key
is bound to 'tab-last', and switches to the last tab. Here <MODIFIER>
is any of the modifiers in the list that is the value of
'tab-bar-select-tab-modifiers'. You can also use positive indices,
which count from the last tab: 1 is the last tab, 2 the one before
that, etc.
*** New command 'tab-duplicate' bound to 'C-x t n'.
*** 'C-x t N' creates a new tab at the specified absolute position.
The position is provided as prefix arg, and specifies an index that
starts at 1. Negative values count from the end of the tab bar.
*** 'C-x t M' moves the current tab to the specified absolute position.
The position is provided as prefix arg, whose interpretation is as in
'C-x t N'.
*** 'C-x t G' assigns a tab to a named group of tabs.
'tab-close-group' closes all tabs that belong to the selected group.
The user option 'tab-bar-new-tab-group' defines the default group of
new tabs. After customizing 'tab-bar-tab-post-change-group-functions'
to 'tab-bar-move-tab-to-group', changing the group of a tab will also
move it closer to other tabs in the same group.
*** New user option 'tab-bar-tab-name-format-function'.
*** New user option 'tab-line-tab-name-format-function'.
*** The tabs in the tab line can now be scrolled using horizontal scroll.
If your mouse or trackpad supports it, you can now scroll tabs when
the mouse pointer is in the tab line by scrolling left or right.
*** New tab-line faces and user options.
The face 'tab-line-tab-special' is used for tabs whose buffers are
special, i.e. buffers that don't visit a file. The face
'tab-line-tab-modified' is used to display modified, file-backed
buffers. The face 'tab-line-tab-inactive-alternate' is used to
display inactive tabs with an alternating background color, making
them easier to distinguish, especially if the face 'tab-line-tab' is
configured to not display with a box; this alternate face is only
applied when the user option 'tab-line-tab-face-functions' is so
configured. That option may also be used to customize tab-line faces
in other ways.
** Mouse wheel
*** Mouse wheel scrolling now defaults to one line at a time.
*** Mouse wheel scrolling now works on more parts of frame's display.
When using 'mouse-wheel-mode', the mouse wheel will now scroll also when
the mouse cursor is on the scroll bars, fringes, margins, header line,
and mode line. ('mouse-wheel-mode' is enabled by default on most graphical
displays.)
*** Mouse wheel scrolling with Shift modifier now scrolls horizontally.
This works in text buffers and over images. Typing a numeric prefix arg
(e.g. 'M-5') before starting horizontal scrolling changes its step value.
The value is saved in the user option 'mouse-wheel-scroll-amount-horizontal'.
** Customize
*** Customize buffers can now be reverted with 'C-x x g'.
*** Most customize commands now hide obsolete user options.
Obsolete user options are no longer shown in the listings produced by
the commands 'customize', 'customize-group', 'customize-apropos' and
'customize-changed'.
To customize obsolete user options, use 'customize-option' or
'customize-saved'.
*** New SVG icons for checkboxes and arrows.
They will be used automatically instead of the old icons. If Emacs is
built without SVG support, the old icons will be used instead.
** Help
*** The order of things displayed in the "*Help*" buffer has been changed.
The indented "administrative" block (containing the "probably
introduced" and "other relevant functions" (and similar things) has
been moved to after the doc string.
*** New command 'describe-command' shows help for a command.
This can be used instead of 'describe-function' for interactive
commands and is globally bound to 'C-h x'.
*** New command 'describe-keymap' describes keybindings in a keymap.
*** New command 'apropos-function'.
This works like 'C-u M-x apropos-command' but is more discoverable.
*** New keybinding 'C-h R' prompts for an Info manual and displays it.
*** Keybindings in 'help-mode' use the new 'help-key-binding' face.
This face is added by 'substitute-command-keys' to any "\[command]"
substitution. The return value of that function should consequently
be assumed to be a propertized string. To prevent the function from
adding the 'help-key-binding' face, call 'substitute-command-keys'
with the new optional argument NO-FACE non-nil.
Note that the new face will also be used in tooltips. When using the
GTK toolkit, this is only true if 'x-gtk-use-system-tooltips' is t.
*** New user option 'help-enable-symbol-autoload'.
If non-nil, displaying help for an autoloaded function whose
'autoload' form provides no documentation string will try to load the
file it's from. This will give more extensive help for such
functions.
*** The 'help-for-help' ('C-h C-h') screen has been redesigned.
*** New convenience commands with short keys in the "*Help*" buffer.
New command 'help-view-source' ('s') will view the source file (if
any) of the current help topic. New command 'help-goto-info' ('i')
will look up the current symbol (if any) in Info. New command
'help-customize' ('c') will customize the user option or the face
(if any) whose doc string is being shown in the "*Help*" buffer.
*** New user option 'describe-bindings-outline'.
It enables outlines in the output buffer of 'describe-bindings' that
can provide a better overview in a long list of available bindings.
*** New commands to describe buttons and widgets.
'widget-describe' (on a widget) will pop up the "*Help*" buffer and
give a description of the properties. Likewise 'button-describe' does
the same for a button.
*** Improved "find definition" feature of "*Help*" buffers.
Now clicking on the link to find the definition of functions generated
by 'cl-defstruct', or variables generated by 'define-derived-mode',
for example, will go to the exact place where they are defined.
*** New commands 'apropos-next-symbol' and 'apropos-previous-symbol'.
These new navigation commands are bound to 'n' and 'p' in
'apropos-mode'.
*** The command 'view-lossage' can now be invoked from the menu bar.
The menu bar "Help" menu now has a "Show Recent Inputs" item under the
"Describe" sub-menu.
*** New command 'lossage-size'.
It allows users to change the maximum number of keystrokes and
commands recorded for the purpose of 'view-lossage'.
*** Closing the "*Help*" buffer from the toolbar now buries the buffer.
In previous Emacs versions, the "*Help*" buffer was killed instead when
clicking the "X" icon in the tool bar.
*** 'g' ('revert-buffer') in 'help-mode' no longer requires confirmation.
** File Locks
*** New user option 'lock-file-name-transforms'.
This option allows controlling where lock files are written. It uses
the same syntax as 'auto-save-file-name-transforms'.
*** New user option 'remote-file-name-inhibit-locks'.
When non-nil, this option suppresses lock files for remote files.
Default is nil.
*** New minor mode 'lock-file-mode'.
This command, called interactively, toggles the local value of
'create-lockfiles' in the current buffer.
** Emacs Server
*** New user option 'server-client-instructions'.
When emacsclient connects, Emacs will (by default) output a message
about how to exit the client frame. If 'server-client-instructions'
is set to nil, this message is inhibited.
*** New command 'server-edit-abort'.
This command (not bound to any key by default) can be used to abort
an edit instead of marking it as "Done" (which the 'C-x #' command
does). The 'emacsclient' program exits with an abnormal status as
result of this command.
*** New desktop integration for connecting to the server.
If your operating system's desktop environment is
freedesktop.org-compatible (which is true of most GNU/Linux and other
recent Unix-like desktops), you may use the new "Emacs (Client)"
desktop menu entry to open files in an existing Emacs instance rather
than starting a new one. The daemon starts if it is not already
running.
** Miscellaneous
*** New command 'font-lock-update', bound to 'C-x x f'.
This command updates the syntax highlighting in this buffer.
*** New command 'memory-report'.
This command opens a new buffer called "*Memory Report*" and gives a
summary of where Emacs is using memory currently.
*** New command 'submit-emacs-patch'.
This works like 'report-emacs-bug', but is more geared towards sending
patches to the Emacs issue tracker.
*** New face 'apropos-button'.
Applies to buttons that indicate a face.
*** New face 'font-lock-doc-markup-face'.
Intended for documentation mark-up syntax and tags inside text that
uses 'font-lock-doc-face', which it should appropriately stand out
against and harmonize with. It would typically be used in structured
documentation comments in program source code by language-specific
modes, for mark-up conventions like Haddock, Javadoc or Doxygen. By
default this face inherits from 'font-lock-constant-face'.
*** New face box style 'flat-button'.
This is a plain 2D button, but uses the background color instead of
the foreground color.
*** New faces 'shortdoc-heading' and 'shortdoc-section'.
Applied to shortdoc headings and sections.
*** New face 'separator-line'.
This is used by 'make-separator-line' (see below).
*** 'redisplay-skip-fontification-on-input' helps Emacs keep up with fast input.
This is another attempt to solve the problem of handling high key repeat rate
and other "slow scrolling" situations. It is hoped it behaves better
than 'fast-but-imprecise-scrolling' and 'jit-lock-defer-time'.
It is not enabled by default.
*** Obsolete aliases are no longer hidden from command completion.
Completion of command names now considers obsolete aliases as
candidates, if they were marked obsolete in the current major version
of Emacs. Invoking a command via an obsolete alias now mentions the
obsolescence fact and shows the new name of the command.
*** Support for '(box . SIZE)' 'cursor-type'.
By default, 'box' cursor always has a filled box shape. But if you
specify 'cursor-type' to be '(box . SIZE)', the cursor becomes a hollow
box if the point is on an image larger than SIZE pixels in any
dimension.
*** The user can now customize how "default" values are prompted for.
The new utility function 'format-prompt' has been added which uses the
new 'minibuffer-default-prompt-format' user option to format "default"
prompts. This means that prompts that look like "Enter a number
(default 10)" can be customized to look like, for instance, "Enter a
number [10]", or not have the default displayed at all, like "Enter a
number". (This only affects callers that were altered to use
'format-prompt'.)
*** New help window when Emacs prompts before opening a large file.
Commands like 'find-file' or 'visit-tags-table' ask to visit a file
normally or literally when the file is larger than a certain size (by
default, 9.5 MiB). Press '?' or 'C-h' in that prompt to read more
about the different options to visit a file, how you can disable the
prompt, and how you can tweak the file size threshold.
*** Emacs now defaults to UTF-8 instead of ISO-8859-1.
This is only for the default, where the user has set no 'LANG' (or
similar) variable or environment. This change should lead to no
user-visible changes for normal usage.
*** 'global-display-fill-column-indicator-mode' skips some buffers.
By default, turning on 'global-display-fill-column-indicator-mode'
doesn't turn on 'display-fill-column-indicator-mode' in special-mode
buffers. This can be controlled by customizing the user option
'global-display-fill-column-indicator-modes'.
*** 'nobreak-char-display' now also affects all non-ASCII space characters.
Previously, this was limited only to 'NO-BREAK SPACE' and hyphen
characters. Now it also covers the rest of the non-ASCII Unicode
space characters. Also, unlike in previous versions of Emacs, the
non-ASCII characters are displayed as themselves when
'nobreak-char-display' is t, i.e. they are not replaced on display
with the ASCII space and hyphen characters.
*** New backward compatibility variable 'nobreak-char-ascii-display'.
This variable is nil by default, and non-ASCII space and hyphen
characters are displayed as themselves, even if 'nobreak-char-display'
is non-nil. If 'nobreak-char-ascii-display' is set to a non-nil
value, the non-ASCII space and hyphen characters are instead displayed
as their ASCII counterparts: spaces and ASCII hyphen (a.k.a. "dash")
characters. This provides backward compatibility feature for the
change described above, where the non-ASCII characters are no longer
replaced with their ASCII counterparts when 'nobreak-char-display' is
t. You may need this on text-mode terminals that produce messed up
display when non-ASCII spaces and hyphens are written to the display.
(This variable is only effective when 'nobreak-char-display' is t.)
*** Improved support for terminal emulators that encode the Meta flag.
Some terminal emulators set the 8th bit of Meta characters, and then
encode the resulting character code as if it were non-ASCII character
above codepoint 127. Previously, the only way of using these in Emacs
was to set up the terminal emulator to use the 'ESC' characters to send
Meta characters to Emacs, e.g., send "ESC x" when the user types
'M-x'. You can now avoid the need for this setup of such terminal
emulators by using the new input-meta-mode with the special value
'encoded' with these terminal emulators.
*** 'auto-composition-mode' can now be selectively disabled on some TTYs.
Some text-mode terminals produce display glitches trying to compose
characters. The 'auto-composition-mode' can now have a string value
that names a terminal type; if the value returned by the 'tty-type'
function compares equal with that string, automatic composition will
be disabled in windows shown on that terminal. The Linux terminal
sets this up by default.
*** Support for the 'strike-through' face attribute on TTY frames.
If your terminal's termcap or terminfo database entry has the 'smxx'
capability defined, Emacs will now emit the prescribed escape
sequences necessary to render faces with the 'strike-through'
attribute on TTY frames.
*** TTY menu navigation is now supported in 'xterm-mouse-mode'.
TTY menus support mouse navigation and selection when 'xterm-mouse-mode'
is active. When run on a terminal, clicking on the menu bar with the
mouse now pops up a TTY menu by default instead of running the command
'tmm-menubar'. To restore the old behavior, set the user option
'tty-menu-open-use-tmm' to non-nil.
*** 'M-x report-emacs-bug' will no longer include "Recent messages" section.
These were taken from the "*Messages*" buffer, and may inadvertently
leak information from the reporting user.
*** 'C-u M-x dig' will now prompt for a query type to use.
*** Rudimentary support for the 'st' terminal emulator.
Emacs now supports 256 color display on the 'st' terminal emulator.
*** Update IRC-related references to point to Libera.Chat.
The Free Software Foundation and the GNU Project have moved their
official IRC channels from the Freenode network to Libera.Chat. For the
original announcement and the follow-up update, including more details,
see:
https://lists.gnu.org/archive/html/info-gnu/2021-06/msg00005.html
https://lists.gnu.org/archive/html/info-gnu/2021-06/msg00007.html
Given the relocation of GNU and FSF's official IRC channels, as well
as #emacs and various other Emacs-themed channels (see the link below)
to Libera.Chat, IRC-related references in the Emacs repository have
now been updated to point to Libera.Chat.
https://lists.gnu.org/archive/html/info-gnu-emacs/2021-06/msg00000.html
* Incompatible Editing Changes in Emacs 28.1
** 'toggle-truncate-lines' now disables 'visual-line-mode'.
This is for symmetry with 'visual-line-mode', which disables
'truncate-lines'.
** 'electric-indent-mode' now also indents inside strings and comments.
(This only happens when indentation function also supports this.)
To recover the previous behavior you can use:
(add-hook 'electric-indent-functions
(lambda (_) (if (nth 8 (syntax-ppss)) 'no-indent)))
** The 'M-o' ('facemenu-keymap') global binding has been removed.
To restore the old binding, say something like:
(require 'facemenu)
(define-key global-map "\M-o" 'facemenu-keymap)
(define-key facemenu-keymap "\es" 'center-line)
(define-key facemenu-keymap "\eS" 'center-paragraph)
The last two lines are not strictly necessary if you don't care about
having those two commands on the 'M-o' keymap; see the next section.
** The 'M-o M-s' and 'M-o M-S' global bindings have been removed.
Use 'M-x center-line' and 'M-x center-paragraph' instead. See the
previous section for how to get back the old bindings. Alternatively,
if you only want these two commands to have the global bindings they
had before, you can add the following to your init file:
(define-key global-map "\M-o\M-s" 'center-line)
(define-key global-map "\M-o\M-S" 'center-paragraph)
** The 'M-o M-o' global binding has been removed.
Use 'M-x font-lock-fontify-block' instead, or the new 'C-x x f'
command, which updates the syntax highlighting in the current buffer.
** The escape sequence '\e[29~' in Xterm is now mapped to 'menu'.
Xterm sends this sequence for both 'F16' and 'Menu' keys
It used to be mapped to 'print' but we couldn't find a terminal
that uses this sequence for any kind of 'Print' key.
This makes the Menu key (see https://en.wikipedia.org/wiki/Menu_key)
work for 'context-menu-mode' in Xterm.
** New user option 'xterm-store-paste-on-kill-ring'.
If non-nil (the default), Emacs pushes pasted text onto the kill ring
(if using an xterm-like terminal that supports bracketed paste).
Setting this to nil inhibits that.
** 'vc-print-branch-log' shows the change log from its root directory.
It previously used to use the default directory.
** 'project-shell' and 'shell' now use 'pop-to-buffer-same-window'.
This is to keep the same behavior as Eshell.
** In 'nroff-mode', 'center-line' is no longer bound to a key.
The original key binding was 'M-s', which interfered with Isearch,
since the latter uses 'M-s' as a prefix key of the search prefix map.
** In 'f90-mode', the backslash character ('\') no longer escapes.
For about a decade, the backslash character has no longer had a
special escape syntax in Fortran F90. To get the old behavior back,
say something like:
(modify-syntax-entry ?\\ "\\" f90-mode-syntax-table)
** Setting 'fill-column' to nil is obsolete.
This undocumented use of 'fill-column' is now obsolete. To disable
auto filling, turn off 'auto-fill-mode' instead.
For instance, you could add something like the following to your init
file:
(add-hook 'foo-mode-hook (lambda () (auto-fill-mode -1))
* Editing Changes in Emacs 28.1
** Input methods
*** Emacs now supports "transient" input methods.
A transient input method is enabled for inserting a single character,
and is then automatically disabled. 'C-x \' temporarily enables the
selected transient input method. Use 'C-u C-x \' to select a
transient input method (which can be different from the input method
enabled by 'C-\'). For example, 'C-u C-x \ compose RET' selects the
'compose' input method; then typing 'C-x \ 1 2' will insert the
character '½', and disable the 'compose' input method afterwards.
You can use 'C-x \' in incremental search to insert a single character
to the search string.
*** New input method 'compose' based on X Multi_key sequences.
*** New input method 'iso-transl' with the same keys as 'C-x 8'.
After selecting it as a transient input method with 'C-u C-x \
iso-transl RET', it supports the same key sequences as 'C-x 8',
so e.g. like 'C-x 8 [' inserts a left single quotation mark,
'C-x \ [' does the same.
*** New user option 'read-char-by-name-sort'.
It defines the sorting order of characters for completion of 'C-x 8 RET TAB'
and can be customized to sort them by codepoints instead of character names.
Additionally, you can group characters by Unicode blocks after customizing
'completions-group' and 'completions-group-sort'.
*** Improved language transliteration in Malayalam input methods.
Added a new Mozhi scheme. The inapplicable ITRANS scheme is now
deprecated. Errors in the Inscript method were corrected.
*** New input method 'cham'.
There's also a Cham greeting in "etc/HELLO".
*** New input methods for Lakota language orthographies.
Two orthographies are represented here, the Suggested Lakota
Orthography and what is known as the White Hat Orthography. Input
methods 'lakota-slo-prefix', 'lakota-slo-postfix', and
'lakota-white-hat-postfix' have been added. There is also a Lakota
greeting in "etc/HELLO".
** Standalone 'M-y' allows interactive selection from previous kills.
'M-y' can now be typed after a command that is not a yank command.
When invoked like that, it prompts in the minibuffer for one of the
previous kills, offering completion and minibuffer-history navigation
through previous kills recorded in the kill ring. A similar feature
in Isearch can be invoked if you bind 'C-s M-y' to the command
'isearch-yank-pop'. When the user option 'yank-from-kill-ring-rotate'
is nil the kill ring is not rotated after 'yank-from-kill-ring'.
** New user option 'word-wrap-by-category'.
When word-wrap is enabled, and this option is non-nil, that allows
Emacs to break lines after more characters than just whitespace
characters. In particular, this significantly improves word-wrapping