Discussed in
https://lists.gnu.org/archive/html/emacs-devel/2025-12/msg00903.html.
* lisp/progmodes/project.el (project-files) <vc>: Look up the
value of 'project-vc-ignores' inside DIR rather than project root.
This allows this variable to be applied in external dirs as well.
(project-ignores) <vc>: Do likewise.
(project--value-in-dir): Ensure that DIR has a trailing slash.
The caller might pass the value without slash if produced
differently.
* test/lisp/progmodes/project-tests.el
(project-vc-ignores-in-external-directory): New test.
(project-vc-supports-files-in-subdirectory): Update the test,
considering the subtle change in behavior: the directory DIR
directly includes a .dir-locals.el which sets project-vc-ignores,
which wasn't previously applied because it wasn't set in the root.
Thanks to Stefan Monnier for the comments in Bug#74994 leading to most
of these changes.
Improvements in diary-icalendar.el and related changes:
* lisp/calendar/diary-icalendar.el
(icalendar-save-binary-atttachment): Rename to
`diary-icalendar-save-binary-attachment'. Document internal require.
(diary-icalendar-attendee-skeleton-command): Rename to
`diary-icalendar-attendee-format-function'.
(diary-icalendar-vevent-skeleton-command): Rename to
`diary-icalendar-vevent-format-function'.
(diary-icalendar-vjournal-skeleton-command): Rename to
`diary-icalendar-vjournal-format-function'.
(diary-icalendar-vtodo-skeleton-command): Rename to
`diary-icalendar-vtodo-format-function'.
* doc/emacs/calendar.texi (Diary iCalendar Import)
* lisp/calendar/icalendar.el (icalendar-import-format)
(icalendar-import-format-summary, icalendar-import-format-description)
(icalendar-import-format-location, icalendar-import-format-organizer)
(icalendar-import-format-url, icalendar-import-format-uid)
(icalendar-import-format-status, icalendar-import-format-class): Update
references to renamed functions.
(diary-icalendar-attendee-format-function): Fix quoted function name.
(diary-icalendar-attendee-format-function)
(diary-icalendar-vevent-format-function)
(diary-icalendar-vjournal-format-function)
(diary-icalendar-vtodo-format-function)
(diary-icalendar-after-mailcap-viewer-hook): Improve docstrings.
(diary-icalendar-skip-addresses-regexp): Ensure default value is a
regexp.
(diary-icalendar-description-regexp): Fix :type declaration to agree
with default.
(diary-icalendar-format-date): Replace unnecessary `calendar-dlet' with
`dlet'.
(diary-icalendar-vevent-format-function)
(diary-icalendar-vjournal-format-function)
(diary-icalendar-vtodo-format-function)
(diary-icalendar-format-entry)
(diary-icalendar-import-buffer-to-buffer)
(diary-icalendar--entry-import)
(diary-icalendar-import-buffer)
(diary-icalendar-import-file): Change "non-marking" to "nonmarking" in
variable names for consistency (cf. `diary-nonmarking-symbol').
(diary-icalendar-attendee-skeleton): Remove unnecessary call to
`skeleton-insert'.
(diary-icalendar-vevent-skeleton)
(diary-icalendar-vjournal-skeleton)
(diary-icalendar-vtodo-skeleton): Don't insert return values of `let'
forms.
(diary-icalendar-parse-entry): Call
`diary-icalendar-other-properties-parser' with type and properties as
arguments, instead of dynamic binding.
(diary-icalendar-other-properties-parser): Document the new calling
convention.
* test/lisp/calendar/diary-icalendar-tests.el
(diary-icalendar-test-parse-@-location): Accept the new arguments.
Clarify `declare-function' usage:
* lisp/calendar/icalendar-parser.el (icalendar-read-time)
(icalendar-period-end, icalendar-parse-calendar)
(icalendar-index-insert, icalendar-index-get)
* lisp/calendar/icalendar-ast.el (icalendar-printable-value-type-symbol-p)
(icalendar-ast-node-valid-value-p)
* lisp/calendar/icalendar-utils.el (icalendar-date-time-add)
(icalendar-dates-until, icalendar-date-time-variant): Move
`declare-function' forms to corresponding `require' forms.
Improve debugging with icalendar-ast.el macros:
* lisp/calendar/icalendar-ast.el
(icalendar-make-value-node-of): Add explanatory comment to require.
(icalendar--make-param--list, icalendar--make-param--nonlist)
(icalendar--make-property--list, icalendar--make-property--nonlist): New
functions.
(icalendar-make-param, icalendar-make-property): Use them to reduce code
generated by these macros. Add (declare (debug ...)) forms.
(icalendar-make-component, icalendar-make-node-from-templates):
Add (declare (debug ...)) forms.
* test/lisp/calendar/icalendar-ast-tests.el: New file.
Various other minor changes:
* lisp/calendar/icalendar-macs.el (icalendar-define-type): Improve
docstring.
(icalendar-define-property): Fix deprecation warning: replace 'any' with
'not-newline' in rx definition.
*
test/lisp/calendar/icalendar-recur-tests.el (icalendar-test-rrule-test):
Pass tags on to `ert-deftest' and mark several tests as expensive.
* lisp/calendar/calendar.el (diary-date-insertion-form): Remove
constants from :set-after list.
* lisp/calendar/diary-lib.el (diary-time-regexp): Clarify FIXME comment.
* lisp/calendar/icalendar-parser.el
(icalendar-x-name): Fix indentation.
(icalendar-cal-address): Improve docstring.
* lisp/calendar/calendar.el (calendar-redraw)
(calendar-other-month): Make sure that the mode line is updated
after cursor motion in case 'date' is used in
'calendar-mode-line-format'.
(calendar-set-date-style): Delete call to
calendar-update-mode-line because it is called in calendar-draw.
(calendar-generate-window): Delete calls to
calendar-update-mode-line and calendar-cursor-to-visible-date.
It's better for the caller to do it.
(calendar-basic-setup): Update cursor position and mode line.
* lisp/calendar/cal-move.el (calendar-goto-today): Delete
calendar-update-mode-line because calendar-move-hook is called
last. This is consistent with other cal-move commands.
* test/lisp/calendar/calendar-tests.el
(calendar-test-date-in-mode-line): New test.
Zero-length strings are just 'empty'; 'null' can be confusing in several
ways.
* lisp/subr.el (split-string, string-lines):
* doc/lispref/strings.texi (Creating Strings):
Change argument names from 'omit-nulls' to 'omit-empty'.
Some of the fixes are to continue to use American
rather than British spelling.
* doc/misc/modus-themes.org (my-modus-themes-engraved-faces):
Fix misspelled ‘:foreground’s.
* etc/themes/modus-themes.el (modus-themes-faces):
Fix misspelled ‘modus-themes-bold’.
* lisp/emacs-lisp/rx.el (rx--normalize-char-pattern):
Rename from rx--normalise-char-pattern.
(rx--optimize-or-args): Rename from rx--optimise-or-args.
* lisp/frame.el (frame--special-parameters):
Fix misspelled "right-divider-width".
* lisp/net/tramp.el (tramp-fingerprint-prompt-regexp):
Use American spelling “centered”, to match current libfprintf.
* lisp/org/org-fold-core.el (org-fold-core--optimize-for-huge-buffers):
Rename from org-fold-core--optimise-for-huge-buffers.
(org-fold-core-update-optimization):
Rename from org-fold-core-update-optimisation,
leaving an alias behind.
(org-fold-core-remove-optimization):
Rename from org-fold-core-remove-optimisation,
leaving an alias behind.
* lisp/org/org.el (org-advertized-archive-subtree):
This alias is now obsolete.
* lisp/play/zone.el (zone-ignored-buffers):
Fix misspelling of ‘zone--buffer-encrypted-p’.
* lisp/progmodes/csharp-mode.el (csharp-ts-mode-faces):
Fix misspelling of ‘csharp’ group.
* lisp/vc/vc.el (vc-clonable-backends-custom-type):
Rename from vc-cloneable-backends-custom-type,
leaving an alias behind.
* test/lisp/emacs-lisp/bytecomp-tests.el:
(bytecomp-tests--warn-arity-non-compiled-callee):
Rename from bytecomp-tests--warn-arity-noncompiled-callee.
(bytecomp-test-defface-spec): Reword a deliberate misspelling
of “default” that is so common I don’t want it to pollute the
spelling dictionary.
* test/lisp/emacs-lisp/package-vc-tests.el:
(package-vc-tests-preserve-artifacts):
Rename from package-vc-tests-preserve-artifacts.
* test/lisp/eshell/em-prompt-tests.el:
(em-prompt-test/forward-backward-paragraph-1):
Reword a deliberate misspelling of “goodbye” that is so common I
don’t want it to pollute the spelling dictionary.
* lisp/net/tramp-adb.el (tramp-adb-do-ls): New function.
(tramp-adb-handle-file-attributes)
(tramp-adb-handle-directory-files-and-attributes)
(tramp-adb-handle-file-name-all-completions): Use it. (Bug#80054)
* lisp/language/viet-util.el (viqr-regexp): Include escaped
punctuation characters, to handle escaped punctuation correctly.
(viqr-punctuation-regexp): New defconst.
(viet-encode-viqr-region): Backslash-escape punctuation characters
matching 'viqr-punctuation-regexp' before encoding Vietnamese
characters with diacritics. (Bug#80039)
* test/lisp/language/viet-util-tests.el (viet-util-test-viqr): New
file with tests for VIQR encoding and decoding.
* test/lisp/progmodes/project-tests.el
(project-vc-supports-project-in-different-dir):
Account for difference in behavior when failing over to 'find'
(comments in bug#79809).
This is a fix for Bug#74994 that replaces the existing support
in icalendar.el. It implements a full parser, recurrence rule
and time zone calculations, diary import and export, and a
major mode with syntax highlighting for iCalendar data. It
obsoletes most of the code in icalendar.el.
In addition to Bug#74994, the proposal to update Emacs' iCalendar
support was discussed on emacs-devel in this thread:
https://lists.gnu.org/archive/html/emacs-devel/2024-10/msg00425.html
icalendar.el pre-dates the current standard (RFC5545), contains numerous
bugs, is not well documented, and could not easily be updated or
extended; starting fresh was the simplest path to creating an iCalendar
library that other Emacs applications and packages can rely on. It was
decided to leave icalendar.el's code in place for posterity, but declare
it obsolete. Most of the changes in icalendar.el simply consist of such
declarations. The old To Do list has also been deleted.
A few changes in icalendar.el, however, consist of new code for
library-wide functions and options, especially error handling. In
particular:
* lisp/calendar/icalendar.el: Log iCalendar library errors in a single
buffer.
(icalendar-errors-mode): New mode for it.
(icalendar-uid-format): Change the default value to "%h", a hash
value (for privacy).
(icalendar-make-uid): New function, to replace 'icalendar--create-uid'.
(icalendar-debug-level, icalendar-vcalendar-prodid): New option.
(icalendar-vcalendar-version): New constant.
* lisp/calendar/icalendar.el (icalendar-import-format)
(icalendar-import-format-summary, icalendar-import-format-description)
(icalendar-import-format-location, icalendar-import-format-organizer)
(icalendar-import-format-url, icalendar-import-format-uid)
(icalendar-import-format-status, icalendar-import-format-class)
(icalendar-recurring-start-year, icalendar-export-hidden-diary-entries)
(icalendar-export-sexp-enumerate-all, icalendar-export-alarms,
icalendar-debug, icalendar--weekday-array, icalendar--dmsg)
(icalendar--get-unfolded-buffer icalendar--clean-up-line-endings)
(icalendar--rris, icalendar--read-element)
(icalendar--get-event-property, icalendar--get-event-properties)
(icalendar--get-event-property-attributes)
(icalendar--get-children, icalendar--all-events, icalendar--split-value)
(icalendar--convert-tz-offset, icalendar--parse-vtimezone)
(icalendar--get-most-recent-observance)
(icalendar--convert-all-timezones, icalendar--find-time-zone)
(icalendar--decode-isodatetime)
(icalendar--decode-isoduration, icalendar--add-decoded-times)
(icalendar--datetime-to-american-date)
(icalendar--datetime-to-european-date, icalendar--datetime-to-iso-date)
(icalendar--datetime-to-diary-date, icalendar--datetime-to-colontime)
(icalendar--get-month-number, icalendar--get-weekday-number)
(icalendar--get-weekday-numbers, icalendar--get-weekday-abbrev)
(icalendar--date-to-isodate, icalendar--datestring-to-isodate)
(icalendar--diarytime-to-isotime, icalendar--convert-string-for-export)
(icalendar--convert-string-for-import, icalendar-export-file)
(icalendar-export-region, icalendar--create-uid)
(icalendar--parse-summary-and-rest, icalendar--create-ical-alarm)
(icalendar--do-create-ical-alarm, icalendar--convert-ordinary-to-ical)
(icalendar-first-weekday-of-year, icalendar--convert-weekly-to-ical)
(icalendar--convert-yearly-to-ical, icalendar--convert-sexp-to-ical)
(icalendar--convert-block-to-ical, icalendar--convert-float-to-ical)
(icalendar--convert-date-to-ical, icalendar--convert-cyclic-to-ical)
(icalendar--convert-anniversary-to-ical, icalendar-import-file)
(icalendar-import-buffer, icalendar--format-ical-event)
(icalendar--convert-to-ical, icalendar--convert-ical-to-diary)
(icalendar--convert-recurring-to-diary)
(icalendar--convert-non-recurring-all-day-to-diary)
(icalendar--convert-non-recurring-not-all-day-to-diary)
(icalendar--add-diary-entry, icalendar-import-format-sample): Mark them
as obsolete.
In addition to the changes above, the new iCalendar library consists of
the following:
* lisp/calendar/diary-icalendar.el:
* lisp/calendar/icalendar-ast.el:
* lisp/calendar/icalendar-macs.el:
* lisp/calendar/icalendar-mode.el:
* lisp/calendar/icalendar-parser.el:
* lisp/calendar/icalendar-recur.el:
* lisp/calendar/icalendar-utils.el: New files
A few changes were made to existing files dealing with the calendar and
diary:
* lisp/calendar/calendar.el (calendar-date-from-day-of-year): New
function, extracted from calendar-goto-day-of-year.
* lisp/calendar/cal-move.el (calendar-goto-day-of-year): Use it.
* lisp/calendar/cal-dst.el (calendar-dst-find-data): Improve docstring.
* lisp/calendar/calendar.el (diary-date-insertion-form): New option.
(diary-american-date-insertion-form, diary-european-date-insertion-form)
(diary-iso-date-insertion-form): New constants.
* lisp/calendar/diary-lib.el (diary-insert-entry): Use the new
'diary-date-insertion-form' option.
(diary-time-regexp): Add FIXME to an existing comment.
The user-facing aspects of the above changes are documented in the Emacs
manual and the NEWS file:
* doc/emacs/calendar.texi (Diary Conversion): Update manual section to
describe the new importer and exporter.
* doc/emacs/emacs.texi (Detailed node listing): Update to include the
new nodes in docs/emacs/calendar.texi.
* etc/NEWS: Briefly describe the new library, major mode, and options.
The remainder of the changes apply to test files.
The following changes introduce new test files related to the new diary
importer and exporter:
* test/lisp/calendar/diary-icalendar-tests.el (Diary import and export):
Tests for diary-icalendar. In addition to new tests for the exporter,
the existing import tests for icalendar.el have been ported here; these
use the existing iCalendar files in
test/lisp/calendar/icalendar-resources. (A few new input .ics files
have also been added to this directory; see below.)
* test/lisp/calendar/diary-icalendar-resources: New directory containing
expected outputs for the import tests in diary-icalendar-tests.el.
(These have the same or similar names to the output files for the old
importer, in test/lisp/calendar/icalendar-resources, but different
contents. Thus they live in a new directory.)
* test/lisp/calendar/icalendar-resources/import-legacy-function.ics: New
input file to test backward compatibility of the new importer with a
function as the value of 'icalendar-import-format', now obsolete.
* test/lisp/calendar/icalendar-resources/import-legacy-vars.ics: New
input file to test backward compatibility of the new importer with
values for options provided by icalendar.el which are now obsolete.
* test/lisp/calendar/icalendar-resources/import-with-attachment.ics: New
input file to test import of base64-encoded attachments.
* icalendar-resources/import-time-format-12hr-blank.ics: New input file
to test import with a custom value of 'diary-icalendar-time-format'.
Two other new test files provide unit tests for the main functions of
the library:
* test/lisp/calendar/icalendar-parser-tests.el (Parser): Tests for
icalendar-parser. Most of these are derived from examples in RFC5545,
to ensure the parser implements the standard.
* test/lisp/calendar/icalendar-recur-tests.el (Recurrence rules): Tests
for icalendar-recur. Most of these are derived from examples in RFC5545,
to ensure the recurrence rule interpreter implements the standard.
A few of the existing test files for icalendar.el have also been
modified. Besides the specific changes mentioned below, the modified
.ics files also now use CR-LF line endings, as required by RFC5545:
* test/lisp/calendar/icalendar-tests.el (icalendar-deftest-obsolete):
New macro.
* test/lisp/calendar/icalendar-resources/import-non-recurring-all-day.ics:
Correct a malformed VALUE parameter.
* test/lisp/calendar/icalendar-resources/import-rrule-anniversary.ics:
Correct representation of a recurring event.
*
test/lisp/calendar/icalendar-resources/import-rrule-daily-with-exceptions.ics:
Add a required VALUE parameter.
* test/lisp/calendar/icalendar-resources/import-rrule-daily.ics:
* test/lisp/calendar/icalendar-resources/import-rrule-monthly-no-end.ics:
* test/lisp/calendar/icalendar-resources/import-rrule-monthly-with-end.ics:
* test/lisp/calendar/icalendar-resources/import-rrule-weekly.ics:
Correct a malformed RRULE property.
This solves for background vtable mutations, i.e., updates
initiated from buffers other than the vtable buffer, and for
buffer-adjusted string-pixel-width computations.
* lisp/emacs-lisp/vtable.el (vtable): New '-buffer' slot.
(vtable-buffer, vtable-set-buffer): New function.
(vtable-update-object, vtable-remove-object)
(vtable-insert-object): Wrap operation with the vtable buffer.
(vtable--insert): Split from old 'vtable-insert'.
(vtable-insert): Insert table and record the buffer.
(vtable--insert-line, vtable--insert-header-line): Use
'vtable-buffer' for pixel-width computation.
(vtable--limit-string, vtable--char-width): Pass buffer to
'string-pixel-width'.
(vtable-revert): New optional table argument.
(vtable--alter-column-width, vtable-revert-command)
(vtable-sort-by-current-column): Call 'vtable-revert' with the
table.
* test/lisp/emacs-lisp/vtable-tests.el
(vtable-tests--make-no-header-2-object-table): New helper
function.
(test-vstable-compute-columns): Correct typo in test name. Use
new helper function.
(test-vtable-unique-buffer)
(test-vtable-non-current-buffer-insert-object)
(test-vtable-non-current-buffer-remove-object)
(test-vtable-non-current-buffer-update-object)
(test-vtable--limit-string-with-face-remapped-buffer): New test.
* test/lisp/erc/erc-scenarios-join-display-context.el
(erc-scenarios-join-display-context--errors): Attempt to indirectly fix
a reoccurring failure on EMBA. Instead of asserting the membership of
`erc-join--requested-channels', have the client attempt to manually join
an autojoined channel previously denied by an error response. But this
time assert that the display context for the now successfully joined
channel doesn't indicate it originated from the autojoin module.
* test/lisp/erc/resources/base/gapless-connect/barnet.eld: Increase
timeout.
* test/lisp/erc/resources/join/buffer-display/mode-context.eld: Update
accordingly.
* doc/misc/tramp.texi (Remote processes): Provide more details in
"Running remote processes on MS Windows hosts".
* test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
(tramp-test30-make-process): Adapt tests.
* test/lisp/emacs-lisp/package-vc-tests.el
(package-vc-test-deftest): Add support for `:tags' keyword.
(upgrade, upgrade-all, upgrade-all-after-require, rebuild)
(prepare-patch, log-incoming, pkg-spec-info-manual): Mark as
`:expensive-test'.
* test/lisp/emacs-lisp/package-vc-tests.el
(pkg-spec-make-shell-command): Rename from
`pkg-spec-doc-make-shell-command'. Remove assertions related to
info manual installation.
(pkg-spec-info-manual): Add tests for info manual installation.
* doc/misc/tramp.texi (Remote processes): Provide more details in
"Running remote processes on MS Windows hosts".
* lisp/net/tramp-smb.el (tramp-smb-handle-make-process):
Suppress lock files.
* test/lisp/net/tramp-tests.el (auto-revert-notify-watch-descriptor)
(auto-revert-remote-files, auto-revert-use-notify): Declare. Set
proper values.
(tramp-test30-make-process): Adapt test.
* lisp/progmodes/project.el (project-files):
Use 'file-in-directory-p' to dispatch to 'project--vc-list-files'
when listing subdirectory files too (bug#79809).
'any' is a holdover from the ancient 'sregex' package where it meant
'not-newline', but is easily mistaken for 'anychar'.
* lisp/emacs-lisp/rx.el (rx--translate-symbol): Warn about 'any'.
* test/lisp/emacs-lisp/rx-tests.el (rx-atoms): Suppress warning here.
* etc/NEWS: Explain.
* lisp/emacs-lisp/package-vc.el (package-vc--unpack-1):
* lisp/pcmpl-rpm.el (pcomplete/dnf):
* test/lisp/emacs-lisp/package-vc-tests.el (log-incoming):
Use 'anychar' instead of 'any', since that's probably what was meant.
* lisp/time-stamp.el (time-stamp, time-stamp--system-name):
Use 'string-match-p' instead of 'string-match'.
(time-stamp--count-newlines): New function to implement the algorithm.
(time-stamp--system-name-1): New function, a testing seam.
* test/lisp/time-stamp-tests.el (with-time-stamp-system-name): Use the
new testing seam to expand test coverage.
* test/lisp/emacs-lisp/package-vc-tests.el
(package-vc-tests-packages): Rename test packages to avoid
suffix being treated as a version number by
`package--description-file'.
(package-vc-tests-add): Ensure suffix capitalisation remains as
original when calling `replace-regexp-in-string'.
(package-vc-tests-create-repository): Fix typo in temporary
email and use a reserved TLD.
(package-vc-tests-environment-tear-down): Rename preserved
buffers to avoid conflicts between tests.
* test/lisp/vc/vc-git-tests.el (vc-git-test--with-repo): Use
example.com, domain following RFC 2606.
* test/lisp/vc/vc-tests/vc-tests.el
(vc-test--with-author-identity): Use example.com, domain
following RFC 2606.
* lisp/emacs-lisp/package-vc.el (package-vc--make): Use same
format for buffer as `package-vc--build-documentation'.
* test/lisp/emacs-lisp/package-vc-tests.el
(message-auto-save-directory): Silence byte compiler.
(package-vc-with-tests-environment): Initialize package archives
after setting a temporary `package-user-dir'. Set up
`package-gnupghome-dir'. Remove `default-directory' binding.
(package-vc-tests-environment-tear-down): Fix argument order in
`package-vc-tests-log-buffer-name' call.
(package-vc-tests-with-installed): Rename from
`package-vc-with-installed-tests'.
(package-vc-test-deftest): Use
`package-vc-tests-with-installed'.
(prepare-patch): Bind `message-auto-save-directory' to
`package-vc-tests-dir'.
* test/lisp/package-vc-tests.el: Rename to
test/lisp/emacs-lisp/package-vc-tests.el
* test/lisp/package-vc-resources/Makefile.in: Rename to
test/lisp/emacs-lisp/package-vc-resources/Makefile.in
* test/lisp/package-vc-resources/test-package-SUFFIX-inc.texi.in:
Rename to
test/lisp/emacs-lisp/package-vc-resources/test-package-SUFFIX-inc.texi.in
* test/lisp/package-vc-resources/test-package-SUFFIX-lib-v0.1.el.in:
Rename to
test/lisp/emacs-lisp/package-vc-resources/test-package-SUFFIX-lib-v0.1.el.in
* test/lisp/package-vc-resources/test-package-SUFFIX-lib-v0.2.el.in:
Rename to
test/lisp/emacs-lisp/package-vc-resources/test-package-SUFFIX-lib-v0.2.el.in
* test/lisp/package-vc-resources/test-package-SUFFIX-v0.1.el.in:
Rename to
test/lisp/emacs-lisp/package-vc-resources/test-package-SUFFIX-v0.1.el.in
* test/lisp/package-vc-resources/test-package-SUFFIX-v0.2.el.in:
Rename to
test/lisp/emacs-lisp/package-vc-resources/test-package-SUFFIX-v0.2.el.in
* test/lisp/package-vc-resources/test-package-SUFFIX.texi.in:
Rename to
test/lisp/emacs-lisp/package-vc-resources/test-package-SUFFIX.texi.in
* test/lisp/package-vc-tests.el
(package-vc-tests-preserve-artefacts): When non nil then
preserve temporary test files and buffers.
(package-vc-tests-dir, package-vc-tests-packages)
(package-vc-tests-repository): Silence byte compiler.
(package-vc-tests-packages): Define packages to test.
(package-vc-tests-add): Copy a an in file template, update
SUFFIX in it and add it to index.
(package-vc-tests-create-repository): Create a package git
repository with a test package's source.
(package-vc-tests-package-desc): Retrieve a `package-desc' for
tested package.
(package-vc-tests-package-spec): Retrieve a pkg-spec for tested
package.
(package-vc-tests-package-lisp-dir): Determine a lisp directory
for a package.
(package-vc-tests-package-main-file): Calculate expected
location of package's main file.
(package-vc-tests-load-history-marker): Create a load history
marker.
(package-vc-tests-load-history-pattern): Create a regexp pattern
to search in `load-history'.
(package-vc-tests-load-history-position): Calculate a position
in `load-history'.
(package-vc-tests-load-history-interesting-entries): Return
`load-history' entries related to the current
`package-vc-tests-dir'.
(package-vc-tests-explain-load-history-position): Return ERT
explanation for load history position failures.
(package-vc-tests-log-buffer-name): Return name of a log buffer
used to build package or its documentation.
(package-vc-tests-log-buffer-exists): Return non-nil when a log
buffer used to build package or its documentation exists.
(package-vc-tests-explain-log-buffer): Print contents of log
buffer used to build package or its documentation and return ERT
explanation for the failure.
(package-vc-tests-elc-files): Check that there are elc files and
that there is no compiled autoloads file amongst them.
(package-vc-tests-assert-delete-elc): Assert that .elc files are
present for a package.
(package-vc-tests-assert-package-alist): Assert that
`package-alist' contains a `package-desc' for package, and that
the `package-desc' has correct slot `version' and slot
`dir'.:(package-vc-tests-reset-head^): Reset head of checkout of
tested packages to HEAD^.
(package-vc-tests-packages-head): Return current checkout
revision.
(package-vc-tests-make-spec): Make a new test spec for a test
package.
(with-package-vc-tests-environment): Setup test environment.
(package-vc-tests-environment-tear-down): Tear down test
environment.
(with-package-vc-tests-installed): Withing a test environment,
install package, evaluate test body, and then tear down the test
environment.
(package-vc-tests-install-from-elpa)
(package-vc-tests-install-from-spec): Install a test package.
(package-vc-tests-checkout-from-elpa-install-from-checkout)
(package-vc-tests-checkout-with-git-install-from-checkout):
Checkout and install a test package.
(package-vc-tests-package-vc-async-wait): Wait for an
asynchronous VC command to finish.
(package-vc-tests-deftest): Define series tests for each package
in `package-vc-tests-under-test'.
(install-post-conditions): Tests that after installing a test
package the `load-history' entries, package's main file, commit,
elc files, and `package-alist' entry are correct.
(require): Test that after calling `require' the `load-history'
entries are correct.
(upgrade, upgrade-all): Test that after calling
`package-vc-upgrade'/`package-vc-upgrade-all' the `load-history'
entries, package's elc files, commit, and `package-alist' entry
are correct.
(upgrade-after-require, upgrade-all-after-require): Test that
after calling `require' followed by
`package-vc-upgrade'/`package-vc-upgrade-all' the `load-history'
entries, commit, package's elc files, and `package-alist' entry
are correct.
(rebuild): Test that after calling `package-vc-rebuild' on an
old version of a package, the package's old function, old macro,
elc files, and `package-alist' entry are correct.
(rebuild-after-require): Test that after calling `require'
followed by `package-vc-rebuild' on an old version of a package,
the package's old function, old macro, elc files, and
`package-alist' entry are correct.
(prepare-patch): Test that after calling
`package-vc-prepare-patch' the message buffer is correct.
(log-incoming): Test that after calling
`package-vc-log-incoming' the log buffer is correct.
(pkg-spec-doc-make-shell-command): Test that :doc, :make, and
:shell-command slots in a pkg spec execute.
* test/lisp/package-vc-resources/test-package-SUFFIX-v0.1.el.in:
* test/lisp/package-vc-resources/test-package-SUFFIX-lib-v0.1.el.in:
Code template of version 0.1 of a test package.
* test/lisp/package-vc-resources/test-package-SUFFIX-v0.2.el.in:
* test/lisp/package-vc-resources/test-package-SUFFIX-lib-v0.2.el.in:
Code template of code of version 0.2 of a test package.
* test/lisp/package-vc-resources/test-package-SUFFIX-inc.texi.in:
* test/lisp/package-vc-resources/test-package-SUFFIX.texi.in:
Documentation template of a test package.
* test/lisp/package-vc-resources/Makefile.in: Makefile template of
a test package.
Co-developed-by: Philip Kaludercic <philipk@posteo.net>
(Bug#79188)
Ensure that the long description of a package is the same regardless of
originating package archive and package installation state.
* lisp/emacs-lisp/package.el: Add documentation on additional files that
Emacs creates during package installation.
(package-desc): Update incomplete description of slot `kind'.
(package-install-from-archive): Download '*-readme.txt' from the archive
and save it as 'README-elpa' to avoid the issues described in bug#79411.
* test/lisp/emacs-lisp/package-resources/multi-file-readme.txt:
* test/lisp/emacs-lisp/package-resources/simple-single-readme.txt:
Update readmes to mark them as "server readmes" and distinguish them
from what the packages themselves provide in their documentation.
* test/lisp/emacs-lisp/package-tests.el (package-test-install-singlefile)
(package-test-describe-installed-with-ws-only-readme): Add tests.
(package-test-install-multifile): Test more files for presence.
(package-test-describe-package)
(package-test-describe-installed-multi-file-package)
(package-test-describe-non-installed-package)
(package-test-describe-non-installed-multi-file-package): Test for
server readme being used as long description. (Bug#79411)
* test/lisp/emacs-lisp/package-tests.el (with-package-test): Remove
unused keyword :update-news and its implementation. Add documentation
for remaining keywords, since in particular :basedir was being overused.
Eliminate code redundancy by reimplementing keyword :upload-base in
terms of equivalent macro `ert-with-temp-directory' macro. Implement
other minor improvements.
(package-test-install-file, package-test-bug58367, package-test-bug65475)
(package-test-install-file-EOLs, package-test-install-multifile): Remove
superfluous :basedir keyword from `with-package-test' calls to not give
future developers bad example.
(package-test-install-multifile): Move file tests out of
`with-temp-buffer', as they are independent of current buffer. (Bug#79411)
When using vc-exec-after to parse program output, check that the
program didn't die to a signal or exit with an error exit code
before attempting the parse. Continue to use plain
vc-run-delayed where we aren't parsing output, because in these
cases it doesn't matter to CODE if the output is incomplete.
* lisp/vc/vc-dispatcher.el (vc-exec-after): <process-status>:
Treat PROC dying to a signal the same as PROC exiting non-zero.
(vc-exec-after): <accept-process-output>: Restore making a
nonblocking call, for the case of vc-exec-after called from a
process sentinel. diff-hl *does* require this.
(vc-exec-after): <OKSTATUS>: New parameter, replacing SUCCESS,
which never worked as documented.
* test/lisp/vc/vc-tests/vc-test-misc.el (vc-test-exec-after-3):
Test it.
(vc-run-delayed-success): New macro.
* lisp/vc/vc-git.el (vc-git-dir-status-goto-stage):
* lisp/vc/vc-hg.el (vc-hg-dir-status-files):
* lisp/vc/vc.el (vc-pull-and-push): Use it.
* lisp/obsolete/vc-arch.el (vc-exec-after):
* lisp/obsolete/vc-mtn.el (vc-exec-after):
* lisp/vc/vc-bzr.el (vc-exec-after):
* lisp/vc/vc-cvs.el (vc-exec-after):
* lisp/vc/vc-git.el (vc-exec-after):
* lisp/vc/vc-hg.el (vc-exec-after):
* lisp/vc/vc-svn.el (vc-exec-after): Update declarations.
* doc/misc/tramp.texi (Remote processes): Rewrite subsection
"Running remote processes on MS Windows hosts".
* etc/NEWS: Mention remote process support for Tramp's "smb" method.
Presentational fixes and improvements.
* lisp/net/tramp-smb.el (tramp-smb-file-name-handler-alist):
Use `tramp-smb-handle-make-process', `tramp-smb-handle-shell-command'
and `tramp-handle-start-file-process'.
(tramp-smb-matching-line): New defvar.
(tramp-smb-handle-make-process, tramp-smb-handle-shell-command)
(tramp-smb-shell-prompt): New defuns.
(tramp-smb-handle-process-file): Rewrite.
(tramp-smb-handle-start-file-process): Remove.
(tramp-smb-get-localname, tramp-smb-shell-quote-localname):
New optional argument SHARE.
(tramp-smb-send-command): Remove echoed command string.
(tramp-smb-maybe-open-connection): Initialize variables.
(tramp-smb-wait-for-output): Wait more robust.
(tramp-smb-call-winexe): Check for share. Goto current directory.
(tramp-smb-connection-local-powershell-variables): New defconst.
Set it as connection local variables.
* test/lisp/net/tramp-tests.el (tramp-test28-process-file)
(tramp-test29-start-file-process, tramp-test30-make-process)
(tramp-test32-shell-command, tramp--test-async-shell-command)
(tramp--test-supports-processes-p): Adapt for "smb" method.
(tramp-test34-explicit-shell-file-name)
(tramp-test45-asynchronous-requests): Skip for "smb" method.
(tramp--test-check-files): Skip shell test for some special
characters in the "smb" case.
(tramp-test52-unload): Disable further tests.
Simplify fill-tests.el by grouping similar tests in the same
erts file. Move the test code into the erts files, so it is
closer to the test cases, which provides context. Add basic
test cases for common filling operations and for the scenarios
described in Bug#79575.
* test/lisp/textmodes/fill-tests.el (fill-test-end-period)
(fill-test-haskell): Rename from `test-fill-end-period' and
`test-fill-haskell' to follow the same naming convention of
the other tests.
(fill-test-fill-region-as-paragraph-default)
(fill-test-fill-region-as-paragraph-semlf)
(fill-test-fill-region-as-paragraph, fill-test-fill-region)
(fill-test-fill-paragraph, fill-test-fill-paragraph-semlf):
Group tests and move test code into erts files.
(fill-test-fill-paragraph-semlf-emacs-lisp-mode)
(fill-test-fill-paragraph-semlf-c-mode)
(fill-test-fill-paragraph-semlf-org-mode)
(fill-test-fill-paragraph-semlf-markdown-mode): Rename from
`fill-test-semlf-emacs-lisp-mode', `fill-test-semlf-c-mode',
`fill-test-semlf-org-mode' and
`fill-test-semlf-markdown-mode'. Move test code into erts
files.
(fill-test-semlf, fill-test-semlf-fill-region)
(fill-test-semlf-justify)
(fill-test-semlf-sentence-end-double-space)
(fill-test-semlf-fill-column)
(fill-test-semlf-punctuation-marks, fill-test-semlf-twice)
(fill-test-semlf-fill-prefix, fill-test-semlf-indented-block)
(fill-test-semlf-revert): Delete tests since they are now
grouped with other tests.
* test/lisp/textmodes/fill-resources/fill-paragraph.erts:
* test/lisp/textmodes/fill-resources/fill-paragraph-semlf.erts:
* test/lisp/textmodes/fill-resources/fill-region-as-paragraph.erts:
* test/lisp/textmodes/fill-resources/fill-region-as-paragraph-default.erts:
* test/lisp/textmodes/fill-resources/fill-region-as-paragraph-semlf.erts:
Add test cases for the function specified in the file name,
including tests for the scenarios described in the bug report.
* test/lisp/textmodes/fill-resources/fill-region.erts: Add
test case for custom `fill-region-as-paragraph-function',
include test code in the test specification.
* test/lisp/textmodes/fill-resources/fill-paragraph-semlf-c-mode.erts:
* test/lisp/textmodes/fill-resources/
fill-paragraph-semlf-emacs-lisp-mode.erts:
* test/lisp/textmodes/fill-resources/fill-paragraph-semlf-markdown-mode.erts:
* test/lisp/textmodes/fill-resources/fill-paragraph-semlf-org-mode.erts:
Rename from semlf-*-mode.erts, prefix test names with the
tested function and include test code in the test
specification.
* test/lisp/textmodes/fill-resources/semlf-fill-column.erts:
* test/lisp/textmodes/fill-resources/semlf-fill-prefix.erts:
* test/lisp/textmodes/fill-resources/semlf-fill-region.erts:
* test/lisp/textmodes/fill-resources/semlf-fill-region-as-paragraph.erts:
* test/lisp/textmodes/fill-resources/semlf-indented-block.erts:
* test/lisp/textmodes/fill-resources/semlf-justify.erts:
* test/lisp/textmodes/fill-resources/semlf-punctuation-marks.erts:
* test/lisp/textmodes/fill-resources/semlf-revert.erts:
* test/lisp/textmodes/fill-resources/semlf-sentence-end-double-space.erts:
* test/lisp/textmodes/fill-resources/semlf-twice.erts:
* test/lisp/textmodes/fill-resources/semlf.erts: Delete
files. (Bug#79575)
* lisp/time-stamp.el (time-stamp--message, time-stamp--system-name):
New utility functions.
(time-stamp, time-stamp-once, time-stamp-string-preprocess):
Call the new functions.
* lisp/time-stamp.el (time-stamp-once): Do not look for additional
templates once we have displayed the warning about being disabled.
Move earlier the check for arguments being the correct type.
* test/lisp/time-stamp-tests.el (time-stamp-custom-messages): New test.
* lisp/vc/diff-mode.el (diff-file-kill): New optional DELETE
parameter.
(diff-kill-creations-deletions):
* lisp/vc/vc.el (vc--fileset-by-state): New functions.
(diff-kill-creations-deletions, diff-filename-drop-dir)
(diff-hunk-file-names, diff-file-next, diff-hunk-header-re)
(vc-dir-resynch-file): Declare.
(vc--apply-to-other-working-tree): Handle copying and moving
files in the added, removed, missing and unregistered states.
* test/lisp/vc/vc-tests/vc-tests.el
(vc-test--apply-to-other-working-tree): New test.
This patch adds tests for the following scenarios:
- Every element is handled (basic functionality)
- Result specified in SPEC is returned
- Bindings named "tail" are not shadowed by 'dolist'
* test/lisp/subr-tests.el (subr-tests--dolist--every-element-is-handled)
(subr-tests--dolist--returns-spec-result)
(subr-tests--dolist--does-not-shadow-tail-binding): New tests.
(Bug#79778)
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.
* 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/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.
* 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
The tests are pretty basic, I don't expect them to catch
anything else than giant bugs.
* test/lisp/progmodes/eglot-tests.el (eglot-test-semtok-basic)
(eglot-test-semtok-refontify): New tests.
(eglot--semtok-faces, eglot--semtok-wait): New helpers.
* lisp/vc/vc-dispatcher.el (vc-do-command): Support discarding
standard error.
* lisp/vc/vc-hg.el (vc-hg-dir-status-files): Discard standard
error of 'hg status' to avoid parsing mistakes.
(vc-hg-command): Update docstring given new meaning of first
argument to vc-do-command.
* test/lisp/vc/vc-tests/vc-test-misc.el (vc-test-do-command-1)
(vc-test-do-command-2, vc-test-do-command-3)
(vc-test-do-command-4, vc-test-do-command-5)
(vc-test-do-command-6, vc-test-do-command-7): New tests.
Newer/newest clangd support more encodings and actually
negotiate with us, so test shouldn't assume UTF-16..
* test/lisp/progmodes/eglot-tests.el
(eglot-tests--lsp-abiding-column-1): Tweak.
Credentials cached in 'url-basic-auth-storage' are keyed by
"server:port", but were being looked up by just "server" in
'url-basic-auth'.
* lisp/url/url-auth.el (url-basic-auth): Lookup cached basic auth
credentials by "server:port". (Bug#79486)
* test/lisp/url/url-auth-tests.el (url-auth-test-auth-retrieve-cache):
Check the digest auth test-cases cache retrieval test cases against the
basic auth logic.
* test/lisp/vc/vc-tests/vc-test-misc.el (vc-test-exec-after-1)
(vc-test-exec-after-2, vc-test-exec-after-3)
(vc-test-exec-after-4, vc-test-exec-after-5): Fix shell commands
for MS-Windows: use "&" instead of ";" and don't use fractional
times for 'sleep', as some Windows ports of 'sleep' don't support
that.
* test/lisp/emacs-lisp/cl-lib-tests.el (cl-test-ldiff):
* test/lisp/emacs-lisp/seq-tests.el (test-seq-union):
These tests relied on literal constants being unique in the sense of
'eq', and would fail if they stop being that (already the case for
strings).
* test/lisp/erc/erc-scenarios-base-reuse-buffers.el
(erc-scenarios-common--base-reuse-buffers-channel-buffers): Extend some
timeouts.
* test/lisp/erc/erc-scenarios-keep-place-indicator.el
(erc-scenarios-keep-place-indicator--follow): Prefer `ert-skip' here
instead of an :unstable tag because ERC's tests can run locally on some
systems with "SELECTOR=t".
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p): Use the 'read-key'
branch only when the variable 'y-or-n-p-use-read-key' is non-nil.
Add a new cond-branch to read from the minibuffer.
Add a special case when def is nil in a kmacro in batch mode (bug#67836).
* test/lisp/files-tests.el (files-tests--with-buffer-offer-save):
Let-bind 'y-or-n-p-use-read-key' to t.
* doc/lispref/commands.texi (Reading One Event): Mention
'read-char-choice-use-read-key'.
* lisp/emacs-lisp/rmc.el (rmc--show-help): Show non-selected
resized Help window at bottom. Inhibit useless message.
Remove unnecessary call to 'pop-to-buffer'.
(read-multiple-choice): Call 'read-multiple-choice--from-minibuffer'
when 'read-char-choice-use-read-key' is nil.
(read-multiple-choice--from-minibuffer): New function.
* test/lisp/emacs-lisp/rmc-tests.el (test-rmc--with-minibuffer-setup):
New macro.
(test-read-multiple-choice, test-read-multiple-choice-help):
Test both values of 'read-char-choice-use-read-key'.
* lisp/emacs-lisp/cl-extra.el (cl--types-of-memo): Delete var.
(cl--derived-type-specializers-memo): New var.
(cl-types-of): Delete function.
(cl--derived-type-specializers): New function.
(cl--derived-type-dispatch-list): Delete var.
(cl--derived-type-generalizer): Use the `:need-specializers` API instead.
(cl--derived-type-generalizers): Don't fill
`cl--derived-type-dispatch-list` any more.
* lisp/emacs-lisp/cl-preloaded.el (cl--derived-type-list): Delete var.
(cl--define-derived-type): Don't add type to `cl--derived-type-list`.
* test/lisp/emacs-lisp/cl-extra-tests.el (cl-types-test): Adjust.
When multiple wildcards occur in a PCM pattern,
completion-pcm--pattern->regex previously would generate one
instance of [^z-a]* for each of those wildcards, even if the
wildcards were adjacent and could therefore be matched by a
single [^z-a]*. This can make regex matching performance much
worse. For example, with a minibuffer containing "*/" with
point at the start, completion-pcm-all-completions would take
several seconds to match in project-find-file in the Emacs repo.
Now, we run completion-pcm--pattern->segments on the pattern
first, which adds additional structure to the pattern, including
consolidating adjacent regexes into a single sublist. Then
completion-pcm--segments->regex generates a single regex
wildcard for each of those pattern wildcards. As a consequence,
we need to update the callers of completion-pcm--pattern->regex
which pass non-nil GROUP. This provides a substantial
performance improvement in various edge cases.
* lisp/minibuffer.el (completion-pcm--pattern->segments)
(completion-pcm--segments->regex): Add. (bug#79693)
(completion-pcm--pattern->regex)
(completion-pcm--merge-completions): Call pattern->segments and
segments->regex.
(completion-pcm--pattern-point-idx): Delete.
(completion-pcm--segments-point-idx): Add.
(completion-pcm--hilit-commonality): Call
completion-pcm--segments-point-idx to find the submatch
containing point.
* test/lisp/minibuffer-tests.el (completion-pcm-test-5): Add
more tests of highlighting the first difference.
(completion-pcm-test-pattern->regex): Add tests showing the
regex form of PCM patterns.
Replace the use of 'elisp-scope-face(-1)' for analyzing face
specifications with 'elisp-scope-1' calls with an
appropriate OUTSPEC argument. This allows us to analyze
face specifications even when they are not passed directly
to relevant functions, but rather appear in a tail position
of a form that evaluates to a face specification.
* lisp/emacs-lisp/elisp-scope.el
(elisp-scope--match-spec-to-arg): Add new 'face' spec.
Use it instead of...
(elisp-scope-face, elisp-scope-face-1): ...these functions.
Remove them, no longer used.
* test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el:
Add test.
* etc/ERC-NEWS: New section for ERC 5.6.2 and new entry mentioning
slight change in `erc-channel-user' accessor behavior.
* lisp/erc/erc-common.el (erc-channel-user): Change type for status slot
to natnum from integer.
* lisp/erc/erc.el (erc-channel-user-signal-if-status-unknown): New
variable.
(erc--define-channel-user-status-compat-getter): Only use fallback in
Non-ERC buffers because "obviously" a status flag is unusable if the
server doesn't advertise it or, rather, advertises nonsupport via its
absence. This regression was introduced in ERC 5.6.
(erc-channel-begin-receiving-names): Sharp-quote function name.
(erc--get-prefix-flag): Mention in doc that a return value of nil can
also mean the status flag is not supported by the server.
* test/lisp/erc/erc-tests.el (erc--parsed-prefix): Show that it returns
nil in a non-ERC buffer.
(erc-tests--make-combinations)
(erc-tests--with-channel-user-status-accessors): New functions.
(erc-channel-user/status-accessors/solo/default)
(erc-channel-user/status-accessors/solo/ov)
(erc-channel-user/status-accessors/multi/default)
(erc-channel-user/status-accessors/multi/ov): New tests.
(Bug#67220)
* test/lisp/time-stamp-tests.el (time-stamp-test): New macro.
Use it to coalesce the repetitive lines of the various
time-stamp-format-* tests, reducing the line count of the
time-stamp-string formatting tests by 30%.
* test/lisp/erc/erc-scenarios-keep-place-indicator.el
(erc-scenarios-keep-place-indicator--follow):
* test/lisp/erc/erc-stamp-tests.el (erc-echo-timestamp):
* test/lisp/erc/erc-tests.el (erc--channel-modes): Use "EMACS_EMBA_CI"
for EMBA-specific test selection instead of "CI", which is a Gitlab
"predefined" variable absent from .job-template's Docker subprocess.
Omit newlines and other stray chars, such as "^G", from log output when
running tests for ERC non-interactively.
* test/lisp/erc/erc-match-tests.el (erc-add-entry-to-list, erc-pals)
(erc-fools, erc-keywords, erc-dangerous-hosts): Make `inhibit-message'
non-nil when `noninteractive'.
* test/lisp/erc/erc-sasl-tests.el (erc-sasl--read-password--basic): Make
`inhibit-message' non-nil when `noninteractive'.
* test/lisp/erc/erc-scenarios-base-buffer-display.el
(erc-scenarios-base-buffer-display--interactive-default): Make
`inhibit-message' non-nil when `noninteractive'.
* test/lisp/erc/erc-scenarios-services-misc.el
(erc-scenarios-services-prompt): Make `inhibit-message' non-nil when
`noninteractive'.
* test/lisp/erc/erc-services-tests.el (erc-nickserv-get-password): Make
`inhibit-message' non-nil when `noninteractive'.
* test/lisp/erc/erc-stamp-tests.el (erc-timestamp-intangible--left):
Make `inhibit-message' non-nil when `noninteractive'.
* test/lisp/erc/erc-tests.el (erc-cmd-UNIGNORE, erc-hide-prompt)
(erc--check-prompt-input-for-excess-lines, erc-select-read-args, erc-tls)
(erc--interactive, erc-server-select): Make `inhibit-message' non-nil
when `noninteractive'.
(erc--modify-local-map): Inhibit call to `ding' because it inserts an 07
char, which shows up in the test result logs.
So far, 'scope-elisp-analyze-form' would disable
'read-symbol-shorthands' while reading a source form in
order to obtain the "original" length of symbols and pass
that length to the callback called for each analyzed symbol.
However, 'scope-elisp-analyze-form' could report an
incorrect length when a symbol was written with redundant
escaping (e.g. 'f\oo'). Moreover, disabling
'read-symbol-shorthands' breaks macro-expansion during
analysis, because macros may expect "expanded" symbols,
without shorthands.
In this commit we address these issues by leaving
'scope-elisp-analyze-form' enabled (so we get expended
symbols for macro-expansion) and recovering the original
length lazily in the callback, if needed, by going to the
beginning of the symbol and searching forward for its end.
* lisp/emacs-lisp/elisp-scope.el (elisp-scope--report):
Replace LEN argument with SYM, the analyzed symbol itself.
Adapt all callers.
(elisp-scope-analyze-form): Cease let-binding
'read-symbol-shorthands' to nil while reading. Wrap
analysis in 'save-excursion' when reading from current
buffer. Update docstring.
* lisp/progmodes/elisp-mode.el (elisp-local-references)
(elisp-fontify-symbol): Obtain symbol length from buffer.
* test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el:
Add test that incorporates 'read-symbol-shorthands'.
* test/lisp/progmodes/elisp-mode-tests.el (elisp-test-font-lock):
Set up 'read-symbol-shorthands' in test file.
The test works when run interactively and in batch mode started from
a terminal, but not from M-x compile.
* test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window):
Disable on macOS when TERM=dumb.
* lisp/vc/vc.el (vc-rename-file): Make it work regardless of
default-directory; now the only influence of default-directory
should be resolving OLD and NEW if they are relative file names.
* test/lisp/vc/vc-tests/vc-tests.el (vc-test--rename-file): Test
the influence of default-directory on vc-rename-file.
Implement a better fix for bug#79634.
* lisp/emacs-lisp/byte-run.el (eval-and-compile):
* lisp/emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment)
<eval-and-compile>: Preserve the surrounding lexical context (the part
available during macroexpansion, i.e. which vars are dynbound).
* lisp/emacs-lisp/rx.el (<pcase> rx): Remove workaround.
* test/lisp/emacs-lisp/macroexp-tests.el
(macroexp--dynbound-eval-and-compile): New test.
When completion-ignore-case is non-nil, if all completions share
a common prefix ignoring case, try-completion has always
returned that. Now, if all completions also share a common
prefix including case, try-completion includes that common
prefix in its return value (bug#79377).
* lisp/minibuffer.el (completion-pcm--merge-completions): Always
use return value from try-completion, which may change case.
* src/minibuf.c (Ftry_completion): Return the common prefix
which changes case.
* test/lisp/minibuffer-tests.el (completion-pcm-bug4219)
(completion-substring-test-5): New tests.
* test/lisp/emacs-lisp/easy-mmode-tests.el
(easy-mmode-test-mode): Mark permanent-local.
(easy-mmode--test-two-globalized-modes): New function.
(easy-mmode--more-selective-first)
(easy-mmode--less-selective-first): New tests.