* test/lisp/progmodes/eglot-tests.el (eglot--call-with-fixture):
Normalise 'temporary-file-directory' to stave off problems that
occur when it contains symlinks, which is common on MacOS.
* src/lisp.h (FOR_EACH_TAIL_INTERNAL): Divvy up the code into...
(FOR_EACH_TAIL_BASIC, FOR_EACH_TAIL_STEP_CYCLEP): ...these macros,
so that they can be used in more flexible ways.
* src/fns.c (internal_equal_1): Detect circular lists and call...
(internal_equal_cycle): ...this function that keeps comparing
but now detecting cycles in the other argument.
* lisp/emacs-lisp/testcover.el (testcover-after):
Remove unnecessary error handling.
* test/src/fns-tests.el (test-cycle-equal): Adapt and extend.
* test/lisp/emacs-lisp/testcover-resources/testcases.el
(testcover-testcase-cyc1): Remove case that no longer applies.
* doc/lispref/objects.texi (Equality Predicates): Update.
* etc/NEWS: Announce.
* lisp/treesit.el (treesit-show-paren-data--categorize):
Ignore parent that has less than two children (bug#80475).
This ensures the distinct first and last node.
Change 'float-time' to 'window-use-time'. One step closer to
"recent" tab selection across all frames with unified pseudo
clocks.
* lisp/tab-bar.el (tab-bar--tab): Use 'window-use-time'.
(tab-bar--current-tab-make): Add time property.
Like how completion-eager-display uses an idle timer, also use
one for completion-eager-update, and in fact unify the idle
timers to just one to avoid unnecessary duplicate updates.
* lisp/minibuffer.el (completions--should-show-p): New function.
(completions--background-update, completion-help-at-point): Call
it.
(completions--background-update-timer)
(completions--start-background-update): Start an idle timer to
call background-update. (bug#80055)
(completions--start-eager-display, completions--after-change):
Call start-background-update.
* lisp/vc/vc-git.el (vc-git--checkin): Check that patch-string
is not empty before applying it. This prevents an error when
the patch exactly matches the index (bug#80228).
* test/lisp/vc/vc-git-tests.el
(vc-git-test-checkin-patch-staged-diff): New test.
* admin/merge-gnulib (GNULIB_MODULES): Add crypto/sha3-buffer.
* lib/sha3.c: New file, imported by running admin/merge-gnulib.
* lib/sha3.h: Likewise.
* m4/sha3.m4: Likewise.
* lib/gnulib.mk.in: Updated by admin/merge-gnulib.
* m4/gnulib-comp.m4: Likewise.
* src/fns.c: Include sha3.h
(Fsecure_hash_algorithms): Add Qsha3_224, Qsha3_256, Qsha3_384, and
Qsha3_512.
(secure_hash): Likewise.
(Fsecure_hash): List the SHA-3 algorithms in the docstring.
(syms_of_fns): Define Qsha3_224, Qsha3_256, Qsha3_384, and Qsha3_512.
* test/lisp/net/gnutls-tests.el (gnutls-tests-internal-macs-upcased):
Filter out the new SHA-3 algorithms since they are currently not
implemented in gnutls.
* test/src/fns-tests.el (test-secure-hash): Add test cases for the new
algorithms.
* doc/lispref/text.texi (Checksum/Hash): List the SHA-3 algorithms.
Mention that they are considered secure.
* etc/NEWS: Mention the new feature.
Variable names to control indentation have never been
standardized, but over the years some conventions have naturally
arisen, mostly the use of `FOO-indent-offset`,
`FOO-basic-offset`, or `FOO-indent-level` for `FOO-mode`.
When the new TS modes were introduced, a mistake was made that
I failed to catch at the time, where those modes used
`FOO-mode-indent-offset` instead of the "standard" `FOO-indent-offset`.
In order to save packages like `editorconfig-mode` and `indent-bars-mode`
from having to cater to yet-another-convention, rename those
vars to what they should have been all along.
* lisp/editorconfig.el (editorconfig-indentation-alist): Remove the
ad-hoc entries for the deviating modes using `FOO-mode-indent-offset`.
* lisp/textmodes/toml-ts-mode.el (toml-ts-indent-offset):
* lisp/textmodes/mhtml-ts-mode.el (mhtml-ts-js-css-indent-offset)
(mhtml-ts--js-css-indent-offset):
* lisp/textmodes/html-ts-mode.el (html-ts-indent-offset):
* lisp/progmodes/typescript-ts-mode.el (typescript-ts-indent-offset):
* lisp/progmodes/php-ts-mode.el (php-ts-indent-offset)
(php-ts-js-css-indent-offset, php-ts-html-indent-offset):
* lisp/progmodes/json-ts-mode.el (json-ts-indent-offset):
* lisp/progmodes/java-ts-mode.el (java-ts-indent-offset)
(java-ts-method-chaining-indent-offset):
* lisp/progmodes/go-ts-mode.el (go-ts-indent-offset):
* lisp/progmodes/csharp-mode.el (csharp-ts-indent-offset):
* lisp/progmodes/cmake-ts-mode.el (cmake-ts-indent-offset):
* lisp/progmodes/c-ts-mode.el (c-ts-indent-offset):
Rename `FOO-mode-indent-offset` to `FOO-indent-offset`,
with obsolete alias.
Emacs 28 started fontifying several 'composite' (non-builtin) GNU M4
macros which, while listed under '(m4) Macro index', are not defined
by GNU M4, and are included in its manual for illustrative purposes.
These macro keywords range from clearly misleading (e.g., 'example',
which the GNU M4 manual explicitly describes as nonexistent),
to common in Autoconf's M4sugar layer (e.g., 'm4_quote'),
to variations thereof (e.g., 'foreachq').
It is arguably too late to revert all of these additions, so this
patch selects a handful to remove, and categorizes the rest; this
should make it easier to hide some categories behind a font lock
level or user option in the future, if desired.
This patch reverts the Emacs 28 addition of 'example', and removes
the older 'file', 'line', and 'gnu' macros. GNU M4 renamed 'gnu' to
'__gnu__' already in 1990; and I couldn't find references to the
other two which exist as '__file__' and '__line__', respectively.
The remaining macros are partitioned into three sets: built-in,
M4sugar-like, and other (bug#80412). For discussion, see also:
https://lists.gnu.org/r/emacs-devel/2025-10/msg00357.html
* lisp/progmodes/m4-mode.el (m4-program-options): Remove stale
commentary.
(m4--macro-list): Remove, replacing with...
(m4--builtin, m4--autoconf, m4--composite): ...these new rx
definitions. All uses changed. Remove 'example', 'file', 'gnu',
and 'line' as keywords.
(m4-font-lock-keywords): For consistency with real #-comments,
fontify dnl macro with font-lock-comment-delimiter-face, and only
the rest of its line with font-lock-comment-face. Fontify argument
references with font-lock-variable-use-face rather than
font-lock-variable-name-face. Use font lock faces rather than their
eponymous but obsolete variables. Remove redundant entries for $@
and $*. Prefer shy regexp groups where applicable.
(m4-mode-syntax-table): Quote syntactically special characters.
(m4-m4-buffer): DRY using m4-m4-region.
(m4-m4-region): Take region bounds as optional arguments, as
recommended under '(elisp) The Mark'. Quote shell command.
Support non-contiguous regions.
(m4-current-defun-name): Recognize m4 backtick in addition to
Autoconf bracket. Prefer shy regexp groups where applicable.
(m4-mode): Simplify font-lock-defaults.
* test/lisp/progmodes/m4-mode-resources/font-lock.m4:
* test/lisp/progmodes/m4-mode-tests.el: New test files.
The call to get-buffer-window doesn't take into account other
frames, and in theory may even return a window other than the one
just displayed. Work around this by buffer-locally mapping the
buffer to the window used by with-output-to-temp-buffer (bug#46034).
* lisp/apropos.el (apropos--window): New buffer-local variable.
(apropos--set-window): New hook function.
(apropos-print): Add it to the local temp-buffer-show-hook before
the end of with-output-to-temp-buffer. Check apropos--window first,
falling back on a get-buffer-window across visible frames.
* lisp/calendar/calendar.el (calendar-month-edges): Fix typo.
(calendar-total-months): New variable.
(calendar-get-month-range, calendar-get-date-range)
(calendar--month-overlap-p, calendar-month-visible-p)
(calendar-nongregorian-date-visible-p): New functions.
(calendar-nongregorian-visible-p): Declare obsolete.
(calendar-recompute-layout-variables, calendar-generate):
Replace fixed month numbers with 'calendar-total-months'.
(calendar-cursor-to-date, calendar-date-is-visible-p): Support
the calendar with more than three months.
(calendar-mode): Make some variables buffer-local to allow
calendar-mode buffers showing different number of months.
(calendar-mode-map): Use new command names.
* lisp/calendar/cal-move.el (calendar-goto-today): Always move
the cursor to today's date.
(calendar--show-month-at-edge): New function.
(calendar-recenter, calendar-forward-day): Support the calendar
with more than three months.
(calendar-forward-month, calendar-end-of-month)
(calendar-beginning-of-year, calendar-end-of-year): Place the
new month at the edge instead of the second month segment, to
prevent the cursor from jumping back and forth. This is
consistent with the behavior of calendar-forward-day/week.
(calendar-scroll-left): Maintain the relative position of the
cursor with respect to the window, when the old date is out of
view.
(calendar-scroll-left-three-months)
(calendar-scroll-right-three-months): Replace the fixed month
number with the actual number of months. Rename ...
(calendar-scroll-calendar-left, calendar-scroll-calendar-right):
... to new commands. Make old names as aliases and mark them
obsolete.
(calendar-show-more-months, calendar-show-fewer-months): New
commands.
* lisp/calendar/cal-menu.el (cal-menu-holiday-window-suffix):
Use the actual date range instead of three months.
(cal-menu-scroll-menu, cal-menu-global-mouse-menu): Use new
command names and update description.
* lisp/calendar/holidays.el (holidays, list-holidays)
(calendar-check-holidays, holiday-in-range): Use
calendar-total-months.
(calendar-list-holidays, holiday-fixed, holiday-float)
(holiday-sexp): Replace displayed-year/month with the actual
calendar range.
(holiday-after, holiday-easter-etc-abs)
(holiday-greek-orthodox-easter-abs): New functions.
(holiday-advent, holiday-easter-etc)
(holiday-greek-orthodox-easter): Look up holidays in all visible
years instead of current displayed-year.
* lisp/calendar/solar.el (solar-equinoxes-solstices): Search
equinoxes and solstices in all visible months.
(solar-equinoxes-solstices-1): New function.
* lisp/calendar/lunar.el (lunar-phase-list): Add optional
argument.
(calendar-lunar-phases): Use visible calendar range.
* lisp/calendar/cal-china.el (holiday-chinese-new-year)
(holiday-chinese-winter-solstice, holiday-chinese-qingming)
(holiday-chinese): Replace displayed-year/month with the actual
calendar range, and look up holidays in all visible years.
* lisp/calendar/cal-julian.el (holiday-julian): Use
calendar-nongregorian-date-visible-p because there may exist
more than one corresponding dates when the calendar shows more
months.
* lisp/calendar/cal-bahai.el (holiday-bahai): Support calendar
with more than three months.
(holiday-bahai-new-year, holiday-bahai-twin-holy-birthdays):
Look up holidays in all visible years.
(holiday-bahai-new-year-1, holiday-bahai-twin-holy-birthdays-1):
New functions.
* lisp/calendar/cal-hebrew.el (calendar-hebrew-date-is-visible-p)
(holiday-hebrew, calendar-hebrew-mark-date-pattern): Support
calendar with more than three months, in which more than one
holidays may exist.
(holiday-hebrew-rosh-hashanah-1, holiday-hebrew-hanukkah-1)
(holiday-hebrew-passover-1): New functions.
(holiday-hebrew-rosh-hashanah, holiday-hebrew-hanukkah)
(holiday-hebrew-passover, holiday-hebrew-tisha-b-av): Look up
holidays in all visible years.
* lisp/calendar/cal-islam.el (holiday-islamic): Support calendar
with more than three months.
(holiday-islamic-new-year): Find holidays in all visible years.
* lisp/calendar/diary-lib.el (diary-mark-sexp-entries)
(calendar-mark-days-named, calendar-mark-date-pattern)
(calendar-mark-complex): Use the displayed range instead of the
three-month range.
(calendar-mark-1): Fix marking dates in calendar with more than
three months.
* test/lisp/calendar/holidays-tests.el
(holidays-test-holiday-easter-etc, holidays-test--get-holidays)
(holidays-test-more-months): New test file.
* doc/emacs/calendar.texi: Mention new commands and update
related description.
* etc/NEWS: Announce new commands. (bug#80099)
* lisp/system-taskbar.el (system-taskbar): Defgroup keyword now
system-interface in sympathy with system-sleep.
(dbus-list-activatable-names, dbus-send-signal, dbus-ping):
Pacify byte compiler.
(system-taskbar--set-back-end): Load dbus only when needed.
Users can revert to the old 'delete-frame' behavior of selecting
the oldest frame in 'frame-list' rather than the most-recently
used frame.
* src/frame.c (delete_frame): Consult
'after-delete-frame-select-mru-frame'.
(syms_of_frame): New defvar
'after-delete-frame-select-mru-frame'.
* etc/NEWS: Reflect the new user option.
* lisp/textmodes/markdown-ts-mode.el
(markdown-ts-hide-markup): New defcustom controlling
visibility of markup delimiters.
(markdown-ts--fontify-delimiter): Fontify delimiter nodes and
conditionally apply invisibility.
(markdown-ts--set-hide-markup): Internal helper to update
invisibility state.
(markdown-ts-toggle-hide-markup): Interactive command to toggle
delimiter visibility.
(markdown-ts-setup): Initialize delimiter hiding according to
'markdown-ts-hide-markup' and register managed properties.
(markdown-ts--treesit-settings): Use
'markdown-ts--fontify-delimiter' for delimiter nodes.
(require 'outline): Ensure outline faces are available so
headings are fontified correctly on first load.
* src/lisp.h (ENUM_BF): Modernize ENUM_BF doc for latest compilers
that still have a beef with enum bitfields. Simplify by dropping
support for ‘gcc -std=c89 -pedantic’, as it’s been many years
since Emacs worked with C89, for other reasons.
ISO C does not require C compilers to support enum bitfields.
Problem found with IBM XL C for AIX 16.1 (2018), which IBM
supports through 2029.
* src/lisp.h (struct Lisp_Fwd): Use ENUM_BF instead of declaring
enum bitfields directly.
* lisp/eshell/em-alias.el (eshell-read-aliases-list): Reverse the alias
list back to its original order at the end of loading.
* test/lisp/eshell/em-alias-tests.el
(em-alias-test/alias-load-preserves-order)
(em-alias-test/alias-save-sorted): New tests.
The main point is to make the content of 'eshell-aliases-file' stable so
that storing it in git becomes feasible.
This also makes the output of the alias command come out in alphabetical
order (bug#80401).
* lisp/eshell/em-alias.el (eshell/alias): Sort when updating
'eshell-command-aliases-list'.
* test/lisp/eshell/em-alias-tests.el
(em-alias-test/alias-list-is-sorted): New test.
* etc/NEWS: Announce this change.
In nsfns.m, `x-display-mm-height' and `x-display-mm-weight' computes the
display size by dividing its (logical) pixel dimensions by 92 dpi.
This would often give wrong results: by default, logical pixels on in
macOS are computed to 72 dpi, but that can be changed by the user.
As macOS multi-screen geometry is all computed based on the main
screen's cooridnate system, use its dpi to compute the physical size of
the bounding box containing all the screens.
* src/nsfns.m (Fx_display_mm_height):
(Fx_display_mm_width): Calculate the total physical display size
using the main-screen's geometry.
Copyright-paperwork-exempt: yes
* lisp/mail/rmailsum.el (rmail-summary-sender-function)
(rmail-summary-recipient-function, rmail-summary-address-width):
New user options.
(rmail-summary--address-display, rmail-summary-name-or-address)
(rmail-summary-recipient-strip-quoted-names)
(rmail-summary-recipient-names): New functions.
(rmail-header-summary): Use them when formatting sender and
recipient fields (bug#80406).
* doc/emacs/rmail.texi (Rmail Make Summary): Document them.
* test/lisp/mail/rmailsum-tests.el: New file.
(rmailsum-tests-name-or-address-prefers-name)
(rmailsum-tests-name-or-address-fallback-to-address)
(rmailsum-tests-recipient-strip-quoted-names-first-line)
(rmailsum-tests-recipient-names-folded)
(rmailsum-tests-recipient-names-fallback-to-address): New tests.
This reverts commit 9f5d17cd72, but
includes the fix for adding user CSS after the generated CSS.
* src/image.c (svg_load_image): Set the CSS stylesheet using the librsvg
functions, instead of inserting it into the wrapper.