emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master f1ce49d148b: Merge from origin/emacs-29


From: Eli Zaretskii
Subject: master f1ce49d148b: Merge from origin/emacs-29
Date: Fri, 21 Apr 2023 07:30:22 -0400 (EDT)

branch: master
commit f1ce49d148b334a8fb5302c4dd596aceffbb6b57
Merge: 4416262f59f 3899acbb336
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>

    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
---
 doc/emacs/custom.texi       |   1 +
 doc/emacs/mini.texi         |  18 ++++--
 doc/lispref/customize.texi  |   7 ++-
 doc/lispref/loading.texi    |   2 +-
 doc/lispref/variables.texi  |  17 +++---
 doc/misc/org.org            |   5 +-
 etc/NEWS.29                 | 132 +++++++++++++++++++++++++++-----------------
 etc/refcards/orgcard.tex    |   2 +-
 lisp/emacs-lisp/package.el  |  47 +++++++++++++---
 lisp/gnus/message.el        |   6 +-
 lisp/help-fns.el            |  17 +++---
 lisp/org/ob-tangle.el       |  10 ++--
 lisp/org/org-agenda.el      |   3 +-
 lisp/org/org-element.el     |   2 +-
 lisp/org/org-macs.el        |   6 +-
 lisp/org/org-table.el       |   6 +-
 lisp/org/org-version.el     |   4 +-
 lisp/org/org.el             |   5 +-
 lisp/org/ox-latex.el        |   2 +-
 lisp/org/ox-odt.el          |  10 +++-
 lisp/progmodes/c-ts-mode.el |  60 ++++++++++++--------
 lisp/progmodes/eglot.el     |  10 ++--
 lisp/progmodes/gdb-mi.el    |   2 +-
 lisp/progmodes/sql.el       |  19 ++++---
 lisp/progmodes/xref.el      |  28 ++++++----
 src/fringe.c                |   4 +-
 src/keymap.c                |  19 ++++---
 src/term.c                  |   8 +++
 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}.
 These four keywords are not really variables; setting them in any
 other context has no special meaning.
 
+@cindex fallback modes
   If you're editing a file across Emacs versions, and a new mode has
 been introduced to handle a file in a newer Emacs version, you can use
 several @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
 called @code{authorize-me} was defined, Emacs could only complete
 as far as @samp{aut}.)
 
-  If you type @key{TAB} again immediately, it cannot determine the
-next character; it could be @samp{-}, @samp{a}, or @samp{c}.  So it
-does not add any characters; instead, @key{TAB} displays a list of all
-possible completions in another window.
+  If you type @kbd{@key{TAB}} again immediately, it cannot determine
+the next character; it could be @samp{-}, @samp{a}, or @samp{c}.  So
+it does not add any characters; instead, @key{TAB} displays a list of
+all possible completions in another window.
 
   Next, type @kbd{-f}.  The minibuffer now contains @samp{auto-f}, and
 the only command name that starts with this is @code{auto-fill-mode}.
-If you now type @key{TAB}, completion fills in the rest of the
+If you now type @kbd{@key{TAB}}, completion fills in the rest of the
 argument @samp{auto-fill-mode} into the minibuffer.
 
   Hence, typing just @kbd{a u @key{TAB} - f @key{TAB}} allows you to
 enter @samp{auto-fill-mode}.
 
+  @key{TAB} also works while point is not at the end of the
+minibuffer.  In that case, it will fill in text both at point and at
+the end of the minibuffer.  If you type @kbd{M-x autocm}, then press
+@kbd{C-b} to move point before the @samp{m}, you can type
+@kbd{@key{TAB}} to insert the text @samp{onf-} at point and @samp{ode}
+at the end of the minibuffer, so that the minibuffer contains
+@samp{autoconf-mode}.
+
 @node Completion Commands
 @subsection Completion Commands
 
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.
 @end table
 
 @cindex @code{custom-group} property
-The variables and subgroups of a group are stored in the
+The variables, faces, and subgroups of a group are stored in the
 @code{custom-group} property of the group's symbol.  @xref{Symbol
 Plists}.  The value of that property is a list of pairs whose
-@code{car} is the variable or subgroup symbol and the @code{cdr} is
-either @code{custom-variable} or @code{custom-group}.
+@code{car} is the symbol of the variable or the face or the subgroup,
+and the @code{cdr} is one of the corresponding symbols
+@code{custom-variable}, @code{custom-face}, or @code{custom-group}.
 @end defmac
 
 @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
 module.  This is the primitive which makes sure the module exports the
 @code{plugin_is_GPL_compatible} symbol, calls the module's
 @code{emacs_module_init} function, and signals an error if that
-function returns an error indication, or if the use typed @kbd{C-g}
+function returns an error indication, or if the user typed @kbd{C-g}
 during the initialization.  If the initialization succeeds,
 @code{module-load} returns @code{t}.  Note that @var{file} must
 already 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
 environment; if the variable is not specified in there, it looks in
 the symbol's value cell, where the dynamic value is stored.
 
-  (Internally, the lexical environment is an alist of symbol-value
-pairs, with the final element in the alist being the symbol @code{t}
-rather than a cons cell.  Such an alist can be passed as the second
-argument to the @code{eval} function, in order to specify a lexical
-environment in which to evaluate a form.  @xref{Eval}.  Most Emacs
-Lisp programs, however, should not interact directly with lexical
-environments in this way; only specialized programs like debuggers.)
+  (Internally, the lexical environment is a list whose members are
+usually cons cells that are symbol-value pairs, but some of its
+members can be symbols rather than cons cells.  A symbol in the list
+means the lexical environment declared that symbol's variable as
+locally considered to be dynamically bound.  This list can be passed
+as the second argument to the @code{eval} function, in order to
+specify a lexical environment in which to evaluate a form.
+@xref{Eval}.  Most Emacs Lisp programs, however, should not interact
+directly with lexical environments in this way; only specialized
+programs like debuggers.)
 
 @cindex closures, example of using
   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:
   #+findex: org-block
 
   For more complex date specifications, Org mode supports using the
