* lisp/minibuffer.el (define-completion-category): New function.
(completion-category-get): New function, implements completion
category property lookup with (multiple) inheritance.
(completion-metadata-get, completion--styles)
(completion--cycle-threshold): Use it.
(completion-category-defaults): Mention it in docstring.
Remove entry for 'project-buffer' category, and instead...
* lisp/progmodes/project.el: ...have 'project-buffer' inherit
from 'buffer'.
* test/lisp/minibuffer-tests.el
(completion-category-inheritance): New test.
* etc/NEWS: Announce support for category inheritance.
The previous change actually introduced a bug in a closely
related but distinct place. We need to address the off-by-one
in the 'substring' call, not the 'add-face-text-property'.
* lisp/progmodes/eglot.el (eglot--sig-info): Fixup.
* lisp/isearch.el (isearch-mode): Don't override
'isearch--saved-local-map' when 'overriding-terminal-local-map'
was already set to 'isearch-mode-map' in a previous call.
(with-isearch-suspended): Don't call the function 'isearch-mode'
when the variable 'isearch-mode' is already non-nil.
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning): `instead`
can be a list.
* lisp/dom.el (dom-text, dom-texts): Fix obsolescence declaration.
The correct Emacs executable to use for
'elisp-flymake-byte-compile' is not necessarily the running
Emacs. For example, when editing trunk with Emacs 30,
various Lisp changes will cause spurious flymake warnings.
Add 'elisp-flymake-byte-compile-executable' to allow
customizing this.
* lisp/progmodes/elisp-mode.el
(elisp-flymake-byte-compile-executable)
(elisp-flymake-byte-compile--executable): Add. (Bug#79342)
(elisp-flymake-byte-compile): Invoke
'elisp-flymake-byte-compile--executable'.
* etc/NEWS: Announce the change.
Revert "Avoid duplicating strings in pcm--merge-completions",
commit b511c38bba. It broke
existing behavior, now covered by tests adding in this commit.
* lisp/minibuffer.el (completion-pcm--merge-completions):
* test/lisp/minibuffer-tests.el (completion-pcm-test-anydelim):
(completion-pcm-bug4219):
* lisp/vc/diff-mode.el (project-root): Declare.
(diff-find-matching-buffer): New function.
(diff-mode): Use it.
* doc/emacs/vc1-xtra.texi (Other Working Trees): Document
'C-x v w w' in diff-mode buffers.
* lisp/vc/vc-bzr.el (vc-bzr-incoming-revision):
* lisp/vc/vc-hg.el (vc-hg-incoming-revision):
* lisp/vc/vc.el (vc-diff-incoming, vc--incoming-revision): New
REFRESH optional argument.
(vc-default-log-incoming): Pass it.
* lisp/vc/vc-git.el (vc-git-incoming-revision): New REFRESH
optional argument. When nil, use cached info (bug#62940).
* lisp/tab-line.el (tab-line-define-keys): New defcustom.
(tab-line--define-keys, tab-line--undefine-keys):
New functions that explicitly bind commands from
'tab-line-mode-map' to 'ctl-x-map'.
(tab-line-mode-map): Leave this keymap empty by default
to avoid breaking 'ctl-x-map' (bug#79323).
(global-tab-line-mode): Call either 'tab-line--define-keys'
or 'tab-line--undefine-keys'.
* etc/NEWS: Announce 'let-alist' support for indexing.
* test/lisp/emacs-lisp/let-alist-tests.el (let-alist-numbers):
Add a test for 'let-alist's support for indexing.
* doc/lispref/lists.texi (Association Lists): Document indexing
with 'let-alist'. (Bug#66509)
This feature was tweaked and last tested with a 2019 edition of
the 'ccls' LSP. The spec does not clearly specify this number
to be 0-indexed, but it would make sense that it would be so.
So there's not need to 1+ - correct the numbers at all before
using them in substring. This would fix the Haskell server use
of this feature (which is bug#79259)
* lisp/progmodes/eglot.el (eglot--sig-info): Fix likely off-by-1.
Escape literal % characters in Eglot URIs
Otherwise, a literal % in a file-name will be interpreted (by the
language server) as if it were a part of a percent-encoded sequence.
See Bug#78984 for context on why `url-path-allowed-chars' cannot be
changed to escape literal % characters.
* lisp/progmodes/eglot.el (eglot--uri-path-allowed-chars): Escape %,
remove the redundant variable definition.
* test/lisp/progmodes/eglot-tests.el (eglot-test-path-to-uri-escape):
test it.
* src/indent.c (vertical-motion): If iterator is inside an overlay,
reset it to the beginning of line before trying to reach goal
column. This prevents point from being stuck at the beginning
of overlay strings during upward motions.
Copyright-paperwork-exempt: yes