This fixes bug#81084.
* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1):
In the test for a cast near the end of the function, add a test
for a {...} block which isn't a statement block, allowing such
blocks to be recognized as operands of casts.
* lisp/textmodes/markdown-ts-mode.el
(markdown-ts--fontify-unordered-list-marker): Skip leading
whitespace in the node range before applying the display bullet,
since the tree-sitter grammar bundles indent into the first
list_marker_* node.
* src/gtkutil.c (xg_frame_set_char_size)
(xg_frame_set_size_and_position): Round WIDTH and HEIGHT to
multiples of SCALE without adding toolbar/menubar (bug#80662).
* lisp/vc/vc.el (vc--subject-to-file-name): Make the prefix
regex less greedy, ensure the result has no text properties,
improve the docstring (bug#81017).
* lisp/erc/erc-goodies.el (keep-place-indicator): Add
`erc-keep-place-indicator-arrow' face to overlay arrow.
* lisp/erc/erc-stamp.el (erc-stamp--display-prompt-in-left-margin)
(erc--conceal-prompt): Add `erc-prompt-face' to entire `left-margin'
string. See also 9ba65aa9 "Fix missing margin face on display prop in
erc-stamp".
* test/lisp/erc/erc-fill-tests.el (erc-fill--left-hand-stamps): Update
expected text properties on prompt. (Bug#80693)
Now that markdown-ts-view-mode is demoted to "experimental" in emacs-31,
simplify bits of eglot.el and rewrite docs to be more neutral. In
practice 'gfm-view-mode' is still used if found, just like before, but
intrepid users can still try the "experimental" modes.
* lisp/progmodes/eglot.el (eglot-documentation-renderer): Rewrite
doc string.
(eglot--accepted-formats): Rewrite.
(eglot--builtin-mdown-p): Remove.
* doc/misc/eglot.texi (Customization Variables): Rewrite entry.
* etc/EGLOT-NEWS: Tweak.
The old boolean 'eglot-prefer-plaintext' is replaced by the more
expressive 'eglot-documentation-renderer', which can hold a major-mode
symbol, t (plain text), or nil (auto-detect each time). By selecting a
renderer once at startup the repeated per-request lookups are avoided,
which helps with the slowness reported in bug#81150.
* lisp/progmodes/eglot.el (eglot-prefer-plaintext): Declare obsolete
alias to 'eglot-documentation-renderer'.
(eglot-documentation-renderer): New defcustom, reworked from from
eglot-prefer-plaintext.
(eglot--accepted-formats): Use new variable.
(eglot--format-markup): Use new variable.
* etc/EGLOT-NEWS: Announce change.
* doc/misc/eglot.texi (Customization Variables): Document
eglot-documentation-renderer.
* lisp/net/eww.el (eww-form-submit): Call put-text-property to
add help-echo and shr-tab-stop properties.
(eww-tag-input): Exclude inputs with type="submit" when adding
the help-echo and shr-tab-stop properties, since that's now done
in eww-form-submit, called earlier for type="submit".
* msdos/sedlibmk.inp (GL_GNULIB_MEMEQ, GL_GNULIB_STREQ)
(GL_GNULIB_STRNUL): New substitutions, replacing that of
GL_GNULIB_STRINGEQ.
* src/term.c (init_tty) [MSDOS]: Assign appropriate value to
tty->TN_max_colors.
Do not merge to master.
* lisp/replace.el (query-replace-read-args): Add :lax-whitespace to
minibuffer-lazy-highlight-setup, so lazy highlight during
query-replace respects replace-lax-whitespace and
replace-regexp-lax-whitespace (bug#81131).
Copyright-paperwork-exempt: yes
* lisp/textmodes/fill.el (fill-paragraph): Handle the case
when a non-comment line follows a comment line with
non-nil 'fill-paragraph-handle-comment' (bug#80449).
Skip such a comment line before filling a non-comment line.
* test/lisp/textmodes/fill-tests.el
(fill-test-fill-paragraph-handle-comment): Add new test.
* test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts:
New file.
* lisp/emacs-lisp/comp-run.el
(native--compile-skip-on-battery-p): Don't skip charging because
the battery is charging, and don't look for "discharging", at
least for now (bug#80922). Thanks to David Koppelman
<koppel@ece.lsu.edu> for the report.
* lisp/progmodes/grep.el (grep-edit-original-mode-map): New
variable.
(grep-change-to-grep-edit-mode): Save the current local map
before switching to grep-edit-mode-map.
(grep-edit-save-changes): Restore the saved local map instead of
assuming grep-mode-map (bug#81090).
Copyright-paperwork-exempt: yes
The 'completion-regexp-list' optimization in
completion--flex-all-completions-1, a cheap pre-filter via a trivial
regexp, performs very poorly for longer patterns and strings, so drop
it. That alone recovers fairly decent performance for the flex
completion when compared to the 'hotfuzz' point of reference.
We then recover the cheap rejection with an O(N+M) pre-check in the
Fcompletion__flex_cost_gotoh C scorer. This kicks in the common case
(completion-ignore-case is nil) and pays off especially when the table
is already a list and 'all-completions' needn't cons.
See:
https://lists.gnu.org/archive/html/emacs-devel/2026-04/msg01081.htmlhttps://lists.gnu.org/archive/html/emacs-devel/2026-05/msg00519.html
* lisp/minibuffer.el (completion--flex-all-completions-1): Remove
regexp pre-filter.
* src/minibuf.c (Fcompletion__flex_cost_gotoh): Add subsequence
pre-check.
* lisp/progmodes/compile.el
(compilation-error-regexp-alist-alist): Put 'rust' before 'gnu'
to avoid a mismatch since the " |" has become optional (bug#81075).
Copyright-paperwork-exempt: yes
* lisp/textmodes/markdown-ts-mode.el (markdown-ts-mode-maybe):
New function.
(auto-mode-alist): Bind ".md", ".markdown", and ".mdx" to
'markdown-ts-mode-maybe' instead of 'markdown-ts-mode'.
* etc/NEWS: Update the 'markdown-ts-mode' entry.
* lisp/disp-table.el (prettify-special-glyphs-mode): New mode to
display nicer special glyphs.
(special-glyphs): New face for displaying special glyphs when
the minor mode is active.
(prettify-special-glyphs-saved-truncation)
(prettify-special-glyphs-saved-continuation): Internal variables
to save previous special glyphs.
* etc/NEWS: Announce the change. (Bug#80628)
More context in Bug#80786 and:
https://lists.gnu.org/archive/html/emacs-orgmode/2026-03/msg00286.html
`icalendar-recur' as a type name for RRULE values was confusing and made
the accessors for this type difficult to discover, because `icalendar-recur-'
is also used as a prefix in icalendar-recur.el. This change renames the
`icalendar-recur' type to `icalendar-rrule-value' and renames the
accessor functions for these values appropriately.
* lisp/calendar/icalendar-parser.el: Rename symbols as follows:
(icalendar-recur): `icalendar-rrule-value'
(icalendar-read-recur-rule-part): `icalendar-read-rrule-part'
(icalendar-print-recur-rule-part): `icalendar-print-rrule-part'
(icalendar-recur-rule-part): `icalendar-rrule-part'
(icalendar-read-recur): `icalendar-read-rrule-value'
(icalendar-print-recur): `icalendar-print-rrule-value'
(icalendar--recur-value-types): `icalendar--rrule-value-types'
(icalendar-recur-value-p): `icalendar-rrule-value-p'
(icalendar-recur-freq): `icalendar-rrule-freq'
(icalendar-recur-interval-size): `icalendar-rrule-interval-size'
(icalendar-recur-until): `icalendar-rrule-until'
(icalendar-recur-count): `icalendar-rrule-count'
(icalendar-recur-weekstart): `icalendar-rrule-weekstart'
(icalendar-recur-by*): `icalendar-rrule-by*'.
(icalendar-rrule):
(icalendar-index-insert):
(icalendar-index-get): Update references.
* lisp/calendar/icalendar-recur.el (icalendar-recur-find-interval):
(icalendar-recur-nth-interval):
(icalendar-recur-next-interval):
(icalendar-recur-previous-interval):
(icalendar-recur-refine-from-clauses):
(icalendar-recur-recurrences-in-interval):
(icalendar-recur-recurrences-in-window):
(icalendar-recur-recurrences-to-count):
(icalendar-recur-tz-observance-on): Update references.
* lisp/calendar/diary-icalendar.el: Update references.
* lisp/calendar/icalendar-shortdoc.el (icalendar): Update shortdoc examples.
* lisp/gnus/gnus-icalendar.el: Update references.
* test/lisp/calendar/diary-icalendar-tests.el:
* test/lisp/calendar/icalendar-parser-tests.el:
* test/lisp/calendar/icalendar-recur-tests.el: Update references in tests.