-  special expression diary entries implemented in the Emacs Calendar
-  package[fn:20].  For example, with optional time:
+  special expression diary entries implemented in the
+  [[info:emacs#Special Diary Entries][Emacs Calendar package]][fn:20].
+  For example, with optional time:
 
   #+begin_example
   ,* 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'.
 
 +++
 ** The image commands have changed key bindings.
-In previous Emacs versions, images have had the '+', '-' and 'r' keys
-bound when point is over an image.  In Emacs 29.1, additional commands
-were added, and this made it more likely that users would trigger the
-image commands by mistake.  To avoid this, all image commands have
+In previous Emacs versions, the '+', '-' and 'r' keys were bound when
+point was over an image.  In Emacs 29.1, additional commands have been
+added, and this made it more likely that users would trigger the image
+commands by mistake.  To avoid this, all image commands have been
 moved to the 'i' prefix keymap, so '+' is now 'i +', '-' is now 'i -',
 and 'r' is now 'i r'.  In addition, these commands are now repeating,
-so, for example, you can rotate an image twice by typing 'i r r'.
+so you can rotate an image twice by saying 'i r r', for instance.
 
 +++
 ** Emacs now picks the correct coding-system for X input methods.
@@ -380,7 +380,7 @@ this user option to nil to revert back to the old behavior.
 ---
 ** Support for old EIEIO functions is not autoloaded any more.
 You need an explicit '(require 'eieio-compat)' to use 'defmethod'
-and 'defgeneric' (which have been made obsolete in Emacs 25.1 with
+and 'defgeneric' (which were made obsolete in Emacs 25.1 by
 'cl-defmethod' and 'cl-defgeneric').
 Similarly you might need to '(require 'eieio-compat)' before loading
 files that were compiled with an old EIEIO (Emacs<25).
@@ -497,7 +497,7 @@ the 'nlinum' package from GNU ELPA instead.  The former has 
better
 performance, but the latter is closer to a drop-in replacement.
 
 1. To use 'display-line-numbers-mode', add something like this to your
-   Init file:
+   init file:
 
     (global-display-line-numbers-mode 1)
     ;; Alternatively, to use it only in programming modes:
@@ -517,7 +517,7 @@ performance, but the latter is closer to a drop-in 
replacement.
 
 ---
 ** The thumbs.el library is now obsolete.
-We recommend using command 'image-dired' instead.
+We recommend using the 'image-dired' command instead.
 
 ---
 ** The autoarg.el library is now marked obsolete.
@@ -577,7 +577,7 @@ encoding, only for decoding.
 ** New user option 'major-mode-remap-alist' to specify favorite major modes.
 This user option lets you remap the default modes (e.g. 'perl-mode' or
 'latex-mode') to your favorite ones (e.g. 'cperl-mode' or
-'LaTeX-mode') without having to use 'defalias', which can have
+'LaTeX-mode') instead of having to use 'defalias', which can have
 undesirable side effects.
 This applies to all modes specified via 'auto-mode-alist', file-local
 variables, etc.
@@ -587,6 +587,8 @@ variables, etc.
 
 ---
 ** New user option 'electric-quote-replace-consecutive'.
+This allows you to disable the default behavior of consecutive single
+quotes being replaced with a double quote.
 
 ---
 ** Emacs is now capable of editing files with very long lines.
@@ -801,7 +803,7 @@ element: 'set-minibuffer-message', which displays echo-area 
messages
 at the end of the minibuffer text when the minibuffer is active.
 Other useful functions include 'inhibit-message', which allows
 specifying, via 'inhibit-message-regexps', the list of messages whose
-display shall be inhibited; and 'set-multi-message' that accumulates
+display should be inhibited; and 'set-multi-message' that accumulates
 recent messages and displays them stacked together.
 
 ---
@@ -902,7 +904,7 @@ frame's contents will be hidden, leaving only the title bar 
on display.
 ---
 ** New user option 'x-gtk-use-native-input'.
 This controls whether or not GTK input methods are used by Emacs,
-instead of XIM input methods.
+instead of XIM input methods.  Defaults to nil.
 
 +++
 ** New user option 'use-system-tooltips'.
@@ -999,17 +1001,17 @@ combinations in a graphical menu system.
 
 +++
 *** New command 'emoji-search' (bound to 'C-x 8 e s').
-This command lets you search for Emoji based on names.
+This command lets you search for and insert an Emoji based on names.
 
 +++
 *** New command 'emoji-list' (bound to 'C-x 8 e l').
 This command lists all Emoji (categorized by themes) in a special
-buffer and lets you choose one of them.
+buffer and lets you choose one of them to insert.
 
 ---
 *** New command 'emoji-recent' (bound to 'C-x 8 e r').
 This command lets you choose among the Emoji you have recently
-inserted.
+inserted and insert it.
 
 +++
 *** New command 'emoji-describe' (bound to 'C-x 8 e d').
@@ -1043,7 +1045,7 @@ quotes removed.
 
 ---
 *** 'M-x apropos-variable' output now includes values of variables.
-Such apropos buffer is more easily viewed with outlining after
+Such an apropos buffer is more easily viewed with outlining after
 enabling 'outline-minor-mode' in 'apropos-mode'.
 
 +++
@@ -1075,7 +1077,7 @@ This has been changed to:
 +++
 *** The 'C-h .' command now accepts a prefix argument.
 'C-u C-h .' would previously inhibit displaying a warning message if
