The core of the problem is that `completion-pcm--prepare-delim-re`
is designed to match a "delimiter" in the pattern but was misused
to match a sequence of delimiter chars in the completions.
* lisp/minibuffer.el (completion-pcm--delim-re): Rename from
`completion-pcm--prepare-delim-re` and change its calling convention.
(completion-pcm--segments->regex): Use it.
(completion-pcm-word-delimiters): Adjust accordingly.
* test/lisp/minibuffer-tests.el (completion-pcm--test-zerowidth-delim):
New test.
Port to planned glibc 2.43 (scheduled for February 2026),
which will support qualifier-generic standard functions; see:
https://sourceware.org/git/?p=glibc.git;a=commit;h=cd748a63ab1a7ae846175c532a3daab341c62690
For example, strchr (P, C) will return pointer to const if P is
pointer to const. The idea is to catch dumb programming errors when a
program mistakenly uses strchr to convert a pointer to const
to an unrestricted pointer. This feature is required by C23,
and will be enabled by default in GCC 15.
* src/callint.c (Fcall_interactively):
Respect constness of pointer when calling memchr.
* src/gtkutil.c (xg_get_font):
2nd arg is char *, not const char *.
* src/xfaces.c (parse_float_color_comp): Return bool, not double.
New arg DST. All callers changed. This makes it easier for
callers to use char const *.
(parse_color_spec): Respect constness of pointer when calling strchr.
* lisp/progmodes/ruby-mode.el (ruby-smie-rules): Check for ':' and
'=>' as previous tokens, and handle symbols ending with ':' to
properly indent keyword argument arrays and hashes when
ruby-bracketed-args-indent is nil.
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--parent-call-or-bol):
Handle arrays/hashes that are children of 'pair' nodes (keyword
arguments) to ensure consistent indentation.
* test/lisp/progmodes/ruby-mode-resources/ruby-bracketed-args-indent.rb:
Add test cases for keyword argument arrays and hashes with both
symbol-colon and hash-rocket syntax.
When ruby-bracketed-args-indent is nil, arrays and hashes used as
keyword argument values now indent by ruby-indent-level from the
line start, matching the documented behavior and fixing inconsistent
indentation (bug#74517).
(https://lists.gnu.org/archive/html/emacs-devel/2025-11/msg00939.html)
* lisp/cus-start.el: Make 'abbrev-mode' customizable.
* doc/emacs/abbrevs.texi (Abbrev Concepts):
* etc/NEWS:
* src/buffer.c (syms_of_buffer): <abbrev-mode>: Document
enabling Abbrev mode by default in all buffers by customizing
'abbrev-mode' to a non-nil value.
* lisp/vc/vc-dir.el (vc-dir-mark-file): Prompt before unmarking
all subitems. Use y-or-n-p and user-error instead of
yes-or-no-p and error.
(vc-dir-unmark-file): Use y-or-n-p instead of yes-or-no-p.
(vc-dir-allow-mass-mark-changes): Update docs.
* lisp/vc/diff-mode.el (diff-revert-and-kill-hunk): When the
region is active, operate on all hunks it overlaps.
* doc/emacs/files.texi (Diff Mode):
* etc/NEWS: Document the change.
* lisp/vc/diff-mode.el (diff-apply-buffer): New 'no-save'
meaning for fourth optional argument. Reserve other non-nil
values for this argument. Use ngettext for one message.
(diff-apply-hunk): If the region is active, apply all hunks that
the region overlaps, like diff-apply-buffer.
* doc/emacs/files.texi (Diff Mode):
* etc/NEWS: Document the change to diff-apply-hunk.
* lisp/progmodes/cc-defs.el (c-version): Add a comment
encouraging maintainers to keep cc-mode.el's Version: header
the same.
* lisp/progmodes/cc-mode.el (top level): Update the Version:
header to 5.35.2.
* lisp/mouse.el (mouse-position-for-drag-line): New function;
return position of active touch screen tool if a sequence is
being translated into mouse movement events, and the last mouse
position otherwise.
(mouse-drag-line): Invoke `mouse-position-for-drag-line' rather
than reading the mouse position manually.
* lisp/touch-screen.el (touch-screen-current-tool): New 10th
field holding the frame-relative last attested position of this
tool.
(touch-screen-relative-xy): Clarify doc string.
(touch-screen-handle-point-update): Update the said field with
POSN's position relative to its frame.
(touch-screen-handle-touch): Initialize the 10th field of new
tool lists with such a position.
(touch-screen-last-drag-position): New function.
* lisp/emacs-lisp/package.el (package-dir-info, package-unpack):
Force Dired to return list of packages explicitly marked for
installation. Without the optional argument, Dired will return
the file under the current point if no files are selected.
* lisp/emacs-lisp/cond-star.el (cond*-convert-condition): Bind
unused values to fresh symbols, to avoid the compiler warning
that a symbol starting with an underscore is accessed later on.
This mirrors the behaviour of `if-let*' and family.
* lisp/replace.el (replace--push-stack): Add new args
'next-replacement' and 'match-again' and push them to the stack.
(perform-replace): Restore the previous already calculated values
of 'next-replacement' and 'match-again' from the stack for the
'backup' ('^') key (bug#79811).
* test/lisp/replace-tests.el (query-replace-tests): Add tests.
See https://github.com/editorconfig/editorconfig-emacs/issues/380
* lisp/editorconfig-core-handle.el (editorconfig-core-handle--parse-file):
Fix regexp to not inadvertently match LF. Remove an O(N²) complexity.
Use `line-number-at-pos`.
* lisp/editorconfig.el (editorconfig--get-coding-system): Don't let
errors propagate.
* java/org/gnu/emacs/EmacsNative.java (setEmacsParams): New arg
UIMODE.
(sendConfigurationChanged): New args DETAIL and UI_MODE.
* java/org/gnu/emacs/EmacsNoninteractive.java (main1): Provide
an undefined UI mode.
* java/org/gnu/emacs/EmacsService.java (EmacsService): New field
uiMode.
(onCreate): Initialize this field at start-up and provide the
same to setEmacsParams.
(onConfigurationChanged): If the UI mode has been altered,
generate a configuration changed event to match.
* src/android.c (android_ui_mode): New variable.
(setEmacsParams): New argument UI_MODE. Initialize the same
from this variable.
* src/androidgui.h (enum android_configuration_changed): New
enum.
(struct android_configuration_changed_event): New field
`DETAIL'. Convert fields providing specifics into a union of
display density information and a UI mode integer.
* src/androidterm.c (handle_one_android_event): Handle both
manners of configuration change events.
(android_term_init): Initialize Vtoolkit_theme from UI mode
provided at start-up.
* src/frame.c (syms_of_frame): Always define Vtoolkit_theme.
Define Qtoolkit_theme_set_functions.
* src/gtkutil.c (xg_update_dark_mode_for_all_displays):
* src/w32term.c (w32_read_socket): Generate special toolkit
theme events, rather than executing hooks directly within the
read_socket callback.
* src/keyboard.c (kbd_buffer_get_event)
<TOOLKIT_THEME_CHANGED_EVENT>: Run Qtoolkit_theme_set_functions
and set Vtoolkit_theme from event->ie.arg.
* src/termhooks.h (enum event_kind): New event
TOOLKIT_THEME_CHANGED_EVENT.
* lisp/vc/diff.el (diff-file-local-copy): Use proper coding-system
when writing a local copy of a non-file visiting buffer.
* lisp/misearch.el (coding-system--for-buffer-diff): New variable.
(multi-file-replace-as-diff): Bind it to 'utf-8-emacs'.
(multi-file-diff-no-select): Use proper coding-system when reading
output of Diff. (Bug#79761)
* lisp/vc/vc-dispatcher.el (auto-revert-buffers): Delete.
(vc-resynch-window): Always call vc-revert-buffer-internal.
Calling auto-revert-buffers will not necessarily revert the
current buffer, but we want it to happen synchronously.
As JD Smith <jdtsmith@gmail.com> said we had 3 paths:
1. macro has `autoload-macro expand` and is already loaded: expand
2. macro has `autoload-macro expand` but is /not/ yet loaded: shortcut
3. macro does not have `autoload-macro expand`: shortcut
and the co-existence of 1 and 2 is a problem because it means
that same macro is sometimes handled one way and sometimes
another, with different results.
Remove number 2 by removing from the shortcut all the remaining
macros that have `autoload-macro expand`.
The immediate effect is that `make autoloads` now (auto)loads three
more files:
[...]
loaddefs-gen: loading file frameset (for cl-defun)
Loading frameset...
INFO Scraping 1547 files for loaddefs...10%
INFO Scraping 1547 files for loaddefs...20%
loaddefs-gen: loading file semantic/analyze (for define-overloadable-function)
Loading semantic/analyze...
INFO Scraping 1547 files for loaddefs...30%
INFO Scraping 1547 files for loaddefs...40%
INFO Scraping 1547 files for loaddefs...50%
INFO Scraping 1547 files for loaddefs...60%
INFO Scraping 1547 files for loaddefs...70%
loaddefs-gen: loading file tramp-adb (for tramp--with-startup)
Loading tramp-adb...
INFO Scraping 1547 files for loaddefs...80%
loaddefs-gen: loading file grep (for define-compilation-mode)
Loading grep...
[...]
* lisp/emacs-lisp/loaddefs-gen.el (loaddefs--defining-macros):
Remove macros that are marked `autoload-macro expand`, even if they are
not predefined.
(loaddefs-generate--make-autoload): Simplify accordingly.
* lisp/emacs-lisp/loaddefs-gen.el (loaddefs--defining-macros):
Remove `define-skeleton`, `define-derived-mode`, and
`define-generic-mode` since their `autoload-macro expand` property is
now preloaded.
The predefined macros marked as `autoload-macro expand` can't
get to the shortcul path, so simplify it accordingly.
Mark a few more macros from the shortcut path as `autoload-macro expand`
but don't remove them yet from the shortcut path (need to update
`ldefs-boot.el`).
* lisp/progmodes/compile.el (define-compilation-mode):
* lisp/emacs-lisp/generic.el (define-generic-mode):
* lisp/emacs-lisp/derived.el (define-derived-mode):
* lisp/cedet/mode-local.el (define-overloadable-function):
* lisp/skeleton.el (define-skeleton): Mark as `autoload-macro expand`
so as to make the "shortcut" path in `loaddefs-gen.el` redundant.
* lisp/emacs-lisp/loaddefs-gen.el (loaddefs--defining-macros):
Remove the easy-mmode.el macros since they are already marked as
`autoload-macro expand` and they are always defined, so we never check
them against that list.
(loaddefs-generate--make-autoload): Remove handling of the
`easy-mmode.el` macros as well as `defun` and `defmacro` from the
shortcut path since we can never get there with them anyway.
* lisp/textmodes/ispell.el (ispell-add-per-file-word-list): Deal
with `comment-end' in a way that works for comments that don’t
nest.
We proceed as follows: when `comment-end' is non-empty, we only
ever insert one start and one end comment, the first time we add
a local word. This works with both C-style (which don’t nest)
and Rust-style comments (which do).
If we’re using line comments (i.e. comments that only have a
`comment-start'), then continue to insert one on each line.
* test/lisp/textmodes/ispell-tests/ispell-tests.el
(ispell/ispell-add-per-file-word-list/nxml): Adjust test.
Bug#79871
* doc/lispref/frames.texi (Font and Color Parameters): Fix
documentation of values of 'alpha-background'. Suggested by Jacob
S. Gordon <jacob.as.gordon@gmail.com>. (Bug#79861)
* lisp/progmodes/lua-mode.el (lua-process-init-code): Add newline.
(lua-start-process): Use 'process-send-string' to avoid starting
two processes. Flatten 'switches' argument since rest arguments
get added to a list. Replace 'switch-to-buffer' with
'pop-to-buffer' so that the process window behavior can be
customized with 'display-buffer-alist'. Expand docstring and
update it to match the code. (Bug#79853)
* lisp/progmodes/flymake.el (flymake-error-bitmap)
(flymake-warning-bitmap, flymake-note-bitmap): Define new faces.
(flymake-error-fringe, flymake-warning-fringe)
(flymake-note-fringe): Use the new faces by default.
(Bug#79785)