aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Zaretskii2023-04-21 07:29:14 -0400
committerEli Zaretskii2023-04-21 07:29:14 -0400
commitf1ce49d148b334a8fb5302c4dd596aceffbb6b57 (patch)
treee551bef8b4c260e79f920b495a206c993de7fc7c
parent4416262f59f5e74d3991fdf9c06ad776eca50663 (diff)
parent3899acbb3367984d66c7484a208b40a6851f4cc2 (diff)
downloademacs-f1ce49d148b334a8fb5302c4dd596aceffbb6b57.tar.gz
emacs-f1ce49d148b334a8fb5302c4dd596aceffbb6b57.zip
Merge from origin/emacs-29
3899acbb336 ; * src/fringe.c: Fix description of large circle. (Bug#... 2b10e1827d3 sql: add missing postgresql types 9ac12592781 Fix display of menu-bar bindings of commands in *Help* bu... ecdd3a9efac Improve Completion Example section in the Emacs manual 626e1ac62b2 Improve 'message-server-alist' docstring 327986936c3 Add index entry for fallback modes 1c4783c3300 ; * etc/NEWS: Copyedits and grammar fixes. 3d6f7553319 xref-search-program-alist: Fix searching larger file list... 1b8b2cf61bd Fix typo and inaccuracy in the ELisp Reference manual df17682ebf1 ; Support 'dart-ts-mode' in Eglot e0dc60e0780 ; Fix typos in gdb-mi.el 60560cc7adf Fix description of lexical environment's internals 1456adf4248 ; Eglot: fix a typo in a customization type 2f59595f5f4 ; * etc/NEWS: Grammar fixes. 596b780ab71 Update to Org 9.6.4-2-g0f6ae7 a0b04a22479 Documentation copyedits for 'package-install-upgrade-buil... 580d8278c5f Allow upgrading built-in packages with 'package-install' 329304c23fa ; * src/term.c (init_tty): Fix last change. (Bug#62877) 200dbf7d302 Minor changes in c-ts-mode.el's support of DEFUNs 9686b015a0d Fix strike-through attribute support on TTY frames 39035fbfc5f Avoid crashes in 'describe-keymap' due to shadowing # Conflicts: # etc/NEWS # lisp/progmodes/c-ts-mode.el # lisp/progmodes/eglot.el
-rw-r--r--doc/emacs/custom.texi1
-rw-r--r--doc/emacs/mini.texi18
-rw-r--r--doc/lispref/customize.texi7
-rw-r--r--doc/lispref/loading.texi2
-rw-r--r--doc/lispref/variables.texi17
-rw-r--r--doc/misc/org.org5
-rw-r--r--etc/NEWS.29132
-rw-r--r--etc/refcards/orgcard.tex2
-rw-r--r--lisp/emacs-lisp/package.el47
-rw-r--r--lisp/gnus/message.el6
-rw-r--r--lisp/help-fns.el17
-rw-r--r--lisp/org/ob-tangle.el10
-rw-r--r--lisp/org/org-agenda.el3
-rw-r--r--lisp/org/org-element.el2
-rw-r--r--lisp/org/org-macs.el6
-rw-r--r--lisp/org/org-table.el6
-rw-r--r--lisp/org/org-version.el4
-rw-r--r--lisp/org/org.el5
-rw-r--r--lisp/org/ox-latex.el2
-rw-r--r--lisp/org/ox-odt.el10
-rw-r--r--lisp/progmodes/c-ts-mode.el60
-rw-r--r--lisp/progmodes/eglot.el10
-rw-r--r--lisp/progmodes/gdb-mi.el2
-rw-r--r--lisp/progmodes/sql.el19
-rw-r--r--lisp/progmodes/xref.el28
-rw-r--r--src/fringe.c4
-rw-r--r--src/keymap.c19
-rw-r--r--src/term.c8
28 files changed, 285 insertions, 167 deletions
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index ee818a74b57..87290734cc9 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -1245,6 +1245,7 @@ Manual}.
1245These four keywords are not really variables; setting them in any 1245These four keywords are not really variables; setting them in any
1246other context has no special meaning. 1246other context has no special meaning.
1247 1247
1248@cindex fallback modes
1248 If you're editing a file across Emacs versions, and a new mode has 1249 If you're editing a file across Emacs versions, and a new mode has
1249been introduced to handle a file in a newer Emacs version, you can use 1250been introduced to handle a file in a newer Emacs version, you can use
1250several @code{mode} entries to use the new mode (called 1251several @code{mode} entries to use the new mode (called
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index 898d9e904f6..d380ba7ef4b 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -313,19 +313,27 @@ may be defined in your Emacs session. For example, if a command
313called @code{authorize-me} was defined, Emacs could only complete 313called @code{authorize-me} was defined, Emacs could only complete
314as far as @samp{aut}.) 314as far as @samp{aut}.)
315 315
316 If you type @key{TAB} again immediately, it cannot determine the 316 If you type @kbd{@key{TAB}} again immediately, it cannot determine
317next character; it could be @samp{-}, @samp{a}, or @samp{c}. So it 317the next character; it could be @samp{-}, @samp{a}, or @samp{c}. So
318does not add any characters; instead, @key{TAB} displays a list of all 318it does not add any characters; instead, @key{TAB} displays a list of
319possible completions in another window. 319all possible completions in another window.
320 320
321 Next, type @kbd{-f}. The minibuffer now contains @samp{auto-f}, and 321 Next, type @kbd{-f}. The minibuffer now contains @samp{auto-f}, and
322the only command name that starts with this is @code{auto-fill-mode}. 322the only command name that starts with this is @code{auto-fill-mode}.
323If you now type @key{TAB}, completion fills in the rest of the 323If you now type @kbd{@key{TAB}}, completion fills in the rest of the
324argument @samp{auto-fill-mode} into the minibuffer. 324argument @samp{auto-fill-mode} into the minibuffer.
325 325
326 Hence, typing just @kbd{a u @key{TAB} - f @key{TAB}} allows you to 326 Hence, typing just @kbd{a u @key{TAB} - f @key{TAB}} allows you to
327enter @samp{auto-fill-mode}. 327enter @samp{auto-fill-mode}.
328 328
329 @key{TAB} also works while point is not at the end of the
330minibuffer. In that case, it will fill in text both at point and at
331the end of the minibuffer. If you type @kbd{M-x autocm}, then press
332@kbd{C-b} to move point before the @samp{m}, you can type
333@kbd{@key{TAB}} to insert the text @samp{onf-} at point and @samp{ode}
334at the end of the minibuffer, so that the minibuffer contains
335@samp{autoconf-mode}.
336
329@node Completion Commands 337@node Completion Commands
330@subsection Completion Commands 338@subsection Completion Commands
331 339
diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi
index 6015c134d21..6d5d9e0a2bc 100644
--- a/doc/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -264,11 +264,12 @@ have any number of prefixes.
264@end table 264@end table
265 265
266@cindex @code{custom-group} property 266@cindex @code{custom-group} property
267The variables and subgroups of a group are stored in the 267The variables, faces, and subgroups of a group are stored in the
268@code{custom-group} property of the group's symbol. @xref{Symbol 268@code{custom-group} property of the group's symbol. @xref{Symbol
269Plists}. The value of that property is a list of pairs whose 269Plists}. The value of that property is a list of pairs whose
270@code{car} is the variable or subgroup symbol and the @code{cdr} is 270@code{car} is the symbol of the variable or the face or the subgroup,
271either @code{custom-variable} or @code{custom-group}. 271and the @code{cdr} is one of the corresponding symbols
272@code{custom-variable}, @code{custom-face}, or @code{custom-group}.
272@end defmac 273@end defmac
273 274
274@defopt custom-unlispify-remove-prefixes 275@defopt custom-unlispify-remove-prefixes
diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi
index 5c84ba4b1eb..d6fc4e8d636 100644
--- a/doc/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -1338,7 +1338,7 @@ specified @var{file} and perform the necessary initialization of the
1338module. This is the primitive which makes sure the module exports the 1338module. This is the primitive which makes sure the module exports the
1339@code{plugin_is_GPL_compatible} symbol, calls the module's 1339@code{plugin_is_GPL_compatible} symbol, calls the module's
1340@code{emacs_module_init} function, and signals an error if that 1340@code{emacs_module_init} function, and signals an error if that
1341function returns an error indication, or if the use typed @kbd{C-g} 1341function returns an error indication, or if the user typed @kbd{C-g}
1342during the initialization. If the initialization succeeds, 1342during the initialization. If the initialization succeeds,
1343@code{module-load} returns @code{t}. Note that @var{file} must 1343@code{module-load} returns @code{t}. Note that @var{file} must
1344already have the proper file-name extension, as this function doesn't 1344already have the proper file-name extension, as this function doesn't
diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi
index f92c02ae5ed..eadb5c36de6 100644
--- a/doc/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -1183,13 +1183,16 @@ wants the current value of a variable, it looks first in the lexical
1183environment; if the variable is not specified in there, it looks in 1183environment; if the variable is not specified in there, it looks in
1184the symbol's value cell, where the dynamic value is stored. 1184the symbol's value cell, where the dynamic value is stored.
1185 1185
1186 (Internally, the lexical environment is an alist of symbol-value 1186 (Internally, the lexical environment is a list whose members are
1187pairs, with the final element in the alist being the symbol @code{t} 1187usually cons cells that are symbol-value pairs, but some of its
1188rather than a cons cell. Such an alist can be passed as the second 1188members can be symbols rather than cons cells. A symbol in the list
1189argument to the @code{eval} function, in order to specify a lexical 1189means the lexical environment declared that symbol's variable as
1190environment in which to evaluate a form. @xref{Eval}. Most Emacs 1190locally considered to be dynamically bound. This list can be passed
1191Lisp programs, however, should not interact directly with lexical 1191as the second argument to the @code{eval} function, in order to
1192environments in this way; only specialized programs like debuggers.) 1192specify a lexical environment in which to evaluate a form.
1193@xref{Eval}. Most Emacs Lisp programs, however, should not interact
1194directly with lexical environments in this way; only specialized
1195programs like debuggers.)
1193 1196
1194@cindex closures, example of using 1197@cindex closures, example of using
1195 Lexical bindings have indefinite extent. Even after a binding 1198 Lexical bindings have indefinite extent. Even after a binding
diff --git a/doc/misc/org.org b/doc/misc/org.org
index 7ff0933de75..ae3fae0623e 100644
--- a/doc/misc/org.org
+++ b/doc/misc/org.org
@@ -5958,8 +5958,9 @@ the agenda (see [[*Weekly/daily agenda]]). We distinguish:
5958 #+findex: org-block 5958 #+findex: org-block
5959 5959
5960 For more complex date specifications, Org mode supports using the 5960 For more complex date specifications, Org mode supports using the
5961 special expression diary entries implemented in the Emacs Calendar 5961 special expression diary entries implemented in the
5962 package[fn:20]. For example, with optional time: 5962 [[info:emacs#Special Diary Entries][Emacs Calendar package]][fn:20].
5963 For example, with optional time:
5963 5964
5964 #+begin_example 5965 #+begin_example
5965 ,* 22:00-23:00 The nerd meeting on every 2nd Thursday of the month 5966 ,* 22:00-23:00 The nerd meeting on every 2nd Thursday of the month
diff --git a/etc/NEWS.29 b/etc/NEWS.29
index 84dbb94a71a..62d2fdcd3a4 100644
--- a/etc/NEWS.29
+++ b/etc/NEWS.29
@@ -218,13 +218,13 @@ of 'user-emacs-directory'.
218 218
219+++ 219+++
220** The image commands have changed key bindings. 220** The image commands have changed key bindings.
221In previous Emacs versions, images have had the '+', '-' and 'r' keys 221In previous Emacs versions, the '+', '-' and 'r' keys were bound when
222bound when point is over an image. In Emacs 29.1, additional commands 222point was over an image. In Emacs 29.1, additional commands have been
223were added, and this made it more likely that users would trigger the 223added, and this made it more likely that users would trigger the image
224image commands by mistake. To avoid this, all image commands have 224commands by mistake. To avoid this, all image commands have been
225moved to the 'i' prefix keymap, so '+' is now 'i +', '-' is now 'i -', 225moved to the 'i' prefix keymap, so '+' is now 'i +', '-' is now 'i -',
226and 'r' is now 'i r'. In addition, these commands are now repeating, 226and 'r' is now 'i r'. In addition, these commands are now repeating,
227so, for example, you can rotate an image twice by typing 'i r r'. 227so you can rotate an image twice by saying 'i r r', for instance.
228 228
229+++ 229+++
230** Emacs now picks the correct coding-system for X input methods. 230** Emacs now picks the correct coding-system for X input methods.
@@ -380,7 +380,7 @@ this user option to nil to revert back to the old behavior.
380--- 380---
381** Support for old EIEIO functions is not autoloaded any more. 381** Support for old EIEIO functions is not autoloaded any more.
382You need an explicit '(require 'eieio-compat)' to use 'defmethod' 382You need an explicit '(require 'eieio-compat)' to use 'defmethod'
383and 'defgeneric' (which have been made obsolete in Emacs 25.1 with 383and 'defgeneric' (which were made obsolete in Emacs 25.1 by
384'cl-defmethod' and 'cl-defgeneric'). 384'cl-defmethod' and 'cl-defgeneric').
385Similarly you might need to '(require 'eieio-compat)' before loading 385Similarly you might need to '(require 'eieio-compat)' before loading
386files that were compiled with an old EIEIO (Emacs<25). 386files that were compiled with an old EIEIO (Emacs<25).
@@ -497,7 +497,7 @@ the 'nlinum' package from GNU ELPA instead. The former has better
497performance, but the latter is closer to a drop-in replacement. 497performance, but the latter is closer to a drop-in replacement.
498 498
4991. To use 'display-line-numbers-mode', add something like this to your 4991. To use 'display-line-numbers-mode', add something like this to your
500 Init file: 500 init file:
501 501
502 (global-display-line-numbers-mode 1) 502 (global-display-line-numbers-mode 1)
503 ;; Alternatively, to use it only in programming modes: 503 ;; Alternatively, to use it only in programming modes:
@@ -517,7 +517,7 @@ performance, but the latter is closer to a drop-in replacement.
517 517
518--- 518---
519** The thumbs.el library is now obsolete. 519** The thumbs.el library is now obsolete.
520We recommend using command 'image-dired' instead. 520We recommend using the 'image-dired' command instead.
521 521
522--- 522---
523** The autoarg.el library is now marked obsolete. 523** The autoarg.el library is now marked obsolete.
@@ -577,7 +577,7 @@ encoding, only for decoding.
577** New user option 'major-mode-remap-alist' to specify favorite major modes. 577** New user option 'major-mode-remap-alist' to specify favorite major modes.
578This user option lets you remap the default modes (e.g. 'perl-mode' or 578This user option lets you remap the default modes (e.g. 'perl-mode' or
579'latex-mode') to your favorite ones (e.g. 'cperl-mode' or 579'latex-mode') to your favorite ones (e.g. 'cperl-mode' or
580'LaTeX-mode') without having to use 'defalias', which can have 580'LaTeX-mode') instead of having to use 'defalias', which can have
581undesirable side effects. 581undesirable side effects.
582This applies to all modes specified via 'auto-mode-alist', file-local 582This applies to all modes specified via 'auto-mode-alist', file-local
583variables, etc. 583variables, etc.
@@ -587,6 +587,8 @@ variables, etc.
587 587
588--- 588---
589** New user option 'electric-quote-replace-consecutive'. 589** New user option 'electric-quote-replace-consecutive'.
590This allows you to disable the default behavior of consecutive single
591quotes being replaced with a double quote.
590 592
591--- 593---
592** Emacs is now capable of editing files with very long lines. 594** Emacs is now capable of editing files with very long lines.
@@ -801,7 +803,7 @@ element: 'set-minibuffer-message', which displays echo-area messages
801at the end of the minibuffer text when the minibuffer is active. 803at the end of the minibuffer text when the minibuffer is active.
802Other useful functions include 'inhibit-message', which allows 804Other useful functions include 'inhibit-message', which allows
803specifying, via 'inhibit-message-regexps', the list of messages whose 805specifying, via 'inhibit-message-regexps', the list of messages whose
804display shall be inhibited; and 'set-multi-message' that accumulates 806display should be inhibited; and 'set-multi-message' that accumulates
805recent messages and displays them stacked together. 807recent messages and displays them stacked together.
806 808
807--- 809---
@@ -902,7 +904,7 @@ frame's contents will be hidden, leaving only the title bar on display.
902--- 904---
903** New user option 'x-gtk-use-native-input'. 905** New user option 'x-gtk-use-native-input'.
904This controls whether or not GTK input methods are used by Emacs, 906This controls whether or not GTK input methods are used by Emacs,
905instead of XIM input methods. 907instead of XIM input methods. Defaults to nil.
906 908
907+++ 909+++
908** New user option 'use-system-tooltips'. 910** New user option 'use-system-tooltips'.
@@ -999,17 +1001,17 @@ combinations in a graphical menu system.
999 1001
1000+++ 1002+++
1001*** New command 'emoji-search' (bound to 'C-x 8 e s'). 1003*** New command 'emoji-search' (bound to 'C-x 8 e s').
1002This command lets you search for Emoji based on names. 1004This command lets you search for and insert an Emoji based on names.
1003 1005
1004+++ 1006+++
1005*** New command 'emoji-list' (bound to 'C-x 8 e l'). 1007*** New command 'emoji-list' (bound to 'C-x 8 e l').
1006This command lists all Emoji (categorized by themes) in a special 1008This command lists all Emoji (categorized by themes) in a special
1007buffer and lets you choose one of them. 1009buffer and lets you choose one of them to insert.
1008 1010
1009--- 1011---
1010*** New command 'emoji-recent' (bound to 'C-x 8 e r'). 1012*** New command 'emoji-recent' (bound to 'C-x 8 e r').
1011This command lets you choose among the Emoji you have recently 1013This command lets you choose among the Emoji you have recently
1012inserted. 1014inserted and insert it.
1013 1015
1014+++ 1016+++
1015*** New command 'emoji-describe' (bound to 'C-x 8 e d'). 1017*** New command 'emoji-describe' (bound to 'C-x 8 e d').
@@ -1043,7 +1045,7 @@ quotes removed.
1043 1045
1044--- 1046---
1045*** 'M-x apropos-variable' output now includes values of variables. 1047*** 'M-x apropos-variable' output now includes values of variables.
1046Such apropos buffer is more easily viewed with outlining after 1048Such an apropos buffer is more easily viewed with outlining after
1047enabling 'outline-minor-mode' in 'apropos-mode'. 1049enabling 'outline-minor-mode' in 'apropos-mode'.
1048 1050
1049+++ 1051+++
@@ -1075,7 +1077,7 @@ This has been changed to:
1075+++ 1077+++
1076*** The 'C-h .' command now accepts a prefix argument. 1078*** The 'C-h .' command now accepts a prefix argument.
1077'C-u C-h .' would previously inhibit displaying a warning message if 1079'C-u C-h .' would previously inhibit displaying a warning message if
1078there's no local help at point. This has been changed to call 1080there was no local help at point. This has been changed to call
1079'button-describe'/'widget-describe' and display button/widget help 1081'button-describe'/'widget-describe' and display button/widget help
1080instead. 1082instead.
1081 1083
@@ -1128,7 +1130,7 @@ helpful commands for various tasks. You can toggle the display using
1128'C-h C-q'. 1130'C-h C-q'.
1129 1131
1130** Emacs now comes with Org v9.6. 1132** Emacs now comes with Org v9.6.
1131See the file "ORG-NEWS" for user-visible changes in Org. 1133See the file "etc/ORG-NEWS" for user-visible changes in Org.
1132 1134
1133** Outline Mode 1135** Outline Mode
1134 1136
@@ -1191,12 +1193,13 @@ the display of several buffers in a row more amenable.
1191 1193
1192+++ 1194+++
1193*** New buffer display action alist entry 'lru-frames'. 1195*** New buffer display action alist entry 'lru-frames'.
1194This allows to specify which frames 'display-buffer' should consider 1196This allows specifying which frames 'display-buffer' should consider
1195when using a window that shows another buffer. 1197when using a window that shows another buffer. It is interpreted as
1198per the ALL-FRAMES argument of 'get-lru-window'.
1196 1199
1197+++ 1200+++
1198*** New buffer display action alist entry 'lru-time'. 1201*** New buffer display action alist entry 'lru-time'.
1199'display-buffer' will ignore windows with a use time higher than that 1202'display-buffer' will ignore windows with a use time higher than this
1200when using a window that shows another buffer. 1203when using a window that shows another buffer.
1201 1204
1202+++ 1205+++
@@ -1206,12 +1209,14 @@ making it a less likely candidate for displaying another buffer.
1206 1209
1207+++ 1210+++
1208*** New buffer display action alist entry 'window-min-width'. 1211*** New buffer display action alist entry 'window-min-width'.
1209This allows to specify a minimum width of the window used to display a 1212This allows specifying a preferred minimum width of the window used to
1210buffer. 1213display a buffer.
1211 1214
1212--- 1215---
1213*** You can customize on which window 'scroll-other-window' operates. 1216*** You can specify on which window 'scroll-other-window' operates.
1214This is controlled by the new 'other-window-scroll-default' variable. 1217This is controlled by the new 'other-window-scroll-default' variable,
1218which should be set to a function that returns a window. When this
1219variable is nil, 'next-window' is used.
1215 1220
1216** Frames 1221** Frames
1217 1222
@@ -1274,17 +1279,19 @@ respond within N seconds. The default is to wait forever.
1274+++ 1279+++
1275*** 'server-stop-automatically' can be used to automatically stop the server. 1280*** 'server-stop-automatically' can be used to automatically stop the server.
1276The Emacs server will be automatically stopped when certain conditions 1281The Emacs server will be automatically stopped when certain conditions
1277are met. The conditions are given by the argument, which can be 1282are met. The conditions are determined by the argument to
1278'empty', 'delete-frame' or 'kill-terminal'. 1283'server-stop-automatically', which can be 'empty', 'delete-frame' or
1284'kill-terminal'.
1279 1285
1280** Rcirc 1286** Rcirc
1281 1287
1282+++ 1288+++
1283*** New command 'rcirc-when'. 1289*** New command 'rcirc-when'.
1290This shows the reception time of the message at point (if available).
1284 1291
1285+++ 1292+++
1286*** New user option 'rcirc-cycle-completion-flag'. 1293*** New user option 'rcirc-cycle-completion-flag'.
1287Rcirc will use the default 'completion-at-point' mechanism. The 1294Rcirc now uses the default 'completion-at-point' mechanism. The
1288conventional IRC behavior of completing by cycling through the 1295conventional IRC behavior of completing by cycling through the
1289available options can be restored by enabling this option. 1296available options can be restored by enabling this option.
1290 1297
@@ -1869,13 +1876,26 @@ packages checked out using 'package-vc-install'.
1869+++ 1876+++
1870*** New command 'package-report-bug'. 1877*** New command 'package-report-bug'.
1871This command helps you compose an email for sending bug reports to 1878This command helps you compose an email for sending bug reports to
1872package maintainers. 1879package maintainers, and is bound to 'b' in the "*Packages*" buffer.
1873 1880
1874+++ 1881+++
1875*** New user option 'package-vc-selected-packages'. 1882*** New user option 'package-vc-selected-packages'.
1876By customizing this user option you can specify specific packages to 1883By customizing this user option you can specify specific packages to
1877install. 1884install.
1878 1885
1886---
1887*** New user option 'package-install-upgrade-built-in'.
1888When enabled, 'package-install' will include in the list of
1889upgradeable packages those built-in packages (like Eglot and
1890use-package, for example) for which a newer version is available in
1891package archives, and will allow installing those newer versions. By
1892default, this is disabled; however, if 'package-install' is invoked
1893with a prefix argument, it will act as if this new option were
1894enabled.
1895
1896If you customize this option, we recommend you place its non-default
1897setting in your early-init file.
1898
1879** Emacs Sessions (Desktop) 1899** Emacs Sessions (Desktop)
1880 1900
1881+++ 1901+++
@@ -1933,8 +1953,8 @@ displayed in a window.
1933 1953
1934+++ 1954+++
1935*** New user option 'compilation-hidden-output'. 1955*** New user option 'compilation-hidden-output'.
1936This can be used to make specific parts of compilation output 1956This regular expression can be used to make specific parts of
1937invisible. 1957compilation output invisible.
1938 1958
1939+++ 1959+++
1940*** The 'compilation-auto-jump-to-first-error' user option has been extended. 1960*** The 'compilation-auto-jump-to-first-error' user option has been extended.
@@ -2317,7 +2337,7 @@ EUDC inline expansion result formatting defaulted to
2317 ("%s %s <%s>" firstname name email) 2337 ("%s %s <%s>" firstname name email)
2318 2338
2319Since email address specifications need to comply with RFC 5322 in 2339Since email address specifications need to comply with RFC 5322 in
2320order to be useful in messages, there was a risk to produce syntax 2340order to be useful in messages, there was a risk of producing syntax
2321which was standard with RFC 822, but is marked as obsolete syntax by 2341which was standard with RFC 822, but is marked as obsolete syntax by
2322its successor RFC 5322. Also, the first and last name part was never 2342its successor RFC 5322. Also, the first and last name part was never
2323enclosed in double quotes, potentially producing invalid address 2343enclosed in double quotes, potentially producing invalid address
@@ -2351,8 +2371,8 @@ used to select the entry type in the ecomplete database.
2351+++ 2371+++
2352*** New back-end for mailabbrev. 2372*** New back-end for mailabbrev.
2353A new back-end for mailabbrev allows information from that database to 2373A new back-end for mailabbrev allows information from that database to
2354be queried by EUDC, too. The attributes 'email', 'name', and 'firstname' 2374be queried by EUDC, too. Only the attributes 'email', 'name', and
2355are supported only. 2375'firstname' are supported.
2356 2376
2357** EWW/SHR 2377** EWW/SHR
2358 2378
@@ -2599,14 +2619,14 @@ as opposed to via the command-line.
2599+++ 2619+++
2600*** New command 'image-transform-fit-to-window'. 2620*** New command 'image-transform-fit-to-window'.
2601This command fits the image to the current window by scaling down or 2621This command fits the image to the current window by scaling down or
2602up as necessary. Unlike 'image-transform-fit-both', this does not 2622up as necessary. Unlike 'image-transform-fit-both', this can scale
2603only scale the image down, but up as well. It is bound to 's w' in 2623the image up as well as down. It is bound to 's w' in Image Mode by
2604Image Mode by default. 2624default.
2605 2625
2606--- 2626---
2607*** New command 'image-mode-wallpaper-set'. 2627*** New command 'image-mode-wallpaper-set'.
2608This command sets the desktop background to the current image. It is 2628This command sets the desktop background to the current image. It is
2609bound to 'W' by default. 2629bound to 'W' in Image Mode by default.
2610 2630
2611+++ 2631+++
2612*** 'image-transform-fit-to-{height,width}' are now obsolete. 2632*** 'image-transform-fit-to-{height,width}' are now obsolete.
@@ -2624,14 +2644,14 @@ much (in percent). It is nil by default, which means no limit.
2624 2644
2625--- 2645---
2626*** New user option 'image-text-based-formats'. 2646*** New user option 'image-text-based-formats'.
2627This controls whether or not to show a message when opening certain 2647This controls whether or not to show a message, when opening certain
2628image formats saying how to edit it as text. The default is to show 2648image formats, explaining how to edit it as text. The default is to
2629this message for SVG and XPM. 2649show this message for SVG and XPM.
2630 2650
2631+++ 2651+++
2632*** New command 'image-transform-set-percent'. 2652*** New command 'image-transform-set-percent'.
2633It allows setting the image size to a percentage of its original size, 2653It allows resizing the image to a percentage of its original size, and
2634and is bound to 's p' in Image mode. 2654is bound to 's p' in Image mode.
2635 2655
2636+++ 2656+++
2637*** 'image-transform-original' renamed to 'image-transform-reset-to-original'. 2657*** 'image-transform-original' renamed to 'image-transform-reset-to-original'.
@@ -3244,6 +3264,10 @@ based on data provided by language servers using the Language Server
3244Protocol (LSP). See the new Info manual "(eglot) Top" for more. Also 3264Protocol (LSP). See the new Info manual "(eglot) Top" for more. Also
3245see "etc/EGLOT-NEWS". 3265see "etc/EGLOT-NEWS".
3246 3266
3267If you want to be able to use 'package-install' to upgrade Eglot to
3268newer versions released on GNU ELPA, customize the new option
3269'package-install-upgrade-built-in' to a non-nil value.
3270
3247+++ 3271+++
3248** use-package: Declarative package configuration. 3272** use-package: Declarative package configuration.
3249use-package is now shipped with Emacs. It provides the 'use-package' 3273use-package is now shipped with Emacs. It provides the 'use-package'
@@ -3251,6 +3275,10 @@ macro, which allows you to isolate package configuration in your init
3251file in a way that is declarative, tidy, and performance-oriented. 3275file in a way that is declarative, tidy, and performance-oriented.
3252See the new Info manual "(use-package) Top" for more. 3276See the new Info manual "(use-package) Top" for more.
3253 3277
3278If you want to be able to use 'package-install' to upgrade use-package
3279to newer versions released on GNU ELPA, customize the new option
3280'package-install-upgrade-built-in' to a non-nil value.
3281
3254--- 3282---
3255** New package 'wallpaper'. 3283** New package 'wallpaper'.
3256This package provides the command 'wallpaper-set', which sets the 3284This package provides the command 'wallpaper-set', which sets the
@@ -3915,9 +3943,9 @@ connection-local profile.
3915+++ 3943+++
3916*** New macro 'with-connection-local-application-variables'. 3944*** New macro 'with-connection-local-application-variables'.
3917This macro works like 'with-connection-local-variables', but it allows 3945This macro works like 'with-connection-local-variables', but it allows
3918to use another application but 'tramp'. This is useful when running 3946using another application instead of 'tramp'. This is useful when
3919code in a buffer where Tramp has already set some connection-local 3947running code in a buffer where Tramp has already set some
3920variables. 3948connection-local variables.
3921 3949
3922+++ 3950+++
3923*** New macro 'setq-connection-local'. 3951*** New macro 'setq-connection-local'.
@@ -3996,8 +4024,8 @@ This returns a list of sub-sequences of the specified sequence.
3996 4024
3997+++ 4025+++
3998*** New function 'seq-remove-at-position'. 4026*** New function 'seq-remove-at-position'.
3999This function returns a copy of the specified sequence where the 4027This function returns a copy of the specified sequence with the
4000element at a given (zero-based) index got removed. 4028element at a given (zero-based) index removed.
4001 4029
4002+++ 4030+++
4003*** New function 'seq-positions'. 4031*** New function 'seq-positions'.
@@ -4065,7 +4093,7 @@ that quote character has to be escaped to avoid Emacs displaying it as
4065 4093
4066 (setq foo '(1 2 3)) 4094 (setq foo '(1 2 3))
4067 4095
4068invalid. Emacs will now warn during byte compilation if it seems 4096invalid. Emacs will now warn during byte compilation if it sees
4069something like that, and also warn about when using RIGHT/LEFT SINGLE 4097something like that, and also warn about when using RIGHT/LEFT SINGLE
4070QUOTATION MARK directly. In both these cases, if these characters 4098QUOTATION MARK directly. In both these cases, if these characters
4071should really be present in the docstring, they should be quoted with 4099should really be present in the docstring, they should be quoted with
@@ -4125,7 +4153,7 @@ example for benchmarking purposes.
4125** New function 'string-edit'. 4153** New function 'string-edit'.
4126This is meant to be used when the user has to edit a (potentially) 4154This is meant to be used when the user has to edit a (potentially)
4127long string. It pops up a new buffer where you can edit the string, 4155long string. It pops up a new buffer where you can edit the string,
4128and a callback is called when the user types 'C-c C-c'. 4156and the provided callback is called when the user types 'C-c C-c'.
4129 4157
4130+++ 4158+++
4131** New function 'read-string-from-buffer'. 4159** New function 'read-string-from-buffer'.
@@ -4271,7 +4299,7 @@ them towards or away from each other.
4271 4299
4272+++ 4300+++
4273** New hook 'x-pre-popup-menu-hook'. 4301** New hook 'x-pre-popup-menu-hook'.
4274This hook, run before 'x-popup-menu', is about to display a 4302This hook is run before 'x-popup-menu' is about to display a
4275deck-of-cards menu on screen. 4303deck-of-cards menu on screen.
4276 4304
4277--- 4305---
@@ -4372,8 +4400,8 @@ switch to these new functions.
4372+++ 4400+++
4373*** 'define-key' now takes an optional REMOVE argument. 4401*** 'define-key' now takes an optional REMOVE argument.
4374If non-nil, remove the definition from the keymap. This is subtly 4402If non-nil, remove the definition from the keymap. This is subtly
4375different from setting a definition to nil (when the keymap has a 4403different from setting a definition to nil: when the keymap has a
4376parent). 4404parent such a definition will shadow the parent's definition.
4377 4405
4378+++ 4406+++
4379*** 'read-multiple-choice' now takes an optional SHOW-HELP argument. 4407*** 'read-multiple-choice' now takes an optional SHOW-HELP argument.
diff --git a/etc/refcards/orgcard.tex b/etc/refcards/orgcard.tex
index f8894d9dc1c..c5d112dba72 100644
--- a/etc/refcards/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -1,5 +1,5 @@
1% Reference Card for Org Mode 1% Reference Card for Org Mode
2\def\orgversionnumber{9.6.3} 2\def\orgversionnumber{9.6.4}
3\def\versionyear{2023} % latest update 3\def\versionyear{2023} % latest update
4\input emacsver.tex 4\input emacsver.tex
5 5
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 685f983e285..240ea10cbfc 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -795,6 +795,21 @@ specifying the minimum acceptable version."
795 (require 'finder-inf nil t) ; For `package--builtins'. 795 (require 'finder-inf nil t) ; For `package--builtins'.
796 (assq package package--builtins)))))) 796 (assq package package--builtins))))))
797 797
798(defun package--active-built-in-p (package)
799 "Return non-nil if the built-in version of PACKAGE is used.
800If the built-in version of PACKAGE is used and PACKAGE is
801also available for installation from an archive, it is an
802indication that PACKAGE was never upgraded to any newer
803version from the archive."
804 (and (not (assq (cond
805 ((package-desc-p package)
806 (package-desc-name package))
807 ((stringp package) (intern package))
808 ((symbolp package) package)
809 ((error "Unknown package format: %S" package)))
810 (package--alist)))
811 (package-built-in-p package)))
812
798(defun package--autoloads-file-name (pkg-desc) 813(defun package--autoloads-file-name (pkg-desc)
799 "Return the absolute name of the autoloads file, sans extension. 814 "Return the absolute name of the autoloads file, sans extension.
800PKG-DESC is a `package-desc' object." 815PKG-DESC is a `package-desc' object."
@@ -2178,12 +2193,18 @@ using `package-compute-transaction'."
2178 (unless package-archive-contents 2193 (unless package-archive-contents
2179 (package-refresh-contents))) 2194 (package-refresh-contents)))
2180 2195
2196(defcustom package-install-upgrade-built-in nil
2197 "Non-nil means that built-in packages can be upgraded via a package archive.
2198If disabled, then `package-install' will not suggest to replace a
2199built-in package with a (possibly newer) version from a package archive."
2200 :type 'boolean
2201 :version "29.1")
2202
2181;;;###autoload 2203;;;###autoload
2182(defun package-install (pkg &optional dont-select) 2204(defun package-install (pkg &optional dont-select)
2183 "Install the package PKG. 2205 "Install the package PKG.
2184PKG can be a `package-desc' or a symbol naming one of the 2206PKG can be a `package-desc' or a symbol naming one of the
2185available packages in an archive in `package-archives'. When 2207available packages in an archive in `package-archives'.
2186called interactively, prompt for the package name.
2187 2208
2188Mark the installed package as selected by adding it to 2209Mark the installed package as selected by adding it to
2189`package-selected-packages'. 2210`package-selected-packages'.
@@ -2193,7 +2214,11 @@ non-nil, install the package but do not add it to
2193`package-selected-packages'. 2214`package-selected-packages'.
2194 2215
2195If PKG is a `package-desc' and it is already installed, don't try 2216If PKG is a `package-desc' and it is already installed, don't try
2196to install it but still mark it as selected." 2217to install it but still mark it as selected.
2218
2219If the command is invoked with a prefix argument, it will allow
2220upgrading of built-in packages, as if `package-install-upgrade-built-in'
2221had been enabled."
2197 (interactive 2222 (interactive
2198 (progn 2223 (progn
2199 ;; Initialize the package system to get the list of package 2224 ;; Initialize the package system to get the list of package
@@ -2201,11 +2226,14 @@ to install it but still mark it as selected."
2201 (package--archives-initialize) 2226 (package--archives-initialize)
2202 (list (intern (completing-read 2227 (list (intern (completing-read
2203 "Install package: " 2228 "Install package: "
2204 (delq nil 2229 (mapcan
2205 (mapcar (lambda (elt) 2230 (lambda (elt)
2206 (unless (package-installed-p (car elt)) 2231 (and (or (and (or current-prefix-arg
2207 (symbol-name (car elt)))) 2232 package-install-upgrade-built-in)
2208 package-archive-contents)) 2233 (package--active-built-in-p (car elt)))
2234 (not (package-installed-p (car elt))))
2235 (list (symbol-name (car elt)))))
2236 package-archive-contents)
2209 nil t)) 2237 nil t))
2210 nil))) 2238 nil)))
2211 (package--archives-initialize) 2239 (package--archives-initialize)
@@ -2216,6 +2244,9 @@ to install it but still mark it as selected."
2216 (unless (or dont-select (package--user-selected-p name)) 2244 (unless (or dont-select (package--user-selected-p name))
2217 (package--save-selected-packages 2245 (package--save-selected-packages
2218 (cons name package-selected-packages))) 2246 (cons name package-selected-packages)))
2247 (when (and (or current-prefix-arg package-install-upgrade-built-in)
2248 (package--active-built-in-p pkg))
2249 (setq pkg (or (cadr (assq name package-archive-contents)) pkg)))
2219 (if-let* ((transaction 2250 (if-let* ((transaction
2220 (if (package-desc-p pkg) 2251 (if (package-desc-p pkg)
2221 (unless (package-installed-p pkg) 2252 (unless (package-installed-p pkg)
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 8d3fe010af4..b35424a8581 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -4359,8 +4359,10 @@ If COND is a function, METHOD will be inserted if COND returns
4359a non-nil value when called in the message buffer without any 4359a non-nil value when called in the message buffer without any
4360arguments. If METHOD is nil in this case, the return value of 4360arguments. If METHOD is nil in this case, the return value of
4361the function will be inserted instead. 4361the function will be inserted instead.
4362If the buffer already has a\"X-Message-SMTP-Method\" header, 4362
4363it is left unchanged." 4363Note: if the buffer already has a \"X-Message-SMTP-Method\"
4364header, these rules are ignored, and the header is left
4365unchanged."
4364 :type '(alist :key-type (choice 4366 :type '(alist :key-type (choice
4365 (string :tag "From Address") 4367 (string :tag "From Address")
4366 (function :tag "Predicate")) 4368 (function :tag "Predicate"))
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index a939cc0b509..1966193d1a7 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -592,22 +592,22 @@ the C sources, too."
592 ;; First collect all the printed representations of menus. 592 ;; First collect all the printed representations of menus.
593 (dolist (menu menus) 593 (dolist (menu menus)
594 (let ((map (lookup-key global-map (seq-take menu 1))) 594 (let ((map (lookup-key global-map (seq-take menu 1)))
595 (string nil)) 595 (string nil)
596 (sep (if (char-displayable-p ?→) " → " " => ")))
596 (seq-do-indexed 597 (seq-do-indexed
597 (lambda (entry level) 598 (lambda (entry level)
598 (when (symbolp map) 599 (when (symbolp map)
599 (setq map (symbol-function map))) 600 (setq map (symbol-function map)))
600 (when-let ((elem (assq entry (cdr map)))) 601 (when-let ((elem (assq entry (cdr map))))
601 (when (> level 0) 602 (when (> level 0)
602 (push (if (char-displayable-p ?→) 603 (push sep string))
603 " → "
604 " => ")
605 string))
606 (if (eq (nth 1 elem) 'menu-item) 604 (if (eq (nth 1 elem) 'menu-item)
607 (progn 605 (progn
608 (push (nth 2 elem) string) 606 (push (propertize (nth 2 elem) 'face 'help-key-binding)
607 string)
609 (setq map (cadddr elem))) 608 (setq map (cadddr elem)))
610 (push (nth 1 elem) string) 609 (push (propertize (nth 1 elem) 'face 'help-key-binding)
610 string)
611 (setq map (cddr elem))))) 611 (setq map (cddr elem)))))
612 (cdr (seq-into menu 'list))) 612 (cdr (seq-into menu 'list)))
613 (when string 613 (when string
@@ -622,8 +622,7 @@ the C sources, too."
622 (cond ((zerop i) "") 622 (cond ((zerop i) "")
623 ((= i (1- (length menus))) " and ") 623 ((= i (1- (length menus))) " and ")
624 (t ", ")) 624 (t ", "))
625 (propertize (string-join (nreverse string)) 625 (string-join (nreverse string))))
626 'face 'help-key-binding)))
627 strings)))) 626 strings))))
628 627
629(defun help-fns--compiler-macro (function) 628(defun help-fns--compiler-macro (function)
diff --git a/lisp/org/ob-tangle.el b/lisp/org/ob-tangle.el
index 27443fc2e81..980d4a12054 100644
--- a/lisp/org/ob-tangle.el
+++ b/lisp/org/ob-tangle.el
@@ -158,9 +158,9 @@ result. The default value is `org-remove-indentation'."
158 :version "24.1" 158 :version "24.1"
159 :type 'function) 159 :type 'function)
160 160
161(defcustom org-babel-tangle-default-file-mode #o544 161(defcustom org-babel-tangle-default-file-mode #o644
162 "The default mode used for tangled files, as an integer. 162 "The default mode used for tangled files, as an integer.
163The default value 356 correspands to the octal #o544, which is 163The default value 420 correspands to the octal #o644, which is
164read-write permissions for the user, read-only for everyone else." 164read-write permissions for the user, read-only for everyone else."
165 :group 'org-babel-tangle 165 :group 'org-babel-tangle
166 :package-version '(Org . "9.6") 166 :package-version '(Org . "9.6")
@@ -361,9 +361,9 @@ Did you give the decimal value %1$d by mistake?" mode)))
361 ;; Match regexp taken from `file-modes-symbolic-to-number'. 361 ;; Match regexp taken from `file-modes-symbolic-to-number'.
362 (file-modes-symbolic-to-number mode org-babel-tangle-default-file-mode)) 362 (file-modes-symbolic-to-number mode org-babel-tangle-default-file-mode))
363 ((string-match-p "^[r-][w-][xs-][r-][w-][xs-][r-][w-][x-]$" mode) 363 ((string-match-p "^[r-][w-][xs-][r-][w-][xs-][r-][w-][x-]$" mode)
364 (file-modes-symbolic-to-number (concat "u=" (substring mode 0 3) 364 (file-modes-symbolic-to-number (concat "u=" (delete ?- (substring mode 0 3))
365 ",g=" (substring mode 3 6) 365 ",g=" (delete ?- (substring mode 3 6))
366 ",o=" (substring mode 6 9)) 366 ",o=" (delete ?- (substring mode 6 9)))
367 0)) 367 0))
368 (t (error "File mode %S not recognized as a valid format. See `org-babel-interpret-file-mode'." mode)))) 368 (t (error "File mode %S not recognized as a valid format. See `org-babel-interpret-file-mode'." mode))))
369 369
diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index 2ec2f4c00bc..d3e61643190 100644
--- a/lisp/org/org-agenda.el
+++ b/lisp/org/org-agenda.el
@@ -7724,8 +7724,7 @@ The optional argument TYPE tells the agenda type."
7724 (unless (string= org-agenda-todo-keyword-format "") 7724 (unless (string= org-agenda-todo-keyword-format "")
7725 ;; Remove `display' property as the icon could leak 7725 ;; Remove `display' property as the icon could leak
7726 ;; on the white space. 7726 ;; on the white space.
7727 (org-add-props " " (org-plist-delete (text-properties-at 0 x) 7727 (apply #'propertize " " (org-plist-delete (text-properties-at 0 x) 'display)))
7728 'display)))
7729 (substring x (match-end 3))))))) 7728 (substring x (match-end 3)))))))
7730 x))) 7729 x)))
7731 7730
diff --git a/lisp/org/org-element.el b/lisp/org/org-element.el
index 51729b3f33d..517d45b0224 100644
--- a/lisp/org/org-element.el
+++ b/lisp/org/org-element.el
@@ -5329,7 +5329,7 @@ seconds.")
5329 "Duration, as a time value, of the pause between synchronizations. 5329 "Duration, as a time value, of the pause between synchronizations.
5330See `org-element-cache-sync-duration' for more information.") 5330See `org-element-cache-sync-duration' for more information.")
5331 5331
5332(defvar org-element--cache-self-verify t 5332(defvar org-element--cache-self-verify nil
5333 "Activate extra consistency checks for the cache. 5333 "Activate extra consistency checks for the cache.
5334 5334
5335This may cause serious performance degradation depending on the value 5335This may cause serious performance degradation depending on the value
diff --git a/lisp/org/org-macs.el b/lisp/org/org-macs.el
index 8d7b0b034f8..aef05bc6ee6 100644
--- a/lisp/org/org-macs.el
+++ b/lisp/org/org-macs.el
@@ -36,6 +36,10 @@
36 36
37;;; Org version verification. 37;;; Org version verification.
38 38
39(defconst org--built-in-p nil
40 "When non-nil, assume that Org is a part of Emacs source.
41For internal use only. See Emacs bug #62762.
42This variable is only supposed to be changed by Emacs build scripts.")
39(defmacro org-assert-version () 43(defmacro org-assert-version ()
40 "Assert compile time and runtime version match." 44 "Assert compile time and runtime version match."
41 ;; We intentionally use a more permissive `org-release' instead of 45 ;; We intentionally use a more permissive `org-release' instead of
@@ -45,7 +49,7 @@
45 ;; `org-assert-version' calls would fail using strict 49 ;; `org-assert-version' calls would fail using strict
46 ;; `org-git-version' check because the generated Org version strings 50 ;; `org-git-version' check because the generated Org version strings
47 ;; will not match. 51 ;; will not match.
48 `(unless (equal (org-release) ,(org-release)) 52 `(unless (or org--built-in-p (equal (org-release) ,(org-release)))
49 (warn "Org version mismatch. Org loading aborted. 53 (warn "Org version mismatch. Org loading aborted.
50This warning usually appears when a built-in Org version is loaded 54This warning usually appears when a built-in Org version is loaded
51prior to the more recent Org version. 55prior to the more recent Org version.
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index a38f2a283d7..42f234790c5 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -5414,12 +5414,10 @@ overwritten, and the table is not marked as requiring realignment."
5414 (self-insert-command N)) 5414 (self-insert-command N))
5415 (setq org-table-may-need-update t) 5415 (setq org-table-may-need-update t)
5416 (let* (orgtbl-mode 5416 (let* (orgtbl-mode
5417 a
5418 (cmd (or (key-binding 5417 (cmd (or (key-binding
5419 (or (and (listp function-key-map) 5418 (or (and (listp function-key-map)
5420 (setq a (assoc last-input-event function-key-map)) 5419 (cdr (assoc last-command-event function-key-map)))
5421 (cdr a)) 5420 (vector last-command-event)))
5422 (vector last-input-event)))
5423 'self-insert-command))) 5421 'self-insert-command)))
5424 (call-interactively cmd) 5422 (call-interactively cmd)
5425 (if (and org-self-insert-cluster-for-undo 5423 (if (and org-self-insert-cluster-for-undo
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index 43fdcb82832..15e4a50877a 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -5,13 +5,13 @@
5(defun org-release () 5(defun org-release ()
6 "The release version of Org. 6 "The release version of Org.
7Inserted by installing Org mode or when a release is made." 7Inserted by installing Org mode or when a release is made."
8 (let ((org-release "9.6.3")) 8 (let ((org-release "9.6.4"))
9 org-release)) 9 org-release))
10;;;###autoload 10;;;###autoload
11(defun org-git-version () 11(defun org-git-version ()
12 "The Git version of Org mode. 12 "The Git version of Org mode.
13Inserted by installing Org or when a release is made." 13Inserted by installing Org or when a release is made."
14 (let ((org-git-version "release_9.6.3-2-gf2949d")) 14 (let ((org-git-version "release_9.6.4-2-g0f6ae7"))
15 org-git-version)) 15 org-git-version))
16 16
17(provide 'org-version) 17(provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index be9d0e32dd0..f7c2b6d16d1 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -9,7 +9,7 @@
9;; URL: https://orgmode.org 9;; URL: https://orgmode.org
10;; Package-Requires: ((emacs "26.1")) 10;; Package-Requires: ((emacs "26.1"))
11 11
12;; Version: 9.6.3 12;; Version: 9.6.4
13 13
14;; This file is part of GNU Emacs. 14;; This file is part of GNU Emacs.
15;; 15;;
@@ -9143,7 +9143,8 @@ nil or a string to be used for the todo mark." )
9143 (replace-match "0" t nil nil 1))))) 9143 (replace-match "0" t nil nil 1)))))
9144 9144
9145(defvar org-state) 9145(defvar org-state)
9146(defvar org-blocked-by-checkboxes) 9146;; FIXME: We should refactor this and similar dynamically scoped blocker flags.
9147(defvar org-blocked-by-checkboxes nil) ; dynamically scoped
9147(defun org-todo (&optional arg) 9148(defun org-todo (&optional arg)
9148 "Change the TODO state of an item. 9149 "Change the TODO state of an item.
9149 9150
diff --git a/lisp/org/ox-latex.el b/lisp/org/ox-latex.el
index 50a0950aa04..26f8742bec8 100644
--- a/lisp/org/ox-latex.el
+++ b/lisp/org/ox-latex.el
@@ -1822,7 +1822,7 @@ INFO is a plist used as a communication channel. See
1822 (replace-regexp-in-string 1822 (replace-regexp-in-string
1823 "--\\|[\\{}$%&_#~^]" 1823 "--\\|[\\{}$%&_#~^]"
1824 (lambda (m) 1824 (lambda (m)
1825 (cond ((equal m "--") "-{}-") 1825 (cond ((equal m "--") "-{}-{}")
1826 ((equal m "\\") "\\textbackslash{}") 1826 ((equal m "\\") "\\textbackslash{}")
1827 ((equal m "~") "\\textasciitilde{}") 1827 ((equal m "~") "\\textasciitilde{}")
1828 ((equal m "^") "\\textasciicircum{}") 1828 ((equal m "^") "\\textasciicircum{}")
diff --git a/lisp/org/ox-odt.el b/lisp/org/ox-odt.el
index cf217c9e781..03c909f78ed 100644
--- a/lisp/org/ox-odt.el
+++ b/lisp/org/ox-odt.el
@@ -2923,17 +2923,23 @@ contextual information."
2923 ;; not be desired in scripts that do not separate words with 2923 ;; not be desired in scripts that do not separate words with
2924 ;; spaces (for example, Han script). `fill-region' is able to 2924 ;; spaces (for example, Han script). `fill-region' is able to
2925 ;; handle such situations. 2925 ;; handle such situations.
2926 ;; FIXME: The unnecessary spaced may still remain when a newline 2926 ;; FIXME: The unnecessary spacing may still remain when a newline
2927 ;; is at a boundary between Org objects (e.g. italics markup 2927 ;; is at a boundary between Org objects (e.g. italics markup
2928 ;; followed by newline). 2928 ;; followed by newline).
2929 (setq output 2929 (setq output
2930 (with-temp-buffer 2930 (with-temp-buffer
2931 (insert output)
2932 (save-match-data 2931 (save-match-data
2933 (let ((leading (and (string-match (rx bos (1+ blank)) output) 2932 (let ((leading (and (string-match (rx bos (1+ blank)) output)
2934 (match-string 0 output))) 2933 (match-string 0 output)))
2935 (trailing (and (string-match (rx (1+ blank) eos) output) 2934 (trailing (and (string-match (rx (1+ blank) eos) output)
2936 (match-string 0 output)))) 2935 (match-string 0 output))))
2936 (insert
2937 (substring
2938 output
2939 (length leading)
2940 (pcase (length trailing)
2941 (0 nil)
2942 (n (- n)))))
2937 ;; Unfill, retaining leading/trailing space. 2943 ;; Unfill, retaining leading/trailing space.
2938 (let ((fill-column most-positive-fixnum)) 2944 (let ((fill-column most-positive-fixnum))
2939 (fill-region (point-min) (point-max))) 2945 (fill-region (point-min) (point-max)))
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index e93a0fec707..2309aa00fc9 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -193,9 +193,17 @@ To set the default indent style globally, use
193 (c-ts-mode--get-indent-style 193 (c-ts-mode--get-indent-style
194 (if (derived-mode-p 'c-ts-mode) 'c 'cpp)))))) 194 (if (derived-mode-p 'c-ts-mode) 'c 'cpp))))))
195 195
196(defvar c-ts-mode-emacs-devel nil 196(defcustom c-ts-mode-emacs-sources-support t
197 "If the value is t, enable Emacs source-specific features. 197 "Whether to enable Emacs source-specific features.
198This needs to be set before enabling `c-ts-mode'.") 198This enables detection of definitions of Lisp function using
199the DEFUN macro.
200This needs to be set before enabling `c-ts-mode'; if you change
201the value after enabling `c-ts-mode', toggle the mode off and on
202again."
203 :version "29.1"
204 :type 'boolean
205 :safe 'booleanp
206 :group 'c)
199 207
200;;; Syntax table 208;;; Syntax table
201 209
@@ -671,7 +679,7 @@ MODE is either `c' or `cpp'."
671 :override t 679 :override t
672 '(((call_expression 680 '(((call_expression
673 (call_expression function: (identifier) @fn) 681 (call_expression function: (identifier) @fn)
674 @c-ts-mode--fontify-defun) 682 @c-ts-mode--fontify-DEFUN)
675 (:match "^DEFUN$" @fn))))) 683 (:match "^DEFUN$" @fn)))))
676 684
677;;; Font-lock helpers 685;;; Font-lock helpers
@@ -735,14 +743,14 @@ OVERRIDE, START, END, and ARGS, see `treesit-font-lock-rules'."
735 (treesit-node-start node) (treesit-node-end node) 743 (treesit-node-start node) (treesit-node-end node)
736 'font-lock-variable-use-face override start end))) 744 'font-lock-variable-use-face override start end)))
737 745
738(defun c-ts-mode--fontify-defun (node override start end &rest _) 746(defun c-ts-mode--fontify-DEFUN (node override start end &rest _)
739 "Correctly fontify the DEFUN macro. 747 "Correctly fontify calls to the DEFUN macro in Emacs sources.
740For NODE, OVERRIDE, START, and END, see 748For NODE, OVERRIDE, START, and END, see
741`treesit-font-lock-rules'. The captured NODE is a 749`treesit-font-lock-rules'. The captured NODE is a
742call_expression where DEFUN is the function. 750call_expression node, where DEFUN is the function.
743 751
744This function corrects the fontification on the colon in 752This function corrects the fontification of the colon in
745\"doc:\", and the parameter list." 753\"doc:\", and of the parameter list."
746 (let* ((parent (treesit-node-parent node)) 754 (let* ((parent (treesit-node-parent node))
747 ;; ARG-LIST-1 and 2 are like this: 755 ;; ARG-LIST-1 and 2 are like this:
748 ;; 756 ;;
@@ -808,7 +816,7 @@ Return nil if NODE is not a defun node or doesn't have a name."
808 "union_specifier" "class_specifier" 816 "union_specifier" "class_specifier"
809 "namespace_definition") 817 "namespace_definition")
810 (treesit-node-child-by-field-name node "name")) 818 (treesit-node-child-by-field-name node "name"))
811 ;; DEFUNs in Emacs source. 819 ;; DEFUNs in Emacs sources.
812 ("expression_statement" 820 ("expression_statement"
813 (let* ((call-exp-1 (treesit-node-child node 0)) 821 (let* ((call-exp-1 (treesit-node-child node 0))
814 (call-exp-2 (treesit-node-child call-exp-1 0)) 822 (call-exp-2 (treesit-node-child call-exp-1 0))
@@ -885,7 +893,9 @@ the semicolon. This function skips the semicolon."
885 (list node parent bol))) 893 (list node parent bol)))
886 894
887(defun c-ts-mode--emacs-defun-p (node) 895(defun c-ts-mode--emacs-defun-p (node)
888 "Return non-nil if NODE is a DEFUN in Emacs source files." 896 "Return non-nil if NODE is a Lisp function defined using DEFUN.
897This function detects Lisp primitives defined in Emacs source
898files using the DEFUN macro."
889 (and (equal (treesit-node-type node) "expression_statement") 899 (and (equal (treesit-node-type node) "expression_statement")
890 (equal (treesit-node-text 900 (equal (treesit-node-text
891 (treesit-node-child-by-field-name 901 (treesit-node-child-by-field-name
@@ -896,23 +906,25 @@ the semicolon. This function skips the semicolon."
896 "DEFUN"))) 906 "DEFUN")))
897 907
898(defun c-ts-mode--emacs-defun-at-point (&optional range) 908(defun c-ts-mode--emacs-defun-at-point (&optional range)
899 "Return the current defun node. 909 "Return the defun node at point.
900 910
901This function recognizes DEFUNs in Emacs source files. 911In addition to regular C functions, this function recognizes
912definitions of Lisp primitrives in Emacs source files using DEFUN,
913if `c-ts-mode-emacs-sources-support' is non-nil.
902 914
903Note that for the case of a DEFUN, it is made of two separate 915Note that DEFUN is parsed by tree-sitter as two separate
904nodes, one for the declaration and one for the body, this 916nodes, one for the declaration and one for the body; this
905function returns the declaration node. 917function returns the declaration node.
906 918
907If RANGE is non-nil, return (BEG . END) where BEG end END 919If RANGE is non-nil, return (BEG . END) where BEG end END
908encloses the whole defun. This solves the problem of only 920encloses the whole defun. This is for when the entire defun
909returning the declaration part for DEFUN." 921is required, not just the declaration part for DEFUN."
910 (or (when-let ((node (treesit-defun-at-point))) 922 (or (when-let ((node (treesit-defun-at-point)))
911 (if range 923 (if range
912 (cons (treesit-node-start node) 924 (cons (treesit-node-start node)
913 (treesit-node-end node)) 925 (treesit-node-end node))
914 node)) 926 node))
915 (and c-ts-mode-emacs-devel 927 (and c-ts-mode-emacs-sources-support
916 (let ((candidate-1 ; For when point is in the DEFUN statement. 928 (let ((candidate-1 ; For when point is in the DEFUN statement.
917 (treesit-node-prev-sibling 929 (treesit-node-prev-sibling
918 (treesit-node-top-level 930 (treesit-node-top-level
@@ -945,9 +957,10 @@ returning the declaration part for DEFUN."
945 957
946(defun c-ts-mode--emacs-current-defun-name () 958(defun c-ts-mode--emacs-current-defun-name ()
947 "Return the name of the current defun. 959 "Return the name of the current defun.
948This is used for `add-log-current-defun-function'. This 960This is used for `add-log-current-defun-function'.
949recognizes DEFUN in Emacs sources, in addition to normal function 961In addition to regular C functions, this function also recognizes
950definitions." 962Emacs primitives defined using DEFUN in Emacs sources,
963if `c-ts-mode-emacs-sources-support' is non-nil."
951 (or (treesit-add-log-current-defun) 964 (or (treesit-add-log-current-defun)
952 (c-ts-mode--defun-name (c-ts-mode--emacs-defun-at-point)))) 965 (c-ts-mode--defun-name (c-ts-mode--emacs-defun-at-point))))
953 966
@@ -1096,7 +1109,7 @@ in your configuration."
1096 (setq-local treesit-defun-tactic 'top-level) 1109 (setq-local treesit-defun-tactic 'top-level)
1097 (treesit-major-mode-setup) 1110 (treesit-major-mode-setup)
1098 1111
1099 (when c-ts-mode-emacs-devel 1112 (when c-ts-mode-emacs-sources-support
1100 (setq-local add-log-current-defun-function 1113 (setq-local add-log-current-defun-function
1101 #'c-ts-mode--emacs-current-defun-name)))) 1114 #'c-ts-mode--emacs-current-defun-name))))
1102 1115
@@ -1141,7 +1154,8 @@ recommended to enable `electric-pair-mode' with this mode."
1141 ;; Font-lock. 1154 ;; Font-lock.
1142 (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 'cpp)) 1155 (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 'cpp))
1143 (treesit-major-mode-setup) 1156 (treesit-major-mode-setup)
1144 (when c-ts-mode-emacs-devel 1157
1158 (when c-ts-mode-emacs-sources-support
1145 (setq-local add-log-current-defun-function 1159 (setq-local add-log-current-defun-function
1146 #'c-ts-mode--emacs-current-defun-name)))) 1160 #'c-ts-mode--emacs-current-defun-name))))
1147 1161
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index fe0c986d746..3134d55fc08 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -215,11 +215,11 @@ chosen (interactively or automatically)."
215 ((R-mode ess-r-mode) . ("R" "--slave" "-e" 215 ((R-mode ess-r-mode) . ("R" "--slave" "-e"
216 "languageserver::run()")) 216 "languageserver::run()"))
217 ((java-mode java-ts-mode) . ("jdtls")) 217 ((java-mode java-ts-mode) . ("jdtls"))
218 (dart-mode . ("dart" "language-server" 218 ((dart-mode dart-ts-mode)
219 "--client-id" "emacs.eglot-dart")) 219 . ("dart" "language-server"
220 "--client-id" "emacs.eglot-dart"))
220 ((elixir-mode elixir-ts-mode heex-ts-mode) 221 ((elixir-mode elixir-ts-mode heex-ts-mode)
221 . ,(if (and (fboundp 'w32-shell-dos-semantics) 222 . ,(if (and (fboundp 'w32-shell-dos-semantics) (w32-shell-dos-semantics))
222 (w32-shell-dos-semantics))
223 '("language_server.bat") 223 '("language_server.bat")
224 '("language_server.sh"))) 224 '("language_server.sh")))
225 (ada-mode . ("ada_language_server")) 225 (ada-mode . ("ada_language_server"))
@@ -1707,7 +1707,7 @@ under cursor."
1707 (const :tag "Go to definition" :definitionProvider) 1707 (const :tag "Go to definition" :definitionProvider)
1708 (const :tag "Go to type definition" :typeDefinitionProvider) 1708 (const :tag "Go to type definition" :typeDefinitionProvider)
1709 (const :tag "Go to implementation" :implementationProvider) 1709 (const :tag "Go to implementation" :implementationProvider)
1710 (const :tag "Go to declaration" :implementationProvider) 1710 (const :tag "Go to declaration" :declarationProvider)
1711 (const :tag "Find references" :referencesProvider) 1711 (const :tag "Find references" :referencesProvider)
1712 (const :tag "Highlight symbols automatically" :documentHighlightProvider) 1712 (const :tag "Highlight symbols automatically" :documentHighlightProvider)
1713 (const :tag "List symbols in buffer" :documentSymbolProvider) 1713 (const :tag "List symbols in buffer" :documentSymbolProvider)
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 060957eac29..260b0270831 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -2406,7 +2406,7 @@ a GDB/MI reply message."
2406 ("+" . ()) 2406 ("+" . ())
2407 ("=" . (("thread-created" . (gdb-thread-created . atomic)) 2407 ("=" . (("thread-created" . (gdb-thread-created . atomic))
2408 ("thread-selected" . (gdb-thread-selected . atomic)) 2408 ("thread-selected" . (gdb-thread-selected . atomic))
2409 ("thread-existed" . (gdb-ignored-notification . atomic)) 2409 ("thread-exited" . (gdb-thread-exited . atomic))
2410 ('default . (gdb-ignored-notification . atomic))))) 2410 ('default . (gdb-ignored-notification . atomic)))))
2411 "Alist of alists, mapping the type and class of message to a handler function. 2411 "Alist of alists, mapping the type and class of message to a handler function.
2412Handler functions are all flagged as either `progressive' or `atomic'. 2412Handler functions are all flagged as either `progressive' or `atomic'.
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index d8bd6bc2685..c6667c075f6 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -2192,14 +2192,17 @@ to add functions and PL/SQL keywords.")
2192 2192
2193 ;; Postgres Data Types 2193 ;; Postgres Data Types
2194 (sql-font-lock-keywords-builder 'font-lock-type-face nil 2194 (sql-font-lock-keywords-builder 'font-lock-type-face nil
2195"bigint" "bigserial" "bit" "bool" "boolean" "box" "bytea" "char" 2195 "bigint" "bigserial" "bit" "bool" "boolean" "box" "bytea" "char" "character"
2196"character" "cidr" "circle" "date" "decimal" "double" "float4" 2196"cidr" "circle" "date" "daterange" "decimal" "double" "float4" "float8" "inet"
2197"float8" "inet" "int" "int2" "int4" "int8" "integer" "interval" "line" 2197"int" "int2" "int4" "int4range" "int8" "int8range" "integer" "interval"
2198"lseg" "macaddr" "money" "name" "numeric" "path" "point" "polygon" 2198"jsonb" "jsonpath" "line" "lseg" "macaddr" "macaddr8" "money" "name" "numeric"
2199"precision" "real" "serial" "serial4" "serial8" "sequences" "smallint" "text" 2199"numrange" "oid" "path" "point" "polygon" "precision" "real" "regclass"
2200"time" "timestamp" "timestamptz" "timetz" "tsquery" "tsvector" 2200"regcollation" "regconfig" "regdictionary" "regnamespace " "regoper"
2201"txid_snapshot" "unknown" "uuid" "varbit" "varchar" "varying" "without" 2201"regoperator" "regproc" "regprocedure" "regrole" "regtype" "sequences"
2202"xml" "zone" 2202"serial" "serial4" "serial8" "smallint" "smallserial" "text" "time"
2203"timestamp" "timestamptz" "timetz" "tsquery" "tsrange" "tstzrange" "tsvector"
2204"txid_snapshot" "unknown" "uuid" "varbit" "varchar" "varying" "without" "xml"
2205"zone"
2203))) 2206)))
2204 2207
2205 "Postgres SQL keywords used by font-lock. 2208 "Postgres SQL keywords used by font-lock.
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index d77024136d0..643eea1b0a3 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1820,16 +1820,22 @@ IGNORES is a list of glob patterns for files to ignore."
1820;; Ripgrep gets jumbled output, though, even with --line-buffered. 1820;; Ripgrep gets jumbled output, though, even with --line-buffered.
1821;; But Grep seems to be stable. Even without --line-buffered. 1821;; But Grep seems to be stable. Even without --line-buffered.
1822(defcustom xref-search-program-alist 1822(defcustom xref-search-program-alist
1823 '((grep 1823 (let ((xargs-max-chars
1824 . 1824 (and (memq system-type '(windows-nt ms-dos))
1825 ;; '-s' because 'git ls-files' can output broken symlinks. 1825 "-s 10000 ")))
1826 "xargs -0 grep <C> --null -snHE -e <R>") 1826 `((grep
1827 (ripgrep 1827 .
1828 . 1828 ;; '-s' because 'git ls-files' can output broken symlinks.
1829 ;; '!*/' is there to filter out dirs (e.g. submodules). 1829 ,(concat "xargs -0 " xargs-max-chars "grep <C> --null -snHE -e <R>"))
1830 "xargs -0 rg <C> --null -nH --no-heading --no-messages -g '!*/' -e <R>" 1830 (ripgrep
1831 ) 1831 .
1832 (ugrep . "xargs -0 ugrep <C> --null -ns -e <R>")) 1832 ;; '!*/' is there to filter out dirs (e.g. submodules).
1833 ,(concat "xargs -0 "
1834 xargs-max-chars
1835 "rg <C> --null -nH --no-heading --no-messages -g '!*/' -e <R>"))
1836 (ugrep
1837 .
1838 ,(concat "xargs -0 " xargs-max-chars "ugrep <C> --null -ns -e <R>"))))
1833 "Association list mapping program identifiers to command templates. 1839 "Association list mapping program identifiers to command templates.
1834 1840
1835Program identifier should be a symbol, named after the search program. 1841Program identifier should be a symbol, named after the search program.
@@ -1844,7 +1850,7 @@ The template should have the following fields:
1844 :type '(repeat 1850 :type '(repeat
1845 (cons (symbol :tag "Program identifier") 1851 (cons (symbol :tag "Program identifier")
1846 (string :tag "Command template"))) 1852 (string :tag "Command template")))
1847 :version "28.1" 1853 :version "29.1"
1848 :package-version '(xref . "1.0.4")) 1854 :package-version '(xref . "1.0.4"))
1849 1855
1850(defcustom xref-search-program 'grep 1856(defcustom xref-search-program 'grep
diff --git a/src/fringe.c b/src/fringe.c
index 5fcb1b27272..ed257c073b9 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -211,14 +211,14 @@ static unsigned short right_curly_arrow_bits[] = {
211 211
212/* Large circle bitmap. */ 212/* Large circle bitmap. */
213/* 213/*
214 ........
215 ..xxxx.. 214 ..xxxx..
216 .xxxxxx. 215 .xxxxxx.
217 xxxxxxxx 216 xxxxxxxx
218 xxxxxxxx 217 xxxxxxxx
218 xxxxxxxx
219 xxxxxxxx
219 .xxxxxx. 220 .xxxxxx.
220 ..xxxx.. 221 ..xxxx..
221 ........
222*/ 222*/
223static unsigned short large_circle_bits[] = { 223static unsigned short large_circle_bits[] = {
224 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c}; 224 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c};
diff --git a/src/keymap.c b/src/keymap.c
index efac410d317..7f5777c9251 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -3308,13 +3308,18 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args,
3308 if (this_shadowed) 3308 if (this_shadowed)
3309 { 3309 {
3310 SET_PT (PT - 1); 3310 SET_PT (PT - 1);
3311 static char const fmt[] = " (currently shadowed by `%s')"; 3311 if (SYMBOLP (shadowed_by))
3312 USE_SAFE_ALLOCA; 3312 {
3313 char *buffer = SAFE_ALLOCA (sizeof fmt + 3313 static char const fmt[] = " (currently shadowed by `%s')";
3314 SBYTES (SYMBOL_NAME (shadowed_by))); 3314 USE_SAFE_ALLOCA;
3315 esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by))); 3315 char *buffer =
3316 insert_string (buffer); 3316 SAFE_ALLOCA (sizeof fmt + SBYTES (SYMBOL_NAME (shadowed_by)));
3317 SAFE_FREE(); 3317 esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by)));
3318 insert_string (buffer);
3319 SAFE_FREE();
3320 }
3321 else /* Could be a keymap, a lambda, or a keyboard macro. */
3322 insert_string (" (currently shadowed)");
3318 SET_PT (PT + 1); 3323 SET_PT (PT + 1);
3319 } 3324 }
3320 } 3325 }
diff --git a/src/term.c b/src/term.c
index d881dee39fe..53ba2a231e4 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4163,7 +4163,15 @@ use the Bourne shell command 'TERM=...; export TERM' (C-shell:\n\
4163 tty->TS_enter_alt_charset_mode = tgetstr ("as", address); 4163 tty->TS_enter_alt_charset_mode = tgetstr ("as", address);
4164 tty->TS_exit_alt_charset_mode = tgetstr ("ae", address); 4164 tty->TS_exit_alt_charset_mode = tgetstr ("ae", address);
4165 tty->TS_exit_attribute_mode = tgetstr ("me", address); 4165 tty->TS_exit_attribute_mode = tgetstr ("me", address);
4166#ifdef TERMINFO
4167 tty->TS_enter_strike_through_mode = tigetstr ("smxx");
4168 if (tty->TS_enter_strike_through_mode == (char *) (intptr_t) -1)
4169 tty->TS_enter_strike_through_mode = NULL;
4170#else
4171 /* FIXME: Is calling tgetstr here for non-terminfo case correct,
4172 even though "smxx" is more than 2 characters? */
4166 tty->TS_enter_strike_through_mode = tgetstr ("smxx", address); 4173 tty->TS_enter_strike_through_mode = tgetstr ("smxx", address);
4174#endif
4167 4175
4168 MultiUp (tty) = tgetstr ("UP", address); 4176 MultiUp (tty) = tgetstr ("UP", address);
4169 MultiDown (tty) = tgetstr ("DO", address); 4177 MultiDown (tty) = tgetstr ("DO", address);