-there's no local help at point.  This has been changed to call
+there was no local help at point.  This has been changed to call
 'button-describe'/'widget-describe' and display button/widget help
 instead.
 
@@ -1128,7 +1130,7 @@ helpful commands for various tasks.  You can toggle the 
display using
 'C-h C-q'.
 
 ** Emacs now comes with Org v9.6.
-See the file "ORG-NEWS" for user-visible changes in Org.
+See the file "etc/ORG-NEWS" for user-visible changes in Org.
 
 ** Outline Mode
 
@@ -1191,12 +1193,13 @@ the display of several buffers in a row more amenable.
 
 +++
 *** New buffer display action alist entry 'lru-frames'.
-This allows to specify which frames 'display-buffer' should consider
-when using a window that shows another buffer.
+This allows specifying which frames 'display-buffer' should consider
+when using a window that shows another buffer.  It is interpreted as
+per the ALL-FRAMES argument of 'get-lru-window'.
 
 +++
 *** New buffer display action alist entry 'lru-time'.
-'display-buffer' will ignore windows with a use time higher than that
+'display-buffer' will ignore windows with a use time higher than this
 when using a window that shows another buffer.
 
 +++
@@ -1206,12 +1209,14 @@ making it a less likely candidate for displaying 
another buffer.
 
 +++
 *** New buffer display action alist entry 'window-min-width'.
-This allows to specify a minimum width of the window used to display a
-buffer.
+This allows specifying a preferred minimum width of the window used to
+display a buffer.
 
 ---
-*** You can customize on which window 'scroll-other-window' operates.
-This is controlled by the new 'other-window-scroll-default' variable.
+*** You can specify on which window 'scroll-other-window' operates.
+This is controlled by the new 'other-window-scroll-default' variable,
+which should be set to a function that returns a window.  When this
+variable is nil, 'next-window' is used.
 
 ** Frames
 
@@ -1274,17 +1279,19 @@ respond within N seconds.  The default is to wait 
forever.
 +++
 *** 'server-stop-automatically' can be used to automatically stop the server.
 The Emacs server will be automatically stopped when certain conditions
-are met.  The conditions are given by the argument, which can be
-'empty', 'delete-frame' or 'kill-terminal'.
+are met.  The conditions are determined by the argument to
+'server-stop-automatically', which can be 'empty', 'delete-frame' or
+'kill-terminal'.
 
 ** Rcirc
 
 +++
 *** New command 'rcirc-when'.
+This shows the reception time of the message at point (if available).
 
 +++
 *** New user option 'rcirc-cycle-completion-flag'.
-Rcirc will use the default 'completion-at-point' mechanism.  The
+Rcirc now uses the default 'completion-at-point' mechanism.  The
 conventional IRC behavior of completing by cycling through the
 available options can be restored by enabling this option.
 
@@ -1869,13 +1876,26 @@ packages checked out using 'package-vc-install'.
 +++
 *** New command 'package-report-bug'.
 This command helps you compose an email for sending bug reports to
-package maintainers.
+package maintainers, and is bound to 'b' in the "*Packages*" buffer.
 
 +++
 *** New user option 'package-vc-selected-packages'.
 By customizing this user option you can specify specific packages to
 install.
 
+---
+*** New user option 'package-install-upgrade-built-in'.
+When enabled, 'package-install' will include in the list of
+upgradeable packages those built-in packages (like Eglot and
+use-package, for example) for which a newer version is available in
+package archives, and will allow installing those newer versions.  By
+default, this is disabled; however, if 'package-install' is invoked
+with a prefix argument, it will act as if this new option were
+enabled.
+
+If you customize this option, we recommend you place its non-default
+setting in your early-init file.
+
 ** Emacs Sessions (Desktop)
 
 +++
@@ -1933,8 +1953,8 @@ displayed in a window.
 
 +++
 *** New user option 'compilation-hidden-output'.
-This can be used to make specific parts of compilation output
-invisible.
+This regular expression can be used to make specific parts of
+compilation output invisible.
 
 +++
 *** The 'compilation-auto-jump-to-first-error' user option has been extended.
@@ -2317,7 +2337,7 @@ EUDC inline expansion result formatting defaulted to
     ("%s %s <%s>" firstname name email)
 
 Since email address specifications need to comply with RFC 5322 in
-order to be useful in messages, there was a risk to produce syntax
+order to be useful in messages, there was a risk of producing syntax
 which was standard with RFC 822, but is marked as obsolete syntax by
 its successor RFC 5322.  Also, the first and last name part was never
 enclosed in double quotes, potentially producing invalid address
@@ -2351,8 +2371,8 @@ used to select the entry type in the ecomplete database.
 +++
 *** New back-end for mailabbrev.
 A new back-end for mailabbrev allows information from that database to
-be queried by EUDC, too.  The attributes 'email', 'name', and 'firstname'
-are supported only.
+be queried by EUDC, too.  Only the attributes 'email', 'name', and
+'firstname' are supported.
 
 ** EWW/SHR
 
@@ -2599,14 +2619,14 @@ as opposed to via the command-line.
 +++
 *** New command 'image-transform-fit-to-window'.
 This command fits the image to the current window by scaling down or
-up as necessary.  Unlike 'image-transform-fit-both', this does not
-only scale the image down, but up as well.  It is bound to 's w' in
-Image Mode by default.
+up as necessary.  Unlike 'image-transform-fit-both', this can scale
+the image up as well as down.  It is bound to 's w' in Image Mode by
+default.
 
 ---
 *** New command 'image-mode-wallpaper-set'.
 This command sets the desktop background to the current image.  It is
-bound to 'W' by default.
+bound to 'W' in Image Mode by default.
 
 +++
 *** '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.
 
 ---
 *** New user option 'image-text-based-formats'.
