aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPo Lu2024-06-30 10:06:09 +0800
committerPo Lu2024-06-30 10:06:09 +0800
commite2561e267fd2eb37b140a293baec79096f03290b (patch)
tree937291ce231a708b51541bbce5f76151b344a0e0
parentf0f883da4b410c606b46b61c80b874ead08335ea (diff)
parent72cf9964f3c0fd63332884b8145399f1784de7f1 (diff)
downloademacs-e2561e267fd2eb37b140a293baec79096f03290b.tar.gz
emacs-e2561e267fd2eb37b140a293baec79096f03290b.zip
Merge from savannah/emacs-30
72cf9964f3c Inaccuracy in efaq.texi fc48e9e8ed5 ; Fix typos in DOS Makefile scripts 9b8d754579f ; * etc/NEWS: Explain Nextstep. 8819e5a45d5 Fix treesit crash (bug#71681) eaf2dc96c1f ; Fix SHR test on MS-Windows 57880f597c5 Delete redundant mention of `with-eval-after-load' ea8ce984342 * doc/misc/efaq.texi (New in Emacs 30): Fix typos. 45a20d781a9 ; Fix typos in symbols d95f039af43 Document security fixes in FAQ d063af203c8 Add "New in Emacs 30" to FAQ ca6b484162b ; * etc/NEWS: Move "Minibuffer and Completions" 35c46663e49 ; * etc/NEWS: Move item to "Lisp Changes". 0515b38d289 ; * etc/NEWS: Move keyboard macro items closer together. 22af3a71039 ; * etc/NEWS: More copy-edits. 000ef8876ae ; * etc/NEWS: Move items to "Incompatible Lisp Changes". 4088dc8e4ce ; * etc/NEWS: Rearrange "Incompatible Lisp Changes". 179800f36bb ; * lisp/epg.el (epg--start): Add commentary about encoding. 73898f0214c Fix non-ASCII filename operatiion on EasyPG (bug#71500) a65b6aac6b5 Silence warning with global minor mode :predicate f5f7343ac41 ; * etc/NEWS: Move an item to "Startup Changes" c95066bf188 ; * etc/NEWS: Move some Lisp items to better place. bf7db88ce1f ; * etc/NEWS: Rearrange "Editing Changes in Emacs 30.1" 000424eb9eb ; * etc/NEWS: Make touch screen support more prominent. 5b5671587fb ; * etc/NEWS: Rearrange "Changes in Emacs 30.1". 31124abdefe ; * lisp/thingatpt.el (sexp-at-point): Doc fix (bug#71777). 44f269d6e60 Fix: make 'xwidget-webkit-scroll-backward' scroll backwards 358085997c6 Merge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/... 736b7cad406 Add jsdoc support to php-ts-mode in <script> element 5f3d964e397 Update to Transient v0.7.2-4-gf75bc48d # Conflicts: # etc/NEWS
-rw-r--r--doc/misc/efaq.texi103
-rw-r--r--doc/misc/transient.texi31
-rw-r--r--etc/NEWS.301226
-rw-r--r--lisp/emacs-lisp/comp.el2
-rw-r--r--lisp/emacs-lisp/easy-mmode.el3
-rw-r--r--lisp/emacs-lisp/rmc.el7
-rw-r--r--lisp/epg.el6
-rw-r--r--lisp/erc/erc-common.el2
-rw-r--r--lisp/frameset.el2
-rw-r--r--lisp/org/ob-core.el2
-rw-r--r--lisp/org/ob-lilypond.el2
-rw-r--r--lisp/org/org-refile.el2
-rw-r--r--lisp/progmodes/cc-engine.el2
-rw-r--r--lisp/progmodes/dcl-mode.el1
-rw-r--r--lisp/progmodes/ebrowse.el2
-rw-r--r--lisp/progmodes/eglot.el2
-rw-r--r--lisp/progmodes/gdb-mi.el2
-rw-r--r--lisp/progmodes/php-ts-mode.el9
-rw-r--r--lisp/thingatpt.el5
-rw-r--r--lisp/transient.el8
-rw-r--r--lisp/which-key.el2
-rw-r--r--lisp/xwidget.el2
-rw-r--r--msdos/sedlibmk.inp4
-rw-r--r--src/treesit.c28
-rw-r--r--test/lisp/net/shr-tests.el14
-rw-r--r--test/lisp/which-key-tests.el3
-rw-r--r--test/src/comp-resources/comp-test-funcs.el2
-rw-r--r--test/src/comp-tests.el2
28 files changed, 808 insertions, 668 deletions
diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi
index 5b722f9fd77..7ab9731ff8f 100644
--- a/doc/misc/efaq.texi
+++ b/doc/misc/efaq.texi
@@ -847,6 +847,7 @@ in the Emacs development repository (@pxref{Latest version of Emacs}).
847@menu 847@menu
848* Origin of the term Emacs:: 848* Origin of the term Emacs::
849* Latest version of Emacs:: 849* Latest version of Emacs::
850* New in Emacs 30::
850* New in Emacs 29:: 851* New in Emacs 29::
851* New in Emacs 28:: 852* New in Emacs 28::
852* New in Emacs 27:: 853* New in Emacs 27::
@@ -920,6 +921,90 @@ Emacs, type @kbd{C-h C-n} (@kbd{M-x view-emacs-news}). You can give
920this command a prefix argument to read about which features were new 921this command a prefix argument to read about which features were new
921in older versions. 922in older versions.
922 923
924
925@node New in Emacs 30
926@section What is different about Emacs 30?
927@cindex Differences between Emacs 29 and Emacs 30
928@cindex Emacs 30, new features in
929
930Here's a list of the most important changes in Emacs 30 as compared to
931Emacs 29. The full list is too long to fit here, but can be read in the
932Emacs @file{NEWS} file by typing @kbd{C-h n} inside Emacs.
933
934@itemize
935@item
936Native compilation is now enabled by default. When Emacs is built on a
937machine with @samp{libgccjit}, this will improve Emacs performance in
938many typical workloads.
939
940@item
941Emacs has been ported to the Android operating system. See the file
942@file{java/INSTALL} in the Emacs source distribution for details on how
943to build it.
944
945@item
946Numerous performance improvements, for example in parsing JSON, reading
947data from subprocesses, handling output from Eshell and in Shell mode, X
948selection requests, remote files, and so on.
949
950@item
951Native JSON support is now always available; libjansson is no longer
952used.
953
954@item
955New major modes based on the
956@uref{https://tree-sitter.github.io/tree-sitter/, tree-sitter library}
957library for editing Elixir, HTML, Lua, HEEx, and PHP.
958
959@item
960Support for the EditorConfig standard has been added, an editor-neutral
961way to provide directory local (project-wide) settings. It is enabled
962via a new global minor mode @code{editorconfig-mode} which makes Emacs
963obey the @file{.editorconfig} files.
964
965@item
966Support for touchscreens has been improved. On systems that understand
967them (at present X, Android, PGTK, and MS-Windows), many touch screen
968gestures are now implemented and translated into mouse or gesture
969events, and support for tapping tool bar buttons and opening menus has
970been added.
971
972@item
973Tool bar tweaks. The new minor mode @code{window-tool-bar-mode}
974provides a per-window toolbar. Toolbars can be placed on the bottom of
975a frame by setting the @code{tool-bar-position} variable on all window
976systems but GNUStep and macOS.
977
978@item
979The @samp{which-key} package from GNU ELPA is now included in Emacs.
980After enabling the minor mode mode @code{which-key-mode}, if you enter
981@kbd{C-x} and wait for one second, the minibuffer will expand with all
982available key bindings that follow @kbd{C-x} (or as many as space
983allows).
984
985@item
986New global minor mode @code{kill-ring-deindent-mode}. When enabled,
987text being saved to the kill ring will be de-indented by the column
988number at its start.
989
990@item
991New minor mode @code{visual-wrap-prefix-mode}. Unlike @kbd{M-q}, the
992indentation only happens on display, and doesn't change the buffer text
993in any way.
994
995@item
996Automatic regeneration of TAGS files using the new global minor mode
997@code{etags-regen-mode}.
998
999@item
1000Improved warnings from the byte-code compiler to aid Lisp developers.
1001
1002@item
1003Support for underline colors on TTY frames.
1004
1005@end itemize
1006
1007
923@node New in Emacs 29 1008@node New in Emacs 29
924@section What is different about Emacs 29? 1009@section What is different about Emacs 29?
925@cindex Differences between Emacs 28 and Emacs 29 1010@cindex Differences between Emacs 28 and Emacs 29
@@ -929,6 +1014,9 @@ Here's a list of the most important changes in Emacs 29 as compared to
929Emacs 28 (the full list is too long, and can be read in the Emacs 1014Emacs 28 (the full list is too long, and can be read in the Emacs
930@file{NEWS} file by typing @kbd{C-h n} inside Emacs). 1015@file{NEWS} file by typing @kbd{C-h n} inside Emacs).
931 1016
1017Note that Emacs 29.3 and 29.4 both contained important security fixes.
1018Upgrading is particularly important if you use Emacs as a mail client.
1019
932@itemize 1020@itemize
933@item 1021@item
934Emacs can now be built with the 1022Emacs can now be built with the
@@ -3577,6 +3665,21 @@ you use the package system (e.g. @code{M-x list-packages}) with third
3577party archives. Use only third parties that you can trust! 3665party archives. Use only third parties that you can trust!
3578 3666
3579@item 3667@item
3668Using an out-of-date Emacs version.
3669
3670For security purposes, we recommend always using the latest officially
3671released version of Emacs. Using old versions of Emacs might put your
3672security at risk, as newer versions occasionally include important
3673security fixes. Please review the Emacs release notes and the
3674@file{etc/NEWS} file for details.
3675
3676Upgrading to the most recent version is particularly important if you
3677use Emacs as a mail client, or to edit files that come from untrusted
3678sources. You should be able to install the latest version of Emacs
3679through your system's package manager, and it is always available at
3680@uref{https://www.gnu.org/software/emacs/, the Emacs website}.
3681
3682@item
3580The @code{file-local-variable} feature. (Yes, a risk, but easy to 3683The @code{file-local-variable} feature. (Yes, a risk, but easy to
3581change.) 3684change.)
3582 3685
diff --git a/doc/misc/transient.texi b/doc/misc/transient.texi
index 407b55ee017..22db4e82143 100644
--- a/doc/misc/transient.texi
+++ b/doc/misc/transient.texi
@@ -1208,7 +1208,10 @@ prefix's @code{transient--layout} property, but it is often more convenient
1208to use the same form as understood by @code{transient-define-prefix}, 1208to use the same form as understood by @code{transient-define-prefix},
1209described below. If you use the latter approach, you can use the 1209described below. If you use the latter approach, you can use the
1210@code{transient-parse-suffixes} and @code{transient-parse-suffix} functions to 1210@code{transient-parse-suffixes} and @code{transient-parse-suffix} functions to
1211transform them from the convenient to the expected form. 1211transform them from the convenient to the expected form. Depending
1212on the used group class, @code{transient-parse-suffixes}'s SUFFIXES must be
1213a list of group vectors (for @code{transient-columns}) or a list of suffix
1214lists (for all other group classes).
1212 1215
1213If you explicitly specify children and then transform them using 1216If you explicitly specify children and then transform them using
1214@code{:setup-children}, then the class of the group is determined as usual, 1217@code{:setup-children}, then the class of the group is determined as usual,
@@ -1220,6 +1223,32 @@ For backward compatibility, if you fail to do so, @code{transient-column}
1220is used and a warning is displayed. This warning will eventually 1223is used and a warning is displayed. This warning will eventually
1221be replaced with an error. 1224be replaced with an error.
1222 1225
1226@lisp
1227(transient-define-prefix my-finder-by-keyword ()
1228 "Select a keyword and list matching packages."
1229 ;; The real `finder-by-keyword' is more convenient
1230 ;; of course, but that is not the point here.
1231 [:class transient-columns
1232 :setup-children
1233 (lambda (_)
1234 (transient-parse-suffixes
1235 'my-finder-by-keyword
1236 (let ((char (1- ?A)))
1237 (mapcar ; a list ...
1238 (lambda (partition)
1239 (vconcat ; of group vectors ...
1240 (mapcar (lambda (elt)
1241 (let ((keyword (symbol-name (car elt))))
1242 ; ... where each suffix is a list
1243 (list (format "%c" (cl-incf char))
1244 keyword
1245 (lambda ()
1246 (interactive)
1247 (finder-list-matches keyword)))))
1248 partition)))
1249 (seq-partition finder-known-keywords 7)))))])
1250@end lisp
1251
1223@item 1252@item
1224The boolean @code{:pad-keys} argument controls whether keys of all suffixes 1253The boolean @code{:pad-keys} argument controls whether keys of all suffixes
1225contained in a group are right padded, effectively aligning the 1254contained in a group are right padded, effectively aligning the
diff --git a/etc/NEWS.30 b/etc/NEWS.30
index 8f689327bea..d5409d139dc 100644
--- a/etc/NEWS.30
+++ b/etc/NEWS.30
@@ -71,6 +71,16 @@ arranges for Emacs to be the default application for the 'org-protocol'
71URI scheme. See the Org mode manual, Info node "(org) Protocols" for 71URI scheme. See the Org mode manual, Info node "(org) Protocols" for
72more details. 72more details.
73 73
74---
75** New variable lets Lisp code read emacsclient arguments.
76When '--eval' is passed to emacsclient and Emacs is evaluating each
77argument, the new variable 'server-eval-args-left' is set to those
78arguments not yet evaluated. It can be used by Lisp code to 'pop'
79arguments and process them by the function called in the '--eval'
80expression, which is useful when those arguments contain arbitrary
81characters that otherwise might require elaborate and error-prone
82escaping (to protect them from the shell).
83
74 84
75* Incompatible Changes in Emacs 30.1 85* Incompatible Changes in Emacs 30.1
76 86
@@ -94,18 +104,6 @@ The old variables 'mouse-wheel-up-event', 'mouse-wheel-down-event',
94obsolete. 104obsolete.
95 105
96+++ 106+++
97** URL now never sends user email addresses in HTTP requests.
98Emacs never sent email addresses by default, but it used to be
99possible to customize 'url-privacy-level' so that the users email
100address was sent along in HTTP requests. This feature has now been
101removed, as it was considered more dangerous than useful. RFC 9110
102(§ 10.1.2) also recommends against it. The user option
103'url-personal-mail-address' is now also obsolete.
104
105To send an email address in the header of individual HTTP requests,
106see the variable 'url-request-extra-headers'.
107
108+++
109** 'completion-auto-help' now affects 'icomplete-in-buffer'. 107** 'completion-auto-help' now affects 'icomplete-in-buffer'.
110Previously, 'completion-auto-help' mostly affected only minibuffer 108Previously, 'completion-auto-help' mostly affected only minibuffer
111completion. Now, if 'completion-auto-help' has the value 'lazy', then 109completion. Now, if 'completion-auto-help' has the value 'lazy', then
@@ -122,7 +120,7 @@ appear when using 'icomplete-in-buffer'. Now the "*Completions*" buffer
122and Icomplete's in-buffer display of possible completions always 120and Icomplete's in-buffer display of possible completions always
123appear together. If you would prefer to see only Icomplete's 121appear together. If you would prefer to see only Icomplete's
124in-buffer display, and not the "*Completions*" buffer, you can add this 122in-buffer display, and not the "*Completions*" buffer, you can add this
125to your init: 123to your init file:
126 124
127 (advice-add 'completion-at-point :after #'minibuffer-hide-completions) 125 (advice-add 'completion-at-point :after #'minibuffer-hide-completions)
128 126
@@ -132,98 +130,68 @@ The round-trip through the Lisp function
132the default one. It's reimplemented in native code, reducing GC churn. 130the default one. It's reimplemented in native code, reducing GC churn.
133To undo this change, set 'fast-read-process-output' to nil. 131To undo this change, set 'fast-read-process-output' to nil.
134 132
135
136* Changes in Emacs 30.1
137
138** 'advice-remove' is now an interactive command.
139When called interactively, 'advice-remove' now prompts for an advised
140function to the advice to remove.
141
142** Emacs now supports Unicode Standard version 15.1.
143
144** New pre-defined values for 'electric-quote-chars'.
145The available customization options for 'electric-quote-chars' have been
146updated with common pairs of quotation characters, including "‘", "’",
147"“", "”", "«", "»", "‹", "›", "‚", "„", "「", "」", "『", and "』".
148The default is unchanged.
149
150** Network Security Manager
151
152+++ 133+++
153*** The Network Security Manager now warns about 3DES by default. 134** The Network Security Manager now warns about 3DES by default.
154This cypher is no longer recommended owing to a major vulnerability 135This cypher is no longer recommended owing to a major vulnerability
155disclosed in 2016, and its small 112 bit key size. Emacs now warns 136disclosed in 2016, and its small 112 bit key size. Emacs now warns
156about its use also when 'network-security-level' is set to 'medium' 137about its use also when 'network-security-level' is set to 'medium'
157(the default). See 'network-security-protocol-checks'. 138(the default). See 'network-security-protocol-checks'.
158 139
159--- 140---
160*** The Network Security Manager now warns about <2048 bits in DH key exchange. 141** The Network Security Manager now warns about <2048 bits in DH key exchange.
161Emacs used to warn for Diffie-Hellman key exchanges with prime numbers 142Emacs used to warn for Diffie-Hellman key exchanges with prime numbers
162smaller than 1024 bits. Since more servers now support it, this 143smaller than 1024 bits. Since more servers now support it, this
163number has been bumped to 2048 bits. 144number has been bumped to 2048 bits.
164 145
165** Help
166
167+++ 146+++
168*** New command 'help-find-source'. 147** URL now never sends user email addresses in HTTP requests.
169Switch to a buffer visiting the source of what is being described in 148Emacs never sent email addresses by default, but it used to be
170"*Help*". It is bound to 'C-h 4 s' globally. 149possible to customize 'url-privacy-level' so that the users email
171 150address was sent along in HTTP requests. This feature has now been
172*** 'describe-function' shows function inferred type when available. 151removed, as it was considered more dangerous than useful. RFC 9110
173For native compiled Lisp functions 'describe-function' prints (after 152(§ 10.1.2) also recommends against it. The user option
174the signature) the automatically inferred function type as well. 153'url-personal-mail-address' is now also obsolete.
175
176*** 'describe-function' now shows the type of the function object.
177The text used to say things like "car is is a built-in function" whereas
178it now says "car is a primitive-function" where "primitive-function" is
179the symbol returned by 'cl-type-of'. You can click on those words to
180get information about that type.
181
182---
183*** New user option 'describe-bindings-outline-rules'.
184This user option controls outline visibility in the output buffer of
185'describe-bindings' when 'describe-bindings-outline' is non-nil.
186
187---
188*** 'C-h m' ('describe-mode') uses outlining by default.
189Set 'describe-mode-outline' to nil to get back the old behavior.
190
191*** 'C-h k' ('describe-key') shows Unicode name.
192For keybindings which produce single characters via translation or input
193methods, 'C-h k' now shows the Unicode name of the produced character in
194addition to the character itself, e.g.
195
196'C-h k C-x 8 E' =>
197
198 € 'EURO SIGN' (translated from C-x 8 E)
199 154
200*** 'C-h b' ('describe-bindings') shows Unicode names. 155To send an email address in the header of individual HTTP requests,
201For keybindings which produce single characters via translation (such as 156see the variable 'url-request-extra-headers'.
202those using the 'C-x 8' or 'A-' prefix, or 'dead-acute', 'dead-grave',
203etc), the Unicode names will now be shown in addition to the character
204itself, i.e.
205 157
206 A-! ¡ INVERTED EXCLAMATION MARK 158
207 A-$ ¤ CURRENCY SIGN 159* Changes in Emacs 30.1
208 160
209and so on. 161** Emacs now supports Unicode Standard version 15.1.
210 162
211+++ 163+++
212*** Multi-character key echo now ends with a suggestion to use Help. 164** Emacs now comes with Org v9.7.
213Customize 'echo-keystrokes-help' to nil to prevent that. 165See the file "etc/ORG-NEWS" for user-visible changes in Org.
214 166
215** Customize 167+++
168** Improved support for touchscreen devices.
169On systems that understand them (at present X, Android, PGTK, and
170MS-Windows), many touch screen gestures are now implemented and
171translated into mouse or gesture events, and support for tapping tool
172bar buttons and opening menus has been added. Countless packages, such
173as Dired and Custom, have been adjusted to better understand touch
174screen input.
216 175
217+++ 176+++
218*** New command 'customize-dirlocals'. 177** Support for styled underline face attributes.
219This command pops up a buffer to edit the settings in ".dir-locals.el". 178These are implemented as new values of the 'style' attribute in a face
179underline specification, 'double-line', 'dots', and 'dashes', and are
180available on GUI systems. If your terminal's termcap or terminfo
181database entry defines the 'Su' or 'Smulx' capability, Emacs will also
182emit the prescribed escape sequence to render faces with such styles on
183TTY frames.
220 184
221--- 185---
222*** New command 'customize-toggle-option'. 186** Support for underline colors on TTY frames.
223This command can toggle boolean options for the duration of a session. 187Colors specified in face underlines will now also be displayed in TTY
188frames with the previously mentioned capabilities.
224 189
225** Emacs now comes with Org v9.7. 190** Modeline elements can now be right-aligned.
226See the file "etc/ORG-NEWS" for user-visible changes in Org. 191Anything following the symbol 'mode-line-format-right-align' in
192'mode-line-format' will be right-aligned. Exactly where it is
193right-aligned to is controlled by the new user option
194'mode-line-right-align-edge'.
227 195
228** X selection requests are now handled much faster and asynchronously. 196** X selection requests are now handled much faster and asynchronously.
229This means it should be less necessary to disable the likes of 197This means it should be less necessary to disable the likes of
@@ -236,90 +204,61 @@ compositing manager, Emacs will now redisplay such a frame even though
236'frame-visible-p' returns nil or 'icon' for it. This can happen, for 204'frame-visible-p' returns nil or 'icon' for it. This can happen, for
237example, as part of preview for iconified frames. 205example, as part of preview for iconified frames.
238 206
239---
240** New user option 'menu-bar-close-window'.
241When non-nil, selecting "Close" from the "File" menu or clicking
242"Close" in the tool bar will result in the current window being
243closed, if possible.
244
245+++ 207+++
246** New user option 'remote-file-name-inhibit-delete-by-moving-to-trash'. 208** Most file notification backends detect unmounting of a watched filesystem.
247When non-nil, this option suppresses moving remote files to the local 209The only exception is w32notify.
248trash when deleting. Default is nil.
249
250---
251** New user option 'remote-file-name-inhibit-auto-save'.
252If this user option is non-nil, 'auto-save-mode' will not auto-save
253remote buffers. The default is nil.
254
255+++
256** New user option 'remote-file-name-access-timeout'.
257When a positive number, this option limits the call of 'access-file'
258for remote files to this number of seconds. Default is nil.
259
260---
261** New icon images for general use.
262Several symbolic icons are added to "etc/images/symbols", including
263plus, minus, check-mark, star, etc.
264
265** Tool bars
266
267+++
268*** Tool bars can now be placed on the bottom on more systems.
269The 'tool-bar-position' frame parameter can be set to 'bottom' on all
270window systems other than Nextstep.
271
272+++
273*** New global minor mode 'modifier-bar-mode'.
274When this minor mode is enabled, buttons representing modifier keys
275are displayed along the tool bar.
276 210
277+++ 211+++
278*** New user option 'tool-bar-always-show-default'. 212** Image ':map' property is now recomputed when image is transformed.
279When non-nil, the tool bar at the top of a frame does not show buffer 213Now images with clickable maps work as expected after you run commands
280local customization of the tool bar. The default value is nil. 214such as 'image-increase-size', 'image-decrease-size', 'image-rotate',
281 215'image-flip-horizontally', and 'image-flip-vertically'.
282--- 216Set the new user option 'image-recompute-map-p' to nil to prevent Emacs
283** New user option 'uniquify-dirname-transform'. 217from recomputing image maps.
284This can be used to customize how buffer names are uniquified, by
285making arbitrary transforms on the buffer's directory name (whose
286components are used to uniquify buffer names when they clash). You
287can use this to distinguish between buffers visiting files with the
288same base name that belong to different projects by using the provided
289transform function 'project-uniquify-dirname-transform'.
290 218
291+++ 219** Minibuffer and Completions
292** CL Print
293 220
294+++ 221*** New commands 'previous-line-completion' and 'next-line-completion'.
295*** You can expand the "..." truncation everywhere. 222Bound to '<up>' and '<down>' arrow keys, respectively, they navigate
296The code that allowed "..." to be expanded in the "*Backtrace*" buffer 223the "*Completions*" buffer vertically by lines, wrapping at the
297should now work anywhere the data is generated by 'cl-print'. 224top/bottom when 'completion-auto-wrap' is non-nil.
298 225
299+++ 226*** New user option 'minibuffer-visible-completions'.
300*** The 'backtrace-ellipsis' button is replaced by 'cl-print-ellipsis'. 227When customized to non-nil, you can use arrow keys in the minibuffer
228to navigate the completions displayed in the "*Completions*" window.
229Typing 'RET' selects the highlighted candidate. 'C-g' hides the
230completions window. When the completions window is not visible,
231then all these keys have their usual meaning in the minibuffer.
232This option is supported for in-buffer completion as well.
301 233
302+++ 234*** Selected completion candidates are deselected on typing.
303*** hash-tables' contents can be expanded via the ellipsis. 235When you type at the minibuffer prompt, the current completion
236candidate will be un-highlighted, and point in the "*Completions*" window
237will be moved off that candidate. 'minibuffer-choose-completion'
238('M-RET') will still choose a previously-selected completion
239candidate, but the new command 'minibuffer-choose-completion-or-exit'
240(bound to 'RET' by 'minibuffer-visible-completions') will exit with
241the minibuffer contents instead. This deselection behavior can be
242controlled with the new user option 'completion-auto-deselect', which
243is t by default.
304 244
305+++ 245*** New value 'historical' for user option 'completions-sort'.
306*** Modes can control the expansion via 'cl-print-expand-ellipsis-function'. 246When 'completions-sort' is set to 'historical', completion candidates
247will be first sorted alphabetically, and then re-sorted by their order
248in the minibuffer history, with more recent candidates appearing first.
307 249
308+++ 250+++
309*** New setting 'raw' for 'cl-print-compiled'. 251*** 'completion-category-overrides' supports more metadata.
310This setting causes byte-compiled functions to be printed in full by 252The new supported completion properties are 'cycle-sort-function',
311'prin1'. A button on this output can be activated to disassemble the 253'display-sort-function', 'annotation-function', 'affixation-function',
312function. 254and 'group-function'. You can now customize them for any category in
255'completion-category-overrides' that will override the properties
256defined in completion metadata.
313 257
314+++ 258+++
315*** There is a new chapter in the CL manual documenting cl-print.el. 259*** 'completion-extra-properties' supports more metadata.
316See the Info node "(cl) Printing". 260The new supported completion properties are 'category',
317 261'group-function', 'display-sort-function', and 'cycle-sort-function'.
318** Modeline elements can now be right-aligned.
319Anything following the symbol 'mode-line-format-right-align' in
320'mode-line-format' will be right-aligned. Exactly where it is
321right-aligned to is controlled by the new user option
322'mode-line-right-align-edge'.
323 262
324** Windows 263** Windows
325 264
@@ -359,13 +298,6 @@ by adding '(category . symbol)' to the condition part of
359It specifies whether the window of the displayed buffer should be 298It specifies whether the window of the displayed buffer should be
360selected or deselected at the end of executing the current command. 299selected or deselected at the end of executing the current command.
361 300
362---
363*** User option 'display-comint-buffer-action' is now obsolete.
364You can use a '(category . comint)' condition in 'display-buffer-alist'
365to match buffers displayed by comint-related commands. Another
366user option 'display-tex-shell-buffer-action' is obsolete too
367for which you can use '(category . tex-shell)'.
368
369+++ 301+++
370*** New variable 'window-restore-killed-buffer-windows'. 302*** New variable 'window-restore-killed-buffer-windows'.
371It specifies how 'set-window-configuration' and 'window-state-put' 303It specifies how 'set-window-configuration' and 'window-state-put'
@@ -388,6 +320,30 @@ according to the context stored in a window parameter.
388are always created with a 'window-cursor-type' of t, which means to 320are always created with a 'window-cursor-type' of t, which means to
389consult the variable 'cursor-type' as before. 321consult the variable 'cursor-type' as before.
390 322
323---
324*** The user option 'display-comint-buffer-action' is now obsolete.
325You can use a '(category . comint)' condition in 'display-buffer-alist'
326to match buffers displayed by comint-related commands. Another
327user option 'display-tex-shell-buffer-action' is obsolete too
328for which you can use '(category . tex-shell)'.
329
330** Tool bars
331
332+++
333*** Tool bars can now be placed on the bottom on more systems.
334The 'tool-bar-position' frame parameter can be set to 'bottom' on all
335window systems other than macOS and GNUstep (Nextstep).
336
337+++
338*** New global minor mode 'modifier-bar-mode'.
339When this minor mode is enabled, buttons representing modifier keys
340are displayed along the tool bar.
341
342+++
343*** New user option 'tool-bar-always-show-default'.
344When non-nil, the tool bar at the top of a frame does not show buffer
345local customization of the tool bar. The default value is nil.
346
391** Tab Bars and Tab Lines 347** Tab Bars and Tab Lines
392 348
393--- 349---
@@ -410,6 +366,11 @@ It can be used to add, remove and reorder functions that change the
410appearance of every tab on the tab bar. 366appearance of every tab on the tab bar.
411 367
412--- 368---
369*** New user option 'tab-line-tabs-buffer-group-function'.
370It provides two choices to group tab buffers by major mode and by
371project name.
372
373---
413*** New hook 'tab-bar-tab-post-select-functions'. 374*** New hook 'tab-bar-tab-post-select-functions'.
414 375
415--- 376---
@@ -436,68 +397,106 @@ these buffers. You can drag the tabs and release at a new position
436to manually reorder the buffers on the tab line. 397to manually reorder the buffers on the tab line.
437 398
438--- 399---
439*** New user option 'tab-line-tabs-buffer-group-function'.
440It provides two choices to group tab buffers by major mode and by
441project name.
442
443---
444*** Buffers on group tabs are now sorted alphabetically. 400*** Buffers on group tabs are now sorted alphabetically.
445This will keep the fixed order of tabs, even after switching between 401This will keep the fixed order of tabs, even after switching between
446them. 402them.
447 403
404** Help
405
448+++ 406+++
449** New prefix argument for modifying directory-local variables. 407*** New command 'help-find-source'.
408Switch to a buffer visiting the source of what is being described in
409"*Help*". It is bound to 'C-h 4 s' globally.
410
411---
412*** New user option 'describe-bindings-outline-rules'.
413This user option controls outline visibility in the output buffer of
414'describe-bindings' when 'describe-bindings-outline' is non-nil.
415
416*** 'describe-function' shows function inferred type when available.
417For native compiled Lisp functions 'describe-function' prints (after
418the signature) the automatically inferred function type as well.
419
420*** 'describe-function' now shows the type of the function object.
421The text used to say things like "car is is a built-in function" whereas
422it now says "car is a primitive-function" where "primitive-function" is
423the symbol returned by 'cl-type-of'. You can click on those words to
424get information about that type.
425
426---
427*** 'C-h m' ('describe-mode') uses outlining by default.
428Set 'describe-mode-outline' to nil to get back the old behavior.
429
430*** 'C-h k' ('describe-key') shows Unicode name.
431For keybindings which produce single characters via translation or input
432methods, 'C-h k' now shows the Unicode name of the produced character in
433addition to the character itself, e.g.
434
435'C-h k C-x 8 E' =>
436
437 € 'EURO SIGN' (translated from C-x 8 E)
438
439*** 'C-h b' ('describe-bindings') shows Unicode names.
440For keybindings which produce single characters via translation (such as
441those using the 'C-x 8' or 'A-' prefix, or 'dead-acute', 'dead-grave',
442etc), the Unicode names will now be shown in addition to the character
443itself, i.e.
444
445 A-! ¡ INVERTED EXCLAMATION MARK
446 A-$ ¤ CURRENCY SIGN
447
448and so on.
449
450+++
451*** Multi-character key echo now ends with a suggestion to use Help.
452Customize 'echo-keystrokes-help' to nil to prevent that.
453
454** Customize
455
456+++
457*** New command 'customize-dirlocals'.
458This command pops up a buffer to edit the settings in ".dir-locals.el".
459
460---
461*** New command 'customize-toggle-option'.
462This command can toggle boolean options for the duration of a session.
463
464+++
465*** New prefix argument for modifying directory-local variables.
450The commands 'add-dir-local-variable', 'delete-dir-local-variable' and 466The commands 'add-dir-local-variable', 'delete-dir-local-variable' and
451'copy-file-locals-to-dir-locals' now take an optional prefix argument, 467'copy-file-locals-to-dir-locals' now take an optional prefix argument,
452to enter the file name you want to modify. 468to enter the file name you want to modify.
453 469
454** Emacs Server and Client 470*** New user option 'safe-local-variable-directories'.
471This user option names directories in which Emacs will treat all
472directory-local variables as safe.
455 473
456--- 474+++
457*** 'server-eval-args-left' can be used to pop and eval subsequent args. 475** CL Print
458When '--eval' is passed to emacsclient and Emacs is evaluating each
459argument, this variable is set to those arguments not yet evaluated.
460It can be used to 'pop' arguments and process them by the function
461called in the '--eval' expression, which is useful when those
462arguments contain arbitrary characters that otherwise might require
463elaborate and error-prone escaping (to protect them from the shell).
464 476
465+++ 477+++
466** 'recover-file' can show diffs between auto save file and current file. 478*** You can expand the "..." truncation everywhere.
467When answering the prompt with "diff" or "=", it now shows the diffs 479The code that allowed "..." to be expanded in the "*Backtrace*" buffer
468between the auto save file and the current file. 480should now work anywhere the data is generated by 'cl-print'.
469 481
470+++ 482+++
471** 'read-passwd' can toggle the visibility of passwords. 483*** The 'backtrace-ellipsis' button is replaced by 'cl-print-ellipsis'.
472Use 'TAB' in the minibuffer to show or hide the password. Likewise,
473there is an icon on the mode-line, which toggles the visibility of the
474password when clicking with 'mouse-1'.
475 484
476+++ 485+++
477** Support for styled underline face attributes. 486*** hash-tables' contents can be expanded via the ellipsis.
478These are implemented as new values of the 'style' attribute in a face
479underline specification, 'double-line', 'dots', and 'dashes', and are
480available on GUI systems. If your terminal's termcap or terminfo
481database entry defines the 'Su' or 'Smulx' capability, Emacs will also
482emit the prescribed escape sequence to render faces with such styles on
483TTY frames.
484 487
485--- 488+++
486** Support for underline colors on TTY frames. 489*** Modes can control the expansion via 'cl-print-expand-ellipsis-function'.
487Colors specified in face underlines will now also be displayed in TTY
488frames with the previously mentioned capabilities.
489 490
490+++ 491+++
491** Image ':map' property is now recomputed when image is transformed. 492*** New setting 'raw' for 'cl-print-compiled'.
492Now images with clickable maps work as expected after you run commands 493This setting causes byte-compiled functions to be printed in full by
493such as 'image-increase-size', 'image-decrease-size', 'image-rotate', 494'prin1'. A button on this output can be activated to disassemble the
494'image-flip-horizontally', and 'image-flip-vertically'. 495function.
495Set the new user option 'image-recompute-map-p' to nil to prevent Emacs
496from recomputing image maps.
497 496
498+++ 497+++
499** Most file notification backends detect unmounting of a watched filesystem. 498*** There is a new chapter in the CL manual documenting cl-print.el.
500The only exception is w32notify. 499See the Info node "(cl) Printing".
501 500
502** Miscellaneous 501** Miscellaneous
503 502
@@ -506,14 +505,44 @@ The only exception is w32notify.
506This works like 'kill-matching-buffers', but without asking for 505This works like 'kill-matching-buffers', but without asking for
507confirmation. 506confirmation.
508 507
509*** New user option 'safe-local-variable-directories'. 508+++
510This user option names directories in which Emacs will treat all 509*** 'recover-file' can show diffs between auto save file and current file.
511directory-local variables as safe. 510When answering the prompt with "diff" or "=", it now shows the diffs
511between the auto save file and the current file.
512
513+++
514*** 'read-passwd' can toggle the visibility of passwords.
515Use 'TAB' in the minibuffer to show or hide the password. Likewise,
516there is an icon on the mode-line, which toggles the visibility of the
517password when clicking with 'mouse-1'.
518
519*** 'advice-remove' is now an interactive command.
520When called interactively, 'advice-remove' now prompts for an advised
521function to the advice to remove.
512 522
513--- 523---
514*** New face 'appt-notification' for 'appt-display-mode-line'. 524*** New user option 'uniquify-dirname-transform'.
515It can be used to customize the look of the appointment notification 525This can be used to customize how buffer names are uniquified, by
516displayed on the mode line when 'appt-display-mode-line' is non-nil. 526making arbitrary transforms on the buffer's directory name (whose
527components are used to uniquify buffer names when they clash). You
528can use this to distinguish between buffers visiting files with the
529same base name that belong to different projects by using the provided
530transform function 'project-uniquify-dirname-transform'.
531
532+++
533*** New user option 'remote-file-name-inhibit-delete-by-moving-to-trash'.
534When non-nil, this option suppresses moving remote files to the local
535trash when deleting. Default is nil.
536
537---
538*** New user option 'remote-file-name-inhibit-auto-save'.
539If this user option is non-nil, 'auto-save-mode' will not auto-save
540remote buffers. The default is nil.
541
542+++
543*** New user option 'remote-file-name-access-timeout'.
544When a positive number, this option limits the call of 'access-file'
545for remote files to this number of seconds. Default is nil.
517 546
518+++ 547+++
519*** New user option 'yes-or-no-prompt'. 548*** New user option 'yes-or-no-prompt'.
@@ -522,22 +551,32 @@ This allows the user to customize the prompt that is appended by
522"(yes or no) ". 551"(yes or no) ".
523 552
524--- 553---
554*** New user option 'menu-bar-close-window'.
555When non-nil, selecting "Close" from the "File" menu or clicking
556"Close" in the tool bar will result in the current window being
557closed, if possible.
558
559---
525*** New face 'display-time-date-and-time'. 560*** New face 'display-time-date-and-time'.
526This is used for displaying the time and date components of 561This is used for displaying the time and date components of
527'display-time-mode'. 562'display-time-mode'.
528 563
529--- 564---
565*** New face 'appt-notification' for 'appt-display-mode-line'.
566It can be used to customize the look of the appointment notification
567displayed on the mode line when 'appt-display-mode-line' is non-nil.
568
569---
570*** New icon images for general use.
571Several symbolic icons have been added to "etc/images/symbols",
572including plus, minus, check-mark, star, etc.
573
574---
530*** Emacs now recognizes shebang lines that pass '-S'/'--split-string' to 'env'. 575*** Emacs now recognizes shebang lines that pass '-S'/'--split-string' to 'env'.
531When visiting a script that invokes 'env -S INTERPRETER ARGS...' in 576When visiting a script that invokes 'env -S INTERPRETER ARGS...' in
532its shebang line, Emacs will now skip over 'env -S' and deduce the 577its shebang line, Emacs will now skip over 'env -S' and deduce the
533major mode based on the interpreter after 'env -S'. 578major mode based on the interpreter after 'env -S'.
534 579
535+++
536*** New function 'sqlite-execute-batch'.
537This function lets the user execute multiple SQL statements in one go.
538It is useful, for example, when a Lisp program needs to evaluate an
539entire SQL file.
540
541*** 'insert-directory-program' is now a user option. 580*** 'insert-directory-program' is now a user option.
542On *BSD and macOS systems, this user option now defaults to the "gls" 581On *BSD and macOS systems, this user option now defaults to the "gls"
543executable, if it exists. This should remove the need to change its 582executable, if it exists. This should remove the need to change its
@@ -574,28 +613,6 @@ buffers.
574(This minor mode is the 'adaptive-wrap' ELPA package renamed and 613(This minor mode is the 'adaptive-wrap' ELPA package renamed and
575lightly edited for inclusion in Emacs.) 614lightly edited for inclusion in Emacs.)
576 615
577** New command 'replace-regexp-as-diff'.
578It reads a regexp to search for and a string to replace with, then
579displays a buffer with replacements as diffs. After reviewing the
580changes in the output buffer you can apply the replacements as
581a patch to the current file buffer. There are also new commands
582'multi-file-replace-regexp-as-diff' that shows as diffs replacements
583in a list of specified files, and 'dired-do-replace-regexp-as-diff'
584that shows as diffs replacements in the marked files in Dired.
585
586+++
587** New mode of prompting for register names and showing preview.
588The new user option 'register-use-preview' can be customized to the
589value t or insist to request a different user interface of prompting for
590register names and previewing the registers: Emacs will require
591confirmation for overwriting the value of a register, and will show
592the preview of registers without delay. You can also customize this
593new option to disable the preview completely.
594
595The default value of 'register-use-preview' preserves the behavior of
596Emacs 29 and before. See the Info node "(emacs) Registers" for more
597details about the new UI and its variants.
598
599--- 616---
600** New global minor mode 'kill-ring-deindent-mode'. 617** New global minor mode 'kill-ring-deindent-mode'.
601When enabled, text being saved to the kill ring will be de-indented by 618When enabled, text being saved to the kill ring will be de-indented by
@@ -619,34 +636,39 @@ to the kill ring, omitting the two columns of extra indentation that
619would otherwise be present in the second and third lines of the 636would otherwise be present in the second and third lines of the
620function call. 637function call.
621 638
639** New command 'replace-regexp-as-diff'.
640It reads a regexp to search for and a string to replace with, then
641displays a buffer with replacements as diffs. After reviewing the
642changes in the output buffer you can apply the replacements as
643a patch to the current file buffer. There are also new commands
644'multi-file-replace-regexp-as-diff' that shows as diffs replacements
645in a list of specified files, and 'dired-do-replace-regexp-as-diff'
646that shows as diffs replacements in the marked files in Dired.
647
622+++ 648+++
623** Emacs now has better support for touchscreen devices. 649** New mode of prompting for register names and showing preview.
624On systems that understand them (at present X, Android, PGTK, and 650The new user option 'register-use-preview' can be customized to the
625MS-Windows), many touch screen gestures are now implemented and 651value t or insist to request a different user interface of prompting for
626translated into mouse or gesture events, and support for tapping tool 652register names and previewing the registers: Emacs will require
627bar buttons and opening menus has been written. Countless packages, 653confirmation for overwriting the value of a register, and will show
628such as Dired and Custom have been adjusted to better understand touch 654the preview of registers without delay. You can also customize this
629screen input. 655new option to disable the preview completely.
630 656
631--- 657The default value of 'register-use-preview' preserves the behavior of
632** On X, Emacs now supports input methods which perform "string conversion". 658Emacs 29 and before. See the Info node "(emacs) Registers" for more
633This means an input method can now ask Emacs to delete text 659details about the new UI and its variants.
634surrounding point and replace it with something else, as well as query
635Emacs for surrounding text. If your input method allows you to "undo"
636mistaken compositions, this will now work as well.
637 660
638+++ 661+++
639** New Advanced Macro Counter functions. 662** New advanced macro counter commands.
640New commands have been added to implement advanced macro counter 663New commands have been added to implement advanced macro counter
641functions. 664functions.
642 665
643The commands 'C-x C-k C-r l' and 'C-x C-k C-r s' load and save the 666The commands 'C-x C-k C-r l' and 'C-x C-k C-r s' load and save the
644macro counter from and to a number register, respectively. 667macro counter from and to a number register, respectively.
645 668
646The commands 'C-x C-k C-r a =', 'C-x C-k C-r a <', and 669The commands 'C-x C-k C-r a =', 'C-x C-k C-r a <', and 'C-x C-k C-r a >'
647'C-x C-k C-r a >' compare the macro counter with the contents of a 670compare the macro counter with the contents of a number register and
648number register and increment the counter by an optional prefix if the 671increment the counter by an optional prefix if the comparison succeeds.
649comparison succeeds.
650 672
651The commands 'C-x C-k C-q =', 'C-x C-k C-q <', and 'C-x C-k C-q >' 673The commands 'C-x C-k C-q =', 'C-x C-k C-q <', and 'C-x C-k C-q >'
652compare the macro counter with an optional prefix and terminate the 674compare the macro counter with an optional prefix and terminate the
@@ -662,6 +684,13 @@ duplicating them, deleting them, and editing their counters, formats,
662and keys. 684and keys.
663 685
664--- 686---
687** On X, Emacs now supports input methods which perform "string conversion".
688This means an input method can now ask Emacs to delete text
689surrounding point and replace it with something else, as well as query
690Emacs for surrounding text. If your input method allows you to "undo"
691mistaken compositions, this will now work as well.
692
693---
665** New user option 'duplicate-region-final-position'. 694** New user option 'duplicate-region-final-position'.
666It controls the placement of point and the region after duplicating a 695It controls the placement of point and the region after duplicating a
667region with 'duplicate-dwim'. 696region with 'duplicate-dwim'.
@@ -677,6 +706,37 @@ whereas if the mouse pointer is in the left half of a glyph, point
677will be put in front the buffer position corresponding to that glyph. 706will be put in front the buffer position corresponding to that glyph.
678By default this is disabled. 707By default this is disabled.
679 708
709** New pre-defined values for 'electric-quote-chars'.
710The available customization options for 'electric-quote-chars' have been
711updated with common pairs of quotation characters, including "‘", "’",
712"“", "”", "«", "»", "‹", "›", "‚", "„", "「", "」", "『", and "』".
713The default is unchanged.
714
715+++
716** 'M-TAB' now invokes 'completion-at-point' also in Text mode.
717By default, Text mode no longer binds 'M-TAB' to 'ispell-complete-word'.
718Instead, this mode arranges for 'completion-at-point', globally bound to
719'M-TAB', to perform word completion as well. You can have Text mode
720bind 'M-TAB' to 'ispell-complete-word' as it did in previous Emacs
721versions, or disable Ispell word completion in Text mode altogether, by
722customizing the new user option 'text-mode-ispell-word-completion'.
723
724---
725** Mode-line mnemonics for some coding-systems have changed.
726The mode-line mnemonic for 'utf-7' is now the lowercase 'u', to be
727consistent with the other encodings of this family.
728
729The mode-line mnemonic for 'koi8-u' is now 'У', U+0423 CYRILLIC
730CAPITAL LETTER U, to distinguish between this encoding and the
731UTF-8/UTF-16 family.
732
733If your terminal cannot display 'У', or if you want to get the old
734behavior back for any other reason, you can do that using the
735'coding-system-put' function. For example, the following restores the
736previous behavior of showing 'U' in the mode line for 'koi8-u':
737
738 (coding-system-put 'koi8-u :mnemonic ?U)
739
680** Internationalization 740** Internationalization
681 741
682--- 742---
@@ -746,16 +806,6 @@ This can now be entered using 'C-x 8 E' in addition to the existing
746 806
747* Changes in Specialized Modes and Packages in Emacs 30.1 807* Changes in Specialized Modes and Packages in Emacs 30.1
748 808
749---
750** Trace
751In batch mode, tracing now sends the trace to stdout.
752
753** Xterm Mouse mode
754This mode now emits 'wheel-up/down/right/left' events instead of
755'mouse-4/5/6/7' events for the mouse wheel.
756It uses the new variable 'mouse-wheel-buttons' to decide which button
757maps to which wheel event (if any).
758
759** Outline mode 809** Outline mode
760 810
761*** New commands to show/hide outlines by regexp. 811*** New commands to show/hide outlines by regexp.
@@ -769,7 +819,6 @@ shows the matched outlines.
769It can be used in all tree-sitter major modes that set either the 819It can be used in all tree-sitter major modes that set either the
770variable 'treesit-simple-imenu-settings' or 'treesit-outline-predicate'. 820variable 'treesit-simple-imenu-settings' or 'treesit-outline-predicate'.
771 821
772
773** Info 822** Info
774 823
775--- 824---
@@ -823,8 +872,7 @@ default is t, to preserve previous behavior.
823When non-nil, the output of Grep is split into sections, one for each 872When non-nil, the output of Grep is split into sections, one for each
824file, instead of having file names prefixed to each line. It is 873file, instead of having file names prefixed to each line. It is
825equivalent to the "--heading" option of some tools such as 'git grep' 874equivalent to the "--heading" option of some tools such as 'git grep'
826and 'rg'. The headings are displayed using the new 'grep-heading' 875and 'rg'. The headings are displayed using the new 'grep-heading' face.
827face.
828 876
829** Compilation mode 877** Compilation mode
830 878
@@ -1135,50 +1183,6 @@ If non-nil, each Eshell session will save history by appending new
1135entries of that session to the history file rather than overwriting 1183entries of that session to the history file rather than overwriting
1136the file with the whole history of the session. The default is nil. 1184the file with the whole history of the session. The default is nil.
1137 1185
1138** Minibuffer and Completions
1139
1140*** New commands 'previous-line-completion' and 'next-line-completion'.
1141Bound to '<up>' and '<down>' arrow keys, respectively, they navigate
1142the "*Completions*" buffer vertically by lines, wrapping at the
1143top/bottom when 'completion-auto-wrap' is non-nil.
1144
1145*** New user option 'minibuffer-visible-completions'.
1146When customized to non-nil, you can use arrow keys in the minibuffer
1147to navigate the completions displayed in the "*Completions*" window.
1148Typing 'RET' selects the highlighted candidate. 'C-g' hides the
1149completions window. When the completions window is not visible,
1150then all these keys have their usual meaning in the minibuffer.
1151This option is supported for in-buffer completion as well.
1152
1153*** Selected completion candidates are deselected on typing.
1154When you type at the minibuffer prompt, the current completion
1155candidate will be un-highlighted, and point in the "*Completions*" window
1156will be moved off that candidate. 'minibuffer-choose-completion'
1157('M-RET') will still choose a previously-selected completion
1158candidate, but the new command 'minibuffer-choose-completion-or-exit'
1159(bound to 'RET' by 'minibuffer-visible-completions') will exit with
1160the minibuffer contents instead. This deselection behavior can be
1161controlled with the new user option 'completion-auto-deselect', which
1162is t by default.
1163
1164*** New value 'historical' for user option 'completions-sort'.
1165When 'completions-sort' is set to 'historical', completion candidates
1166will be first sorted alphabetically, and then re-sorted by their order
1167in the minibuffer history, with more recent candidates appearing first.
1168
1169+++
1170*** 'completion-category-overrides' supports more metadata.
1171The new supported completion properties are 'cycle-sort-function',
1172'display-sort-function', 'annotation-function', 'affixation-function',
1173and 'group-function'. You can now customize them for any category in
1174'completion-category-overrides' that will override the properties
1175defined in completion metadata.
1176
1177+++
1178*** 'completion-extra-properties' supports more metadata.
1179The new supported completion properties are 'category',
1180'group-function', 'display-sort-function', and 'cycle-sort-function'.
1181
1182** Pcomplete 1186** Pcomplete
1183 1187
1184--- 1188---
@@ -1221,9 +1225,9 @@ To restore the old behavior, set 'comint-password-prompt-max-length' to
1221+++ 1225+++
1222*** New command 'prog-fill-reindent-defun'. 1226*** New command 'prog-fill-reindent-defun'.
1223This command either fills a single paragraph in a defun, such as a 1227This command either fills a single paragraph in a defun, such as a
1224docstring, or a comment, or (re)indents the surrounding defun if 1228docstring, or a comment, or (re)indents the surrounding defun if point
1225point is not in a comment or a string. It is by default bound to 1229is not in a comment or a string. By default, it is bound to 'M-q' in
1226'M-q' in 'prog-mode' and all its descendants. 1230'prog-mode' and all its descendants.
1227 1231
1228** Imenu 1232** Imenu
1229 1233
@@ -1775,16 +1779,6 @@ Similarly to buffer restoration by Desktop, 'recentf-mode' checking
1775of the accessibility of remote files can now time out if 1779of the accessibility of remote files can now time out if
1776'remote-file-name-access-timeout' is set to a positive number. 1780'remote-file-name-access-timeout' is set to a positive number.
1777 1781
1778** Notifications
1779
1780+++
1781*** Allow using Icon Naming Specification for ':app-icon'.
1782You can use a symbol as the value for ':app-icon' to provide icon name
1783without specifying a file, like this:
1784
1785 (notifications-notify
1786 :title "I am playing music" :app-icon 'multimedia-player)
1787
1788** Image Dired 1782** Image Dired
1789 1783
1790*** New user option 'image-dired-thumb-naming'. 1784*** New user option 'image-dired-thumb-naming'.
@@ -1896,7 +1890,6 @@ will return the URL for that bug.
1896 1890
1897** Miscellaneous 1891** Miscellaneous
1898 1892
1899---
1900+++ 1893+++
1901*** New user option 'rcirc-log-time-format'. 1894*** New user option 'rcirc-log-time-format'.
1902This allows for rcirc logs to use a custom timestamp format, than the 1895This allows for rcirc logs to use a custom timestamp format, than the
@@ -1953,6 +1946,7 @@ options of GNU 'ls'.
1953Typing 'C-u M-x ping' prompts first for the host, and then for the flags 1946Typing 'C-u M-x ping' prompts first for the host, and then for the flags
1954to give to "ping". 1947to give to "ping".
1955 1948
1949---
1956*** Webjump now assumes URIs are HTTPS instead of HTTP. 1950*** Webjump now assumes URIs are HTTPS instead of HTTP.
1957For links in 'webjump-sites' without an explicit URI scheme, it was 1951For links in 'webjump-sites' without an explicit URI scheme, it was
1958previously assumed that they should be prefixed with "http://". Such 1952previously assumed that they should be prefixed with "http://". Such
@@ -2094,9 +2088,12 @@ preventing the installation of Compat if unnecessary.
2094 2088
2095* Incompatible Lisp Changes in Emacs 30.1 2089* Incompatible Lisp Changes in Emacs 30.1
2096 2090
2097--- 2091** Bytecode is now always loaded eagerly.
2098** 'subr-native-elisp-p' is renamed to 'native-comp-function-p'. 2092Bytecode compiled with older Emacs versions for lazy loading using
2099The previous name still exists but is marked as obsolete. 2093'byte-compile-dynamic' is now loaded all at once.
2094As a consequence, 'fetch-bytecode' has no use, does nothing, and is
2095now obsolete. The variable 'byte-compile-dynamic' has no effect any
2096more; compilation will always yield bytecode for eager loading.
2100 2097
2101+++ 2098+++
2102** Evaluating a 'lambda' returns an object of type 'interpreted-function'. 2099** Evaluating a 'lambda' returns an object of type 'interpreted-function'.
@@ -2116,6 +2113,219 @@ various subparts (when 'interactive-form', 'documentation', and
2116'help-function-arglist' aren't adequate). 2113'help-function-arglist' aren't adequate).
2117 2114
2118+++ 2115+++
2116** Returned strings from functions and macros are never docstrings.
2117Functions and macros whose bodies consist of a single string literal now
2118only return that string; it is not used as a docstring. Example:
2119
2120 (defun sing-a-song ()
2121 "Sing a song.")
2122
2123The above function returns the string '"Sing a song."' but has no
2124docstring. Previously, that string was used as both a docstring and
2125return value, which was never what the programmer wanted. If you want
2126the string to be a docstring, add an explicit return value.
2127
2128This change applies to 'defun', 'defsubst', 'defmacro' and 'lambda'
2129forms; other defining forms such as 'cl-defun' already worked this way.
2130
2131** New or changed byte-compilation warnings
2132
2133---
2134*** Warn about missing 'lexical-binding' directive.
2135The compiler now warns if an Elisp file lacks the standard
2136'-*- lexical-binding: ... -*-' cookie on the first line.
2137This line typically looks something like
2138
2139 ;;; My little pony mode -*- lexical-binding: t -*-
2140
2141It is needed to inform the compiler about which dialect of ELisp
2142your code is using: the modern dialect with lexical binding or
2143the old dialect with only dynamic binding.
2144
2145Lexical binding avoids some name conflicts and allows the compiler to
2146detect more mistakes and generate more efficient code, so it is
2147recommended. For how to adapt your code to lexical binding, see the
2148manual section "(elisp) Converting to Lexical Binding".
2149
2150If your code cannot be converted to lexical binding, you can insert
2151the line
2152
2153 ;;; -*- lexical-binding: nil -*-
2154
2155first in the file to declare that it uses the old dialect.
2156
2157---
2158*** Warn about empty bodies for more special forms and macros.
2159The compiler now warns about an empty body argument to 'when',
2160'unless', 'ignore-error' and 'with-suppressed-warnings' in addition to
2161the existing warnings for 'let' and 'let*'. Example:
2162
2163 (when (> x 2))
2164
2165This warning can be suppressed using 'with-suppressed-warnings' with
2166the warning name 'empty-body'.
2167
2168---
2169*** Warn about quoted error names in 'condition-case' and 'ignore-error'.
2170The compiler now warns about quoted condition (error) names
2171in 'condition-case' and 'ignore-error'. Example:
2172
2173 (condition-case nil
2174 (/ x y)
2175 ('arith-error "division by zero"))
2176
2177Quoting them adds the error name 'quote' to those handled or ignored
2178respectively, which was probably not intended.
2179
2180---
2181*** Warn about comparison with literal constants without defined identity.
2182The compiler now warns about comparisons by identity with a literal
2183string, cons, vector, record, function, large integer or float as this
2184may not match any value at all. Example:
2185
2186 (eq x "hello")
2187
2188Only literals for symbols and small integers (fixnums), including
2189characters, are guaranteed to have a consistent (unique) identity.
2190This warning applies to 'eq', 'eql', 'memq', 'memql', 'assq', 'rassq',
2191'remq' and 'delq'.
2192
2193To compare by (structural) value, use 'equal', 'member', 'assoc',
2194'rassoc', 'remove' or 'delete' instead. Floats and bignums can also
2195be compared using 'eql', '=' and 'memql'. Function literals cannot be
2196compared reliably at all.
2197
2198This warning can be suppressed using 'with-suppressed-warnings' with
2199the warning name 'suspicious'.
2200
2201---
2202*** Warn about 'condition-case' without handlers.
2203The compiler now warns when the 'condition-case' form is used without
2204any actual handlers, as in
2205
2206 (condition-case nil (read buffer))
2207
2208because it has no effect other than the execution of the body form.
2209In particular, no errors are caught or suppressed. If the intention
2210was to catch all errors, add an explicit handler for 'error', or use
2211'ignore-error' or 'ignore-errors'.
2212
2213This warning can be suppressed using 'with-suppressed-warnings' with
2214the warning name 'suspicious'.
2215
2216---
2217*** Warn about 'unwind-protect' without unwind forms.
2218The compiler now warns when the 'unwind-protect' form is used without
2219any unwind forms, as in
2220
2221 (unwind-protect (read buffer))
2222
2223because the behavior is identical to that of the argument; there is
2224no protection of any kind. Perhaps the intended unwind forms have
2225been misplaced or forgotten, or the use of 'unwind-protect' could be
2226simplified away.
2227
2228This warning can be suppressed using 'with-suppressed-warnings' with
2229the warning name 'suspicious'.
2230
2231---
2232*** Warn about useless trailing 'cond' clauses.
2233The compiler now warns when a 'cond' form contains clauses following a
2234default (unconditional) clause. Example:
2235
2236 (cond ((= x 0) (say "none"))
2237 (t (say "some"))
2238 (say "goodbye"))
2239
2240Such a clause will never be executed but is likely to be a mistake,
2241perhaps due to misplaced brackets.
2242
2243This warning can be suppressed using 'with-suppressed-warnings' with
2244the warning name 'suspicious'.
2245
2246---
2247*** Warn about mutation of constant values.
2248The compiler now warns about code that modifies program constants in
2249some obvious cases. Examples:
2250
2251 (setcar '(1 2) 7)
2252 (aset [3 4] 0 8)
2253 (aset "abc" 1 ?d)
2254
2255Such code may have unpredictable behavior because the constants are
2256part of the program, not data structures generated afresh during
2257execution, and the compiler does not expect them to change.
2258
2259To avoid the warning, operate on an object created by the program
2260(maybe a copy of the constant), or use a non-destructive operation
2261instead.
2262
2263This warning can be suppressed using 'with-suppressed-warnings' with
2264the warning name 'mutate-constant'.
2265
2266---
2267*** Warn about more ignored function return values.
2268The compiler now warns when the return value from certain functions is
2269implicitly ignored. Example:
2270
2271 (progn (nreverse my-list) my-list)
2272
2273will elicit a warning because it is usually pointless to call
2274'nreverse' on a list without using the returned value.
2275
2276To silence the warning, make use of the value in some way, such as
2277assigning it to a variable. You can also wrap the function call in
2278'(ignore ...)', or use 'with-suppressed-warnings' with the warning
2279name 'ignored-return-value'.
2280
2281The warning will only be issued for calls to functions declared
2282'important-return-value' or 'side-effect-free' (but not 'error-free').
2283
2284---
2285*** Warn about docstrings that contain control characters.
2286The compiler now warns about docstrings with control characters other
2287than newline and tab. This is often a result of improper escaping.
2288Example:
2289
2290 (defun my-fun ()
2291 "Uses c:\remote\dir\files and the key \C-x."
2292 ...)
2293
2294where the docstring contains the four control characters 'CR', 'DEL',
2295'FF' and 'C-x'.
2296
2297The warning name is 'docstrings-control-chars'.
2298
2299---
2300*** The warning about wide docstrings can now be disabled separately.
2301Its warning name is 'docstrings-wide'.
2302
2303+++
2304** 'fset', 'defalias' and 'defvaralias' now signal an error for cyclic aliases.
2305Previously, 'fset', 'defalias' and 'defvaralias' could be made to
2306build circular function and variable indirection chains as in
2307
2308 (defalias 'able 'baker)
2309 (defalias 'baker 'able)
2310
2311but trying to use them would sometimes make Emacs hang. Now, an attempt
2312to create such a loop results in an error.
2313
2314Since circular alias chains now cannot occur, 'function-alias-p',
2315'indirect-function' and 'indirect-variable' will never signal an error.
2316Their 'noerror' arguments have no effect and are therefore obsolete.
2317
2318---
2319** The escape sequence '\x' not followed by hex digits is now an error.
2320Previously, '\x' without at least one hex digit denoted character code
2321zero (NUL) but as this was neither intended nor documented or even
2322known by anyone, it is now treated as an error by the Lisp reader.
2323
2324---
2325** 'subr-native-elisp-p' is renamed to 'native-comp-function-p'.
2326The previous name still exists but is marked as obsolete.
2327
2328+++
2119** 'define-globalized-minor-mode' requires that modes use 'run-mode-hooks'. 2329** 'define-globalized-minor-mode' requires that modes use 'run-mode-hooks'.
2120Minor modes defined with 'define-globalized-minor-mode', such as 2330Minor modes defined with 'define-globalized-minor-mode', such as
2121'global-font-lock-mode', will not be enabled any more in those buffers 2331'global-font-lock-mode', will not be enabled any more in those buffers
@@ -2123,26 +2333,6 @@ whose major modes fail to use 'run-mode-hooks'. Major modes defined
2123with 'define-derived-mode' are not affected. 'run-mode-hooks' has been the 2333with 'define-derived-mode' are not affected. 'run-mode-hooks' has been the
2124recommended way to run major mode hooks since Emacs 22. 2334recommended way to run major mode hooks since Emacs 22.
2125 2335
2126---
2127** Old derived.el functions removed.
2128The following functions have been deleted because they were only used
2129by code compiled with Emacs<21:
2130'derived-mode-init-mode-variables', 'derived-mode-merge-abbrev-tables',
2131'derived-mode-merge-keymaps', 'derived-mode-merge-syntax-tables',
2132'derived-mode-run-hooks', 'derived-mode-set-abbrev-table',
2133'derived-mode-set-keymap', 'derived-mode-set-syntax-table',
2134'derived-mode-setup-function-name'.
2135
2136+++
2137** 'M-TAB' now invokes 'completion-at-point' also in Text mode.
2138By default, Text mode no longer binds 'M-TAB' to
2139'ispell-complete-word'. Instead, this mode arranges for
2140'completion-at-point', globally bound to 'M-TAB', to perform word
2141completion as well. You can have Text mode bind 'M-TAB' to
2142'ispell-complete-word' as it did in previous Emacs versions, or
2143disable Ispell word completion in Text mode altogether, by customizing
2144the new user option 'text-mode-ispell-word-completion'.
2145
2146** 'pp' and 'pp-to-string' now always include a terminating newline. 2336** 'pp' and 'pp-to-string' now always include a terminating newline.
2147In the past they included a terminating newline in most cases but not all. 2337In the past they included a terminating newline in most cases but not all.
2148 2338
@@ -2156,27 +2346,10 @@ supports it (with a warning) for backward compatibility.
2156** 'post-gc-hook' runs after updating 'gcs-done' and 'gcs-elapsed'. 2346** 'post-gc-hook' runs after updating 'gcs-done' and 'gcs-elapsed'.
2157 2347
2158--- 2348---
2159** The escape sequence '\x' not followed by hex digits is now an error.
2160Previously, '\x' without at least one hex digit denoted character code
2161zero (NUL) but as this was neither intended nor documented or even
2162known by anyone, it is now treated as an error by the Lisp reader.
2163
2164---
2165** Connection-local variables are applied in buffers visiting a remote file. 2349** Connection-local variables are applied in buffers visiting a remote file.
2166This overrides possible directory-local or file-local variables with 2350This overrides possible directory-local or file-local variables with
2167the same name. 2351the same name.
2168 2352
2169---
2170** User option 'tramp-completion-reread-directory-timeout' has been removed.
2171This user option has been obsoleted in Emacs 27, use
2172'remote-file-name-inhibit-cache' instead.
2173
2174---
2175** User options 'eshell-NAME-unload-hook' are now obsolete.
2176These hooks were named incorrectly, and so they never actually ran
2177when unloading the corresponding feature. Instead, you should use
2178hooks named after the feature name, like 'esh-mode-unload-hook'.
2179
2180+++ 2353+++
2181** 'copy-tree' now copies records when its optional 2nd argument is non-nil. 2354** 'copy-tree' now copies records when its optional 2nd argument is non-nil.
2182 2355
@@ -2189,22 +2362,6 @@ operator character following '^' or '\`' becomes literal, but we
2189advise against relying on this. 2362advise against relying on this.
2190 2363
2191--- 2364---
2192** Mode-line mnemonics for some coding-systems have changed.
2193The mode-line mnemonic for 'utf-7' is now the lowercase 'u', to be
2194consistent with the other encodings of this family.
2195
2196The mode-line mnemonic for 'koi8-u' is now 'У', U+0423 CYRILLIC
2197CAPITAL LETTER U, to distinguish between this encoding and the
2198UTF-8/UTF-16 family.
2199
2200If your terminal cannot display 'У', or if you want to get the old
2201behavior back for any other reason, you can do that using the
2202'coding-system-put' function. For example, the following restores the
2203previous behavior of showing 'U' in the mode line for 'koi8-u':
2204
2205 (coding-system-put 'koi8-u :mnemonic ?U)
2206
2207---
2208** 'vietnamese-tcvn' is now a coding system alias for 'vietnamese-vscii'. 2365** 'vietnamese-tcvn' is now a coding system alias for 'vietnamese-vscii'.
2209VSCII-1 and TCVN-5712 are different names for the same character 2366VSCII-1 and TCVN-5712 are different names for the same character
2210encoding. Therefore, the duplicate coding system definition has been 2367encoding. Therefore, the duplicate coding system definition has been
@@ -2222,25 +2379,6 @@ finite value, and a NaN with some other non-numeric object that
2222provokes an error if used numerically. 2379provokes an error if used numerically.
2223 2380
2224+++ 2381+++
2225** X color support compatibility aliases are now marked obsolete.
2226The compatibility aliases 'x-defined-colors', 'x-color-defined-p',
2227'x-color-values', and 'x-display-color-p' are now obsolete.
2228
2229+++
2230** 'easy-mmode-define-{minor,global}-mode' aliases are now obsolete.
2231Use 'define-minor-mode' and 'define-globalized-minor-mode' instead.
2232
2233** The obsolete calling convention of 'sit-for' has been removed.
2234That convention was: '(sit-for SECONDS MILLISEC &optional NODISP)'.
2235
2236** The 'millisec' argument of 'sleep-for' has been declared obsolete.
2237Use a float value for the first argument instead.
2238
2239** 'eshell-process-wait-{seconds,milliseconds}' options are now obsolete.
2240Instead, use 'eshell-process-wait-time', which supports floating-point
2241values.
2242
2243+++
2244** Conversion of strings to and from byte-arrays works with multibyte strings. 2382** Conversion of strings to and from byte-arrays works with multibyte strings.
2245The functions 'dbus-string-to-byte-array' and 2383The functions 'dbus-string-to-byte-array' and
2246'dbus-byte-array-to-string' now accept and return multibyte Lisp 2384'dbus-byte-array-to-string' now accept and return multibyte Lisp
@@ -2262,6 +2400,53 @@ When it has a non-nil value, then completion functions like
2262'completing-read' don't discard text properties from the returned 2400'completing-read' don't discard text properties from the returned
2263completion candidate. 2401completion candidate.
2264 2402
2403** 'defadvice' is marked as obsolete.
2404See the "(elisp) Porting Old Advice" Info node for help converting
2405them to use 'advice-add' or 'define-advice' instead.
2406
2407** 'cl-old-struct-compat-mode' is marked as obsolete.
2408You may need to recompile our code if it was compiled with Emacs < 24.3.
2409
2410+++
2411** X color support compatibility aliases are now obsolete.
2412The compatibility aliases 'x-defined-colors', 'x-color-defined-p',
2413'x-color-values', and 'x-display-color-p' are now obsolete.
2414
2415+++
2416** 'easy-mmode-define-{minor,global}-mode' aliases are now obsolete.
2417Use 'define-minor-mode' and 'define-globalized-minor-mode' instead.
2418
2419** The 'millisec' argument of 'sleep-for' is now obsolete.
2420Use a float value for the first argument instead.
2421
2422---
2423** User options 'eshell-NAME-unload-hook' are now obsolete.
2424These hooks were named incorrectly, and so they never actually ran
2425when unloading the corresponding feature. Instead, you should use
2426hooks named after the feature name, like 'esh-mode-unload-hook'.
2427
2428** User options 'eshell-process-wait-{seconds,milliseconds}' are now obsolete.
2429Instead, use 'eshell-process-wait-time', which supports floating-point
2430values.
2431
2432---
2433** User option 'tramp-completion-reread-directory-timeout' has been removed.
2434This user option has been obsoleted in Emacs 27, use
2435'remote-file-name-inhibit-cache' instead.
2436
2437** The obsolete calling convention of 'sit-for' has been removed.
2438That convention was: '(sit-for SECONDS MILLISEC &optional NODISP)'.
2439
2440---
2441** Old derived.el functions removed.
2442The following functions have been deleted because they were only used
2443by code compiled with Emacs<21:
2444'derived-mode-init-mode-variables', 'derived-mode-merge-abbrev-tables',
2445'derived-mode-merge-keymaps', 'derived-mode-merge-syntax-tables',
2446'derived-mode-run-hooks', 'derived-mode-set-abbrev-table',
2447'derived-mode-set-keymap', 'derived-mode-set-syntax-table',
2448'derived-mode-setup-function-name'.
2449
2265 2450
2266* Lisp Changes in Emacs 30.1 2451* Lisp Changes in Emacs 30.1
2267 2452
@@ -2272,6 +2457,14 @@ to specify the 'mouse-4/5/6/7' events that might still happen to be
2272generated by some old packages (or if 'mouse-wheel-buttons' has been set 2457generated by some old packages (or if 'mouse-wheel-buttons' has been set
2273to nil). 2458to nil).
2274 2459
2460** Xterm Mouse mode now emits 'wheel-up/down/right/left' events.
2461This is instead of 'mouse-4/5/6/7' events for the mouse wheel. It uses
2462the new variable 'mouse-wheel-buttons' to decide which button maps to
2463which wheel event (if any).
2464
2465---
2466** In batch mode, tracing now sends the trace to stdout.
2467
2275+++ 2468+++
2276** New hook 'hack-dir-local-get-variables-functions'. 2469** New hook 'hack-dir-local-get-variables-functions'.
2277This can be used to provide support for other directory-local settings 2470This can be used to provide support for other directory-local settings
@@ -2320,7 +2513,7 @@ t only if the argument is a function rather than a special-form,
2320and 'cl-functionp' is like 'functionp' except it returns nil 2513and 'cl-functionp' is like 'functionp' except it returns nil
2321for lists and symbols. 2514for lists and symbols.
2322 2515
2323** Built-in types have now corresponding classes. 2516** Built-in types now have corresponding classes.
2324At the Lisp level, this means that things like '(cl-find-class 'integer)' 2517At the Lisp level, this means that things like '(cl-find-class 'integer)'
2325will now return a class object, and at the UI level it means that 2518will now return a class object, and at the UI level it means that
2326things like 'C-h o integer RET' will show some information about that type. 2519things like 'C-h o integer RET' will show some information about that type.
@@ -2438,6 +2631,14 @@ See the Info node "(elisp) Drag and Drop".
2438The function 'dnd-handle-one-url' has been made obsolete, since it 2631The function 'dnd-handle-one-url' has been made obsolete, since it
2439cannot take these new handlers into account. 2632cannot take these new handlers into account.
2440 2633
2634+++
2635** 'notifications-notify' can use Icon Naming Specification for ':app-icon'.
2636You can use a symbol as the value for ':app-icon' to provide icon name
2637without specifying a file, like this:
2638
2639 (notifications-notify
2640 :title "I am playing music" :app-icon 'multimedia-player)
2641
2441** New function 're-disassemble' to see the innards of a regexp. 2642** New function 're-disassemble' to see the innards of a regexp.
2442If you built Emacs with '--enable-checking', you can use this to help 2643If you built Emacs with '--enable-checking', you can use this to help
2443debug either your regexp performance problems or the regexp engine. 2644debug either your regexp performance problems or the regexp engine.
@@ -2449,13 +2650,6 @@ characters in length, provided that the LONG_XLFDs argument is true.
2449Other features in Emacs which employ XLFDs have been modified to 2650Other features in Emacs which employ XLFDs have been modified to
2450produce and understand XLFDs larger than 255 characters. 2651produce and understand XLFDs larger than 255 characters.
2451 2652
2452** 'defadvice' is marked as obsolete.
2453See the "(elisp) Porting Old Advice" Info node for help converting
2454them to use 'advice-add' or 'define-advice' instead.
2455
2456** 'cl-old-struct-compat-mode' is marked as obsolete.
2457You may need to recompile our code if it was compiled with Emacs < 24.3.
2458
2459+++ 2653+++
2460** New macro 'static-if' for conditional evaluation of code. 2654** New macro 'static-if' for conditional evaluation of code.
2461This macro hides a form from the evaluator or byte-compiler based on a 2655This macro hides a form from the evaluator or byte-compiler based on a
@@ -2587,194 +2781,6 @@ Tree-sitter conditionally sets 'forward-sexp-function' for major modes
2587that have defined 'sexp' in 'treesit-thing-settings' to enable 2781that have defined 'sexp' in 'treesit-thing-settings' to enable
2588sexp-related motion commands. 2782sexp-related motion commands.
2589 2783
2590+++
2591** Returned strings are never docstrings.
2592Functions and macros whose bodies consist of a single string literal now
2593only return that string; it is not used as a docstring. Example:
2594
2595 (defun sing-a-song ()
2596 "Sing a song.")
2597
2598The above function returns the string '"Sing a song."' but has no
2599docstring. Previously, that string was used as both a docstring and
2600return value, which was never what the programmer wanted. If you want
2601the string to be a docstring, add an explicit return value.
2602
2603This change applies to 'defun', 'defsubst', 'defmacro' and 'lambda'
2604forms; other defining forms such as 'cl-defun' already worked this way.
2605
2606** New or changed byte-compilation warnings
2607
2608---
2609*** Warn about missing 'lexical-binding' directive.
2610The compiler now warns if an Elisp file lacks the standard
2611'-*- lexical-binding: ... -*-' cookie on the first line.
2612This line typically looks something like
2613
2614 ;;; My little pony mode -*- lexical-binding: t -*-
2615
2616It is needed to inform the compiler about which dialect of ELisp
2617your code is using: the modern dialect with lexical binding or
2618the old dialect with only dynamic binding.
2619
2620Lexical binding avoids some name conflicts and allows the compiler to
2621detect more mistakes and generate more efficient code, so it is
2622recommended. For how to adapt your code to lexical binding, see the
2623manual section "(elisp) Converting to Lexical Binding".
2624
2625If your code cannot be converted to lexical binding, you can insert
2626the line
2627
2628 ;;; -*- lexical-binding: nil -*-
2629
2630first in the file to declare that it uses the old dialect.
2631
2632---
2633*** Warn about empty bodies for more special forms and macros.
2634The compiler now warns about an empty body argument to 'when',
2635'unless', 'ignore-error' and 'with-suppressed-warnings' in addition to
2636the existing warnings for 'let' and 'let*'. Example:
2637
2638 (when (> x 2))
2639
2640This warning can be suppressed using 'with-suppressed-warnings' with
2641the warning name 'empty-body'.
2642
2643---
2644*** Warn about quoted error names in 'condition-case' and 'ignore-error'.
2645The compiler now warns about quoted condition (error) names
2646in 'condition-case' and 'ignore-error'. Example:
2647
2648 (condition-case nil
2649 (/ x y)
2650 ('arith-error "division by zero"))
2651
2652Quoting them adds the error name 'quote' to those handled or ignored
2653respectively, which was probably not intended.
2654
2655---
2656*** Warn about comparison with literal constants without defined identity.
2657The compiler now warns about comparisons by identity with a literal
2658string, cons, vector, record, function, large integer or float as this
2659may not match any value at all. Example:
2660
2661 (eq x "hello")
2662
2663Only literals for symbols and small integers (fixnums), including
2664characters, are guaranteed to have a consistent (unique) identity.
2665This warning applies to 'eq', 'eql', 'memq', 'memql', 'assq', 'rassq',
2666'remq' and 'delq'.
2667
2668To compare by (structural) value, use 'equal', 'member', 'assoc',
2669'rassoc', 'remove' or 'delete' instead. Floats and bignums can also
2670be compared using 'eql', '=' and 'memql'. Function literals cannot be
2671compared reliably at all.
2672
2673This warning can be suppressed using 'with-suppressed-warnings' with
2674the warning name 'suspicious'.
2675
2676---
2677*** Warn about 'condition-case' without handlers.
2678The compiler now warns when the 'condition-case' form is used without
2679any actual handlers, as in
2680
2681 (condition-case nil (read buffer))
2682
2683because it has no effect other than the execution of the body form.
2684In particular, no errors are caught or suppressed. If the intention
2685was to catch all errors, add an explicit handler for 'error', or use
2686'ignore-error' or 'ignore-errors'.
2687
2688This warning can be suppressed using 'with-suppressed-warnings' with
2689the warning name 'suspicious'.
2690
2691---
2692*** Warn about 'unwind-protect' without unwind forms.
2693The compiler now warns when the 'unwind-protect' form is used without
2694any unwind forms, as in
2695
2696 (unwind-protect (read buffer))
2697
2698because the behavior is identical to that of the argument; there is
2699no protection of any kind. Perhaps the intended unwind forms have
2700been misplaced or forgotten, or the use of 'unwind-protect' could be
2701simplified away.
2702
2703This warning can be suppressed using 'with-suppressed-warnings' with
2704the warning name 'suspicious'.
2705
2706---
2707*** Warn about useless trailing 'cond' clauses.
2708The compiler now warns when a 'cond' form contains clauses following a
2709default (unconditional) clause. Example:
2710
2711 (cond ((= x 0) (say "none"))
2712 (t (say "some"))
2713 (say "goodbye"))
2714
2715Such a clause will never be executed but is likely to be a mistake,
2716perhaps due to misplaced brackets.
2717
2718This warning can be suppressed using 'with-suppressed-warnings' with
2719the warning name 'suspicious'.
2720
2721---
2722*** Warn about mutation of constant values.
2723The compiler now warns about code that modifies program constants in
2724some obvious cases. Examples:
2725
2726 (setcar '(1 2) 7)
2727 (aset [3 4] 0 8)
2728 (aset "abc" 1 ?d)
2729
2730Such code may have unpredictable behavior because the constants are
2731part of the program, not data structures generated afresh during
2732execution, and the compiler does not expect them to change.
2733
2734To avoid the warning, operate on an object created by the program
2735(maybe a copy of the constant), or use a non-destructive operation
2736instead.
2737
2738This warning can be suppressed using 'with-suppressed-warnings' with
2739the warning name 'mutate-constant'.
2740
2741---
2742*** Warn about more ignored function return values.
2743The compiler now warns when the return value from certain functions is
2744implicitly ignored. Example:
2745
2746 (progn (nreverse my-list) my-list)
2747
2748will elicit a warning because it is usually pointless to call
2749'nreverse' on a list without using the returned value.
2750
2751To silence the warning, make use of the value in some way, such as
2752assigning it to a variable. You can also wrap the function call in
2753'(ignore ...)', or use 'with-suppressed-warnings' with the warning
2754name 'ignored-return-value'.
2755
2756The warning will only be issued for calls to functions declared
2757'important-return-value' or 'side-effect-free' (but not 'error-free').
2758
2759---
2760*** Warn about docstrings that contain control characters.
2761The compiler now warns about docstrings with control characters other
2762than newline and tab. This is often a result of improper escaping.
2763Example:
2764
2765 (defun my-fun ()
2766 "Uses c:\remote\dir\files and the key \C-x."
2767 ...)
2768
2769where the docstring contains the four control characters 'CR', 'DEL',
2770'FF' and 'C-x'.
2771
2772The warning name is 'docstrings-control-chars'.
2773
2774---
2775*** The warning about wide docstrings can now be disabled separately.
2776Its warning name is 'docstrings-wide'.
2777
2778--- 2784---
2779** New user option 'native-comp-async-warnings-errors-kind'. 2785** New user option 'native-comp-async-warnings-errors-kind'.
2780It allows control of what kinds of warnings and errors from asynchronous 2786It allows control of what kinds of warnings and errors from asynchronous
@@ -2808,13 +2814,6 @@ The declaration '(important-return-value t)' sets the
2808'important-return-value' property which indicates that the function 2814'important-return-value' property which indicates that the function
2809return value should probably not be thrown away implicitly. 2815return value should probably not be thrown away implicitly.
2810 2816
2811** Bytecode is now always loaded eagerly.
2812Bytecode compiled with older Emacs versions for lazy loading using
2813'byte-compile-dynamic' is now loaded all at once.
2814As a consequence, 'fetch-bytecode' has no use, does nothing, and is
2815now obsolete. The variable 'byte-compile-dynamic' has no effect any
2816more; compilation will always yield bytecode for eager loading.
2817
2818+++ 2817+++
2819** New functions 'file-user-uid' and 'file-group-gid'. 2818** New functions 'file-user-uid' and 'file-group-gid'.
2820These functions are like 'user-uid' and 'group-gid', respectively, but 2819These functions are like 'user-uid' and 'group-gid', respectively, but
@@ -2822,21 +2821,6 @@ are aware of file name handlers, so they will return the remote UID or
2822GID for remote files (or -1 if the connection has no associated user). 2821GID for remote files (or -1 if the connection has no associated user).
2823 2822
2824+++ 2823+++
2825** 'fset', 'defalias' and 'defvaralias' now signal an error for cyclic aliases.
2826Previously, 'fset', 'defalias' and 'defvaralias' could be made to
2827build circular function and variable indirection chains as in
2828
2829 (defalias 'able 'baker)
2830 (defalias 'baker 'able)
2831
2832but trying to use them would sometimes make Emacs hang. Now, an attempt
2833to create such a loop results in an error.
2834
2835Since circular alias chains now cannot occur, 'function-alias-p',
2836'indirect-function' and 'indirect-variable' will never signal an error.
2837Their 'noerror' arguments have no effect and are therefore obsolete.
2838
2839+++
2840** 'treesit-font-lock-rules' now accepts additional global keywords. 2824** 'treesit-font-lock-rules' now accepts additional global keywords.
2841When supplied with ':default-language LANGUAGE', rules after it will 2825When supplied with ':default-language LANGUAGE', rules after it will
2842default to use 'LANGUAGE'. 2826default to use 'LANGUAGE'.
@@ -2950,6 +2934,12 @@ this was not possible.) In addition, LOCATION can be an integer, a
2950(zero-based) index into the table at which the new object is inserted 2934(zero-based) index into the table at which the new object is inserted
2951(BEFORE is ignored in this case). 2935(BEFORE is ignored in this case).
2952 2936
2937+++
2938** New function 'sqlite-execute-batch'.
2939This function lets the user execute multiple SQL statements in one go.
2940It is useful, for example, when a Lisp program needs to evaluate an
2941entire SQL file.
2942
2953** JSON 2943** JSON
2954 2944
2955--- 2945---
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 032e49840a8..6c56fd78859 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -1055,7 +1055,7 @@ If DST-N is specified, use it; otherwise assume it to be the current slot."
1055 "Set constant VAL to current slot." 1055 "Set constant VAL to current slot."
1056 (comp--add-const-to-relocs val) 1056 (comp--add-const-to-relocs val)
1057 ;; Leave relocation index nil on purpose, will be fixed-up in final 1057 ;; Leave relocation index nil on purpose, will be fixed-up in final
1058 ;; by `comp-finalize-relocs'. 1058 ;; by `comp--finalize-relocs'.
1059 (comp--emit `(setimm ,(comp--slot) ,val))) 1059 (comp--emit `(setimm ,(comp--slot) ,val)))
1060 1060
1061(defun comp--make-curr-block (block-name entry-sp &optional addr) 1061(defun comp--make-curr-block (block-name entry-sp &optional addr)
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 12712cb2bc3..7006ae6c785 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -524,7 +524,8 @@ on if the hook has explicitly disabled it.
524 (progn 524 (progn
525 (put ',global-mode 'globalized-minor-mode t) 525 (put ',global-mode 'globalized-minor-mode t)
526 :autoload-end 526 :autoload-end
527 (defvar-local ,MODE-major-mode nil)) 527 (defvar-local ,MODE-major-mode nil)
528 ,@(when predicate `((defvar ,MODE-predicate))))
528 ;; The actual global minor-mode 529 ;; The actual global minor-mode
529 (define-minor-mode ,global-mode 530 (define-minor-mode ,global-mode
530 ,(concat (format "Toggle %s in all buffers.\n" pretty-name) 531 ,(concat (format "Toggle %s in all buffers.\n" pretty-name)
diff --git a/lisp/emacs-lisp/rmc.el b/lisp/emacs-lisp/rmc.el
index dab119e8a99..1260b50b0c7 100644
--- a/lisp/emacs-lisp/rmc.el
+++ b/lisp/emacs-lisp/rmc.el
@@ -228,10 +228,9 @@ Usage example:
228 (when (setq command 228 (when (setq command
229 (let ((current-key-remap-sequence 229 (let ((current-key-remap-sequence
230 (vector tchar))) 230 (vector tchar)))
231 ;; Provide an empty prompt to `t-s-t-t' so 231 ;; Provide an empty prompt so that it may
232 ;; that it may not repeatedly display 232 ;; not repeatedly display and/or disable
233 ;; and/or disable the on-screen keyboard, 233 ;; the on-screen keyboard, or move point.
234 ;; or move point.
235 (touch-screen-translate-touch ""))) 234 (touch-screen-translate-touch "")))
236 (setq command (if (> (length command) 0) 235 (setq command (if (> (length command) 0)
237 (aref command 0) 236 (aref command 0)
diff --git a/lisp/epg.el b/lisp/epg.el
index 7bec91f616d..494bdd68c41 100644
--- a/lisp/epg.el
+++ b/lisp/epg.el
@@ -676,10 +676,14 @@ callback data (if any)."
676 :command (cons (epg-context-program context) 676 :command (cons (epg-context-program context)
677 args) 677 args)
678 :connection-type 'pipe 678 :connection-type 'pipe
679 :coding 'raw-text 679 :coding '(raw-text . nil)
680 :filter #'epg--process-filter 680 :filter #'epg--process-filter
681 :stderr error-process 681 :stderr error-process
682 :noquery t)))) 682 :noquery t))))
683 ;; We encode and decode ourselves the text sent/received from gpg,
684 ;; so the below disables automatic encoding and decoding by
685 ;; subprocess communications routines.
686 (set-process-coding-system process 'raw-text 'raw-text)
683 (setf (epg-context-process context) process))) 687 (setf (epg-context-process context) process)))
684 688
685(defun epg--process-filter (process input) 689(defun epg--process-filter (process input)
diff --git a/lisp/erc/erc-common.el b/lisp/erc/erc-common.el
index 3577e697515..057e7981515 100644
--- a/lisp/erc/erc-common.el
+++ b/lisp/erc/erc-common.el
@@ -363,7 +363,7 @@ instead of a `set' state, which precludes any actual saving."
363Non-nil inside an ERC module's activation (or deactivation) 363Non-nil inside an ERC module's activation (or deactivation)
364command, such as `erc-spelling-enable', when it's been called 364command, such as `erc-spelling-enable', when it's been called
365indirectly via the module's minor-mode toggle, i.e., 365indirectly via the module's minor-mode toggle, i.e.,
366`erc-spelling-mode'. Nil otherwise. Its value is either the 366`erc-spelling-mode'. nil otherwise. Its value is either the
367symbol `toggle' or an integer produced by `prefix-numeric-value'. 367symbol `toggle' or an integer produced by `prefix-numeric-value'.
368See Info node `(elisp) Defining Minor Modes' for more.") 368See Info node `(elisp) Defining Minor Modes' for more.")
369 369
diff --git a/lisp/frameset.el b/lisp/frameset.el
index 436e51905fb..18e2a3ac666 100644
--- a/lisp/frameset.el
+++ b/lisp/frameset.el
@@ -200,7 +200,7 @@ Properties can be set with
200;; - can be ignored by window managers (most positional args, like `height', 200;; - can be ignored by window managers (most positional args, like `height',
201;; `width', `left' and `top', and others, like `auto-raise', `auto-lower') 201;; `width', `left' and `top', and others, like `auto-raise', `auto-lower')
202;; - can be set externally in X resources or Window registry (again, most 202;; - can be set externally in X resources or Window registry (again, most
203;; positional parameters, and also `toolbar-lines', `menu-bar-lines' etc.) 203;; positional parameters, and also `tool-bar-lines', `menu-bar-lines' etc.)
204;, - can contain references to live objects (`buffer-list', `minibuffer') or 204;, - can contain references to live objects (`buffer-list', `minibuffer') or
205;; code (`buffer-predicate') 205;; code (`buffer-predicate')
206;; - are set automatically, and cannot be changed (`window-id', `parent-id'), 206;; - are set automatically, and cannot be changed (`window-id', `parent-id'),
diff --git a/lisp/org/ob-core.el b/lisp/org/ob-core.el
index 727ace84463..bd96556846f 100644
--- a/lisp/org/ob-core.el
+++ b/lisp/org/ob-core.el
@@ -1778,7 +1778,7 @@ shown below.
1778 1778
1779#+PROPERTY: var foo=1, bar=2 1779#+PROPERTY: var foo=1, bar=2
1780 1780
1781HEADER-ARGUMENTS is alist of all the arguments." 1781HEADER-ARGUMENTS is an alist of all the arguments."
1782 (let (results) 1782 (let (results)
1783 (mapc (lambda (pair) 1783 (mapc (lambda (pair)
1784 (if (eq (car pair) :var) 1784 (if (eq (car pair) :var)
diff --git a/lisp/org/ob-lilypond.el b/lisp/org/ob-lilypond.el
index a8d85ce7c85..ef747d9bb2c 100644
--- a/lisp/org/ob-lilypond.el
+++ b/lisp/org/ob-lilypond.el
@@ -160,7 +160,7 @@ Otherwise, execute block according to header settings."
160 (org-babel-lilypond-process-basic body params))) 160 (org-babel-lilypond-process-basic body params)))
161 161
162(defun org-babel-lilypond-tangle () 162(defun org-babel-lilypond-tangle ()
163 "Tangle lilypond blocks, then `org-babel-liypond-execute-tangled-ly'." 163 "Tangle lilypond blocks, then `org-babel-lilypond-execute-tangled-ly'."
164 (interactive) 164 (interactive)
165 (if (org-babel-tangle nil "yes" "lilypond") 165 (if (org-babel-tangle nil "yes" "lilypond")
166 (org-babel-lilypond-execute-tangled-ly) nil)) 166 (org-babel-lilypond-execute-tangled-ly) nil))
diff --git a/lisp/org/org-refile.el b/lisp/org/org-refile.el
index c8e64903c33..391e2402859 100644
--- a/lisp/org/org-refile.el
+++ b/lisp/org/org-refile.el
@@ -557,7 +557,7 @@ prefix argument (`C-u C-u C-u C-c C-w')."
557 (let ((origin (point-marker))) 557 (let ((origin (point-marker)))
558 ;; Handle special case when we refile to exactly same 558 ;; Handle special case when we refile to exactly same
559 ;; location with tree promotion/demotion. Point marker 559 ;; location with tree promotion/demotion. Point marker
560 ;; saved by `org-width-wide-buffer' (`save-excursion') 560 ;; saved by `org-with-wide-buffer' (`save-excursion')
561 ;; will then remain before the inserted subtree in 561 ;; will then remain before the inserted subtree in
562 ;; unexpected location. 562 ;; unexpected location.
563 (set-marker-insertion-type origin t) 563 (set-marker-insertion-type origin t)
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 0b50844732f..7dc850cb839 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -13864,7 +13864,7 @@ comment at the start of cc-engine.el for more info."
13864 ;; 13864 ;;
13865 ;; This is true when point is at the last non syntactic WS position on the 13865 ;; This is true when point is at the last non syntactic WS position on the
13866 ;; line, there is a macro call last on the line, and this particular macro's 13866 ;; line, there is a macro call last on the line, and this particular macro's
13867 ;; name is defined by the regexp `c-vs-macro-regexp' as not needing a 13867 ;; name is defined by the regexp `c-macro-with-semi-re' as not needing a
13868 ;; semicolon. 13868 ;; semicolon.
13869 (save-excursion 13869 (save-excursion
13870 (save-restriction 13870 (save-restriction
diff --git a/lisp/progmodes/dcl-mode.el b/lisp/progmodes/dcl-mode.el
index b8ca1f2d600..686555221cb 100644
--- a/lisp/progmodes/dcl-mode.el
+++ b/lisp/progmodes/dcl-mode.el
@@ -500,7 +500,6 @@ Variables controlling indentation style and extra features:
500 dcl-imenu-label-call 500 dcl-imenu-label-call
501 Change the text that is used as sub-listing labels in imenu. 501 Change the text that is used as sub-listing labels in imenu.
502 502
503To run code after DCL mode has loaded, use `with-eval-after-load'.
504Turning on DCL mode calls the value of the variable `dcl-mode-hook' 503Turning on DCL mode calls the value of the variable `dcl-mode-hook'
505with no args, if that value is non-nil. 504with no args, if that value is non-nil.
506 505
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index 37b3a5f190b..a8a0495ab11 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -851,7 +851,7 @@ Return the buffer created."
851For each member, a symbol is added to the table. Members are 851For each member, a symbol is added to the table. Members are
852extracted from the buffer-local tree `ebrowse--tree-table'. 852extracted from the buffer-local tree `ebrowse--tree-table'.
853 853
854Each symbol has its property `ebrowse-info' set to a list (TREE MEMBER-LIST 854Each symbol has its property `ebrowse-tree' set to a list (TREE MEMBER-LIST
855MEMBER) where TREE is the tree in which the member is defined, 855MEMBER) where TREE is the tree in which the member is defined,
856MEMBER-LIST is a symbol describing the member list in which the member 856MEMBER-LIST is a symbol describing the member list in which the member
857is found, and MEMBER is a MEMBER structure describing the member. 857is found, and MEMBER is a MEMBER structure describing the member.
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index df4cbe50dc0..bb6b0281d9f 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -2544,7 +2544,7 @@ THINGS are either registrations or unregisterations (sic)."
2544 2544
2545(defun eglot--TextDocumentIdentifier () 2545(defun eglot--TextDocumentIdentifier ()
2546 "Compute TextDocumentIdentifier object for current buffer. 2546 "Compute TextDocumentIdentifier object for current buffer.
2547Sets `eglot--TextDocumentIdentifier-uri' (which see) as a side effect." 2547Sets `eglot--TextDocumentIdentifier-cache' (which see) as a side effect."
2548 (unless eglot--TextDocumentIdentifier-cache 2548 (unless eglot--TextDocumentIdentifier-cache
2549 (let ((truename (file-truename (or buffer-file-name 2549 (let ((truename (file-truename (or buffer-file-name
2550 (ignore-errors 2550 (ignore-errors
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index c8b086cfad2..0ce5e1df794 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -5122,7 +5122,7 @@ commands) or source buffers (that display program source code)."
5122 5122
5123(defun gdb--buffer-type (buffer) 5123(defun gdb--buffer-type (buffer)
5124 "Return the type of BUFFER if it is a function buffer. 5124 "Return the type of BUFFER if it is a function buffer.
5125Buffer type is like `gdb-registers-type', `gdb-stack-buffer'. 5125Buffer type is like `gdb-registers-buffer', `gdb-stack-buffer'.
5126These symbols are used by `gdb-get-buffer-create'. 5126These symbols are used by `gdb-get-buffer-create'.
5127 5127
5128Return nil if BUFFER is not a GDB function buffer." 5128Return nil if BUFFER is not a GDB function buffer."
diff --git a/lisp/progmodes/php-ts-mode.el b/lisp/progmodes/php-ts-mode.el
index 826c131ca70..1298b39311b 100644
--- a/lisp/progmodes/php-ts-mode.el
+++ b/lisp/progmodes/php-ts-mode.el
@@ -36,6 +36,7 @@
36;; * https://github.com/tree-sitter/tree-sitter-php 36;; * https://github.com/tree-sitter/tree-sitter-php
37;; * https://github.com/tree-sitter/tree-sitter-html 37;; * https://github.com/tree-sitter/tree-sitter-html
38;; * https://github.com/tree-sitter/tree-sitter-javascript 38;; * https://github.com/tree-sitter/tree-sitter-javascript
39;; * https://github.com/tree-sitter/tree-sitter-jsdoc
39;; * https://github.com/tree-sitter/tree-sitter-css 40;; * https://github.com/tree-sitter/tree-sitter-css
40;; * https://github.com/claytonrcarter/tree-sitter-phpdoc 41;; * https://github.com/claytonrcarter/tree-sitter-phpdoc
41;; 42;;
@@ -86,6 +87,7 @@
86 (phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc")) 87 (phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc"))
87 (html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.20.3")) 88 (html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.20.3"))
88 (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.21.2")) 89 (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.21.2"))
90 (jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.21.0"))
89 (css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.21.0"))) 91 (css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.21.0")))
90 "Treesitter language parsers required by `php-ts-mode'. 92 "Treesitter language parsers required by `php-ts-mode'.
91You can customize this variable if you want to stick to a specific 93You can customize this variable if you want to stick to a specific
@@ -1296,6 +1298,7 @@ Depends on `c-ts-common-comment-setup'."
1296 (treesit-ready-p 'phpdoc) 1298 (treesit-ready-p 'phpdoc)
1297 (treesit-ready-p 'html) 1299 (treesit-ready-p 'html)
1298 (treesit-ready-p 'javascript) 1300 (treesit-ready-p 'javascript)
1301 (treesit-ready-p 'jsdoc)
1299 (treesit-ready-p 'css))) 1302 (treesit-ready-p 'css)))
1300 (error "Tree-sitter for PHP isn't 1303 (error "Tree-sitter for PHP isn't
1301 available. You can install the parsers with M-x 1304 available. You can install the parsers with M-x
@@ -1334,6 +1337,12 @@ Depends on `c-ts-common-comment-setup'."
1334 (start_tag (tag_name)) 1337 (start_tag (tag_name))
1335 (raw_text) @cap)) 1338 (raw_text) @cap))
1336 1339
1340 :embed 'jsdoc
1341 :host 'javascript
1342 :local t
1343 `(((comment) @cap
1344 (:match ,js--treesit-jsdoc-beginning-regexp @cap)))
1345
1337 :embed 'css 1346 :embed 'css
1338 :host 'html 1347 :host 'html
1339 :offset '(1 . -1) 1348 :offset '(1 . -1)
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index a593b6c6241..3cfd3905701 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -778,7 +778,10 @@ Signal an error if the entire string was not used."
778 778
779;;;###autoload 779;;;###autoload
780(defun sexp-at-point () 780(defun sexp-at-point ()
781 "Return the sexp at point, or nil if none is found." 781 "Return the sexp at point, or nil if none is found.
782This is for returning the Lisp object represented by text at point;
783use (thing-at-point \\='sexp) instead if you rather want the balanced
784expression at point regardless of Lisp syntax."
782 (form-at-point 'sexp)) 785 (form-at-point 'sexp))
783;;;###autoload 786;;;###autoload
784(defun symbol-at-point () 787(defun symbol-at-point ()
diff --git a/lisp/transient.el b/lisp/transient.el
index 805b0acd6f3..312ed540f73 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -2550,7 +2550,10 @@ value. Otherwise return CHILDREN as is."
2550 (transient--pop-keymap 'transient--redisplay-map) 2550 (transient--pop-keymap 'transient--redisplay-map)
2551 (setq transient--redisplay-map new) 2551 (setq transient--redisplay-map new)
2552 (transient--push-keymap 'transient--redisplay-map)) 2552 (transient--push-keymap 'transient--redisplay-map))
2553 (transient--redisplay))))))) 2553 (transient--redisplay)))))
2554 (setq transient-current-prefix nil)
2555 (setq transient-current-command nil)
2556 (setq transient-current-suffixes nil)))
2554 2557
2555(defun transient--post-exit (&optional command) 2558(defun transient--post-exit (&optional command)
2556 (transient--debug 'post-exit) 2559 (transient--debug 'post-exit)
@@ -2573,9 +2576,6 @@ value. Otherwise return CHILDREN as is."
2573 (remove-hook 'pre-command-hook #'transient--pre-command) 2576 (remove-hook 'pre-command-hook #'transient--pre-command)
2574 (remove-hook 'post-command-hook #'transient--post-command) 2577 (remove-hook 'post-command-hook #'transient--post-command)
2575 (advice-remove 'recursive-edit #'transient--recursive-edit)) 2578 (advice-remove 'recursive-edit #'transient--recursive-edit))
2576 (setq transient-current-prefix nil)
2577 (setq transient-current-command nil)
2578 (setq transient-current-suffixes nil)
2579 (let ((resume (and transient--stack 2579 (let ((resume (and transient--stack
2580 (not (memq transient--exitp '(replace suspend)))))) 2580 (not (memq transient--exitp '(replace suspend))))))
2581 (unless (or resume (eq transient--exitp 'replace)) 2581 (unless (or resume (eq transient--exitp 'replace))
diff --git a/lisp/which-key.el b/lisp/which-key.el
index 8ad2ba2c365..677a84b328d 100644
--- a/lisp/which-key.el
+++ b/lisp/which-key.el
@@ -1614,7 +1614,7 @@ Within these categories order using `which-key-key-order'."
1614 (when found `(replaced . ,key-binding)))) 1614 (when found `(replaced . ,key-binding))))
1615 1615
1616(defun which-key--maybe-replace (key-binding) 1616(defun which-key--maybe-replace (key-binding)
1617 "Use `which-key--replacement-alist' to maybe replace KEY-BINDING. 1617 "Use `which-key-replacement-alist' to maybe replace KEY-BINDING.
1618KEY-BINDING is a cons cell of the form \(KEY . BINDING\) each of 1618KEY-BINDING is a cons cell of the form \(KEY . BINDING\) each of
1619which are strings. KEY is of the form produced by `key-binding'." 1619which are strings. KEY is of the form produced by `key-binding'."
1620 (let* ((replacer (if which-key-allow-multiple-replacements 1620 (let* ((replacer (if which-key-allow-multiple-replacements
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index cca01c8cb3a..bf5987d742f 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -378,7 +378,7 @@ one char."
378 (> (window-hscroll) 0)) 378 (> (window-hscroll) 0))
379 (set-window-hscroll nil (- (window-hscroll) n)) 379 (set-window-hscroll nil (- (window-hscroll) n))
380 (xwidget-webkit-execute-script session 380 (xwidget-webkit-execute-script session
381 (format "window.scrollBy(%-d, 0);" 381 (format "window.scrollBy(-%d, 0);"
382 (* n (window-font-width))))))) 382 (* n (window-font-width)))))))
383 383
384(defun xwidget-webkit-scroll-top () 384(defun xwidget-webkit-scroll-top ()
diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp
index b4681d2ae07..624983798c4 100644
--- a/msdos/sedlibmk.inp
+++ b/msdos/sedlibmk.inp
@@ -288,7 +288,7 @@ s/@PACKAGE@/emacs/
288/^MKDIR_P *=/s/@MKDIR_P@/echo/ 288/^MKDIR_P *=/s/@MKDIR_P@/echo/
289/^NEXT_AS_FIRST_DIRECTIVE_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ 289/^NEXT_AS_FIRST_DIRECTIVE_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/
290/^NEXT_AS_FIRST_DIRECTIVE_ERRNO_H *=/s/@[^@\n]*@// 290/^NEXT_AS_FIRST_DIRECTIVE_ERRNO_H *=/s/@[^@\n]*@//
291/^NEXT_AS_FIRST_DIRECTIVE_ENDIAN_H *=/s/@[^@\n]*@/<machine/endian.h>/ 291/^NEXT_AS_FIRST_DIRECTIVE_ENDIAN_H *=/s|@[^@\n]*@|<machine/endian.h>|
292/^NEXT_AS_FIRST_DIRECTIVE_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/ 292/^NEXT_AS_FIRST_DIRECTIVE_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/
293/^NEXT_AS_FIRST_DIRECTIVE_GETOPT_H *=/s/@[^@\n]*@/<getopt.h>/ 293/^NEXT_AS_FIRST_DIRECTIVE_GETOPT_H *=/s/@[^@\n]*@/<getopt.h>/
294/^NEXT_AS_FIRST_DIRECTIVE_LIMITS_H *=/s/@[^@\n]*@/<limits.h>/ 294/^NEXT_AS_FIRST_DIRECTIVE_LIMITS_H *=/s/@[^@\n]*@/<limits.h>/
@@ -307,7 +307,7 @@ s/@PACKAGE@/emacs/
307/^NEXT_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ 307/^NEXT_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/
308/^NEXT_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/ 308/^NEXT_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/
309/^NEXT_ERRNO_H *=/s/@[^@\n]*@// 309/^NEXT_ERRNO_H *=/s/@[^@\n]*@//
310/^NEXT_ENDIAN_H *=/s/@[^@\n]*@/<machine/endian.h>/ 310/^NEXT_ENDIAN_H *=/s|@[^@\n]*@|<machine/endian.h>|
311/^NEXT_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/ 311/^NEXT_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/
312/^NEXT_FLOAT_H *=/s/@[^@\n]*@// 312/^NEXT_FLOAT_H *=/s/@[^@\n]*@//
313/^NEXT_GETOPT_H *=/s/@[^@\n]*@/<getopt.h>/ 313/^NEXT_GETOPT_H *=/s/@[^@\n]*@/<getopt.h>/
diff --git a/src/treesit.c b/src/treesit.c
index 54b16eb1bb3..f0c786e921d 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -846,7 +846,6 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte,
846 treesit_tree_edit_1 (tree, start_offset, old_end_offset, 846 treesit_tree_edit_1 (tree, start_offset, old_end_offset,
847 new_end_offset); 847 new_end_offset);
848 XTS_PARSER (lisp_parser)->need_reparse = true; 848 XTS_PARSER (lisp_parser)->need_reparse = true;
849 XTS_PARSER (lisp_parser)->timestamp++;
850 849
851 /* VISIBLE_BEG/END records tree-sitter's range of view in 850 /* VISIBLE_BEG/END records tree-sitter's range of view in
852 the buffer. We need to adjust them when tree-sitter's 851 the buffer. We need to adjust them when tree-sitter's
@@ -948,10 +947,7 @@ treesit_sync_visible_region (Lisp_Object parser)
948 this function is called), we need to reparse. */ 947 this function is called), we need to reparse. */
949 if (visible_beg != BUF_BEGV_BYTE (buffer) 948 if (visible_beg != BUF_BEGV_BYTE (buffer)
950 || visible_end != BUF_ZV_BYTE (buffer)) 949 || visible_end != BUF_ZV_BYTE (buffer))
951 { 950 XTS_PARSER (parser)->need_reparse = true;
952 XTS_PARSER (parser)->need_reparse = true;
953 XTS_PARSER (parser)->timestamp++;
954 }
955 951
956 /* Before we parse or set ranges, catch up with the narrowing 952 /* Before we parse or set ranges, catch up with the narrowing
957 situation. We change visible_beg and visible_end to match 953 situation. We change visible_beg and visible_end to match
@@ -1090,6 +1086,7 @@ treesit_ensure_parsed (Lisp_Object parser)
1090 1086
1091 XTS_PARSER (parser)->tree = new_tree; 1087 XTS_PARSER (parser)->tree = new_tree;
1092 XTS_PARSER (parser)->need_reparse = false; 1088 XTS_PARSER (parser)->need_reparse = false;
1089 XTS_PARSER (parser)->timestamp++;
1093 1090
1094 /* After-change functions should run at the very end, most crucially 1091 /* After-change functions should run at the very end, most crucially
1095 after need_reparse is set to false, this way if the function 1092 after need_reparse is set to false, this way if the function
@@ -1725,7 +1722,6 @@ buffer. */)
1725 ranges); 1722 ranges);
1726 1723
1727 XTS_PARSER (parser)->need_reparse = true; 1724 XTS_PARSER (parser)->need_reparse = true;
1728 XTS_PARSER (parser)->timestamp++;
1729 return Qnil; 1725 return Qnil;
1730} 1726}
1731 1727
@@ -2923,11 +2919,10 @@ be completely in the region.
2923 2919
2924If NODE-ONLY is non-nil, return a list of nodes. 2920If NODE-ONLY is non-nil, return a list of nodes.
2925 2921
2926Besides a node, NODE can also be a parser, in which case the root node 2922Besides a node, NODE can be a parser, in which case the root node of
2927of that parser is used. 2923that parser is used. NODE can also be a language symbol, in which case
2928NODE can also be a language symbol, in which case the root node of a 2924the root node of a parser for that language is used. If such a parser
2929parser for that language is used. If such a parser doesn't exist, it 2925doesn't exist, it is created.
2930is created.
2931 2926
2932Signal `treesit-query-error' if QUERY is malformed or something else 2927Signal `treesit-query-error' if QUERY is malformed or something else
2933goes wrong. You can use `treesit-query-validate' to validate and debug 2928goes wrong. You can use `treesit-query-validate' to validate and debug
@@ -2941,8 +2936,13 @@ the query. */)
2941 2936
2942 treesit_initialize (); 2937 treesit_initialize ();
2943 2938
2944 /* Resolve NODE into an actual node. */ 2939 /* Resolve NODE into an actual node, signals if node not
2940 up-to-date. */
2945 Lisp_Object lisp_node = treesit_resolve_node (node); 2941 Lisp_Object lisp_node = treesit_resolve_node (node);
2942 /* As of right now, the node returned by treesit_resolve_node always
2943 passes treesit_check_node; but it might not be true in the future,
2944 so adding the line below just to be safe. */
2945 treesit_check_node (node);
2946 2946
2947 /* Extract C values from Lisp objects. */ 2947 /* Extract C values from Lisp objects. */
2948 TSNode treesit_node = XTS_NODE (lisp_node)->node; 2948 TSNode treesit_node = XTS_NODE (lisp_node)->node;
@@ -2970,8 +2970,8 @@ the query. */)
2970 &signal_symbol, &signal_data)) 2970 &signal_symbol, &signal_data))
2971 xsignal (signal_symbol, signal_data); 2971 xsignal (signal_symbol, signal_data);
2972 2972
2973 /* WARN: After this point, free TREESIT_QUERY and CURSOR before every 2973 /* WARN: After this point, if NEEDS_TO_FREE_QUERY_AND_CURSOR is true,
2974 signal and return if NEEDS_TO_FREE_QUERY_AND_CURSOR is true. */ 2974 free TREESIT_QUERY and CURSOR before every signal and return. */
2975 2975
2976 /* Set query range. */ 2976 /* Set query range. */
2977 if (!NILP (beg) && !NILP (end)) 2977 if (!NILP (beg) && !NILP (end))
diff --git a/test/lisp/net/shr-tests.el b/test/lisp/net/shr-tests.el
index 4864fc488e2..54d85ee95f9 100644
--- a/test/lisp/net/shr-tests.el
+++ b/test/lisp/net/shr-tests.el
@@ -136,13 +136,15 @@ settings, then once more for each (OPTION . VALUE) pair.")
136(ert-deftest shr-test/zoom-image () 136(ert-deftest shr-test/zoom-image ()
137 "Test that `shr-zoom-image' properly replaces the original image." 137 "Test that `shr-zoom-image' properly replaces the original image."
138 (skip-unless (bound-and-true-p image-types)) 138 (skip-unless (bound-and-true-p image-types))
139 (let ((image (expand-file-name "data/image/blank-100x200.png" 139 (let* ((image (expand-file-name "data/image/blank-100x200.png"
140 (getenv "EMACS_TEST_DIRECTORY")))) 140 (getenv "EMACS_TEST_DIRECTORY")))
141 (image-url (concat "file://" (if (string-prefix-p "/" image)
142 image (concat "/" image)))))
141 (dolist (alt '(nil "" "nothing to see here")) 143 (dolist (alt '(nil "" "nothing to see here"))
142 (with-temp-buffer 144 (with-temp-buffer
143 (ert-info ((format "image with alt=%S" alt)) 145 (ert-info ((format "image with alt=%S" alt))
144 (let ((attrs (if alt (format " alt=\"%s\"" alt) ""))) 146 (let ((attrs (if alt (format " alt=\"%s\"" alt) "")))
145 (insert (format "<img src=\"file://%s\" %s" image attrs))) 147 (insert (format "<img src=\"%s\" %s" image-url attrs)))
146 (cl-letf* (;; Pretend we're a graphical display. 148 (cl-letf* (;; Pretend we're a graphical display.
147 ((symbol-function 'display-graphic-p) #'always) 149 ((symbol-function 'display-graphic-p) #'always)
148 ((symbol-function 'url-queue-retrieve) 150 ((symbol-function 'url-queue-retrieve)
@@ -161,11 +163,13 @@ settings, then once more for each (OPTION . VALUE) pair.")
161 ;; Render the document. 163 ;; Render the document.
162 (erase-buffer) 164 (erase-buffer)
163 (shr-insert-document dom) 165 (shr-insert-document dom)
164 (shr-test-wait-for (lambda () (= put-image-calls 1))) 166 (shr-test-wait-for (lambda () (= put-image-calls 1))
167 "Timed out waiting for initial load")
165 ;; Now zoom the image. 168 ;; Now zoom the image.
166 (goto-char (point-min)) 169 (goto-char (point-min))
167 (shr-zoom-image) 170 (shr-zoom-image)
168 (shr-test-wait-for (lambda () (= put-image-calls 2))) 171 (shr-test-wait-for (lambda () (= put-image-calls 2))
172 "Timed out waiting to zoom image")
169 ;; Check that we got a sliced image. 173 ;; Check that we got a sliced image.
170 (let ((slice-count 0)) 174 (let ((slice-count 0))
171 (goto-char (point-min)) 175 (goto-char (point-min))
diff --git a/test/lisp/which-key-tests.el b/test/lisp/which-key-tests.el
index 1f2b1965ec3..3b42a7bd504 100644
--- a/test/lisp/which-key-tests.el
+++ b/test/lisp/which-key-tests.el
@@ -53,8 +53,7 @@
53 '(("C-a" . "which-key-test--named-map")))))) 53 '(("C-a" . "which-key-test--named-map"))))))
54 54
55(ert-deftest which-key-test--prefix-declaration () 55(ert-deftest which-key-test--prefix-declaration ()
56 "Test `which-key-declare-prefixes' and 56 ;; See Bug #109.
57`which-key-declare-prefixes-for-mode'. See Bug #109."
58 (let* ((major-mode 'test-mode) 57 (let* ((major-mode 'test-mode)
59 which-key-replacement-alist) 58 which-key-replacement-alist)
60 (which-key-add-key-based-replacements 59 (which-key-add-key-based-replacements
diff --git a/test/src/comp-resources/comp-test-funcs.el b/test/src/comp-resources/comp-test-funcs.el
index 54f339f6373..084fcd8c9db 100644
--- a/test/src/comp-resources/comp-test-funcs.el
+++ b/test/src/comp-resources/comp-test-funcs.el
@@ -361,7 +361,7 @@
361 2)) 361 2))
362 362
363(defun comp-test-copy-insn-f (insn) 363(defun comp-test-copy-insn-f (insn)
364 ;; From `comp-copy-insn'. 364 ;; From `comp--copy-insn'.
365 (if (consp insn) 365 (if (consp insn)
366 (let (result) 366 (let (result)
367 (while (consp insn) 367 (while (consp insn)
diff --git a/test/src/comp-tests.el b/test/src/comp-tests.el
index dffb7097a3e..6744f14435b 100644
--- a/test/src/comp-tests.el
+++ b/test/src/comp-tests.el
@@ -1320,7 +1320,7 @@ Return a list of results."
1320 (5 (message "five"))) 1320 (5 (message "five")))
1321 x) 1321 x)
1322 't 1322 't
1323 ;; FIXME improve `comp-cond-cstrs-target-mvar' to cross block 1323 ;; FIXME improve `comp--cond-cstrs-target-mvar' to cross block
1324 ;; boundary if necessary as this should return: 1324 ;; boundary if necessary as this should return:
1325 ;; (or (integer 1 1) (integer 5 5)) 1325 ;; (or (integer 1 1) (integer 5 5))
1326 ) 1326 )