Looking at uses of `derived-mode-p` and `provide-mode-derived-p`,
I can't find a single use case where it wouldn't be preferable for
it to take a single argument instead of `&rest`: all the calls are
either passing a single argument anyway, or passing a fixed list of modes.
The use of `&rest` just makes the code less efficient and sometimes
more clunky (because of the need for `apply`).
So let's change that (while preserving backward compatibility, of course).
* doc/lispref/modes.texi (Derived Modes): Adjust accordingly.
* lisp/subr.el (provided-mode-derived-p, derived-mode-p): Take the
`modes` as a single argument.
This fixes the first part of bug#66911.
* lisp/progmodes/cc-engine.el (c-looking-at-decl-block): Skip
back over template arglists and noise clauses in any order, no
longer assuming the noise clauses are before the template
arglist in the buffer. When scanning forward, take noise
clauses into account. Refactor a collection of nested `if'
forms as a cond form.
* src/androidfns.c (android_change_tab_bar_height): Amend with
code absent when the function was first transcribed.
* src/haikufns.c (haiku_change_tab_bar_height):
* src/nsfns.m (ns_change_tab_bar_height):
* src/pgtkfns.c (pgtk_change_tab_bar_height):
* src/w32fns.c (w32_change_tab_bar_height):
* src/xfns.c (x_change_tab_bar_height): Revise commentary.
* lisp/net/tramp-sh.el (tramp-send-command-and-read): Use 'space'
instead of 'blank' in rx expression, in order to handle also CR
and alike. Reported by Dominique Quatravaux
<dominique@quatravaux.org>.
* lisp/touch-screen.el (touch-screen-handle-aux-point-update):
Wrap exceptionally wide form.
(touch-screen-handle-touch): Guarantee that only tools from the
same frame as the current tool will be considered ancillary
tools. Further guarantee that normal gesture translation can
resume even if a touchscreen-end event is omitted or overlooked.
* src/sfntfont.c (sfntfont_open): Besides just the font file
name, also store the interpreter state, UPEM, charset and
instance number in FONT_FULLNAME_INDEX.
Bug#67174
* etc/images/gnus/gnus-pointer.svg: New Gnus mode line logo in SVG format.
* lisp/gnus/gnus.el (gnus-mode-line-buffer-identification): Use it.
* lisp/isearch.el (isearch-lazy-highlight-invisible): New variable.
(isearch-lazy-highlight-new-loop, isearch-lazy-highlight-search)
(isearch-lazy-highlight-match, isearch-lazy-highlight-buffer-update): Use it.
* lisp/replace.el (replace-highlight): Let-bind isearch-invisible
to search-invisible.
* test/lisp/isearch-tests.el (isearch--test-invisible): New test.
This fixes an issue with 'pcomplete-here-using-help', which passes
annotation strings along as text properties. Previously, those got
clobbered when the completions got requoted (bug#67112).
* lisp/minibuffer.el (completion--twq-all): Apply text properties from
the first character of the unquoted completion to the quoted
completion.
* etc/NEWS: announce the change.
* lisp/files.el (auto-mode-interpreter-regexp): Add optional '-S'
switch to the ignored group capturing the env invocation.
Allow multiple spaces between #!, interpreter and first argument:
empirically, Linux's 'execve' accepts that. (Bug#66902)
* test/lisp/files-tests.el (files-tests--check-shebang): New helper to
generate a temporary file with a given interpreter line, and assert
that the mode picked by 'set-auto-mode' is derived from an expected
mode. Write the 'should' form so that failure reports include useful
context; for example:
(ert-test-failed
((should
(equal (list shebang actual-mode) (list shebang expected-mode)))
:form
(equal ("#!/usr/bin/env -S make -f" fundamental-mode)
("#!/usr/bin/env -S make -f" makefile-mode))
:value nil :explanation
(list-elt 1 (different-atoms fundamental-mode makefile-mode))))
* test/lisp/files-tests.el (files-tests-auto-mode-interpreter): New
test; exercise some aspects of 'interpreter-mode-alist'.
Chiefly, elevate it from an appendix to a node in the User Input
chapter. I have been approached time and again with questions
from people who have not searched the appendices for such
documentation.
* doc/emacs/emacs.texi: Move Other Input below Commands in the
menu.
* doc/emacs/input.texi (Other Input Devices): Rename to Other
Input. All callers changed.
(Touchscreens, On-Screen Keyboards): Revise and reword
documentation. Homogenize nomenclature for on screen keyboards,
preferring "virtual keyboards" after it has been mentioned once
by the other name.
The recent fix for the bug in `replace-match-maybe-edit`
was basically a refinement of a previously installed workaround,
whereas the bug was really in `update_search_regs`.
* src/search.c (update_search_regs): Improve handling of `start` positions.
* lisp/replace.el (replace-match-maybe-edit): Remove workaround.
* test/src/search-tests.el (search-test--replace-match-update-data): New test.
* etc/ERC-NEWS: Mention shift toward CHANMODES ISUPPORT parameter for
dictating MODE parsing behavior.
* lisp/erc/erc-backend.el (erc--init-channel-modes, erc--update-modes,
erc-set-modes, erc-update-modes): Forward declarations, the last two
being removals.
(erc-server-MODE, erc-server-221): Use `erc--update-modes' instead of
`erc-update-modes'.
(erc-server-324): Use `erc--init-channel-modes' instead of
`erc-set-modes'.
* lisp/erc/erc-common.el (erc--channel-mode-types): New struct for
stashing processed \"CHANMODES\" data for the current server.
* lisp/erc/erc.el (erc-channel-modes): Fix doc string.
(erc-set-initial-user-mode): Display a local notice when requesting
redundant user MODE operations.
(erc-set-modes, erc-parse-modes, erc-update-modes): Deprecate for
reasons explained in associated ERC-NEWS entry.
(erc--update-membership-prefix): New function, a helper for specifying
arguments to the rather unruly `erc-update-current-channel-member'.
(erc--channel-modes): New variable to record channel-mode state in a
hash table.
(erc--channel-mode-types): New variable and getter to stash
and retrieve server-local instance of the struct of the same name.
(erc--process-channel-modes): New function to parse channel-mode
changes, dispatch handlers for unary modes, and update the local
variables `erc-channel-modes' and `erc--channel-modes'.
(erc--user-modes): New local variable for remembering user modes per
server. New function of the same name, a "getter" for the variable.
(erc--parse-user-modes): New function to parse user modes only.
(erc--update-user-modes): New function to update and sort
`erc--user-modes'.
(erc--update-channel-modes): New function to replace much of
`erc-update-modes', currently a thin wrapper around
`erc--process-channel-modes' to ensure it updates status prefixes.
(erc--update-modes): New function to call appropriate mode-updating
function for the current buffer.
(erc--init-channel-modes): New function to update channel mode letters
without status prefixes.
(erc--handle-channel-mode): New generic function, a placeholder for an
eventual API to handle specific "unary" mode letters, meaning those
that specify a single parameter for setting or unsetting.
(erc-update-channel-limit): Update doc string and answer question
posed by ancient comment.
(erc-message-english-user-mode-redundant-add,
erc-message-english-user-mode-redundant-drop): New English catalog
messages.
* test/lisp/erc/erc-scenarios-base-chan-modes.el: New file.
* test/lisp/erc/erc-tests.el (erc-parse-modes,
erc--update-channel-modes, erc--update-user-modes, erc--user-modes,
erc--parse-user-modes): New tests.
* test/lisp/erc/resources/base/modes/chan-changed.eld: New test data
file. (Bug#67220)
* lisp/erc/erc-common.el (erc--parsed-prefix): New struct to help with
tasks that depends on the advertised "PREFIX" parameter.
* lisp/erc/erc.el (erc-parse-prefix): Rework slightly for readability.
(erc--parsed-prefix): New variable and function of the same name for
caching the reversed result of `erc-parse-prefix' locally per server.
(erc-channel-receive-names): Use value stored in `erc--parsed-prefix'.
* test/lisp/erc/erc-tests.el (erc-with-server-buffer): Only activate
spy around actual test case forms.
(erc--parse-prefix): New test. (Bug#67220)
* lisp/erc/erc-backend.el (erc--get-isupport-entry): Check server
buffer for `erc-server-parameters' when (re)initializing value. This
function was previously unreliable from a target buffer on cache
misses.
(erc--with-isupport-data): New macro for accessing and caching data
derived from an ISUPPORT parameter. Late-arriving params break the
cache.
(erc-server-005): Rewrite pattern as `rx' form, factoring out bol/eol.
* lisp/erc/erc-common.el (erc--isupport-data): New struct to be
subclassed for storing cached ISUPPORT-derived data.
* test/lisp/erc/erc-scenarios-display-message.el: Remove stray
`require'. (Bug#67220)
* lisp/erc/erc-backend.el (erc-message): Revise doc string.
* test/lisp/erc/erc-scenarios-base-misc-regressions.el (erc-cmd-MOTD):
Move test to another file specifically for slash commands.
* test/lisp/erc/erc-scenarios-misc-commands.el: New file.
* test/lisp/erc/resources/base/commands/motd.eld: Move file elsewhere.
* test/lisp/erc/resources/commands/motd.eld: "New" file, moved here
reusing the same Git blob from now deleted subdir base/commands.
* test/lisp/erc/resources/commands/squery.eld: New file. (Bug#67209)
* lisp/erc/erc.el (erc-cmd-SQUERY): Set symbol property
`do-not-parse-args' to t so additional command-line arguments aren't
parsed but rather included as part of the function's lone (raw) LINE
parameter. (Bug#67209)
Copyright-paperwork-exempt: yes