-This controls whether or not to show a message when opening certain
-image formats saying how to edit it as text.  The default is to show
-this message for SVG and XPM.
+This controls whether or not to show a message, when opening certain
+image formats, explaining how to edit it as text.  The default is to
+show this message for SVG and XPM.
 
 +++
 *** New command 'image-transform-set-percent'.
-It allows setting the image size to a percentage of its original size,
-and is bound to 's p' in Image mode.
+It allows resizing the image to a percentage of its original size, and
+is bound to 's p' in Image mode.
 
 +++
 *** '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
 Protocol (LSP).  See the new Info manual "(eglot) Top" for more.  Also
 see "etc/EGLOT-NEWS".
 
+If you want to be able to use 'package-install' to upgrade Eglot to
+newer versions released on GNU ELPA, customize the new option
+'package-install-upgrade-built-in' to a non-nil value.
+
 +++
 ** use-package: Declarative package configuration.
 use-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
 file in a way that is declarative, tidy, and performance-oriented.
 See the new Info manual "(use-package) Top" for more.
 
+If you want to be able to use 'package-install' to upgrade use-package
+to newer versions released on GNU ELPA, customize the new option
+'package-install-upgrade-built-in' to a non-nil value.
+
 ---
 ** New package 'wallpaper'.
 This package provides the command 'wallpaper-set', which sets the
@@ -3915,9 +3943,9 @@ connection-local profile.
 +++
 *** New macro 'with-connection-local-application-variables'.
 This macro works like 'with-connection-local-variables', but it allows
-to use another application but 'tramp'.  This is useful when running
-code in a buffer where Tramp has already set some connection-local
-variables.
+using another application instead of 'tramp'.  This is useful when
+running code in a buffer where Tramp has already set some
+connection-local variables.
 
 +++
 *** New macro 'setq-connection-local'.
@@ -3996,8 +4024,8 @@ This returns a list of sub-sequences of the specified 
sequence.
 
 +++
 *** New function 'seq-remove-at-position'.
-This function returns a copy of the specified sequence where the
-element at a given (zero-based) index got removed.
+This function returns a copy of the specified sequence with the
+element at a given (zero-based) index removed.
 
 +++
 *** New function 'seq-positions'.
@@ -4065,7 +4093,7 @@ that quote character has to be escaped to avoid Emacs 
displaying it as
 
     (setq foo '(1 2 3))
 
-invalid.  Emacs will now warn during byte compilation if it seems
+invalid.  Emacs will now warn during byte compilation if it sees
 something like that, and also warn about when using RIGHT/LEFT SINGLE
 QUOTATION MARK directly.  In both these cases, if these characters
 should really be present in the docstring, they should be quoted with
@@ -4125,7 +4153,7 @@ example for benchmarking purposes.
 ** New function 'string-edit'.
 This is meant to be used when the user has to edit a (potentially)
 long string.  It pops up a new buffer where you can edit the string,
-and a callback is called when the user types 'C-c C-c'.
+and the provided callback is called when the user types 'C-c C-c'.
 
 +++
 ** New function 'read-string-from-buffer'.
@@ -4271,7 +4299,7 @@ them towards or away from each other.
 
 +++
 ** New hook 'x-pre-popup-menu-hook'.
-This hook, run before 'x-popup-menu', is about to display a
+This hook is run before 'x-popup-menu' is about to display a
 deck-of-cards menu on screen.
 
 ---
@@ -4372,8 +4400,8 @@ switch to these new functions.
 +++
 *** 'define-key' now takes an optional REMOVE argument.
 If non-nil, remove the definition from the keymap.  This is subtly
-different from setting a definition to nil (when the keymap has a
-parent).
+different from setting a definition to nil: when the keymap has a
+parent such a definition will shadow the parent's definition.
 
 +++
 *** '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 @@
 % Reference Card for Org Mode
-\def\orgversionnumber{9.6.3}
+\def\orgversionnumber{9.6.4}
 \def\versionyear{2023}          % latest update
 \input emacsver.tex
 
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."
         (require 'finder-inf nil t) ; For `package--builtins'.
         (assq package package--builtins))))))
 
+(defun package--active-built-in-p (package)
+  "Return non-nil if the built-in version of PACKAGE is used.
+If the built-in version of PACKAGE is used and PACKAGE is
+also available for installation from an archive, it is an
+indication that PACKAGE was never upgraded to any newer
+version from the archive."
+  (and (not (assq (cond
+                   ((package-desc-p package)
+                    (package-desc-name package))
+                   ((stringp package) (intern package))
+                   ((symbolp package) package)
+                   ((error "Unknown package format: %S" package)))
+                  (package--alist)))
+       (package-built-in-p package)))
+
 (defun package--autoloads-file-name (pkg-desc)
   "Return the absolute name of the autoloads file, sans extension.
 PKG-DESC is a `package-desc' object."
@@ -2178,12 +2193,18 @@ using `package-compute-transaction'."
   (unless package-archive-contents
     (package-refresh-contents)))
 
