* etc/NEWS: Document the change.
* lisp/startup.el (command-line--load-script): Set 'lexical-binding';
if we delete the first line, insert a new line to preserve line
numbers.
(command-line--eval-script): Set 'lexical-binding'.
* lisp/nxml/nxml-mode.el (nxml-merge-indent-context-type):
Handle 'cdata-section' type to prevent it from returning 'mixed'.
* lisp/nxml/nxml-mode.el (nxml-compute-indent-in-delimited-token):
Preserve existing indentation for CDATA section content.
(bug#79817)
Copyright-paperwork-exempt: yes
* lisp/progmodes/csharp-mode.el (csharp-vsemi-unknown): Rename
to 'csharp-vsemi-unknown-p'. The code was calling a function that
does not exist due to this typo.
(c-class-decl-kwds): Remove duplicated declaration for csharp.
(csharp-ts-mode--font-lock-settings): Remove duplicated declaration
of 'escape-sequence'.
* src/window.c (window_set_parent_and_normal_sizes): When
assigning normal sizes in a combination, take the direction from
its parent's 'horizontal' slot and not from that of the first
window in the combination.
* lisp/vc/vc-git.el (vc-git--file-list-is-rootdir):
Merge into vc-git-command.
(vc-git-command): When operating on the repository root, first
bind default-directory to that root. When operating on the
repository root with 'git checkout', pass "." as FILE-OR-LIST.
Assuming ATTRIBUTE_PURE means that the function must return,
a few more functions that should not be declared with ATTRIBUTE_PURE.
The GCC manual (and even the C23 standard, with [[reproducible]])
is not clear about this, and it’s better to be safe.
* src/bignum.h (mpz_get_d_rounded):
* src/lisp.h (bignum_to_double):
No longer pure, as it does not return if memory is exhausted.
* src/fns.c (Fproper_list_p): No longer pure, as it does not
return if the user quits.
* src/gnutls.c (Fgnutls_errorp): No longer pure, as it does not
return if it runs into an eassert failure in XSYMBOL_WITH_POS via EQ.
* src/lisp.h (bignum_to_intmax, bignum_to_uintmax, bignum_bufsize):
No longer pure, as it does not return if it runs into an
eassert failure in XBIGNUM via xbignum_val.
This merges in changes that were made to Autoconf master
in April 2024. It causes ‘configure’ to prefer the C compiler to
enable C23 features if possible; otherwise, ‘configure’
behaves as before, using C11 if available and C99 if not.
* admin/merge-gnulib (GNULIB_MODULES): Add std-gnu23.
(AVOIDED_MODULES): Add (i.e., start avoiding) std-gnu11.
* m4/std-gnu11.m4: Remove.
* m4/std-gnu23.m4: Add.
* doc/emacs/search.texi (Query Replace): Mention new key 'd'.
* lisp/replace.el (query-replace-help): Mention the key 'd'.
(query-replace-map): Bind the key 'd' to 'diff'.
(perform-replace): When 'def' is equal to 'diff',
call 'multi-file-replace-as-diff' to show the diff buffer
with replacements (bug#79761).
* lisp/misearch.el (multi-file-replace-as-diff): Allow providing
a list of buffers in the argument FILES. Add autoload cookie.
(replace-regexp-as-diff): Provide the current buffer to
'multi-file-replace-as-diff' when 'buffer-file-name' is nil.
This reverts this change:
Author: Sean Whitton <spwhitton@spwhitton.name>
AuthorDate: Thu Oct 30 20:45:31 2025 +0000
Commit: Sean Whitton <spwhitton@spwhitton.name>
CommitDate: Fri Nov 7 15:40:25 2025 +0000
vc-exec-after: Pass zero timeout to accept-process-output
* lisp/vc/vc-dispatcher.el (vc-exec-after): Pass zero timeout to
accept-process-output.
Fix due to Spencer Baugh <sbaugh@janestreet.com>.
See thread starting at
<https://lists.gnu.org/archive/html/emacs-devel/2025-11/msg00263.html>
Embedded documentation mark-up should be used for 'tag_name' in
documentation blocks (thanks to Protesilaos Stavrou).
* lisp/progmodes/c-ts-common.el
(c-ts-mode-doxygen-comment-font-lock-settings):
* lisp/progmodes/js.el (js--treesit-font-lock-settings):
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--phpdoc-font-lock-settings): Replace 'font-lock-constant-face'
with 'font-lock-doc-markup-face' (bug#79856).
* lisp/editorconfig-core-handle.el (editorconfig-core-handle--parse-file):
Bump limits beyond the spec's minimum.
Cherrypick from commit fbd078ad6478 from upstream.
* lisp/editorconfig-fnmatch.el (editorconfig-fnmatch--do-translate):
Hoist `push` out of the `cl-case`.
Problem for mpz_get_d_rounded reported by Helmut Eller in:
https://lists.gnu.org/r/emacs-devel/2025-11/msg00795.html
* lib-src/make-docfile.c (DEFUN_pure): New constant.
(write_globals, scan_c_stream): Support "attributes: pure".
* src/bignum.h (mpz_get_d_rounded):
* src/data.c (Fsymbolp, Fmodule_function_p, Fintegerp, Fnumberp):
* src/lisp.h (bignum_to_double, bignum_to_intmax)
(bignum_to_uintmax, bignum_bufsize):
Now pure, not const, since they depend on current state.
For example, Fsymbolp now inspects symbols_with_pos_enabled,
and the bignum functions inspect bignum contents in memory.
* src/data.c (Feq):
* src/xfaces.c (Fface_attribute_relative_p):
No longer const, since they might abort when debugging.
* src/pdumper.h (pdumper_object_p, pdumper_cold_object_p)
(pdumper_find_object_type, pdumper_object_p_precise):
These are not const functions. But there is no need to declare
them to be pure, either, as they’re inline so the compiler can
figure it out.
Previously, many functions in vtable.el called 'vtable--cache',
which computed 'vtable--cache-key' based on the current selected
window and frame; this could cause vtable functions to fail or
misbehave if they were not called from the selected window and
frame that 'vtable-insert' was last called in.
Now, the vtable cache is stored with the text of the vtable, so
that functions which need to interact with some vtable text can
do so reliably without having to use the same selected window
and frame.
Also, 'vtable-update-object' has always required TABLE to be
present at point in the current buffer; now its docstring states
this.
* lisp/emacs-lisp/vtable.el (vtable--current-cache)
(vtable--cache-widths, vtable--cache-lines): Add.
(vtable-insert): Save cache in 'vtable-cache.
(vtable--ensure-cache, vtable--recompute-cache): Inline into
'vtable-insert'.
(vtable--widths, vtable--cache): Delete.
(vtable-update-object): Use 'vtable--current-cache' and
update docstring. (Bug#69837)
(vtable-remove-object, vtable-insert-object): Use
'vtable--current-cache' and save cache in 'vtable-cache'.
(vtable--sort, vtable--alter-column-width)
(vtable-previous-column, vtable-next-column): Use
'vtable--current-cache'.
* lisp/editorconfig-core-handle.el (editorconfig-core-handle--parse-file):
fix for `spaces_in_middle_key` test.
Cherrypick of commit 72b8847275cb from upstream.
In Emacs-30, `editorconfig-display-current-properties` was
broken in that it displayed only the properties set by
`editorconfig-apply` but not those set in the "normal" way,
i.e. by `hack-local-variables`. Fix that along with a few
docstrings that had misleading old info.
* lisp/editorconfig-tools.el (editorconfig-apply)
(editorconfig-mode-apply): Fix docstring and declare obsolete.
* lisp/editorconfig.el (editorconfig-properties-hash):
(editorconfig-call-get-properties-function): Remove elements of
docstring that aren't true any more.
(editorconfig-call-get-properties-function):
Set `editorconfig-properties-hash`.
* src/keyboard.c (make_lispy_position): When calculating a
position in the left margin skip any scroll bar on the left of
the associated window (Bug#79846).
Hopefully, this one is for good.
Use `file-truename` on all the input file/dir names to try and
make sure we don't get bitten any more by symlinks or driver
letter capitalization.
* lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate): Revert last change.
(loaddefs-generate--excluded-files): Remove test that's not needed any
more now that we use all relative names.
(loaddefs-generate--emacs-batch): Apply truename to all input files/dirs.
Rather than preload the `lisp-indent-function` property for
autoloaded macros, auto-load them to fetch their property.
In terms of cost, this slightly reduces the heap size at
startup, while tending to increase the heap size while editing
ELisp code since more packages will be (auto)loaded.
The benefit is elsewhere: by loading the definition the macro we
will also load other (non-autoloaded) definitions, so we get
better behavior for things like `ert.el` and `inline.el` where
only some of the macros are autoloaded, because there's a good
chance that we'll end up loading them to indent the autoloaded
macro, after which indentation of the other macros will be
performed correctly (bug#68818).
* lisp/emacs-lisp/byte-run.el (byte-run--dont-autoload): New function.
(macro-declarations-alist): Use it to override `byte-run--set-indent`.
* lisp/emacs-lisp/lisp-mode.el (lisp-indent-function): Auto-load macros
if needed to get the indent info.
* lisp/emacs-lisp/warnings.el (display-warning): For warnings/errors
on the initial daemon frame use 'after-make-frame-functions'
to postpone their display until the first client frame is created.
(warning--display-buffer): New internal function refactored out of
'display-warning'.
* src/conf_post.h: Avoid redirecting '*printf' functions if
'OMIT_CONSOLESAFE' is defined to 1.
* nt/cmdproxy.c:
* nt/ddeclient.c: Define 'OMIT_CONSOLESAFE' to 1 to avoid
redirecting '*printf functions' to stdio-consolesafe replacements.
* nt/Makefile.in (LIBS_ADDPM): Add -lgnu to link 'addpm' against
Gnulib. (Bug#79855)
* doc/emacs/programs.texi (Hideshow): Add 'hs-cycle-filter' and
remove duplicate 'hs-toggle-hiding'.
* lisp/progmodes/hideshow.el (hs-cycle-filter): New defcustom (bug#79585).
(hs-minor-mode-map): Bind 'TAB' to 'hs-toggle-hiding' using the filter.
(outline-font-lock-keywords, outline-minor-mode-highlight-buffer):
Fall back to eol when there is no newline at the end of outline at eob.
(outline-after-change-functions): Remove the temporarily added variable.
(outline--fix-buttons): Remove its last use.
This time, I bit the bullet and made eglot--semtok-cache a list
of responses. This is motivated by "range" request which happen
in for multiple regions asynchronously. They must all be
(eventually) sent and cannot stomp on each others' cache.
Figuring out when to delete outdated entries from
eglot--semtok-cache is also tricky. It must be done only once
we're certain an outdated entry cannot be reused for a "delta"
request.
* lisp/progmodes/eglot.el (eglot--semtok-cache): Reword docstring.
(eglot--semtok-apply-delta-edits): Tweak variable name.
(eglot--semtok-request): Rework again.
(eglot--semtok-font-lock): Rework.
(eglot--semtok-font-lock-1): DATA no longer optional.