+(defcustom package-install-upgrade-built-in nil
+  "Non-nil means that built-in packages can be upgraded via a package archive.
+If disabled, then `package-install' will not suggest to replace a
+built-in package with a (possibly newer) version from a package archive."
+  :type 'boolean
+  :version "29.1")
+
 ;;;###autoload
 (defun package-install (pkg &optional dont-select)
   "Install the package PKG.
 PKG can be a `package-desc' or a symbol naming one of the
-available packages in an archive in `package-archives'.  When
-called interactively, prompt for the package name.
+available packages in an archive in `package-archives'.
 
 Mark the installed package as selected by adding it to
 `package-selected-packages'.
@@ -2193,7 +2214,11 @@ non-nil, install the package but do not add it to
 `package-selected-packages'.
 
 If PKG is a `package-desc' and it is already installed, don't try
-to install it but still mark it as selected."
+to install it but still mark it as selected.
+
+If the command is invoked with a prefix argument, it will allow
+upgrading of built-in packages, as if `package-install-upgrade-built-in'
+had been enabled."
   (interactive
    (progn
      ;; Initialize the package system to get the list of package
@@ -2201,11 +2226,14 @@ to install it but still mark it as selected."
      (package--archives-initialize)
      (list (intern (completing-read
                     "Install package: "
-                    (delq nil
-                          (mapcar (lambda (elt)
-                                    (unless (package-installed-p (car elt))
-                                      (symbol-name (car elt))))
-                                  package-archive-contents))
+                    (mapcan
+                     (lambda (elt)
+                       (and (or (and (or current-prefix-arg
+                                         package-install-upgrade-built-in)
+                                     (package--active-built-in-p (car elt)))
+                                (not (package-installed-p (car elt))))
+                            (list (symbol-name (car elt)))))
+                     package-archive-contents)
                     nil t))
            nil)))
   (package--archives-initialize)
@@ -2216,6 +2244,9 @@ to install it but still mark it as selected."
     (unless (or dont-select (package--user-selected-p name))
       (package--save-selected-packages
        (cons name package-selected-packages)))
+    (when (and (or current-prefix-arg package-install-upgrade-built-in)
+               (package--active-built-in-p pkg))
+      (setq pkg (or (cadr (assq name package-archive-contents)) pkg)))
     (if-let* ((transaction
                (if (package-desc-p pkg)
                    (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
 a non-nil value when called in the message buffer without any
 arguments.  If METHOD is nil in this case, the return value of
 the function will be inserted instead.
-If the buffer already has a\"X-Message-SMTP-Method\" header,
-it is left unchanged."
+
+Note: if the buffer already has a \"X-Message-SMTP-Method\"
+header, these rules are ignored, and the header is left
+unchanged."
   :type '(alist :key-type (choice
                            (string :tag "From Address")
                            (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."
     ;; First collect all the printed representations of menus.
     (dolist (menu menus)
       (let ((map (lookup-key global-map (seq-take menu 1)))
-            (string nil))
+            (string nil)
+            (sep (if (char-displayable-p ?→) " → " " => ")))
         (seq-do-indexed
          (lambda (entry level)
            (when (symbolp map)
              (setq map (symbol-function map)))
            (when-let ((elem (assq entry (cdr map))))
              (when (> level 0)
-               (push (if (char-displayable-p ?→)
-                         " → "
-                       " => ")
-                     string))
+               (push sep string))
              (if (eq (nth 1 elem) 'menu-item)
                  (progn
-                   (push (nth 2 elem) string)
+                   (push (propertize (nth 2 elem) 'face 'help-key-binding)
+                         string)
                    (setq map (cadddr elem)))
-               (push (nth 1 elem) string)
+               (push (propertize (nth 1 elem) 'face 'help-key-binding)
+                     string)
                (setq map (cddr elem)))))
          (cdr (seq-into menu 'list)))
         (when string
@@ -622,8 +622,7 @@ the C sources, too."
           (cond ((zerop i) "")
                 ((= i (1- (length menus))) " and ")
                 (t ", "))
-          (propertize (string-join (nreverse string))
-                      'face 'help-key-binding)))
+          (string-join (nreverse string))))
        strings))))
 
 (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'."
   :version "24.1"
   :type 'function)
 
-(defcustom org-babel-tangle-default-file-mode #o544
+(defcustom org-babel-tangle-default-file-mode #o644
   "The default mode used for tangled files, as an integer.
-The default value 356 correspands to the octal #o544, which is
+The default value 420 correspands to the octal #o644, which is
 read-write permissions for the user, read-only for everyone else."
   :group 'org-babel-tangle
   :package-version '(Org . "9.6")
@@ -361,9 +361,9 @@ Did you give the decimal value %1$d by mistake?" mode)))
     ;; Match regexp taken from `file-modes-symbolic-to-number'.
     (file-modes-symbolic-to-number mode org-babel-tangle-default-file-mode))
    ((string-match-p "^[r-][w-][xs-][r-][w-][xs-][r-][w-][x-]$" mode)
-    (file-modes-symbolic-to-number (concat  "u=" (substring mode 0 3)
-                                            ",g=" (substring mode 3 6)
-                                            ",o=" (substring mode 6 9))
+    (file-modes-symbolic-to-number (concat "u="  (delete ?- (substring mode 0 
3))
+                                           ",g=" (delete ?- (substring mode 3 
6))
+                                           ",o=" (delete ?- (substring mode 6 
9)))
                                    0))
    (t (error "File mode %S not recognized as a valid format. See 
`org-babel-interpret-file-mode'." mode))))
 
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."
                    (unless (string= org-agenda-todo-keyword-format "")
                      ;; Remove `display' property as the icon could leak
                      ;; on the white space.
-                     (org-add-props " " (org-plist-delete (text-properties-at 
0 x)
-                                                          'display)))
+                     (apply #'propertize " " (org-plist-delete 
(text-properties-at 0 x) 'display)))
                    (substring x (match-end 3)))))))
       x)))
 
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.")
   "Duration, as a time value, of the pause between synchronizations.
 See `org-element-cache-sync-duration' for more information.")
 
-(defvar org-element--cache-self-verify t
+(defvar org-element--cache-self-verify nil
   "Activate extra consistency checks for the cache.
 
 This 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 @@
 
 ;;; Org version verification.
 
+(defconst org--built-in-p nil
+  "When non-nil, assume that Org is a part of Emacs source.
+For internal use only.  See Emacs bug #62762.
+This variable is only supposed to be changed by Emacs build scripts.")
 (defmacro org-assert-version ()
   "Assert compile time and runtime version match."
   ;; We intentionally use a more permissive `org-release' instead of
@@ -45,7 +49,7 @@
   ;; `org-assert-version' calls would fail using strict
   ;; `org-git-version' check because the generated Org version strings
   ;; will not match.
-  `(unless (equal (org-release) ,(org-release))
+  `(unless (or org--built-in-p (equal (org-release) ,(org-release)))
      (warn "Org version mismatch.  Org loading aborted.
 This warning usually appears when a built-in Org version is loaded
 prior 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."
        (self-insert-command N))
     (setq org-table-may-need-update t)
     (let* (orgtbl-mode
-          a
           (cmd (or (key-binding
                     (or (and (listp function-key-map)
-                             (setq a (assoc last-input-event function-key-map))
-                             (cdr a))
-                        (vector last-input-event)))
+                             (cdr (assoc last-command-event function-key-map)))
+                        (vector last-command-event)))
                    'self-insert-command)))
       (call-interactively cmd)
       (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 @@
 (defun org-release ()
   "The release version of Org.
 Inserted by installing Org mode or when a release is made."
-   (let ((org-release "9.6.3"))
+   (let ((org-release "9.6.4"))
      org-release))
 ;;;###autoload
 (defun org-git-version ()
   "The Git version of Org mode.
 Inserted by installing Org or when a release is made."
-   (let ((org-git-version "release_9.6.3-2-gf2949d"))
+   (let ((org-git-version "release_9.6.4-2-g0f6ae7"))
      org-git-version))
 
 (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 @@
 ;; URL: https://orgmode.org
 ;; Package-Requires: ((emacs "26.1"))
 
-;; Version: 9.6.3
+;; Version: 9.6.4
 
 ;; This file is part of GNU Emacs.
 ;;
@@ -9143,7 +9143,8 @@ nil or a string to be used for the todo mark." )
        (replace-match "0" t nil nil 1)))))
 
 (defvar org-state)
-(defvar org-blocked-by-checkboxes)
+;; FIXME: We should refactor this and similar dynamically scoped blocker flags.
+(defvar org-blocked-by-checkboxes nil) ; dynamically scoped
 (defun org-todo (&optional arg)
   "Change the TODO state of an item.
 
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
           (replace-regexp-in-string
            "--\\|[\\{}$%&_#~^]"
            (lambda (m)
-             (cond ((equal m "--") "-{}-")
+             (cond ((equal m "--") "-{}-{}")
                    ((equal m "\\") "\\textbackslash{}")
                    ((equal m "~") "\\textasciitilde{}")
                    ((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."
       ;; not be desired in scripts that do not separate words with
       ;; spaces (for example, Han script).  `fill-region' is able to
       ;; handle such situations.
-      ;; FIXME: The unnecessary spaced may still remain when a newline
+      ;; FIXME: The unnecessary spacing may still remain when a newline
       ;; is at a boundary between Org objects (e.g. italics markup
       ;; followed by newline).
       (setq output
             (with-temp-buffer
-              (insert output)
               (save-match-data
                 (let ((leading (and (string-match (rx bos (1+ blank)) output)
                                     (match-string 0 output)))
                       (trailing (and (string-match (rx (1+ blank) eos) output)
                                      (match-string 0 output))))
+                  (insert
+                   (substring
+                    output
+                    (length leading)
+                    (pcase (length trailing)
+                      (0 nil)
+                      (n (- n)))))
                   ;; Unfill, retaining leading/trailing space.
                   (let ((fill-column most-positive-fixnum))
                     (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
            (c-ts-mode--get-indent-style
             (if (derived-mode-p 'c-ts-mode) 'c 'cpp))))))
 
-(defvar c-ts-mode-emacs-devel nil
-  "If the value is t, enable Emacs source-specific features.
-This needs to be set before enabling `c-ts-mode'.")
+(defcustom c-ts-mode-emacs-sources-support t
+  "Whether to enable Emacs source-specific features.
+This enables detection of definitions of Lisp function using
+the DEFUN macro.
+This needs to be set before enabling `c-ts-mode'; if you change
+the value after enabling `c-ts-mode', toggle the mode off and on
+again."
+  :version "29.1"
+  :type 'boolean
+  :safe 'booleanp
+  :group 'c)
 
 ;;; Syntax table
 
@@ -671,7 +679,7 @@ MODE is either `c' or `cpp'."
    :override t
    '(((call_expression
        (call_expression function: (identifier) @fn)
-       @c-ts-mode--fontify-defun)
+       @c-ts-mode--fontify-DEFUN)
       (:match "^DEFUN$" @fn)))))
 
 ;;; Font-lock helpers
@@ -735,14 +743,14 @@ OVERRIDE, START, END, and ARGS, see 
`treesit-font-lock-rules'."
      (treesit-node-start node) (treesit-node-end node)
      'font-lock-variable-use-face override start end)))
 
-(defun c-ts-mode--fontify-defun (node override start end &rest _)
-  "Correctly fontify the DEFUN macro.
+(defun c-ts-mode--fontify-DEFUN (node override start end &rest _)
+  "Correctly fontify calls to the DEFUN macro in Emacs sources.
 For NODE, OVERRIDE, START, and END, see
 `treesit-font-lock-rules'.  The captured NODE is a
-call_expression where DEFUN is the function.
+call_expression node, where DEFUN is the function.
 
-This function corrects the fontification on the colon in
-\"doc:\", and the parameter list."
+This function corrects the fontification of the colon in
+\"doc:\", and of the parameter list."
   (let* ((parent (treesit-node-parent node))
          ;; ARG-LIST-1 and 2 are like this:
          ;;
@@ -808,7 +816,7 @@ Return nil if NODE is not a defun node or doesn't have a 
name."
           "union_specifier" "class_specifier"
           "namespace_definition")
       (treesit-node-child-by-field-name node "name"))
-     ;; DEFUNs in Emacs source.
+     ;; DEFUNs in Emacs sources.
      ("expression_statement"
       (let* ((call-exp-1 (treesit-node-child node 0))
              (call-exp-2 (treesit-node-child call-exp-1 0))
@@ -885,7 +893,9 @@ the semicolon.  This function skips the semicolon."
     (list node parent bol)))
 
 (defun c-ts-mode--emacs-defun-p (node)
-  "Return non-nil if NODE is a DEFUN in Emacs source files."
+  "Return non-nil if NODE is a Lisp function defined using DEFUN.
+This function detects Lisp primitives defined in Emacs source
+files using the DEFUN macro."
   (and (equal (treesit-node-type node) "expression_statement")
        (equal (treesit-node-text
                (treesit-node-child-by-field-name
@@ -896,23 +906,25 @@ the semicolon.  This function skips the semicolon."
               "DEFUN")))
 
 (defun c-ts-mode--emacs-defun-at-point (&optional range)
-  "Return the current defun node.
+  "Return the defun node at point.
 
-This function recognizes DEFUNs in Emacs source files.
+In addition to regular C functions, this function recognizes
+definitions of Lisp primitrives in Emacs source files using DEFUN,
+if `c-ts-mode-emacs-sources-support' is non-nil.
 
-Note that for the case of a DEFUN, it is made of two separate
-nodes, one for the declaration and one for the body, this
+Note that DEFUN is parsed by tree-sitter as two separate
+nodes, one for the declaration and one for the body; this
 function returns the declaration node.
 
 If RANGE is non-nil, return (BEG . END) where BEG end END
-encloses the whole defun.  This solves the problem of only
-returning the declaration part for DEFUN."
+encloses the whole defun.  This is for when the entire defun
+is required, not just the declaration part for DEFUN."
   (or (when-let ((node (treesit-defun-at-point)))
         (if range
             (cons (treesit-node-start node)
                 (treesit-node-end node))
             node))
-      (and c-ts-mode-emacs-devel
+      (and c-ts-mode-emacs-sources-support
            (let ((candidate-1 ; For when point is in the DEFUN statement.
                   (treesit-node-prev-sibling
                    (treesit-node-top-level
@@ -945,9 +957,10 @@ returning the declaration part for DEFUN."
 
 (defun c-ts-mode--emacs-current-defun-name ()
   "Return the name of the current defun.
-This is used for `add-log-current-defun-function'.  This
-recognizes DEFUN in Emacs sources, in addition to normal function
-definitions."
+This is used for `add-log-current-defun-function'.
+In addition to regular C functions, this function also recognizes
+Emacs primitives defined using DEFUN in Emacs sources,
+if `c-ts-mode-emacs-sources-support' is non-nil."
   (or (treesit-add-log-current-defun)
       (c-ts-mode--defun-name (c-ts-mode--emacs-defun-at-point))))
 
@@ -1096,7 +1109,7 @@ in your configuration."
     (setq-local treesit-defun-tactic 'top-level)
     (treesit-major-mode-setup)
 
-    (when c-ts-mode-emacs-devel
+    (when c-ts-mode-emacs-sources-support
       (setq-local add-log-current-defun-function
                   #'c-ts-mode--emacs-current-defun-name))))
 
@@ -1141,7 +1154,8 @@ recommended to enable `electric-pair-mode' with this 
mode."
     ;; Font-lock.
     (setq-local treesit-font-lock-settings (c-ts-mode--font-lock-settings 
'cpp))
     (treesit-major-mode-setup)
-    (when c-ts-mode-emacs-devel
+
+    (when c-ts-mode-emacs-sources-support
       (setq-local add-log-current-defun-function
                   #'c-ts-mode--emacs-current-defun-name))))
 
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)."
                                 ((R-mode ess-r-mode) . ("R" "--slave" "-e"
                                                         
"languageserver::run()"))
                                 ((java-mode java-ts-mode) . ("jdtls"))
-                                (dart-mode . ("dart" "language-server"
-                                              "--client-id" 
"emacs.eglot-dart"))
+                                ((dart-mode dart-ts-mode)
+                                 . ("dart" "language-server"
+                                    "--client-id" "emacs.eglot-dart"))
                                 ((elixir-mode elixir-ts-mode heex-ts-mode)
-                                 . ,(if (and (fboundp 'w32-shell-dos-semantics)
-                                             (w32-shell-dos-semantics))
+                                 . ,(if (and (fboundp 
'w32-shell-dos-semantics)                                             
(w32-shell-dos-semantics))
                                         '("language_server.bat")
                                       '("language_server.sh")))
                                 (ada-mode . ("ada_language_server"))
@@ -1707,7 +1707,7 @@ under cursor."
           (const :tag "Go to definition" :definitionProvider)
           (const :tag "Go to type definition" :typeDefinitionProvider)
           (const :tag "Go to implementation" :implementationProvider)
-          (const :tag "Go to declaration" :implementationProvider)
+          (const :tag "Go to declaration" :declarationProvider)
           (const :tag "Find references" :referencesProvider)
           (const :tag "Highlight symbols automatically" 
:documentHighlightProvider)
           (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."
     ("+" . ())
     ("=" . (("thread-created" . (gdb-thread-created . atomic))
             ("thread-selected" . (gdb-thread-selected . atomic))
-            ("thread-existed" . (gdb-ignored-notification . atomic))
+            ("thread-exited" . (gdb-thread-exited . atomic))
             ('default . (gdb-ignored-notification . atomic)))))
   "Alist of alists, mapping the type and class of message to a handler 
function.
 Handler 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.")
 
      ;; Postgres Data Types
      (sql-font-lock-keywords-builder 'font-lock-type-face nil
-"bigint" "bigserial" "bit" "bool" "boolean" "box" "bytea" "char"
-"character" "cidr" "circle" "date" "decimal" "double" "float4"
-"float8" "inet" "int" "int2" "int4" "int8" "integer" "interval" "line"
-"lseg" "macaddr" "money" "name" "numeric" "path" "point" "polygon"
-"precision" "real" "serial" "serial4" "serial8" "sequences" "smallint" "text"
-"time" "timestamp" "timestamptz" "timetz" "tsquery" "tsvector"
-"txid_snapshot" "unknown" "uuid" "varbit" "varchar" "varying" "without"
-"xml" "zone"
+ "bigint" "bigserial" "bit" "bool" "boolean" "box" "bytea" "char" "character"
+"cidr" "circle" "date" "daterange" "decimal" "double" "float4" "float8" "inet"
+"int" "int2" "int4" "int4range" "int8" "int8range" "integer" "interval"
+"jsonb" "jsonpath" "line" "lseg" "macaddr" "macaddr8" "money" "name" "numeric"
+"numrange" "oid" "path" "point" "polygon" "precision" "real" "regclass"
+"regcollation" "regconfig" "regdictionary" "regnamespace " "regoper"
+"regoperator" "regproc" "regprocedure" "regrole" "regtype" "sequences"
+"serial" "serial4" "serial8" "smallint" "smallserial" "text" "time"
+"timestamp" "timestamptz" "timetz" "tsquery" "tsrange" "tstzrange" "tsvector"
+"txid_snapshot" "unknown" "uuid" "varbit" "varchar" "varying" "without" "xml"
+"zone"
 )))
 
   "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."
 ;; Ripgrep gets jumbled output, though, even with --line-buffered.
 ;; But Grep seems to be stable. Even without --line-buffered.
 (defcustom xref-search-program-alist
-  '((grep
-     .
-     ;; '-s' because 'git ls-files' can output broken symlinks.
-     "xargs -0 grep <C> --null -snHE -e <R>")
-    (ripgrep
-     .
-     ;; '!*/' is there to filter out dirs (e.g. submodules).
-     "xargs -0 rg <C> --null -nH --no-heading --no-messages -g '!*/' -e <R>"
-     )
-    (ugrep . "xargs -0 ugrep <C> --null -ns -e <R>"))
+  (let ((xargs-max-chars
+         (and (memq system-type '(windows-nt ms-dos))
+              "-s 10000 ")))
+    `((grep
+       .
+       ;; '-s' because 'git ls-files' can output broken symlinks.
+       ,(concat "xargs -0 " xargs-max-chars "grep <C> --null -snHE -e <R>"))
+      (ripgrep
+       .
+       ;; '!*/' is there to filter out dirs (e.g. submodules).
+       ,(concat "xargs -0 "
+                xargs-max-chars
+                "rg <C> --null -nH --no-heading --no-messages -g '!*/' -e 
<R>"))
+      (ugrep
+       .
+       ,(concat "xargs -0 " xargs-max-chars "ugrep <C> --null -ns -e <R>"))))
   "Association list mapping program identifiers to command templates.
 
 Program identifier should be a symbol, named after the search program.
@@ -1844,7 +1850,7 @@ The template should have the following fields:
   :type '(repeat
           (cons (symbol :tag "Program identifier")
                 (string :tag "Command template")))
-  :version "28.1"
+  :version "29.1"
   :package-version '(xref . "1.0.4"))
 
 (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[] = {
 
 /* Large circle bitmap.  */
 /*
-  ........
   ..xxxx..
   .xxxxxx.
   xxxxxxxx
   xxxxxxxx
+  xxxxxxxx
+  xxxxxxxx
   .xxxxxx.
   ..xxxx..
-  ........
 */
 static unsigned short large_circle_bits[] = {
   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,
       if (this_shadowed)
        {
          SET_PT (PT - 1);
-         static char const fmt[] = "  (currently shadowed by `%s')";
-         USE_SAFE_ALLOCA;
-         char *buffer = SAFE_ALLOCA (sizeof fmt +
-                                     SBYTES (SYMBOL_NAME (shadowed_by)));
-         esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by)));
-         insert_string (buffer);
-         SAFE_FREE();
+         if (SYMBOLP (shadowed_by))
+           {
+             static char const fmt[] = "  (currently shadowed by `%s')";
+             USE_SAFE_ALLOCA;
+             char *buffer =
+               SAFE_ALLOCA (sizeof fmt + SBYTES (SYMBOL_NAME (shadowed_by)));
+             esprintf (buffer, fmt, SDATA (SYMBOL_NAME (shadowed_by)));
+             insert_string (buffer);
+             SAFE_FREE();
+           }
+         else  /* Could be a keymap, a lambda, or a keyboard macro.  */
+           insert_string ("  (currently shadowed)");
          SET_PT (PT + 1);
        }
     }
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\
   tty->TS_enter_alt_charset_mode = tgetstr ("as", address);
   tty->TS_exit_alt_charset_mode = tgetstr ("ae", address);
   tty->TS_exit_attribute_mode = tgetstr ("me", address);
+#ifdef TERMINFO
+  tty->TS_enter_strike_through_mode = tigetstr ("smxx");
+  if (tty->TS_enter_strike_through_mode == (char *) (intptr_t) -1)
+    tty->TS_enter_strike_through_mode = NULL;
+#else
+  /* FIXME: Is calling tgetstr here for non-terminfo case correct,
+     even though "smxx" is more than 2 characters?  */
   tty->TS_enter_strike_through_mode = tgetstr ("smxx", address);
+#endif
 
   MultiUp (tty) = tgetstr ("UP", address);
   MultiDown (tty) = tgetstr ("DO", address);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]