Compare commits

...

807 commits

Author SHA1 Message Date
Sean Whitton 29058fcfe4 Avoid preprocessor conditionals for EWOULDBLOCK
* lib-src/emacsclient.c (connect_with_timeout)
(check_socket_timeout):
* src/process.c (would_block): Gnulib means EWOULDBLOCK is
always defined, so collapse "#ifdef EWOULDBLOCK" branches.
Suggested by Spencer Baugh <sbaugh@janestreet.com>.
2026-09-10 11:23:02 +01:00
Sean Whitton e6d158e945 Make emacsclient's --timeout apply to connect(2)
* lib-src/emacsclient.c (connect_with_timeout): New function.
(set_tcp_socket, connect_socket): Use it (bug#81777).
2026-09-10 11:23:02 +01:00
Jonas Bernoulli 5210b89cfa
Allow setting font-lock-keyword property using declare form
* doc/lispref/functions.texi (Declare Form): Document
'font-lock-keyword' meta property.
* etc/NEWS: Announce addition of 'font-lock-keyword' meta property.
* lisp/emacs-lisp/byte-run.el (byte-run--set-font-lock-keyword): New
function.
* (defun-declarations-alist): Add entry for 'font-lock-keyword', using
'byte-run--set-font-lock-keyword'.
* (with-no-warnings): Set 'font-lock-keyword' meta property.
2026-09-10 12:19:22 +02:00
Sean Whitton 67eb1ee26e ; Improve docs for query-replace-show-preview. 2026-09-10 10:57:43 +01:00
Eli Zaretskii eade0abc31 ; Fix doc strings in the last changeset
* lisp/replace.el (replace-preview--input)
(replace-preview-update): Doc fixes.
2026-09-10 08:00:40 +03:00
Rahul Martim Juliato a8736d5f88 Improve where the replacement is previewed (bug#81583)
* lisp/replace.el (replace-preview--input): New function.
(replace-preview-update): Add optional START and END, and
preview only the matches between them.
(replace-preview-setup): Accept a nil FROM, read from the
minibuffer along with the replacement, and add optional
BACKWARD.  Limit the preview to the part of the buffer that the
replacement will cover.
(query-replace-read-to): Add optional BACKWARD and pass it on.
(query-replace-read-args): Preview the replacement while reading
FROM as well, and preview nothing when the caller asks for no
highlighting.
* lisp/isearch.el (isearch-query-replace): Pass BACKWARD to
`query-replace-read-to'.
* test/lisp/replace-tests.el (replace-tests--preview): Add START
and END.
(replace-tests-preview-bounds, replace-tests-preview-input): New
tests.
* doc/emacs/search.texi (Replace): Document the above.
2026-09-09 20:54:04 +03:00
Rahul Martim Juliato 92acd66831 Use short symbols for query-replace-show-preview (bug#81583)
* lisp/replace.el (query-replace-show-preview): Accept the
symbols `replacement-only' and `both'.  Update the :type
accordingly, which also fixes the name of a function that does
not exist.
(query-replace-preview-match): Update the doc string.
(replace-preview-both, replace-preview-replacement-only): Say
which value of the option calls them.
(replace-preview--format): Dispatch on the new values, and still
call a function value.
(replace-preview-setup): Test the option for non-nil instead of
testing it with `functionp'.
* test/lisp/replace-tests.el (replace-tests--preview)
(replace-tests-preview-both, replace-tests-preview-cleanup)
(replace-tests-preview-disabled): Use the new values.
* doc/emacs/search.texi (Replace): Document the new values.
2026-09-09 20:53:55 +03:00
Eli Zaretskii 530271f5a0 ; Another fix for MinGW64 build
* src/w32.c: Include <sys/types.h> to avoid compilation error due
to a bug in MinGW64 pthreads_compat.h header.  (Bug#81826)
2026-09-09 20:00:13 +03:00
Toomas Rosin d5a885882b x_get_net_workarea: Fix indexing of _NET_WORKAREA (bug#81761)
* src/xfns.c (x_get_net_workarea): Fix indexing of _NET_WORKAREA
(bug#81761).

Copyright-paperwork-exempt: yes
2026-09-09 13:29:48 +01:00
Eli Zaretskii daae902164 Fix the MinGW64 UCRT64 build
* lib-src/ntlib.c: Include <sys/types.h> earlier, due to a bug in
MinGW64 pthreads_compat.h header.  (Bug#81826)
2026-09-09 15:02:57 +03:00
Jonas Bernoulli 0dde9b12a6
(lisp-imenu-generic-expression): Highlight define-button-type
* lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-1):
Highlight `define-button-type' the same as `define-widget'.
* (lisp-imenu-generic-expression): Treat `define-button-type'
the same as `define-widget'.
2026-09-09 10:53:32 +02:00
Jonas Bernoulli 9ced94569d
(lisp--el-match-keyword): Use new font-lock-keyword symbol property
Add new `font-lock-keyword' symbol property, which does the opposite
of the existing `no-font-lock-keyword'; allowing to highlight certain
functions, like macros and special-forms, as opposed to allowing to
not highlight certain macros.

* lisp/emacs-lisp/lisp-mode.el (lisp--el-match-keyword): Use new
`font-lock-keyword'.
2026-09-09 10:53:30 +02:00
Sean Whitton cfc72c30b5 prepare-user-lisp: Don't skip symlinks to directories
* lisp/startup.el (prepare-user-lisp): Don't skip symlinks to
directories (bug#81810).
2026-09-09 09:47:54 +01:00
Spencer Baugh 8268065404 Check for killed buffer when leaving minibuffer (Bug#81828)
* src/minibuf.c (read_minibuf): Check if the old current buffer
was killed before trying to restore it when leaving the minibuffer.
2026-09-09 10:04:32 +02:00
Jared Finder bfdc20a1c4 New support for Ghostty terminal emulator
* lisp/faces.el (term-file-aliases): Alias xterm-ghostty to
ghostty.
* lisp/term/ghostty.el: New file.
2026-09-08 15:46:13 +01:00
Eli Zaretskii 63d2a70a42 ; * doc/emacs/maintaining.texi (Looking Up Identifiers): Minor addition. 2026-09-08 16:00:51 +03:00
Sean Whitton ed6366876c vc-dir--count-outgoing: Check overlay still exists
* lisp/vc/vc-dir.el (vc-dir--count-outgoing): Check overlay
still exists.
2026-09-08 11:16:20 +01:00
Aaron L. Zeng 0791a547c0 Prevent vc-set-async-update error in process sentinel
* lisp/vc/vc-dir.el (vc-dir-refresh): New OK-IF-ALREADY-RUNNING
argument.
(vc-dir): Use it so that we do not error if already refreshing
(bug#81798).
* lisp/vc/vc-dispatcher.el (vc-set-async-update): Use it such
that if VC-Dir is already refreshing, we restart the refresh.
2026-09-08 10:25:24 +01:00
Paul Eggert 45ee1b7266 Fix bug with canvas_apply_data and bignum data
* src/image.c (canvas_apply_data):
Don’t assume uint32_t fits into fixnum (Bug#81816).
2026-09-07 22:32:34 -07:00
Dmitry Gutov 7a1ba0b645 xref-make-etags-location: Add docstring
* lisp/progmodes/etags.el (xref-make-etags-location):
Add docstring.
2026-09-08 06:17:46 +03:00
Dmitry Gutov 38a6fd7cea ; Correct the binding in NEWS entry 2026-09-08 05:39:50 +03:00
Roi Martin e33b54d938 Rename outline-xref' command to outline-find-headings'
* etc/NEWS: Update entry.
* lisp/outline.el (outline-mode-prefix-map, outline-mode-menu-bar-map):
Use `outline-find-headings'.
(outline-find-headings--fetch-xrefs): Rename from
`outline-xref--fetch-headings'.
(outline-find-headings--show-xrefs): Rename from
`outline-xref--show-xrefs'.
(outline-find-headings): Rename from `outline-xref'.
* test/lisp/outline-tests.el
(outline-tests--outline-find-headings-search-function): Rename from
`outline-tests--outline-xref-search-function'.
(outline-tests--outline-find-headings-regexp): Rename from
`outline-tests--outline-xref-regexp'.
(outline-tests--outline-find-headings-undefined): Rename from
`outline-tests--outline-xref-undefined'.  (Bug#81592)
2026-09-08 05:36:42 +03:00
Stéphane Marks ae474d3864 c-ts-mode-indent-style support for setopt-local (bug#81151)
* lisp/progmodes/c-ts-mode.el (c-ts-mode--indent-style-setter):
Add BUFFER-LOCAL argument.  If setting globally, do not override
buffer locals.
(c-ts-mode--simple-indent-rules): Remove 'style' arg, use
`'-ts-mode-indent-style' instead.  Handle the case where
this style is a function.  Set 'treesit-simple-indent-rules'.
(c-ts-mode-set-style, c-ts-mode, c++-ts-mode): Adjust accordingly.
2026-09-07 18:07:50 -04:00
Paul Eggert 89100e9c71 Port emacs-module-tests to Solaris 10
* test/src/emacs-module-tests.el (mod-test-sum-test)
(module-function-object):
Also allow a function name "_DYNAMIC" (Bug#81471).
2026-09-07 14:12:35 -07:00
Stefan Monnier 6c54097767 test/lisp/simple-tests.el (simple-tests--undo): Avoid continuing undo
Make sure the first 'undo' is not treated as the continuation of
some previous undo.
2026-09-07 14:12:58 -04:00
Sean Whitton 619a395916 VC-Dir: Fix error on `n' before "./" has appeared
If you typed `n' before "./" had appeared, Emacs signalled a
wrong-type-argument error.  Now it signals a better one.

* lisp/vc/vc-dir.el (vc-dir--before-dotname-p): Return nil if
the "./" entry hasn't appeared yet.
* test/lisp/vc/vc-tests/vc-test-misc.el
(vc-test-vc-dir-next/previous): Simulate the problem case.

* lisp/emacs-lisp/ewoc.el (ewoc-goto-next): Signal a user-error
instead of a plain error.  This makes sense for all the current
call sites.  (This is secondary to the bug fix above: this code
was never reached, previously.)
2026-09-07 14:14:01 +01:00
João Távora 0ed3fa830d Eglot: simplify and consolidade xref integration
Recently, xref gained the xref-find-by-kind API, and Eglot gained
support for that.  This commit restructures Eglot's side: any
non-definition LSP reference-like (generic references, declaration,
implementation, and typeDefinition) can now be requested for any
arbitrary symbol, even if point is not on that symbol (of course as long
as the server supports the 'workspace/symbol' method).

This historically hairy code is made somewhat simpler and should agree
with users' expectations of commands like C-u M-?.

However, there is still a wrinkle: some servers (clangd, ty, but not
rust-analyzer) need the document where the canonical definition site
lives to have been explicitly 'didOpen'ed by the client.  And we need
the canonical definition site to request references for an arbitrary
symbol, because LSP itself barely knows about "symbols", i.e. they are
not first-class entities.  LSP only knows document locations.

The previous approach by Dmitry Gutov's did the heroics: it visited the
URI transiently, just to place point on the definition and then request
the special kind of reference.  This worked, but (1) is only needed if
the URI isn't already visited (2) is somewhat hacky and risks things
like surpsising confirmation prompts and user hooks.

Perhaps this wrinkle can be addressed later with a lighter weight
version of a 'didOpen'-sending helper.  For now, we take the simpler
approach: craft the request directly from the information we got from
'workspace/symbol', even if that info points to unmanaged LSP documents.
If the server complains, so be it.  Users should at least be able to
read the message and visit the file themselves.

For reference, Clangd's behavior is seen a server bug, according to
https://discourse.llvm.org/t/clangd-explicit-and-implicit-doc-open/205/2
and https://github.com/microsoft/language-server-protocol/issues/861.

* lisp/progmodes/eglot.el (eglot--lsp-xrefs-for-id): New function.
(eglot--lsp-xrefs-for-method, eglot--lsp-xref-helper): Delete,
folding into eglot--lsp-xrefs-for-id.
(eglot--lsp-xref-refs): Delete variable.
(xref-backend-identifier-at-point): Return symbol at point.
(xref-backend-definitions, xref-backend-references)
(xref-backend-xrefs-by-kind): Use new helper.
(xref-backend-xref-kinds): Rewrite.
(eglot--deffinder): New helper
(eglot-find-declaration, eglot-find-implementation)
(eglot-find-typeDefinition): Rewrite using eglot--deffinder.
2026-09-07 12:36:37 +01:00
Eli Zaretskii f1288078ff ; Avoid compilation warning on MS-Windows
* src/image.c (image_bitmap_pixmap): Add back the required
type-cast.
2026-09-07 13:55:20 +03:00
Paul Eggert d418272f31 Port diff-mode-tests to POSIX diff
Do not assume that diff has the -a option, as POSIX does not
require it.  Problem found on Solaris 10 (bug#81480).
* test/lisp/vc/diff-mode-tests.el (diff-mode-test-font-lock)
(diff-mode-test-font-lock-syntax-one-line)
(diff-mode-test-git-patch)
(diff-mode-test-git-patch/before-first-hunk)
(diff-mode-test-git-patch/signature):
Skip unless "diff -a" works.
2026-09-07 01:57:17 -07:00
Paul Eggert 962b0d07cd Update from Gnulib by running admin/merge-gnulib 2026-09-06 16:02:06 -07:00
Paul Eggert d56b7e6a7e Port grep-compute-defaults to Solaris grep
grep.el assumes support for grep -E, which is universal among
Emacs platforms except for Solaris /usr/bin/grep.  So, on Solaris
substitute a grep that supports -E, if available in one of the
standard Solaris locations.  In the usual case where one is
available, this fixes Bug#81483.
* lisp/progmodes/grep.el (grep-compute-defaults):
On Solaris, prefer /usr/sfw/bin/grep or /usr/xpg4/bin/grep to
plain grep if plain grep lacks support for -E.
2026-09-06 14:12:12 -07:00
Paul Eggert 0076b8df57 Port nsm-check-local-subnet-ipv4 test to Solaris 10
* test/lisp/net/nsm-tests.el (nsm-check-local-subnet-ipv4):
Don’t test the nsm-trust-local-network case when
network-interface-list reports no network interfaces.
On Solaris 10, network-interface-list always returns nil because
Solaris 10 lacks getifaddrs, and it’s not worth our trouble to
port network-interface-list to the hacky way this obsolescent OS
reports network interfaces (bug#81473).
2026-09-06 10:39:33 -07:00
Paul Eggert 8cfcc3cb00 Port tab-bar-tests to Solaris
* test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window):
Test tty-type "linux" only on gnu/linux, as it may not exist
on other platforms, e.g., Solaris (bug#81477).
2026-09-06 10:19:10 -07:00
Dmitry Gutov 7904066fb7 ; Fix a typo 2026-09-06 15:45:04 +03:00
Eli Zaretskii 6e9fd53cca ; Fix last change in latexenc.el
* lisp/international/latexenc.el
(latexenc-find-file-coding-system): Fix last change.
2026-09-06 13:28:59 +03:00
Eli Zaretskii a947231851 Port gcc-tests to Solaris 10’s GCC 3.4.3
Problem reported by Paul Eggert (Bug#81484).
* test/lisp/cedet/semantic/bovine/gcc-tests.el (semantic-gcc-test):
Do not assume GCC is version 4 or later.
(semantic-gcc-test/1, semantic-gcc-test/6): Update GCC version number.
* test/src/regex-emacs-tests.el (regex-tests-generic-line):
Read the test file in utf-8-unix.
2026-09-05 14:46:22 -07:00
Jim Porter 6b53a6f9e4 Use completion boundaries in 'pcomplete-long-option-completion-table'
This indicates that the current completion field is complete when the
string is, e.g. "--option=".  The option value is a subsequent field and
is handled by other parts of Pcomplete (bug#81792).

* lisp/pcomplete.el (pcomplete-long-option-completion-table): Set
boundary for completed options that take values.

* test/lisp/pcomplete-tests.el (pcomplete-shell-completion): Convert to
macro and accept BODY arguments.
(pcomplete-test-long-options/with-value/multiple)
(pcomplete-test-long-options/without-value/multiple): New tests.
2026-09-05 13:37:51 -07:00
Stefan Monnier 194587e0ef lisp-mode.el: Fix lack of handling of shorthands in font-lock
* lisp/emacs-lisp/lisp-mode.el (lisp--el-match-keyword)
(lisp-string-in-doc-position-p): Obey shorthands (bug#80574).
2026-09-05 14:38:22 -04:00
Sean Whitton 1d836d5c59 ; * lisp/startup.el (prepare-user-lisp): Fix last change. 2026-09-05 13:34:22 +01:00
Sean Whitton bdf6d6c1b1 Autoload cookies for some commands in admin/*.el
These files are not included in Emacs distributions so this will
only affect those who, e.g., symlink these into ~/.emacs.d/user-lisp/.

* admin/admin.el:
* admin/authors.el: Autoload all commands.
* admin/gitmerge.el (gitmerge): Autoload.
2026-09-05 13:05:12 +01:00
Sean Whitton 7013cc3f13 prepare-user-lisp: Ignore dangling symlinks
* lisp/startup.el (prepare-user-lisp): Ignore dangling symlinks.
Restructure to reduce number of system calls made for everything
except dangling symlinks.
2026-09-05 12:58:53 +01:00
Eli Zaretskii 38e69f8b27 ; Update ldefs-boot.el. 2026-09-05 07:07:38 -04:00
Eli Zaretskii 251827829d Merge from origin/emacs-31
cf1d8f9bc9 ; Improve documentation of deletion of composed characters
2890334e70 Improve Tramp manual
56f3336189 'speedbar-window' now run 'speedbar-before-delete-hook' (...
62b891880c ; * lisp/simple.el (next-error-follow-minor-mode): Copyedit.
49c6767723 ; newcomers-presets: Mention using copy-theme-options.
c709b66dcb flymake-show-buffer-diagnostics: Fix interactive form
2026-09-05 07:04:40 -04:00
Eli Zaretskii 62c9725bae Fix mojibake in visiting LaTeX files
* lisp/international/latexenc.el
(latexenc-find-file-coding-system): Decode the main file's name,
since at this point the buffer is still unibyte and undecoded.
(Bug#81606)
2026-09-05 13:41:08 +03:00
Eli Zaretskii cf1d8f9bc9 ; Improve documentation of deletion of composed characters
* doc/emacs/basic.texi (Erasing): Document
'composition-break-at-point' (bug#81790).
2026-09-05 13:21:55 +03:00
Michael Albinus 2890334e70 Improve Tramp manual
* doc/misc/tramp.texi (Multi-hops, File name syntax): Use "localname".
(Home directories): Discuss missing remote home directory.  (Bug#81799)
2026-09-05 12:16:45 +02:00
Stephen Berman cd6bbb7ac2 Prevent Dired marking in hidden subdirs (bug#81612)
* lisp/dired.el (dired-mark-files-in-region, dired-mark): Don't
mark or flag for deletion if entry is in hidden (sub)dir.
2026-09-05 11:39:13 +02:00
Vincenzo Pupillo 56f3336189 'speedbar-window' now run 'speedbar-before-delete-hook' (bug#81708).
* lisp/speedbar.el (speedbar-window-mode): Fix documentation.  Run
the 'speedbar-before-delete-hook'.
2026-09-05 11:44:20 +03:00
Andreas Schwab 2e5e9d48fb gnus-icalendar: use DURATION to calculate end-time of the event
* lisp/gnus/gnus-icalendar.el (gnus-icalendar-event-from-ical):
Use DURATION to calculate end-time if DTEND is absent.
2026-09-04 22:10:44 +02:00
Sean Whitton 62b891880c ; * lisp/simple.el (next-error-follow-minor-mode): Copyedit. 2026-09-04 17:12:45 +01:00
Andreas Schwab d73c7a442b gnus-icalendar: handle absent DTEND in event
* lisp/gnus/gnus-icalendar.el (gnus-icalendar-event-from-ical):
Handle absent DTEND.
2026-09-04 18:11:27 +02:00
Michael Albinus 5ebed5219d Adapt eglot tests on emba
* test/infra/Dockerfile.emba (emacs-eglot): Install rust-src.

* test/infra/gitlab-ci.yml (test-eglot): Extend EMACS_EXTRAOPT.

* test/lisp/progmodes/eglot-tests.el
(eglot-test-rust-completion-exit-function): Don't skip on emba.
2026-09-04 17:50:44 +02:00
Sean Whitton a834ad2ede newcomers-presets: Set some more user options
* etc/themes/newcomers-presets-theme.el (newcomers-presets): Set
set-mark-command-repeat-pop, kill-do-not-save-duplicates,
help-window-select and window-combination-resize.
2026-09-04 16:39:34 +01:00
Juri Linkov 3278d1b0ce * lisp/vc/log-view.el (log-view-file): Add dark background (bug#81740). 2026-09-04 18:36:45 +03:00
Sean Whitton 49c6767723 ; newcomers-presets: Mention using copy-theme-options. 2026-09-04 16:11:26 +01:00
Protesilaos 5d0939c7a1 Use dedicated face for log-view-mode marked entries
* lisp/vc/log-view.el (log-view-marked): New face.
(log-view--mark-entry): Use it (bug#81740).
2026-09-04 14:40:01 +01:00
Sean Whitton c709b66dcb flymake-show-buffer-diagnostics: Fix interactive form
* lisp/progmodes/flymake.el (flymake-show-buffer-diagnostics):
Return just one diagnostic when last-command-event was not a
mouse event (bug#81786).
2026-09-04 14:26:20 +01:00
Sean Whitton 2d5657b9dc Fix closing *Completions* on sole completion of file name
* lisp/minibuffer.el (minibuffer-completion-help): Remove the
completion base from the minibuffer contents before comparing to
a sole completion (bug#81641).
2026-09-04 13:48:41 +01:00
Eli Zaretskii ec581f0da3 ; * doc/lispref/text.texi (Undo): Fix last change. 2026-09-04 14:15:59 +03:00
Helmut Eller 4281de8bcd Document the new undo-list entry kind
* src/buffer.c (buffer-undo-list): Update the docstring.
* doc/lispref/text.texi (buffer-undo-list): Describe the new entry kind.
2026-09-04 09:38:02 +02:00
Helmut Eller cc0f94f357 Less generic error message
* lisp/subr.el (undo--wrap-and-run-primitive-undo): Use "Unexpected
change of region length" instead of "Not yet implemented".
2026-09-04 09:38:01 +02:00
Helmut Eller 1d07d02a75 Improve undo-in-region support for combine-change-calls
* lisp/subr.el (combine-change-calls-1): Use the new 'apply entry
variant for the buffer-undo-list.
(undo--wrap-and-run-primitive-undo): Adjust the undo entries if the
region has moved.
* test/src/undo-tests.el (undo-test-combine-change-calls-4): New test.
2026-09-04 09:38:01 +02:00
Helmut Eller 15aa8dd49f Improve undo-in-region support for diff-unified->context
* lisp/vc/diff-mode.el (diff-unified->context, diff-context->unified):
Use the new 'apply variant for buffer-undo-list entries.
2026-09-04 09:25:24 +02:00
Helmut Eller cb1be3124c Improve undo-in-region for 'apply entries
This patch adds a new variant of 'apply entries for the undo list of the
form: (apply DELTA (BEG . END) FUN-NAME . ARGS).

This similar to the existing (apply DELTA BEG END FUN-NAME . ARGS)
variant.  The difference for the new variant is that FUN-NAME is applied
to the adjusted BEG and END arguments together with ARGS.  This allows
functions to compute positions relative to the adjusted region.

The existing 'apply entry variants remain supported for backward
compatibilty.

* lisp/simple.el (primitive-undo): Call the function for the new 'apply
variant with START and END.
(undo-elt-in-region, undo-adjust-elt, undo-delta): Add support for the
new 'apply entries.
* test/src/undo-tests.el (undo-tests-selective-apply-1)
(undo-tests-selective-apply-2): New tests.
(undo-tests--mark-region, undo-tests--selective-apply)
(undo-tests--undo-delete, undo-tests--undo-insert)
(undo-tests--adjust-markers): New helpers.
2026-09-04 09:24:49 +02:00
Dmitry Gutov 9c003435ca xref.el: Rewrite the introduction text in Commentary
* lisp/progmodes/xref.el:
Rewrite the introduction text in Commentary (bug#81624).
2026-09-04 03:33:43 +03:00
Sean Whitton ab1d6868ed Improve presentation of query-replace-show-preview
* doc/emacs/search.texi (Replace):
* etc/NEWS:
* lisp/replace.el (query-replace-show-preview): Docs
improvements.
(replace-preview-only-replacement): Rename ...
(replace-preview-only-replacement): ... to this.  All uses
changed.
2026-09-03 11:42:04 +01:00
Sean Whitton 507d93ad48 Fix flymake-diagnostics-buffer-mode-map for Emacs 30
* lisp/progmodes/flymake.el
(flymake-diagnostics-buffer-mode-map): Don't bind
'previous-error-this-buffer-no-select' if it's not defined, to
fix Emacs 30 compat (bug#81775).  Bump version to 1.4.7.
2026-09-03 10:50:26 +01:00
Sean Whitton 1d64554f99 Merge from origin/emacs-31
6f230503c8 ; * admin/make-tarball.txt: Don't use a batch process for...
5fdb5e3485 Relax formatting requirements on NEWS when converting to ...
fe4b9df4f4 Adjust generating HTML for historic NEWS
30b2265a01 ; * admin/make-tarball.txt: Publish HTML formatted NEWS.
99f8ed8d46 make-news-html-file: Don’t assume NEWS has local variables
5c5362a3e8 Escape [[ in NEWS when generating HTML via Org
9794fa0d5d elisp-scope.el: Avoid excessive 'trusted-content-p' calls
956875f822 ; * test/lisp/emacs-lisp/crm-tests.el: Fix copyright years.
e8b46219ca Fix choose-completion in CRM with boundaries
e420d0d978 ; Further explain WHEN argument to marking functions obso...
c4d50ea097 Skip all package-vc tests if git is not installed
2026-09-03 10:31:58 +01:00
Sean Whitton 4b239389a0 ; Merge from origin/emacs-31
The following commit was skipped:

d6381e5df9 Show the file name of theme when warning about lexical-bi...
2026-09-03 10:31:58 +01:00
Sean Whitton 322bcba895 Merge from origin/emacs-31
b115e349e3 Avoid assertion violations in 'char-syntax'
2026-09-03 10:31:57 +01:00
Sean Whitton 6f230503c8 ; * admin/make-tarball.txt: Don't use a batch process for HTML gen. 2026-09-03 10:30:26 +01:00
Peter Oliver 5fdb5e3485 Relax formatting requirements on NEWS when converting to HTML
* admin/admin.el (make-news-html-file): Accurately detect blocks
even when not separated by blank lines.

Copyright-paperwork-exempt: yes
2026-09-03 10:28:03 +01:00
Peter Oliver fe4b9df4f4 Adjust generating HTML for historic NEWS
* admin/admin.el (make-news-html-file): If the major version
given has it's own NEWS file, use that.  Understand
non-continuous copyright years.

Copyright-paperwork-exempt: yes
2026-09-03 10:26:19 +01:00
Peter Oliver 30b2265a01 ; * admin/make-tarball.txt: Publish HTML formatted NEWS.
Copyright-paperwork-exempt: yes
2026-09-03 10:03:33 +01:00
Peter Oliver 99f8ed8d46 make-news-html-file: Don’t assume NEWS has local variables
* admin/admin.el (make-news-html-file): Don't error if no "Local
variables" section is found.

Copyright-paperwork-exempt: yes
2026-09-03 10:03:23 +01:00
Peter Oliver 5c5362a3e8 Escape [[ in NEWS when generating HTML via Org
* admin/admin.el (make-news-html-file): Escape [[ with zero
width space.

Copyright-paperwork-exempt: yes
2026-09-03 10:02:56 +01:00
Eli Zaretskii 81f2d9c2d6 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs 2026-09-03 11:29:01 +03:00
Eli Zaretskii 656980c384 ; * lisp/outline.el (outline-xref): Doc fix. 2026-09-03 11:27:21 +03:00
Roi Martin 23a007cf38 ; * lisp/outline.el (outline-xref): Improve doc string. (Bug#81592) 2026-09-03 11:24:42 +03:00
Michael Albinus 05af306d27 ; Another attempt to fix filenotify-tests.el
* test/lisp/filenotify-tests.el (file-notify-test12-symlinks): Adapt test.
2026-09-03 08:15:04 +02:00
Eli Zaretskii a55e9ccc60 ; * etc/NEWS: Fix wording of a recently-added entry. 2026-09-03 07:32:18 +03:00
Roi Martin 85e8054a09 Implement xref-location-line' for xref-buffer-location'
* lisp/progmodes/xref.el (xref-location-line): New method (bug#81592).
2026-09-03 01:09:27 +03:00
Rahul Martim Juliato 3b721dd39a Let 'query-replace-show-preview' be a function (bug#81583)
Suggested by Juri Linkov <juri@linkov.net>.

* lisp/replace.el (query-replace-show-preview): Drop the values
t and 'both' in favor of the two functions that implement them.
(query-replace-preview-match): Doc fix.
(replace-preview-propertize): Rename from
'replace-preview--propertize' and make it public, so that the
preview functions can be copied and adapted.
(replace-preview-only-replacement, replace-preview-both): New
functions.
(replace-preview--format): Call the value of
'query-replace-show-preview'.
(replace-preview-setup): Preview only if the value is a
function.
* etc/NEWS: Update the entry.
* doc/emacs/search.texi (Replace): Document the new values.
* test/lisp/replace-tests.el (replace-tests--preview)
(replace-tests-preview-cleanup, replace-tests-preview-disabled)
(replace-tests-preview-invisible-match): Use the new functions.
(replace-tests-preview-both, replace-tests-preview-function):
New tests.
2026-09-02 22:01:58 +03:00
Eshel Yaron 9794fa0d5d
elisp-scope.el: Avoid excessive 'trusted-content-p' calls
Cache the return value of 'trusted-content-p' for the
duration of the analysis of a single form, instead of
calling 'trusted-content-p' repeatedly for (potentially)
every analyzed macro call (bug#81723).

* lisp/emacs-lisp/elisp-scope.el (elisp-scope--trust-cache):
New variable.
(elisp-scope-analyze-form): Let-bind it.
(elisp-scope--trusted-p): New helper function.
(elisp-scope-safe-macro-p): Use it.
2026-09-02 20:52:56 +02:00
Jonas Bernoulli 1d11314e7c
Update to Transient v0.13.8-13-gfb7ae78 2026-09-02 20:25:04 +02:00
Spencer Baugh 9f5285398b Repeated TAB scrolls Completions only if it doesn't complete
* lisp/minibuffer.el (completion--attempt-state): Add.
(completion--in-region-1): Don't scroll if the minibuffer has
changed since the last TAB. (bug#81578)
* test/lisp/minibuffer-tests.el
(completion-tab-with-completions-visible-bug81578): New test.
2026-09-02 20:47:09 +03:00
Michael Albinus 9b85f1e6bd ; Fix last change
* test/lisp/filenotify-tests.el (file-notify-test12-symlinks): Adapt test.
2026-09-02 18:54:37 +02:00
Michael Albinus 397fcd24d2 ; * test/infra/gitlab-ci.yml (test-eglot): Fix EMACS_EXTRAOPT. 2026-09-02 18:03:03 +02:00
Sean Whitton e630bc4fd7 ; Fix some recently added docs. 2026-09-02 11:23:02 +01:00
Michael Albinus bc965039cd ; * etc/NEWS: Presentational fixes and improvements. 2026-09-02 12:19:22 +02:00
Michael Albinus 6117772c77 ; * test/infra/gitlab-ci.yml (test-eglot): Fix EMACS_EXTRAOPT. 2026-09-02 12:18:58 +02:00
Antonio Romano a03ddc00b0
Mark 'elisp-fontify-semantically' and 'elisp-add-help-echo' as :safe
* lisp/progmodes/elisp-mode.el (elisp-fontify-semantically)
(elisp-add-help-echo): Mark as safe file-local variables
(bug#81723).

Copyright-paperwork-exempt: yes
2026-09-02 06:54:51 +02:00
Dmitry Gutov 8e23cbb85f Make log-edit-headers-separator inherit from separator-line
* lisp/vc/log-edit.el (log-edit-headers-separator):
Make it inherit from the face separator-line (bug#81753).

* etc/NEWS: Mention it.
2026-09-02 07:05:04 +03:00
Dmitry Gutov 624d69a98a Make log-edit header separator line intangible
* lisp/vc/log-edit.el (log-edit-font-lock-keywords):
Add 'front-sticky' and 'cursor-intangible' to the headers
separator rule (bug#81764).
(log-edit-mode): Enable cursor-intangible-mode and add
'cursor-intangible' to font-lock-extra-managed-props.
2026-09-02 06:55:23 +03:00
Dmitry Gutov 890f8cb0fe ; xref-backend-identifier-completion-predicate: Fix cl-defgeneric kind 2026-09-02 06:34:30 +03:00
Dmitry Gutov 9e05c0360c Merge branch 'xref-find-by-kind' 2026-09-02 06:25:40 +03:00
Dmitry Gutov 3918f20ee1 Revert "; Mention 'M-s .' in search.texi"
This reverts commit a7a09f58ed.
2026-09-01 20:31:54 +03:00
Philipp Stephani e0a5fcbac6 * lisp/files.el (make-empty-file): Simplify interactive spec 2026-09-01 19:09:26 +02:00
Dmitry Gutov a1bb496e24 (vc-test-vc-dir-next/previous): Fix the test
* test/lisp/vc/vc-tests/vc-test-misc.el
(vc-test-vc-dir-next/previous): Fix the test.
2026-09-01 20:07:03 +03:00
Sean Whitton 956875f822 ; * test/lisp/emacs-lisp/crm-tests.el: Fix copyright years. 2026-09-01 17:14:03 +01:00
Aaron L. Zeng e8b46219ca Fix choose-completion in CRM with boundaries
* lisp/emacs-lisp/crm.el (crm--choose-completion-string):
Delete.
(completing-read-multiple): Set buffer-local
completion-no-auto-exit instead of using
choose-completion-string-functions.  Do not set
completion-list-insert-choice-function.  (Bug#81411)

* test/lisp/emacs-lisp/crm-tests.el: New file.
2026-09-01 17:13:41 +01:00
Michael Albinus ac54527fad Improve eglot tests on emba
* test/infra/Dockerfile.emba (emacs-eglot): Don't run 'pipx ensurepath'.

* test/infra/gitlab-ci.yml (test-eglot): Adapt EMACS_EXTRAOPT.
2026-09-01 15:50:35 +02:00
Michael Albinus ab80254e01 ; Remove traces in filenotify-tests.el
* test/lisp/filenotify-tests.el (file-notify-test07-many-events)
(file-notify-test08-backup): Remove traces.
2026-09-01 11:54:11 +02:00
Michael Albinus 21d0f8023a Improve handling of pending file notification events
* lisp/filenotify.el (file-notify--check-pending-rename): New defun.
(file-notify--handle-event): Use it.  Start a timer checking
pending events.  (Bug#81531)

* test/lisp/filenotify-tests.el (file-notify--test-with-actions):
Read pending event.
(file-notify-test05-file-validity, file-notify-test12-symlinks):
Adapt tests.
(file-notify-test13-unmount): Rename.
2026-09-01 09:58:34 +02:00
Dmitry Gutov 6698677f0d ; vc-dir-refresh: Predicate the last change on not being in revert-buffer 2026-09-01 02:56:22 +03:00
Paul Eggert 0eb7313a41 ; clarify Greenwich meridian vs time 2026-08-31 15:42:55 -07:00
Dmitry Gutov 23a5ae5a24 vc-dir: Position point initially below the binding hints area
* lisp/vc/vc-dir.el (vc-dir-refresh): Move point to the line after
the separator.  This way the hints are emphasized as separate.

https://lists.gnu.org/archive/html/emacs-devel/2026-08/msg00236.html
2026-09-01 00:32:26 +03:00
Dmitry Gutov a7a09f58ed ; Mention 'M-s .' in search.texi 2026-09-01 00:32:26 +03:00
Paul H. McClelland f03523c1eb Recognize comment-prefixed headings in outlines
When the new user option 'outline-use-comment-regexp' is non-nil,
enabling 'outline-minor-mode' configures 'outline-regexp',
'outline-level', and 'outline-search-function' to recognize outline
headings prefixed by a comment, such as ";;; *" and ";;; **".  The
pattern comes from the buffer-local 'outline-comment-regexp' when set,
and otherwise from a default built from 'comment-start' and the new
option 'outline-comment-regexp-suffix'.  The heading level is the
length of the regexp's group 1.  The previous values are saved and
restored when the mode is disabled.  All of the new code is kept in a
self-contained section at the end of outline.el.

* lisp/outline.el (outline-comment-regexp): New buffer-local variable.
(outline-comment-regexp-suffix, outline-use-comment-regexp): New user
options.
(outline--saved-outline-regexp, outline--saved-outline-level)
(outline--saved-outline-search-function, outline--comment-regexp): New
internal variables.
(outline--comment-level, outline--default-comment-regexp)
(outline--setup-from-comment-regexp, outline--restore-from-comment-regexp):
New functions.
(outline-minor-mode): Call 'outline--setup-from-comment-regexp' on
activation and 'outline--restore-from-comment-regexp' on deactivation.
* lisp/emacs-lisp/lisp-mode.el (lisp-mode-variables): Set
'outline-comment-regexp' to recognize ";;; *" headings.
* etc/NEWS: Announce the new options (bug#81054).
2026-08-31 21:44:05 +03:00
Paul Eggert 0899936ea1 Mark timezone-world-timezones obsolete
* lisp/timezone.el (timezone-world-timezones): Now obsolete.
2026-08-31 11:30:07 -07:00
Paul Eggert 2a909974fd In doc string, say when alpha tz abbr obsoleted 2026-08-31 11:30:07 -07:00
Paul Eggert 2f7c5e4de0 In doc, discourage alphabetic tz abbrs in Gnus 2026-08-31 11:30:07 -07:00
Paul Eggert 6dfaa91c28 Mark math-tzone-name obsolete
* lisp/calc/calc-forms.el (math-tzone-names): Use
make-obsolete-variable instead of merely saying in the doc string
that the variable is obsolete.  Move the doc for this
obsolete variable here, from the manual.
2026-08-31 11:30:07 -07:00
Paul Eggert 9fa9e30113 ; Document POSIX constraint on time zone abbrs 2026-08-31 11:30:07 -07:00
Dmitry Gutov 58bb38a367 ; Mention 'M-g .' more prominently 2026-08-31 19:57:42 +03:00
Eli Zaretskii ce7c35211f Fix width of composed sequences on GUI frames
* src/indent.c (scan_for_column): Assign parent_it of cmp_it.
* src/composite.c (composition_update_it): Use cmp_it->parent_it
to compute the frame's canonical column width, so as to compute
cmp_it->width in column units.  (Bug#81759)
2026-08-31 19:15:27 +03:00
Eli Zaretskii da804bbdd5 ; * etc/NEWS: Announce IME support on w32 TTY frames. (Bug#81495) 2026-08-31 15:08:45 +03:00
zdn 9e0360d398 Support IME compositions on MS-Windows TTY frames
* src/w32inevt.c (key_event): Modify the UnicodeChar branch
condition and fix the faked_key filtering condition.  (Bug#81495)
2026-08-31 15:04:00 +03:00
Lockywolf 476200e4dd Fix ispell-tests issues discovered on Solaris 10
* lisp/textmodes/ispell.el: Export minimum versions for engines.
(ispell--minversion-alist): Define versions alist.
(ispell-check-version): Use public version alist.
* test/lisp/textmodes/ispell-tests/ispell-tests-common.el:
(ispell-tests--parse-v): Parse engine versions.
(ispell-tests--valid-version-triple?): Add version verification.
(ispell-tests--broken-system?): Add predicate for excluding broken
systems.
*test/lisp/textmodes/ispell-tests/ispell-aspell-tests.el
(ispell/aspell/ispell-check-version/works)
(ispell/aspell/ispell-word/english/correct)
(ispell/aspell/ispell-word/english/incorrect):
* test/lisp/textmodes/ispell-tests/ispell-tests.el
(ispell/ispell-valid-dictionary-list/aspell): Add Aspell triple check.
(ispell/ispell-pdict-save/unmodified)
(ispell/ispell-lookup-words/simple)
(ispell/ispell-complete-word/ispell-completion-at-point): Disable
on Solaris.  (Bug#81472)
2026-08-31 14:58:14 +03:00
Eli Zaretskii f3d4c95f0a Show file names in lexbind warnings when loading themes
* lisp/international/mule.el (load-with-code-conversion):
* lisp/custom.el (load-theme): Set 'files--name-of-loading-file'
buffer-locally to record the name of the file being loaded.
* lisp/files.el (files--name-of-loading-file): New buffer-local
variable.
(internal--get-default-lexical-binding): Use it to show the name
of the file from which we load or evaluate Lisp code.  (Bug#81686)
2026-08-31 14:53:29 +03:00
Sean Whitton d3caf5fbd1 emacsclient check_socket_timeout: Don't assume EAGAIN==EWOULDBLOCK
* lib-src/emacsclient.c (check_socket_timeout): Don't assume
EAGAIN==EWOULDBLOCK.  See also would_block in src/process.c.
2026-08-31 11:21:18 +01:00
Sean Whitton e420d0d978 ; Further explain WHEN argument to marking functions obsolete. 2026-08-31 10:04:04 +01:00
Dmitry Gutov 056970df23 Change bindings for xref-find-by-kind, and add to NEWS
* lisp/progmodes/xref.el: Change the proposed bindings from M-' to M-g M-.

* lisp/menu-bar.el (menu-bar-goto-menu): Add menu item.

* doc/emacs/maintaining.texi: Update the binding.

* etc/NEWS: Document the commant.
2026-08-31 12:03:38 +03:00
Michael Albinus 45ff5fd4dc * test/infra/gitlab-ci.yml (test-eglot): Set $PATH. 2026-08-31 09:34:31 +02:00
Stefan Monnier 7f8bfe9c9d lisp/textmodes/flyspell.el (flyspell-prog-text-faces): Fix type (bug#81638) 2026-08-30 23:33:56 -04:00
Stefan Monnier 2eae6803a0 lisp/subr.el (syntax-after): Fix unibyte buffer case (bug#81717) 2026-08-30 23:05:02 -04:00
Earl Hyatt 24fc3c0592 Fix the documentation of pcase-let*-strict
* lisp/emacs-lisp/pcase.el (pcase-let*-strict): Fix the documentation to say
that 'pcase-let*-strict' always signals an error when a pattern does not
match.  This is the intended difference between 'pcase-let*-strict' and
'pcase-let*'.  The previous text, copied from 'pcase-let*', stated that
'pcase-let*-strict' "may" error, incorrectly suggesting that it also may not.
2026-08-30 23:00:52 -04:00
Dmitry Gutov 4577a7c55e Use fewer newlines around the separator line, multiple places
* lisp/emacs-lisp/package.el (describe-package-1):
Remove extraneous newlines around the separator.

* lisp/help.el (describe-key): Same.

* lisp/help-fns.el (describe-symbol): Same.
Also stop stripping space/tab/nl at the end of the inserted
doc.  This way we keep the extra newline at the end of the
additionally-indented paragraph about "other relevant functions",
compiler macros, etc.

https://lists.gnu.org/archive/html/emacs-devel/2026-08/msg00866.html
2026-08-31 04:11:13 +03:00
Paul Eggert bbcc216395 Port xref-tests to pre-POSIX.1-2024
lisp/progmodes/xref.el assumes xref -0 works, but this is not true
on some platforms like Solaris 10.  xref -0 was not standardized
until POSIX.1-2024, and there is little point to failing the tests
on older platforms.  (bug#81479)
* test/lisp/progmodes/xref-tests.el (xref-tests--xargs-0-works):
New constant.
(xref-tests--deftest): New macro.  All tests changed to use this
macro rather than using plain ert-deftest.
2026-08-30 16:44:06 -07:00
Philip Kaludercic c4d50ea097 Skip all package-vc tests if git is not installed
* test/lisp/emacs-lisp/package-vc-tests.el
(package-vc-test-deftest): Inject a 'skip-unless' at the
beginning of the test definition to check if "git" is installed,
as we test package-vc using vc-git.  (Bug#81470)
2026-08-30 14:15:32 -07:00
Michael Albinus 98165ff73e Install more test server for eglot tests on emba
* test/infra/Dockerfile.emba (emacs-eglot): Install pipx,
rassumfrassum, ruff and ty.
2026-08-30 16:36:30 +02:00
Eli Zaretskii d6381e5df9 Show the file name of theme when warning about lexical-binding cookie
* lisp/custom.el (custom--theme-load-file): New variable.
(load-theme): Set it to the theme file being loaded.
* lisp/files.el (internal--get-default-lexical-binding): Use
'custom--theme-load-file', if non-nil, to show the file name of a
theme which caused the lexbind warning.  Do not merge to master.
(Bug#81686)
2026-08-30 10:14:18 +03:00
Jim Porter 6723797856 Don't add trailing space when completing options that take arguments
The space is unhelpful, since the user likely wants to add a value for
that option immediately after the "=" (bug#81689).

* lisp/pcomplete.el (pcomplete-long-option-completion-table): New
function...
(pcomplete-here-using-help):
* lisp/pcmpl-gnu.el (pcomplete/tar):
* lisp/pcmpl-linux.el (pcomplete/systemctl): ... use it.

* test/lisp/pcomplete-tests.el (pcomplete-shell-completion)
(pcomplete/pcmpl-option-test): New functions.
(pcomplete-test-long-options/with-value)
(pcomplete-test-long-options/without-value): New tests.
2026-08-29 10:15:06 -07:00
Eli Zaretskii b115e349e3 Avoid assertion violations in 'char-syntax'
* src/syntax.c (Fchar_syntax): Handle multibyte characters even if
the current buffer is unibyte.  Doc fix.  (Bug#81717)
2026-08-29 19:19:08 +03:00
Joshua Murphy 8a287a3888 viper-ex: Implement z command
* lisp/emulation/viper-ex.el (ex-token-alist):
Add 'z' command
(ex-adjust-window-point): Add var to track previous point
(ex-adjust-window-count): Add var to track previous count
(ex-adjust-window): Implement 'z' command
* etc/NEWS: Document 'z' command
2026-08-29 19:15:30 +03:00
Stefan Monnier 7fc2bff51c (delete-selection-pre-hook): Fix Consult issue #1328
Since we're in the pre-command-hook, there's no reason not to
(auto)load the function: it would be (auto)loaded right after
when passed to 'command-execute' anyway.

* lisp/delsel.el: Prefer #' to quote function names.
(delete-selection-pre-hook): Use 'function-get'.
2026-08-29 11:39:11 -04:00
Michael Albinus 4593aa1417 Fix performance problem in filenotify.el
* lisp/filenotify.el (file-notify-add-watch): Add traces.
(file-notify-rm-watch): Add traces.
(file-notify-rm-watch): Call `file-notify-handle-event' instead of
`insert-special-event'.  Don't call `read-event'.  (Bug#81731)
2026-08-29 16:17:13 +02:00
Eli Zaretskii e9cc6f70c3 Merge from origin/emacs-31
8c18e3d4e8 ; * etc/PROBLEMS: Problems with pasting non-ASCII (bug#81...
2026-08-29 07:17:50 -04:00
Eli Zaretskii d438384791 ; Merge from origin/emacs-31
The following commit was skipped:

478dcbc17e Backport: Fix Emacs not gaining focus when launched on macOS
2026-08-29 07:17:50 -04:00
Eli Zaretskii b5f66db0d1 Merge from origin/emacs-31
dbd3088c10 docview: Fix outline generation using mupdf
ca0a913a73 ; * doc/lispref/variables.texi (Selecting Lisp Dialect): ...
e4dc8ddea9 emacsclient --alternate-editor=/no/such diagnostic
490cd601ea Fix emacsclient --alternate-editor='' SIGSEGV
6fc331b587 'speedbar-mode' must be enabled in the 'speedbar-window' ...
80671b1c49 Don't ignore display-warning customization for initial fr...
2026-08-29 07:17:49 -04:00
Eli Zaretskii 6be3c3390a ; Merge from origin/emacs-31
The following commit was skipped:

57ad5ab8f7 Sync with Tramp 2.8.3-pre (don't merge)
2026-08-29 07:17:49 -04:00
Eli Zaretskii 84c500552e Merge from origin/emacs-31
c0b872dd67 ; * admin/notes/jargon: Add FUD.
e8936794ad Fix navigating *Completions* with TAB in vertical format
9c9a26e60b Merge branch 'emacs-31' of git.savannah.gnu.org:/srv/git/...
3d9f0fa865 ; * admin/make-tarball.txt: Note about publishing NEWS (b...
bcfc4e7e19 tab-bar-tests-quit-restore-window: Mark unstable
a001a45a50 Revert "Delete test that hangs"
6800426743 admin/make-manuals: Include type hierarchy auxiliary files
a013cdd3e8 ; * admin/make-tarball.txt: Various improvements.
2026-08-29 07:17:49 -04:00
Eli Zaretskii 4e224a7a3f Avoid artifacts when changing the frame's background mode
* lisp/frame.el (frame-background-mode): Redraw the entire
display, to avoid leaving artifacts around.  (Bug#81739)
2026-08-29 14:08:12 +03:00
Eli Zaretskii 8c18e3d4e8 ; * etc/PROBLEMS: Problems with pasting non-ASCII (bug#81417). 2026-08-29 13:40:32 +03:00
Boris Buliga 67efab7637 Always build the Emacs, Elisp and Intro manuals (bug#81332)
The manuals in doc/emacs, doc/lispintro and doc/lispref have no
translations, so filtering the per-directory language list by DOCLANGS
left those directories with nothing to build when DOCLANGS does not
include 'default'.  These three manuals must be built and installed
regardless of DOCLANGS: the Emacs and Emacs Lisp manuals are
referenced from doc strings, and the Introduction to Emacs Lisp
Programming is an important enough part of Emacs to be available
whatever the language preferences of the user who builds the manuals.

* Makefile.in (MANDATORY_DOC_DIRS): New variable.
(FILTER_DOCLANGS): Use it to always build the default language for
those directories.
(INFO_NONMISC, srcdir_doc_info_dir_inputs): Say why these are not
gated by DOCLANGS.
* doc/translations/README: Document that those three manuals are
always built in the default language.
2026-08-29 12:43:41 +03:00
Harald Jörg f4f249a224 ;cperl-mode.el: Adjust comments towards a :core package
Comments and docstrings only, no functional change.

* lisp/progmodes/cperl-mode.el: Push version for ELPA publishing.
Point URL header to https://elpa.gnu.org/packages/cperl-mode.html.
Add information about :core package status.
Start the commentary with the supported version of Perl syntax.
Move advertising 'cperl-hairy' from the commentary section to the
docstring for 'cperl-tips'.
Drop recommending 'cperl-speed', no longer relevant.
Drop incomplete (and inaccurate) list of faces.
2026-08-28 18:24:41 +02:00
Perry Fraser 478dcbc17e Backport: Fix Emacs not gaining focus when launched on macOS
* src/nsterm.m (ns_term_init): Activate after calling run, not before;
remove outdated comment (bug#81683, bug#76814).

Copyright-paperwork-exempt: yes
(cherry picked from commit cc15723d21)
2026-08-28 15:20:25 +01:00
岩下泰幸 5919ac3fac markdown-ts--fontify-bare-uri: Don't give bare URLs a mailto: prefix
* lisp/textmodes/markdown-ts-mode.el
(markdown-ts--fontify-bare-uri): Don't give bare URLs a mailto:
prefix (bug#81703).

Copyright-paperwork-exempt: yes
2026-08-28 14:08:26 +01:00
Sean Whitton 0281922783 separator-line, make-separator-line: Fall back to underline
* lisp/simple.el (separator-line): Check for support for
strike-through and fall back to underlining.
(make-separator-line): Update test to accept terminals that
support underline.
2026-08-28 12:21:46 +01:00
Morgan Smith dbd3088c10 docview: Fix outline generation using mupdf
This script no longer works as of mupdf version 1.27.2.
This new value works for mupdf version 1.28.0, 1.27.2, 1.26.8, and
1.25.2.

* lisp/doc-view.el (doc-view--mutool-pdf-outline-script): Modify
value to one that works.
2026-08-28 10:35:53 +02:00
Eli Zaretskii ca0a913a73 ; * doc/lispref/variables.texi (Selecting Lisp Dialect): Improve indexing. 2026-08-28 10:06:48 +03:00
Dmitry Gutov 22bf7a9821 Improve vc-dir-headers separator line
* lisp/vc/vc-dir.el (vc-dir-headers): Remove the extra nelines
around the separator line.

* lisp/simple.el (separator-line): Use strike-through in terminal,
to better match the original intent.
(make-separator-line): Change the capability check here to
strike-through as well, it seems about as common as underline.
2026-08-28 05:51:15 +03:00
Paul Eggert e4dc8ddea9 emacsclient --alternate-editor=/no/such diagnostic
* lib-src/emacsclient.c (fail): Also output errno indication when
alternate editor fails.  I noticed this when debugging Bug#81716.
2026-08-27 09:52:14 -07:00
Paul Eggert 490cd601ea Fix emacsclient --alternate-editor='' SIGSEGV
Problem reported by Ken Speegle (Bug#81716)
* lib-src/emacsclient.c (fail): Don’t get confused by trailing
whitepace in alternate_editor.  Quietly ignore alternate_editor
if it has no tokens (this part was suggested by Eli Zaretskii).
2026-08-27 09:51:52 -07:00
Eli Zaretskii 46e3d4b260 Fix 'window-text-pixel-size' at EOL when FROM == TO
* src/xdisp.c (window_text_pixel_size): Reset starting X
coordinate when pretending we begin after the newline, to be
consistent with the iterator's X coordinate.  (Bug#81722)
2026-08-27 19:10:58 +03:00
Eli Zaretskii b28750b822 ; * etc/NEWS: Announce addition of 'uuid' library. 2026-08-26 15:38:49 +03:00
Sam James a746f6d7e7 uuid: fix test override of 'float-time'
The mock 'float-time' was defined to take no arguments, unlike the
real 'float-time', which manifested as a test failure in
'uuid-v7-generator-known-rnd-and-ts'.

* test/lisp/emacs-lisp/uuid-tests.el (uuid-v7-generator-known-rnd-and-ts):
Fix mock 'float-time' definition.  (Bug#81701)
2026-08-26 15:32:12 +03:00
Roi Martin e156410d30 Add button to diff failed erts-file test output in ERT
* doc/misc/ert.texi (Running Tests Interactively): Mention diff button.
* etc/NEWS: Add entry.
* lisp/emacs-lisp/ert.el (ert--erts-file-test-execution-observer): Add
docstring.
(ert--erts-file-test-description, ert--erts-file-test-mismatch): New
structures.
(ert--erts-file-test-diff-button): New button type.
(ert--erts-file-test-diff-button-action): New function.
(ert-results-pop-to-erts-file-tests-for-test-at-point): Mention diff
button in docstring.
(ert-test--erts-test): Use `ert--erts-file-test-description' and
`ert--erts-file-test-mismatch' structures.
* test/lisp/emacs-lisp/ert-resources/erts-fail-point.erts (Name): New
test file.
* test/lisp/emacs-lisp/ert-tests.el (ert-test-list-of-erts-file-tests):
Use `ert--erts-file-test-description' structure.
(ert-test-erts-file-test-output-mismatch): New test.  (Bug#81685)
2026-08-26 14:17:41 +02:00
Vincenzo Pupillo 6fc331b587 'speedbar-mode' must be enabled in the 'speedbar-window' buffer.
* lisp/speedbar.el (speedbar-window-mode): Enable 'speedbar-mode'
major-mode in the 'speedbar-window' buffer.  (Bug#81699)
2026-08-26 14:11:03 +03:00
Daniel Mendler 2b02641953 setq-local: Define on top of set-local
This leads to more compact bytecode.

* lisp/subr.el (setq-local): Expand to `set-local' instead of `setq' and
`make-local-variable'.
2026-08-25 13:56:12 -04:00
Stefan Monnier 5e6f1bb75f cc-mode.el: Set 'editorconfig-indent-size-vars'
* lisp/progmodes/cc-mode.el (c-basic-common-init):
Set 'editorconfig-indent-size-vars'.

* lisp/editorconfig.el (editorconfig-indentation-alist):
Remove settings for CC-modes since they are now redundant.
2026-08-25 12:20:17 -04:00
Juri Linkov 60d0df24d3 * lisp/dired.el (dired-jump-map): Remove key 'j' bound to 'dired-jump'.
It caused a usability conflict with 'j' bound to 'dired-goto-file'
(bug#81672).
2026-08-25 18:24:44 +03:00
Juri Linkov 80671b1c49 Don't ignore display-warning customization for initial frame too
* lisp/emacs-lisp/warnings.el (display-warning): Take into account
'warning-minimum-level' and 'warning-suppress-types' also in case of
displaying daemon startup warnings on the first client frame (bug#81694).
2026-08-25 18:17:50 +03:00
Harald Jörg ca03a4c385 ;cperl-mode.el: Adhere to elisp coding conventions
Matthew Persico reported on GitHub that cperl-mode.el gives
several warnings when checked with package-lint.  This commit
fixes them. (https://github.com/HaraldJoerg/cperl-mode/pull/29)

* lisp/progmodes/cperl-mode.el: Add a "Version" header,
remove nonstandard "Perl" keyword. Add an URL header.
(cperl--field-declaration-rx):
(cperl-electric-rparen):
(cperl-find-sub-attrs):
(cperl-highlight-charclass):
(cperl-process-here-doc):
(cperl-init-faces):
Don't wrap closing parens onto new lines
2026-08-25 16:46:38 +02:00
Vincenzo Pupillo 747fa2fd66 Do not indent if <?php is preceded by a shebang or a comment
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--parent-html-heuristic): Do not indent if <?php is
preceded by a shebang or a comment (bug#81663).
2026-08-25 13:23:14 +01:00
Eli Zaretskii 9c7768b264 Fix alignment of string constants in 'c-ts-mode'
* lisp/progmodes/c-ts-mode.el (c-ts-mode--simple-indent-rules):
Align strings that will concatenate.  Patch by Tomas Nordin
<tomasn@posteo.net>.  (Bug#81588)
2026-08-25 13:59:33 +03:00
Michael Albinus 57ad5ab8f7 Sync with Tramp 2.8.3-pre (don't merge)
* doc/misc/tramp.texi (Auto-save File Lock and Backup): Adapt example.

* doc/misc/trampver.texi:
* lisp/net/trampver.el: Change version to "2.8.3-pre".

* lisp/net/tramp-cmds.el (tramp-file-name-with-sudo): Expand the
result for consistency.  (Bug#81622)

* lisp/net/tramp.el (with-tramp-progress-reporter):
Let-bind `inhibit-message'.
(tramp-file-name-for-operation): Fix the case, that the first
argument is a process name.
(tramp-handle-find-backup-file-name): Use connection-local value
of `make-backup-files'.

* test/lisp/net/tramp-tests.el (tramp-test38-find-backup-file-name):
Extend test.
2026-08-25 10:22:03 +02:00
Michael Albinus c0b872dd67 ; * admin/notes/jargon: Add FUD. 2026-08-25 10:20:24 +02:00
Stephen Berman e8936794ad Fix navigating *Completions* with TAB in vertical format
* lisp/simple.el (next-line-completion): Make using TAB to
navigate in vertical format cycle through the minibuffer (bug#81631).

* test/lisp/minibuffer-tests.el (completion-auto-select-test-bug81635):
Run tests for all values of 'completions-format'.
2026-08-25 09:52:44 +02:00
Harald Jörg 558709f2c7 ; cperl-mode.el: use ps-print instead of cperl-ps-print
There is no value in having an opinionated cperl customization for
PostScript printing (who does that anyway in 2026?) which clobbers
ps-print customization with 'eval-after-load'.

* lisp/progmodes/cperl-mode.el
(cperl-menu): Delete "CPerl pretty print (experimental)".
(cperl-ps-print-face-properties):
Obsolete this cperl-ism variable in favor of ps-print customizing.
(cperl-windowed-init): No longer used, deleted.
(cperl-init-faces): Remove call to 'cperl-ps-print-init'.
(cperl-ps-print-init): Obsolete this function, point to 'ps-print'
customization in the docstring.
(cperl-ps-print): Obsolete this functoin in favor of
`'s-print-buffer'. The function body uses that function.
2026-08-24 22:30:27 +02:00
Harald Jörg 63166a13cc WIP github items 2026-08-24 22:30:27 +02:00
Alan Mackenzie 20fb9c960c objc-mode: Fontify methods containing commas in macro calls
Also correctly handle imenu in a buffer with no classes
declared.

* lisp/progmodes/cc-menus.el
(cc-imenu-objc-generic-expression): Recognize commas in the
part of the regexp dealing with methods.
(cc-imenu-objc-function): When no classes are declared in the
buffer, don't add the spurious element ((nil)) to TOPLIST, as
this causes an error to be thrown.  Also, don't try to setcdr a
list onto TOPLIST when the latter is nil.
2026-08-24 20:17:30 +00:00
Alan Mackenzie eadb99e7b6 objc-mode: Fix context fontification within a multi-line method
At buffer changes in objc-mode, context fontification was
undoing correct fontification due to not taking being inside a
method into account.  Now fixed.

* lisp/progmodes/cc-engine.el
(c-beginning-of-objc-method-header): New function.

* lisp/progmodes/cc-mode.el (c-fl-decl-start): In objc-mode,
call the new function to test for being within a method.
2026-08-24 17:10:31 +00:00
Eli Zaretskii 9c9a26e60b Merge branch 'emacs-31' of git.savannah.gnu.org:/srv/git/emacs into emacs-31 2026-08-24 18:54:46 +03:00
Eli Zaretskii 3d9f0fa865 ; * admin/make-tarball.txt: Note about publishing NEWS (bug#81693). 2026-08-24 18:54:10 +03:00
Rahul Martim Juliato 49f3888c5d Add new options to 'query-replace-show-preview' (bug#81583)
* lisp/replace.el (query-replace-show-preview): Accept 'both'
and a function of two arguments as values.  Doc fix.
(query-replace-preview-match): New face.
(replace-preview--propertize, replace-preview--format): New
functions.
(replace-preview-update): Use 'replace-preview--format'.
* etc/NEWS: Update the entry.
2026-08-24 18:35:11 +03:00
Yuuki Harano b2b5bbfc50 Fix PGTK make-frame-invisible loop takes some time (bug#81014)
* src/pgtkterm.c (pgtk_make_frame_invisible):
If already invisible, do nothing.
2026-08-24 22:57:50 +09:00
Dmitry Gutov 7d07be05a2 Improve the process of waiting until a timeout occurs (bug#81014)
* src/pgtkterm.c (pgtk_make_frame_visible_wait_for_event_cb):
Rename from pgtk_make_frame_visible_wait_for_map_event_cb.
(pgtk_make_frame_visible_wait_for_event_timeout):
Rename from pgtk_make_frame_visible_wait_for_map_event_timeout.
(pgtk_wait_for_event): Rename from pgtk_wait_for_map_event.
It waits for not only one "map-event" but also one "unmap-event".
(pgtk_make_frame_visible): Call pgtk_wait_for_event instead
to wait for a "map-event".
(pgtk_make_frame_invisible): Call pgtk_wait_for_event instead
to wait for an "unmap-event".
2026-08-24 22:57:16 +09:00
Eli Zaretskii 8081cffc15 ; * src/xfaces.c (Finternal_lisp_face_equal_p): Fix a thinko (bug#81690). 2026-08-24 16:27:34 +03:00
Sean Whitton 3b2dbae103 Merge from origin/emacs-31
bcfc4e7e19 tab-bar-tests-quit-restore-window: Mark unstable
2026-08-24 13:42:13 +01:00
Sean Whitton aa603c8241 ; Merge from origin/emacs-31
The following commit was skipped:

a001a45a50 Revert "Delete test that hangs"
2026-08-24 13:42:13 +01:00
Sean Whitton 78df4833e6 Merge from origin/emacs-31
6800426743 admin/make-manuals: Include type hierarchy auxiliary files
a013cdd3e8 ; * admin/make-tarball.txt: Various improvements.
82ba6298ae Merge branch 'emacs-31' of git.savannah.gnu.org:/srv/git/...
091398b045 ; * src/treesit.c: Fix wording and typos in commentary.
83ef59ef5e ; Update tree-sitter docstrings
c51104de28 ; * ChangeLog.5: Fix position of one entry.
2026-08-24 13:42:13 +01:00
Sean Whitton 55441ac6d6 ; Merge from origin/emacs-31
The following commit was skipped:

cd83b6e815 Bump Emacs version to 31.1.50
2026-08-24 13:42:13 +01:00
Sean Whitton bcfc4e7e19 tab-bar-tests-quit-restore-window: Mark unstable
* test/lisp/tab-bar-tests.el
(tab-bar-tests-quit-restore-window): Mark unstable.
2026-08-24 13:41:29 +01:00
Sean Whitton a001a45a50 Revert "Delete test that hangs"
This reverts commit 76846eede3.

Do not merge to master.
2026-08-24 13:40:41 +01:00
Sean Whitton 6800426743 admin/make-manuals: Include type hierarchy auxiliary files
* admin/admin.el (make-manuals, make-manuals-dist--1): Install
elisp_type_hierarchy.txt and elisp_type_hierarchy.jpg.
2026-08-24 13:23:24 +01:00
Sean Whitton a013cdd3e8 ; * admin/make-tarball.txt: Various improvements. 2026-08-24 13:23:22 +01:00
Eli Zaretskii 82ba6298ae Merge branch 'emacs-31' of git.savannah.gnu.org:/srv/git/emacs into emacs-31 2026-08-24 14:19:02 +03:00
Eli Zaretskii 091398b045 ; * src/treesit.c: Fix wording and typos in commentary. 2026-08-24 14:18:20 +03:00
Yuan Fu 83ef59ef5e ; Update tree-sitter docstrings
* src/treesit.c: (Ftreesit_parser_create):
(Ftreesit_parser_list): Remove mention of indirect buffer
special case.  (Bug#81637)
2026-08-24 14:11:57 +03:00
Sean Whitton c51104de28 ; * ChangeLog.5: Fix position of one entry. 2026-08-24 12:10:17 +01:00
Sean Whitton cd83b6e815 Bump Emacs version to 31.1.50
* README:
* configure.ac:
* exec/configure.ac:
* java/AndroidManifest.xml.in (Version-code):
* nt/README.W32:
* msdos/sed2v2.inp: Bump Emacs version to 31.1.50.

* etc/NEWS: Add headers for Emacs 31.2.
2026-08-24 11:46:20 +01:00
Sean Whitton f392a3ffc1 Merge from origin/emacs-31
a360712c9d ; Update exported ChangeLog files and etc/AUTHORS
2026-08-24 11:29:00 +01:00
Sean Whitton aae4e319e0 ; Merge from origin/emacs-31
The following commit was skipped:

76846eede3 Delete test that hangs
2026-08-24 11:29:00 +01:00
Sean Whitton 6a8c1253dd Merge from origin/emacs-31
249e293f7a em-script-tests: don't load the site file
442674babb emacsclient-tests: don't load the site file
b4612c6f29 Fix navigating vertical completions with annotations (bug...
f60d4243e6 Fix 'describe-package' for the Emacs pseudo package
d3229f9f37 Avoid errors in text-only client frames of PGTK build
2026-08-24 11:29:00 +01:00
Sean Whitton a360712c9d ; Update exported ChangeLog files and etc/AUTHORS
* ChangeLog.5:
* etc/AUTHORS: Update.
2026-08-24 10:35:47 +01:00
Sean Whitton 76846eede3 Delete test that hangs
* test/lisp/tab-bar-tests.el
(tab-bar-tests-quit-restore-window): Delete test that hangs, for
the Emacs 31.1 release.  Do not merge to master.
2026-08-24 10:05:22 +01:00
Ulrich Müller 249e293f7a em-script-tests: don't load the site file
* test/lisp/eshell/em-script-tests.el (em-script-test/batch-file)
(em-script-test/batch-file/shebang): Invoke Emacs with -Q to
suppress site file loading.  (Bug#81679)
2026-08-23 21:00:56 +02:00
Ulrich Müller 442674babb emacsclient-tests: don't load the site file
* test/lib-src/emacsclient-tests.el
(emacsclient-test-alternate-editor-allows-arguments)
(emacsclient-test-alternate-editor-allows-quotes): Invoke the
alternate editor with -Q to suppress site file loading.  (Bug#81676)
2026-08-23 21:00:56 +02:00
Kai Ma 80383d8e57 Fix Emoji composition rules for TTY frames
* (admin/unidata/emoji-zwj.awk): Add all TTY-eligible Emoji codepoints
to composition rules, but exclude keycap sequence initials.
2026-08-23 17:28:33 +03:00
Stephen Berman b4612c6f29 Fix navigating vertical completions with annotations (bug#81645)
* lisp/simple.el (last-completion): When finding the last column
in the completions list, account for annotations on the candidate.
2026-08-23 15:59:21 +02:00
Philip Kaludercic f60d4243e6
Fix 'describe-package' for the Emacs pseudo package
* lisp/emacs-lisp/package.el (describe-package-1): Manually
construct a package-desc object if the package being described
in 'emacs', otherwise fall back to 'package-get-descriptor'.
This is necessary since 'package-get-descriptor' doesn't handle
pseudo packages.  (Bug#81671)
2026-08-23 13:16:54 +02:00
Eli Zaretskii d3229f9f37 Avoid errors in text-only client frames of PGTK build
* lisp/net/browse-url.el (browse-url): Don't call
pgtk-backend-display-class on TTY frame, as it will signal an
error.  (Bug#81666)
2026-08-23 14:05:33 +03:00
Eli Zaretskii b33d4088a6 ; * etc/NEWS: Fix wording and punctuation of last change. 2026-08-23 11:48:50 +03:00
Kai Ma 23b0f4bdb9 ; * etc/NEWS: Document improved Emoji support on text terminals. 2026-08-23 11:47:28 +03:00
Kai Ma 7eb84c0571 Use the gstring width as the width of an automatic composition
* src/composite.c (composition_update_it): Set the width of an
automatic composition using 'composition_gstring_width'.
2026-08-23 11:46:39 +03:00
Kai Ma 08af2dd7e3 Make 'string-width' return 2 for an Emoji sequence
* lisp/composite.el (compose-gstring-and-emoji): Adjust the widths
of glyphs.
* src/character.c (lisp_string_width): Handle automatic
compositions when HAVE_WINDOW_SYSTEM is not defined.
2026-08-23 11:43:52 +03:00
Kai Ma 4956e87309 Produce padding glyphs for composite glyphs
* src/term.c (append_composite_glyph): Add `padding' argument.
(produce_composite_glyph): Request one padding glyph if the
composite glyph has pixel_width >= 2 and the first character has
width >= 2, or it is considered an Emoji.
(encode_terminal_code): Skip padding glyphs for composite glyphs
as well.
(composite_glyph_is_emoji_sequence): New function.
(tty-display-emoji-force-wide)
(auto-composition-emoji-tty-eligible-codepoints)
(auto-composition-emoji-unqualified-tail-initials): New variables.
2026-08-23 11:40:48 +03:00
Kai Ma f7cc89a8ce Compose Emoji sequences on TTY frames
* admin/unidata/Makefile.in: Add emoji-variation-sequences.txt and
emoji-test.txt to zwj_sources.
* admin/unidata/emoji-zwj.awk: Scan emoji-variation-sequences.txt to
generate 'auto-composition-emoji-tty-eligible-codepoints'.  Scan
emoji-test.txt to generate
'auto-composition-emoji-unqualified-tail-initials' and the composition
rules for unqualified and minimally-qualified RGI sequences.  Update the
default composition function to 'compose-gstring-and-emoji'.
* lisp/composite.el (compose-gstring-and-emoji): Add.
(auto-compose-chars): Changed to consider 'compose-gstring-and-emoji'.
2026-08-23 11:37:45 +03:00
Kai Ma b7b129eaf3 Change widths of some East Asian Neutral characters to 1
In accordance to UAX #11 ED7
(https://www.unicode.org/reports/tr11/tr11-44.html#ED7)

  [...] because for all practical purposes they behave like Na, they are
  treated as narrow characters (the same as Na) under the
  recommendations below.

* lisp/international/characters.el: Do not mark U+2690--U+2692, U+1F1AD,
U+1FA00--U+1FA53, U+1FA60--U+1FA6D, and U+1FB00--U+1FB92 as
double-width, since they have East_Asian_Width=Neutral in Unicode 17.
Do not mark U+061B and U+06DE as zero-width, since their Unicode General
Category property is not one of Mn, Me, or Cf.
2026-08-23 11:34:16 +03:00
Michael Albinus a6c2a31932 Fix tramp-file-name-with-sudo
* lisp/net/tramp-cmds.el (tramp-file-name-with-sudo): Expand the
result for consistency.  (Bug#81622)
2026-08-23 09:15:19 +02:00
Perry Fraser cc15723d21 Fix Emacs not gaining focus when launched on macOS (bug#81683, bug#76814)
* src/nsterm.m (ns_term_init): activate after calling run, not
before; remove outdated comment.

Copyright-paperwork-exempt: yes
2026-08-23 00:14:01 +01:00
Divya Ranjan 6ae70bc02e Skip canvas tests if the image type is not available
* test/src/emacs-module-tests.el: skip canvas tests if the
image type is not available
2026-08-22 17:07:50 +02:00
Stephen Berman addf2c21a0 Avoid unnecessary window scrolling in *Completions* buffer
* lisp/minibuffer.el (completion--in-region-1): If completions
buffer ends in a newline (e.g. when `completions-format' is
'vertical), disregard that when checking `pos-visible-in-window-p'
to prevent unnecessary scrolling (bug#81630).
2026-08-22 13:03:46 +02:00
Michael Albinus 03793610f7 Adapt filenotify test
* test/lisp/filenotify-tests.el
(file-notify-test10-move-file-to-another-watched-dir): Adapt test.
2026-08-22 12:24:26 +02:00
Eli Zaretskii f18f28d68c Merge from origin/emacs-31
a52c1309cd ; Fix last change
9fbb00331e ; Improve url info documentation
2026-08-22 05:09:50 -04:00
Eli Zaretskii 73c9019c9e ; Merge from origin/emacs-31
The following commit was skipped:

bd5cbf47da Backport: Restrict Tramp user name
2026-08-22 05:09:50 -04:00
Eli Zaretskii 2b2ee936a6 Merge from origin/emacs-31
61700f9dd6 Fix TAB to wrap with completion-auto-select t
2026-08-22 05:09:50 -04:00
Eli Zaretskii 5c802f4fbb ; Merge from origin/emacs-31
The following commit was skipped:

526912e158 * lisp/progmodes/c-ts-mode.el (c-ts-mode--thing-settings)...
2026-08-22 05:09:50 -04:00
Eli Zaretskii 998547c55f Merge from origin/emacs-31
062dcd2aea Fix prev-adaptive-prefix anchor (bug#61314)
32025c709e ; * etc/NEWS: Fix typos and wording.
0914969e0e ; Update "Antinews" in ELisp manual
1988e330c1 ; Update "Antinews" in the Emacs user manual
1744376add ; * admin/authors.el (authors-aliases): Add Yifei Yao.
426dca6849 ; * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restor...

# Conflicts:
#	etc/NEWS
2026-08-22 05:09:45 -04:00
Eli Zaretskii c5922d820b ; Fix last change
* lisp/emulation/viper-ex.el: Fix commentary.

* etc/NEWS: Fix filling and punctuation.
2026-08-22 11:31:23 +03:00
Joshua Murphy 449392bddb viper-ex: Implement list and number commands
* lisp/emulation/viper-ex.el (ex-ambiguous-char-map): Add mapping
of ambiguous chars to their equivalents.
(ex-token-alist): Add list and number commands.
(ex-print, ex-print-display-lines): Add args to print line-numbers
or unambiguously.
* etc/NEWS: Document new ex commands.  (Bug#81282)
2026-08-22 11:27:30 +03:00
Eli Zaretskii a52c1309cd ; Fix last change
* doc/misc/url.texi (URI Parsing, URI Encoding, Retrieving URLs)
(Disk Caching, Gateways in general): Fix wording, markup, and
indexing.  (Bug#81505)
2026-08-22 10:49:47 +03:00
Tim Landscheidt 9fbb00331e ; Improve url info documentation
* doc/misc/url.texi: Synchronize function signatures with code.  Fix
formatting for variable.  Remove superfluous space.  Link directly to
referenced CL manual node.  (Bug#81505)
2026-08-22 10:30:52 +03:00
F. Jason Park 64e2a4f782 Fix rx-let binding in erc-match
* lisp/erc/erc-match.el (erc-match--opt-pat-make-addr-beg)
(erc-match--opt-pat-make-addr-any): Don't `regexp-quote' the regexp
returned by `erc-match--opt-pat-make'.
2026-08-21 23:58:06 -07:00
Michael Albinus bd5cbf47da Backport: Restrict Tramp user name
* doc/misc/tramp.texi (File name syntax): The user name can also
be an environment variable.

* lisp/net/tramp.el (tramp-build-prefix-regexp):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name)
(tramp-gvfs-get-file-attributes, tramp-gvfs-file-name)
(tramp-gvfs-url-host, tramp-gvfs-handler-mounted-unmounted)
(tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec-entry)
(tramp-gvfs-mount-spec):
* lisp/net/tramp-rclone.el (tramp-rclone-parse-device-names)
(tramp-rclone-remote-file-name):
* lisp/net/tramp-smb.el (tramp-smb-get-share, tramp-smb-get-localname):
Use string-anchored regexp, not line-anchored.

* lisp/net/tramp.el (tramp-prefix-regexp): Adapt docstring.
(tramp-user-regexp): Exclude shell meta characters.
(tramp-dissect-file-name, tramp-file-name-handler):
Expand environment variable.
(tramp-convert-file-attributes):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-attributes):
Quote symbolic link target with remote file name syntax.

* test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax)
(tramp-test01-file-name-syntax-simplified)
(tramp-test01-file-name-syntax-separate)
(tramp-test02-file-name-dissect)
(tramp-test02-file-name-dissect-simplified)
(tramp-test02-file-name-dissect-separate)
(tramp-test21-file-links): Extend test.

(cherry picked from commit f3e7104d05)
2026-08-21 17:42:51 +02:00
Spencer Baugh 61700f9dd6 Fix TAB to wrap with completion-auto-select t
* lisp/minibuffer.el (completions--clear-selection): New
function.
(minibuffer-hide-completions): Call it.
* lisp/simple.el (next-column-completion): Call it (bug#81635).
* test/lisp/minibuffer-tests.el
(completion-auto-select-test-bug81635): New test.
2026-08-21 16:24:59 +01:00
Sean Whitton 11a1cb7445 Remove up-to-date items from FILES part of VC-Dir deduced fileset
* lisp/vc/vc-dir.el (vc-dir--only-files-state-and-model): Rename
to ...
(vc-dir--fileset): ... this.  Return a five-element list.
Remove up-to-date items appearing literally in FILES.
(vc-dir-root-next-action, vc-dir-deduce-fileset): Update usage.
2026-08-21 16:06:07 +01:00
Juri Linkov 526912e158 * lisp/progmodes/c-ts-mode.el (c-ts-mode--thing-settings): Remove 'comment'.
Comment out the 'comment' thing since 'treesit-forward-comment'
is not ready to handle block comments (bug#80837).
Do not merge to master.
2026-08-21 18:04:49 +03:00
Michael Albinus f3e7104d05 Restrict Tramp user name
* doc/misc/tramp.texi (File name syntax): The user name can also
be an environment variable.

* lisp/net/tramp.el (tramp-build-prefix-regexp):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name)
(tramp-gvfs-get-file-attributes, tramp-gvfs-file-name)
(tramp-gvfs-url-host, tramp-gvfs-handler-mounted-unmounted)
(tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec-entry)
(tramp-gvfs-mount-spec):
* lisp/net/tramp-rclone.el (tramp-rclone-parse-device-names)
(tramp-rclone-remote-file-name):
* lisp/net/tramp-smb.el (tramp-smb-get-share, tramp-smb-get-localname):
Use string-anchored regexp, not line-anchored.

* lisp/net/tramp.el (tramp-prefix-regexp): Adapt docstring.
(tramp-user-regexp): Exclude shell meta characters.
(tramp-dissect-file-name, tramp-file-name-handler):
Expand environment variable.
(tramp-convert-file-attributes):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-attributes):
Quote symbolic link target with remote file name syntax.

* test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax)
(tramp-test01-file-name-syntax-simplified)
(tramp-test01-file-name-syntax-separate)
(tramp-test02-file-name-dissect)
(tramp-test02-file-name-dissect-simplified)
(tramp-test02-file-name-dissect-separate)
(tramp-test21-file-links): Extend test.
2026-08-21 14:23:38 +02:00
Spencer Baugh 374a2a2b89 pcm-try-completion: Move point to the last non-empty wildcard
completion-pcm-try-completion always moved point to the last
wildcard in the string which could still be expanded to match a
completion.  However, if the desired completion has an empty
string at the site of that wildcard, there's nothing the user
could usefully type to continue completion there.  So, it's
better to move point to last wildcard where all the possible
completions have non-empty text, if there is such a wildcard.

* lisp/minibuffer.el (completion-pcm--string->pattern): Don't
replace 'any-delim with 'prefix when
completion-pcm-leading-wildcard is non-nil: too aggressive.
(completion-pcm--merge-completions): Push 'nonempty' when all
completions are nonempty at this wildcard (bug#81629).
(completion-pcm--merge-try): Move point to the last 'nonempty'.
* test/lisp/minibuffer-tests.el (completion-pcm-test-anydelim)
(completion-substring-test-5): Update for new behavior.
2026-08-21 12:23:16 +01:00
Michael Albinus 07925d7070 Improve handling of pending `renamed' event in filenotify.el
* lisp/filenotify.el (file-notify--rm-descriptor): Remove.
(file-notify--expand-file-name): Use `file-local-name'.
(file-notify--callback-inotify, file-notify--callback-kqueue)
(file-notify--callback-w32notify)
(file-notify--callback-gfilenotify, file-notify-callback): Map
also `stopped' event.
(file-notify--call-handler): Handle also `stopped' event.
(file-notify--handle-event): Improve handling of pending `renamed'
event.  (Bug#81531)
(file-notify-rm-watch): Integrate code of removed
`file-notify--rm-descriptor'.

* test/lisp/filenotify-tests.el (file-notify--test-tmpdir1): Declare.
(file-notify--test-event-test): Better check for `stopped' events.
(file-notify-test03-events, file-notify-test05-file-validity)
(file-notify-test06-dir-validity)
(file-notify-test07-many-events, file-notify-test08-backup)
(file-notify-test09-watched-file-in-watched-dir): Adapt tests.
(file-notify-test10-move-file-to-another-watched-dir): New test.
(file-notify-test11-sufficient-resources)
(file-notify-test12-symlinks): Rename tests.
2026-08-21 09:42:00 +02:00
Jim Porter ad4a639e92 ; Use a better method for the initial value of 'eshell-lexical-binding'
* lisp/eshell/esh-cmd.el (eshell-lexical-binding): Set to the default
top-level value of 'lexical-binding'.
2026-08-20 22:03:27 -07:00
Stefan Monnier 73599f66e1 css-mode: Cosmetic fixes
* lisp/textmodes/css-mode.el (css-electric-keys, css-selector)
(css-property, css-fontify-colors, css-lookup-url-format):
Remove redundant `:group` args.
(css--font-lock-keywords, scss-font-lock-keywords):
Avoid obsolete font-lock-*-face variables.

* lisp/editorconfig.el (editorconfig-indentation-alist):
Remove redundant css mode entries.
2026-08-20 16:40:07 -04:00
Yuan Fu 062dcd2aea Fix prev-adaptive-prefix anchor (bug#61314)
* lisp/treesit.el (treesit-simple-indent-presets):
Replace (match-beginning 1) with (skip-syntax-forward "-"), both
returns the position of the beginning of the prefix, but
skip-syntax-forward always works regardless whether
adaptive-fill-regexp has a match group for the prefix.
2026-08-20 18:25:39 +03:00
Michael Albinus d5eab4b2d4 Improve Tramp backup handling
* doc/misc/tramp.texi (Auto-save File Lock and Backup): Adapt example.

* lisp/net/tramp.el (tramp-handle-find-backup-file-name):
Use connection-local value of `make-backup-files'.

* test/lisp/net/tramp-tests.el (tramp-test38-find-backup-file-name):
Extend test.
2026-08-20 16:18:57 +02:00
Sean Whitton ae2bb28e0c ; * lisp/net/tramp.el (tramp-file-name-for-operation): Use and-let*. 2026-08-20 14:21:32 +01:00
Sean Whitton f7386d2ce8 vc-dir-resynch-file: Don't insert ignored files
* lisp/vc/vc-dir.el (vc-dir-resynch-file): Don't insert ignored
files.
2026-08-20 14:21:09 +01:00
Alexey Lebedev a1e6a538c1 Fix tramp-file-name-for-operation
* lisp/net/tramp.el (tramp-file-name-for-operation): Fix the case,
that the first argument is a process name.
2026-08-20 09:20:53 +02:00
Po Lu a9e3adbaea Enable compiling Emacs for Android <= 8.1 with NDK r30
* exec/configure.ac (exec_cv_ld_supports_rosegment): Detect
whether ld supports --rosegment.
If so, specify it in order that the executable header may not be
combined with .text so as to produce excessively large loader
executables.  (bug#81211)
2026-08-20 11:39:39 +08:00
Dmitry Gutov 2daeb3ca35 xref-read-identifier: Avoid wrapping identifier predicates for elisp
* lisp/progmodes/elisp-mode.el (xref-backend-xref-kinds):
Use 'defun' as the kind symbol for functions, so we're able to
distinguish nil values, making the "&optional kind" argument
possible.
(xref-backend-identifier-completion-predicate): Return either the
previous default predicate (extracted from the completion table)
or the predicate appropriate to KIND.  Return functions symbols
where possible rather than a big lambda with cl-ecase inside.
Both changes in theory improve performance; not measured.
(xref-backend-identifier-completion-table): Just return obarray.

* lisp/progmodes/xref.el
(xref-backend-identifier-completion-predicate): Rename from
'xref-backend-identifier-kind-predicate' and make KIND optional.
(xref-read-identifier): Accept KIND instead of opaque PREDICATE,
call the new generic function.
(xref-find-by-kind): Move that call from here, remove outdated
commentary.
2026-08-20 05:59:40 +03:00
Jim Porter f856da36cd Allow evaluating Eshell forms using lexical binding
* lisp/eshell/esh-cmd.el (eshell-lexical-binding): New option.
(eshell--eval): New defsubst...
(eshell-do-eval, eshell-exec-lisp):
* lisp/eshell/esh-var.el (eshell-parse-variable-ref):
* lisp/eshell/em-banner.el (eshell-banner-initialize): ... use it.

* lisp/eshell/em-ls.el (eshell-ls-applicable): Evaluate form using
lexical binding.

* test/lisp/eshell/esh-cmd-tests.el (esh-cmd-test--binding-check): New
function.
(esh-cmd-test/lexical-binding, esh-cmd-test/dynamic-binding): New tests.

* etc/NEWS: Announce this change.
2026-08-19 18:13:45 -07:00
Jim Porter 779a37c076 ; Remove another idea from the Eshell manual
This is implemented with a slightly-different syntax via Lisp pipelines.

* doc/misc/eshell.texi (Bugs and ideas): Remove idea about "output
translators".
2026-08-19 16:52:43 -07:00
Jim Porter 9d48c8e69f ; * doc/misc/eshell.texi (Lisp Pipelines): Clarify wording. 2026-08-19 10:14:43 -07:00
Philipp Stephani ed1fc1b6be Simplify implementation of 'make-empty-file'
* lisp/files.el (make-empty-file): Remove superfluous existence
check; 'write-region' with 'excl' already checks for existence
without TOCTTOU.  Don't check whether the parent directory exists;
'make-directory' already does the right thing.
2026-08-19 17:08:08 +02:00
Philipp Stephani 56b411c002 Add a few more tests for 'make-empty-file'
* test/lisp/files-tests.el (files-tests--make-empty-file--no-parent)
(files-tests--make-empty-file--parent): New unit tests.
2026-08-19 17:02:30 +02:00
Philipp Stephani 284bc6a912 Fix a few bugs in 'make-empty-file'
Crucially, we need to pass 'excl' to 'write-region' so that the file is
opened in exclusive mode; this is the only way to avoid TOCTTOU errors.

Furthermore, the command errorneously created a parent directory even if
the PARENT argument is nil.

Add unit tests to cover these cases, including a TOCTTOU test.

* lisp/files.el (make-empty-file): Only create parent directories
when requested.  Open output file in exclusive mode.

* test/lisp/files-tests.el (files-tests--make-empty-file--exists)
(files-tests--make-empty-file--parent-missing)
(files-tests--make-empty-file--tocttou): New unit tests.
2026-08-19 16:50:28 +02:00
Eli Zaretskii 32025c709e ; * etc/NEWS: Fix typos and wording. 2026-08-19 17:30:35 +03:00
Eli Zaretskii 0914969e0e ; Update "Antinews" in ELisp manual
* doc/lispref/elisp.texi (Top):
* doc/lispref/anti.texi (Antinews): Update for Emacs 31.
2026-08-19 17:28:46 +03:00
F. Jason Park 0300db0ae5 Remove choice from erc-dangerous-host-highlight-type
;; * etc/ERC-NEWS: Revise wording from recent mechanical change.

* lisp/erc/erc-match.el (erc-match--opt-pat-cache, erc-pals, erc-fools):
Update doc.
(erc-dangerous-host-highlight-type): Remove nonsensical
`nick-or-mention' value introduced for ERC 5.7 and Emacs 32 via
bug#73798.  It doesn't make sense to highlight mentions of a dangerous
host, only its associated nicknames, which ERC has no knowledge of.
(erc-match--opt-pat-get): Apply `sxhash-equal' to input in order to
protect keys from retroactive mutation.  Otherwise, a user applying
`setcar' to a cached `erc-fools' value could corrupt the cache.
(erc-match-mention-beg-rx-sexp, erc-match-mention-any-rx-sexp): New
variables to expose how ERC looks for "addressees" in a message body.
(erc-match--opt-pat-make-addr-beg): Defer to
`erc-match-mention-beg-rx-sexp' variable for regexp.
(erc-match--opt-pat-make-addr-end, erc-match--opt-pat-make-addr-any):
Rename former to latter and use `erc-match-mention-any-rx-sexp' for
regexp.
(erc-match--user-nuh-or-mention-p): Use updated function name.
(erc-match-highlight-by-part): Use `match-data' to detect the "last
thing searched" by the predicate.
* test/lisp/erc/erc-match-tests.el
(erc-match-message/fool/nick-or-mention): Remove test associated with
nonexistent value `nick-or-mention' for option
`erc-dangerous-host-highlight-type'.
(erc-match--opt-pat-cache): Use updated function name, sort character
alternatives in bracket expression, update format of expected output to
include hashes.

;; (erc-match-tests--hl-type-nick)
;; (erc-match-message/fool/nick)
;; (erc-match-message/dangerous-host/nick/legacy)
;; (erc-match-tests--hl-type-message)
;; (erc-match-message/dangerous-host/message)
;; (erc-match-message/dangerous-host/message/legacy)
;; (erc-match-tests--hl-type-all)
;; (erc-match-message/fool/all)
;; (erc-match-message/dangerous-host/all/legacy)
;; (erc-match-tests--hl-type-nick-or-keyword)
;; (erc-match-tests--hl-type-keyword): Use realistic value for
;; option `erc-dangerous-hosts'.
2026-08-18 19:47:02 -07:00
Jim Porter d5fea6863c Document Eshell's Lisp pipes feature
* doc/misc/eshell.texi (List of Built-ins): Document 'accumulate',
'apply-lines', and 'map-lines'.
(Pipelines): Add menu.
(Lisp Pipelines): New section.
(Bugs and ideas): Remove implemented idea.

* etc/NEWS: Announce this change.
2026-08-18 19:14:05 -07:00
Jim Porter b9a311ecce Allow sending interactive input to Eshell workers
* lisp/eshell/esh-io.el (eshell-send-eof-to-target)
(eshell-output-region-to-target): New generic methods.

* lisp/eshell/esh-mode.el (eshell-send-input): Call
'eshell-output-region-to-target'.
(eshell-send-eof-to-process): Call 'eshell-send-eof-to-target'.

* lisp/eshell/esh-worker.el (eshell-worker-initialize): New function.

* test/lisp/eshell/esh-worker-tests.el
(esh-worker-test/map-lines/interactive)
(esh-worker-test/apply-lines/interactive): New tests.
2026-08-18 19:14:05 -07:00
Jim Porter 7de2c20571 Handle Lisp errors in Eshell workers
* lisp/eshell/esh-worker.el (eshell-worker-name): New generic function.
(eshell-worker--error): New defsubst.
(eshell-output-object-to-target, eshell-close-target): Wrap
'cl-call-next-method' in error handlers.

* test/lisp/eshell/esh-worker-tests.el
(esh-worker-test/pipe/error-handling)
(esh-worker-test/map-lines/error-handling)
(esh-worker-test/apply-lines/error-handling): New tests.
2026-08-18 19:14:05 -07:00
Jim Porter 0624161103 Add 'apply-lines' and 'map-lines' Eshell commands
* lisp/eshell/esh-worker.el (eshell-map-lines-worker)
(eshell-apply-lines-worker): New structs.
(eshell-map-lines-worker--apply): New generic function.
(eshell-output-object-to-target, eshell-close-target): New methods.
(eshell/map-lines, eshell/apply-lines): New functions.

* test/lisp/eshell/esh-worker-tests.el (eshell-test-line-number): New
defvar...
(eshell-test-number): ... use it in this new function.
(esh-worker-test/map-lines/eshell-one-line)
(esh-worker-test/map-lines/eshell-multiple-lines)
(esh-worker-test/map-lines/eshell-multiple-batches)
(esh-worker-test/map-lines/external-one-line)
(esh-worker-test/map-lines/external-multiple-lines)
(esh-worker-test/map-lines/numbers)
(esh-worker-test/map-lines/numeric-conversion)
(esh-worker-test/apply-lines/eshell-one-line)
(esh-worker-test/apply-lines/eshell-multiple-lines)
(esh-worker-test/apply-lines/external-one-line)
(esh-worker-test/apply-lines/external-multiple-lines)
(esh-worker-test/apply-lines/numbers)
(esh-worker-test/apply-lines/numeric-conversion): New tests.
2026-08-18 19:14:05 -07:00
Jim Porter 245bbdc0c5 Add basic support in Eshell for piping to Lisp commands
* lisp/eshell/esh-worker.el:
* test/lisp/eshell/esh-worker-tests.el: New files.

* lisp/eshell/esh-cmd.el (eshell-lisp-command): Call 'eshell-get-pipe'
when the command is a pipe target.

* lisp/eshell/em-basic.el (eshell/echo): Mark as producing literal
results.
2026-08-18 19:14:05 -07:00
Jim Porter 92ca3e8f94 Add some initial generic functions to support Eshell tasks
* lisp/eshell/esh-util.el (eshell-task-p, eshell-task-status)
(eshell-task-active-p): New generic functions.
(eshell-process-list-p): Obsolete in favor of...
(eshell-task-list-p): ... this.  Update callers.
(eshell-make-process-list): Obsolete in favor of...
(eshell-make-task-list): ... this.  Update callers.

* lisp/eshell/esh-proc.el (eshell-task-p, eshell-task-status)
(eshell-task-active-p): New functions.
2026-08-18 19:14:05 -07:00
Jim Porter bb2e759b57 New 'eshell-convert-args' utility function
* lisp/eshell/esh-cmd.el (eshell-lisp-command): Extract from here...
* lisp/eshell/esh-util.el (eshell-convert-args): ... to this new
function.
2026-08-18 19:14:05 -07:00
Jim Porter ed2063ba72 Allow writing a lambda function as a command in Eshell
* lisp/eshell/esh-cmd.el (eshell-lisp-command): Don't try to call a
literal lambda.

* test/lisp/eshell/esh-cmd-tests.el (esh-cmd-test/literal-lambda): New
test.
2026-08-18 19:14:05 -07:00
Dmitry Gutov ceb0173179 Add a manual entry for xref-find-by-kind (bug#81624) 2026-08-19 04:29:18 +03:00
Dmitry Gutov b57b29cb1b xref-*-kind: Use 'cl-find' instead of 'cl-find-if'
* lisp/progmodes/xref.el (xref-find-by-kind, xref--read-kind):
Use 'cl-find' instead of 'cl-find-if'.  Slightly more concise.
2026-08-19 00:06:54 +03:00
Dmitry Gutov 34c8ed0ae5 xref-find-by-kind: Do filter by "kind" in identifier completion
When the backend allows, of course.

* lisp/progmodes/elisp-mode.el
(xref-backend-identifier-kind-predicate): One implementation.
(xref-backend-xrefs-by-kind): Make sure generic functions and
methods are recognized as "functions" too.

* lisp/progmodes/xref.el (xref-backend-identifier-kind-predicate):
New generic function.
(xref-find-by-kind): Use it here.
(xref-read-identifier): New argument PREDICATE.
2026-08-19 00:00:15 +03:00
Dmitry Gutov 42088a1f87 ; Revert accidental changes 2026-08-18 23:31:16 +03:00
Dmitry Gutov 9c0a39b869 (xref-find-by-kind): Change KIND-DESC argument to just KIND
* lisp/progmodes/xref.el (xref-find-by-kind): Change KIND-DESC
argument to just KIND (symbol).  Discussed in bug#81624.
2026-08-18 23:15:58 +03:00
Philipp Stephani ea6e7a01f9 Fix bug when looping over intervals in another buffer (Bug#81652)
* lisp/emacs-lisp/cl-extra.el (cl--map-intervals): Add missing
BUFFER argument to 'set-marker' calls (Bug#81652).

* test/lisp/emacs-lisp/cl-macs-tests.el
(cl-macs-loop-being-intervals/current-buffer)
(cl-macs-loop-being-intervals/new-buffer): New regression tests.
2026-08-18 21:27:06 +02:00
Ulrich Müller 9464675119 compile.el: Fix last change
* lisp/progmodes/compile.el
(compilation-error-regexp-alist-alist): ?\N{BULLET} cannot be used
during bootstrap.
2026-08-18 20:38:50 +02:00
Eli Zaretskii 1988e330c1 ; Update "Antinews" in the Emacs user manual
* doc/emacs/emacs.texi (Top):
* doc/emacs/anti.texi (Antinews): Update for Emacs 31.
2026-08-18 17:13:36 +03:00
Stéphane Blondon 5e70687822 sieve-font-lock-keywords: Support RFC 5232
* lisp/net/sieve-mode.el (sieve-font-lock-keywords): Support RFC
5532 (bug#81644).

Copyright-paperwork-exempt: yes
2026-08-18 12:41:43 +01:00
Eli Zaretskii 1744376add ; * admin/authors.el (authors-aliases): Add Yifei Yao. 2026-08-18 14:35:00 +03:00
Andrew Hyatt 8a8d9b5c6a Make electric-pair-mode respect field boundaries (bug#50236)
Among other potential benefits, this makes e-p-m work correctly in all
comint-based modes.

* lisp/elec-pair.el (electric-pair-field-search-size): New variable.
(electric-pair-post-self-insert-function): Tweak, call
electric--pair-psif-1 (electric--pair-psif-1): New helper from old
electric-pair-post-self-insert-function.

* etc/NEWS: Call out change.

* lisp/comint.el (electric-pair-field-search-size): Forward declare.
(comint-mode): Set electric-pair-field-search-size to 1000.

* test/lisp/electric-tests.el (preserve-balance)
(preserve-balance-not-across-fields): New tests.

Co-authored-by: João Távora <joaotavora@gmail.com>
2026-08-18 12:07:11 +01:00
Sean Whitton 3eba2d37ee ; Simplify last change. 2026-08-18 11:20:00 +01:00
Donjuanplatinum 5f2ab083f1 Test for bug#81504
* test/src/buffer-tests.el
(test-make-indirect-buffer-clone-hook): New test.
2026-08-18 11:19:48 +01:00
Daniel Mendler 4aed1611c1 speedbar: Follow non-file-visiting buffers
* lisp/speedbar.el (speedbar-timer-fn): Remove
'buffer-file-name' check (bug#81559).
2026-08-18 10:56:17 +01:00
Arsen Arsenović 5d128bf355 compile.el: Handle GCC 16 nested notes
* lisp/progmodes/compile.el
(compilation-error-regexp-alist-alist): New gcc-nested-notes
entry (bug#81308).
* etc/compilation.txt (GCC nested notes): New section.
2026-08-18 10:45:57 +01:00
Martin Rudalics 959c103af3 Handle unexpected resizing when quitting windows (Bug#81614)
* lisp/window.el (quit-restore-window): Size back window only if
the combination type stored in the new fifth subslot of the
‘quit-restore-prev’ or 'quit-restore' parameter's first slot
matches the actual combination type of the window (Bug#81614).
(split-window): Don't bother about size values in the
'quit-restore' parameter - 'split-window-below' and
'split-window-right' don't copy them any more.
(split-window-below, split-window-right): Do not copy the
'quit-restore' parameter of the window to split to the new
window.  It causes more harm than contribute anything useful
(Bug#78835).
(display-buffer-record-window): Store window combination type in
new fifth subslot of second slot of 'quit-restore-prev' or
'quit-restore' parameter.
(display-buffer-use-some-window)
(display-buffer-use-least-recent-window): Size back window only
if the combination type stored in the new fifth slot of the
‘quit-restore’ parameter's second slot matches the actual one.
* src/window.c (window_discard_buffer_from_window): Rename
"quad" to "quint" to follow addition of new fifth subslot of
second slot of 'quit-restore-prev' and 'quit-restore'
parameters.
2026-08-18 10:15:40 +02:00
Dmitry Gutov 002fcb0d36 ; Docstring 2026-08-18 06:20:25 +03:00
Dmitry Gutov e6cf00c585 Use 'n' for cl-defstruct constructor kind
* lisp/progmodes/elisp-mode.el (xref-backend-xref-kinds):
Use 'n' for constructor kind.
2026-08-18 02:38:58 +03:00
Dmitry Gutov cf9f8bd575 Add :prompt-format to kind-desc plist
* lisp/progmodes/eglot.el (xref-backend-xref-kinds):
Add :prompt-format to the entries.

* lisp/progmodes/xref.el (xref-backend-xref-kinds):
Allow also :prompt-format, optionally.
(xref-find-by-kind): Use it here.

* lisp/progmodes/xref.el (xref-find-by-kind):
Also add "by" to the first prompt.
2026-08-18 02:19:17 +03:00
Dmitry Gutov 4508bf60ae Rename xref--read-identifier -> xref-read-identifier
* lisp/progmodes/xref.el (xref-read-identifier):
Rename from `xref--read-identifier' for clarity and document
it better (bug#81624).
2026-08-18 01:14:46 +03:00
Stefan Monnier 1de92cc3ec Delete redundant "" arguments to 'mapconcat'
* lisp/xml.el (xml--entity-replacement-text, xml-substitute-special):
* lisp/vc/vc-hg.el (vc-hg--pushpull):
* lisp/vc/vc-git.el (vc-git-escape-file-name):
* lisp/vc/emerge.el (emerge-hash-string-into-string):
* lisp/url/url.el (url-do-setup):
* lisp/url/url-expand.el (url-expand-file-name):
* lisp/url/url-cache.el (url-cache-create-filename-human-readable):
* lisp/textmodes/tildify.el (tildify--find-env):
* lisp/textmodes/rst.el (rst-re):
* lisp/textmodes/reftex.el (reftex-compile-variables):
* lisp/textmodes/reftex-ref.el (reftex-latin1-to-ascii):
* lisp/textmodes/reftex-index.el (reftex-index-make-replace-string)
(reftex-index-select-phrases-macro):
* lisp/textmodes/ispell.el (ispell--make-\\w-expression):
* lisp/textmodes/enriched.el (enriched-make-annotation):
* lisp/textmodes/bibtex.el (bibtex-summary):
* lisp/tab-bar.el (tab-bar-format-align-right):
* lisp/shell.el (shell--unquote&requote-argument)
(shell--parse-pcomplete-arguments):
* lisp/proced.el (proced-format):
* lisp/play/decipher.el (decipher-show-alphabet)
(decipher--digram-counts):
* lisp/pcomplete.el (pcomplete-entries):
* lisp/pcmpl-x.el (pcmpl-x-ack-short-options):
* lisp/obsolete/pgg-parse.el (pgg-format-key-identifier):
* lisp/newcomment.el (comment-padright):
* lisp/net/webjump.el (webjump-url-encode):
* lisp/net/newst-backend.el (newsticker--unxml-node):
* lisp/net/mairix.el (mairix-widget-make-query-from-widgets):
* lisp/net/eudcb-ldap.el (eudc-ldap-format-query-as-rfc1558):
* lisp/net/dbus.el (dbus-introspect-get-signature):
* lisp/mh-e/mh-utils.el (mh-help):
* lisp/mh-e/mh-alias.el (mh-alias-apropos):
* lisp/mail/supercite.el (sc-attribs-strip-initials):
* lisp/mail/rfc2231.el (rfc2231-parse-string):
* lisp/mail/ietf-drums.el (ietf-drums-parse-address):
* lisp/mail/footnote.el (footnote-roman-lower-regexp):
* lisp/language/lao.el:
* lisp/isearch.el (with-isearch-suspended, isearch-edit-string)
(isearch-repeat, word-search-regexp, isearch-symbol-regexp)
(isearch-del-char, isearch-yank-string, isearch-yank-from-kill-ring)
(isearch-char-by-name, isearch-emoji-by-name)
(isearch-post-command-hook, isearch-process-search-char)
(isearch-ring-adjust1, isearch-complete):
* lisp/international/quail.el (quail-title):
* lisp/international/isearch-x.el
(isearch-process-search-multibyte-characters):
* lisp/info.el (Info-url-for-node):
* lisp/ido.el (ido-set-matches-1):
* lisp/htmlfontify.el (hfy-default-header):
* lisp/gnus/nnmairix.el (nnmairix-widget-make-query-from-widgets):
* lisp/gnus/mm-url.el (mm-url-form-encode-xwfu):
* lisp/gnus/mm-decode.el (mm-mailcap-command):
* lisp/gnus/gnus-art.el (article-lapsed-string)
(article-verify-x-pgp-sig, gnus-article-extend-url-button):
* lisp/gnus/canlock.el (canlock-make-cancel-key):
* lisp/forms.el (forms--update, forms--debug):
* lisp/find-cmd.el (find-cmd):
* lisp/eshell/esh-arg.el (eshell-quote-argument):
* lisp/emulation/viper-util.el (viper-array-to-string)
(viper-key-press-events-to-chars):
* lisp/emulation/viper-macs.el (viper-display-macro):
* lisp/emulation/viper-init.el (viper-charlist-to-string):
* lisp/emulation/cua-rect.el (cua--copy-rectangle-as-kill)
(cua-copy-rectangle-as-text):
* lisp/emacs-lisp/elp.el (elp-results):
* lisp/calendar/solar.el (solar-time-string):
* lisp/calendar/icalendar.el (icalendar--create-ical-alarm)
(icalendar--do-create-ical-alarm):
* lisp/calendar/diary-lib.el (diary-remind)
(diary-font-lock-date-forms, diary-fancy-date-pattern):
* lisp/calendar/calendar.el (calendar-make-temp-face)
(calendar-date-string):
* lisp/calendar/cal-persia.el (calendar-persian-date-string):
* lisp/calendar/cal-coptic.el (calendar-coptic-date-string):
* lisp/calendar/cal-bahai.el (calendar-bahai-date-string):
* lisp/arc-mode.el (archive-summarize-files):
* lisp/allout.el (allout-latex-verb-quote):
* admin/unidata/unidata-gen.el (unidata-gen-table-word-list):
Delete redundant "" argument to 'mapconcat'.
2026-08-17 15:42:12 -04:00
Stefan Monnier 5081ab0795 icomplete.el (icomplete-fido-kill): Make it extensible (bug#72210)
* lisp/icomplete.el (icomplete-kill-candidate): New generic function.
(icomplete-fido-kill): Use it instead of hardcoding support for
files and buffers.
2026-08-17 15:16:15 -04:00
Stefan Monnier 0919a727de lisp/emacs-lisp/generator.el: Remove redundant font-lock rule
Macro calls are automatically highlighted as keywords, nowadays.
2026-08-17 14:59:38 -04:00
Stefan Monnier 2f6e60c177 lisp/loadup.el: Move setting 'debugger' to a later phase 2026-08-17 14:53:26 -04:00
Juri Linkov 426dca6849 ; * test/lisp/tab-bar-tests.el (tab-bar-tests-quit-restore-window): Fix it. 2026-08-17 21:27:17 +03:00
Sean Whitton b51d4b3eb7 ; Merge from origin/emacs-31
The following commit was skipped:

f7af6aba5d ; Update ldefs-boot.el.
2026-08-17 18:42:23 +01:00
Sean Whitton 18a2141b76 Merge from origin/emacs-31
a15b05c009 ; Update ChangeLog.5 and etc/HISTORY for the 31.1 release.
2026-08-17 18:42:22 +01:00
Sean Whitton e23081986d ; Merge from origin/emacs-31
The following commit was skipped:

718db913e3 ; Bump Emacs version to 31.1
2026-08-17 18:42:22 +01:00
Sean Whitton c1ad9d2720 Merge from origin/emacs-31
4458f68df1 ; Update exported ChangeLog files and etc/AUTHORS
0968d7e5e2 ; Update acknowledgements for Emacs 31.
d30a86ba2c ; Fill in missing :version and :package-version metadata.
6dedbb722d ; * admin/release-process: Combine two 'make' commands.
e1f465d993 * doc/misc/efaq.texi (New in Emacs 31): New node.
eca43790ac ; * etc/NEWS: Remove temporary +++/--- lines.
8b38548dd5 ; Document native-compile-directory.
8e33b6a059 ; Document C-x <UP> in shell-mode.
61c7285a95 ; Document project-remember-project.
ced4d70ee0 Add "VTE" to list of auto-enabled xterm-mouse-mode terminals
91a630245f ; * lisp/speedbar.el (speedbar-window--close): Doc fix.
0792252594 Handle 'speedbar-buffer' kill when in 'speedbar-window-mo...
951ee70ee3 ; * lisp/simple.el (char-uppercase-p): Fix a typo.

# Conflicts:
#	etc/NEWS
2026-08-17 18:42:21 +01:00
Eli Zaretskii 5126c15e29 ; Avoid byte-compilation warning due to last change. 2026-08-17 15:28:20 +03:00
Björn Lindqvist 7ef7433eb5 c-ts-mode: Improve block comment indentation
1) lines beginning with "*" are aligned to the first "*"
2) lines following the first or blank lines are indented three spaces
3) other lines are aligned to the previous line
* lisp/progmodes/c-ts-mode.el (c-ts-mode--simple-indent-rules): Improve
block comment indentation.  (Bug#81533)

* test/lisp/progmodes/c-ts-mode-resources/indent.erts: Adjust test
data to new behavior.
2026-08-17 15:26:13 +03:00
Po Lu 7fe7a2635b Fix `openp' for some manners of invocations on Android
* src/lread.c (openp) [USE_ANDROID_ASSETS]: Don't write file
name to *STOREPTR if NULL and call SAFE_FREE before yielding
platform file descriptor.
2026-08-17 20:01:57 +08:00
Po Lu c4e17d50f9 Prevent double closure of canvas image file descriptors and fix Android build
* src/image.c (canvas_apply_data): Locate and open binary image
files with `image_find_image_fd' and do not close it after it is
read by slurp_file, which does so itself.
2026-08-17 19:53:48 +08:00
Juri Linkov 664f160297 New value 'with-completions-popup' of 'icomplete-in-buffer' (bug#81537)
* etc/NEWS: Announce the change.

* lisp/minibuffer.el (completion--icomplete-in-buffer-p):
Remove function.
(completion-list-inhibit-functions): New variable.
(completion-list-inhibit-p): New function.
(completion--do-completion, completion--in-region-1): Replace
'completion--icomplete-in-buffer-p' with
'completion-list-inhibit-p'.

* lisp/icomplete.el (icomplete-in-buffer):
Add new value 'with-completions-popup'.
(icomplete-list-inhibit): New function.
(icomplete--in-region-setup): Add/remove
'icomplete-list-inhibit' from/to
'completion-list-inhibit-functions'.
2026-08-16 18:31:26 +03:00
Divya Ranjan Pattanaik ca9a966157 Fix build failure with no window system
* src/emacs-module.c (module_canvas_data): Exclude any canvas specific
code when HAVE_WINDOW_SYSTEM is undefined.
2026-08-16 16:16:55 +01:00
Eli Zaretskii b611588ed8 ; * admin/authors.el (authors-aliases): Add Wu fa yang. 2026-08-16 12:41:13 +03:00
zdn b7b23fce2a Set the IME window font on MS-Windows to the appropriate size
* src/w32fns.c (w32_wnd_proc): Set the font of the composition
window using 'w32_system_remap_font'.
* src/w32term.c (w32_draw_window_cursor): Update
'w32_system_remap_font' by  using 'lookup_basic_face' to obtain the
face ID of a remapped face.
* src/w32term.h (w32_system_remap_font): Add declaration.
(Bug#68339)
2026-08-16 12:34:47 +03:00
Eli Zaretskii f4e2065697 ; Minor fixes of the last change
* etc/NEWS: Fix last changes.

* doc/lispref/internals.texi (Module Canvas API):
* doc/lispref/display.texi (Canvas Images): Fix punctuation and
markup.
2026-08-16 12:28:31 +03:00
Divya Ranjan d5f515e4a3 New image type canvas
Canvas images support efficient updating and refreshing.  An image
specifier with ':type canvas' creates a canvas image.  The canvas has an
associated writable pixel buffer.  After changing the ':data' vector or
writing to the pixel buffer a call to 'canvas-refresh' redraws the
canvas image.  See bug#80281.

Co-Authored-By: Divya Ranjan <divya@subvertising.org>
Co-Authored-By: Daniel Mendler <mail@daniel-mendler.de>

Canvas changes:

* doc/lispref/display.texi (Images): Add Canvas Images to menu.
(Canvas Images): New node documenting canvas image objects, the
`:data-width', `:data-height', `:data' and `:file' properties, and
`canvas-refresh'.
* doc/lispref/elisp.texi (Top): Reference new Canvas Images node.
* doc/lispref/internals.texi (Writing Dynamic Modules): Add Module
Canvas API to menu.
(Module Canvas API): New node documenting `canvas_data' module function.
* etc/NEWS: Announce the addition.
* lisp/image.el (create-image): Add `:id' to image specification of
canvas images.
* src/dispextern.h (struct image): Add `refresh', `original_width' and
`original_height' fields.
(redraw_image_glyphs, canvas_data): New prototypes.
* src/emacs-module.c (module_canvas_data): New function.
(initialize_environment): Register `canvas_data' module function.
* src/image.c (struct canvas): New struct for canvas.
(canvas_prepare_for_display, canvas_free_unused): New forward
declarations.
(prepare_image_for_display): Call `canvas_prepare_for_display' when the
canvas refresh counter has changed.  Set image `original_width' and
`original_height'.
(filter_image_spec): Exclude `:data' from the image cache key for canvas
images, so mutating the data vector in place does not create a new cache
entry.
(Fclear_image_cache): Call `canvas_free_unused'.
(image_set_transform): Use CAIRO_FILTER_GOOD instead of
CAIRO_FILTER_BEST for canvas images, for performance.  Do not set image
`original_width' and `original_height'.
(canvas_image_p, canvas_free_unused, canvas_apply_data, canvas_get)
(canvas_parse, canvas_load, canvas_prepare_for_display, canvas_data):
New functions implementing canvas creation, resizing, and reloading of
`:data' or `:file' content.
(Fcanvas_refresh): New defun `canvas-refresh', with an optional
RELOAD-DATA argument to reread `:data' or `:file'.
(initialize_image_type, syms_of_image): Register the `canvas' image type
and `canvas-refresh'.
* src/module-env-32.h (canvas_data): New prototype.
* src/nsimage.m (ns_image_reset): New function to recreate an NS pixmap
to update the canvas.
* src/nsterm.h: Add prototype for `ns_image_reset'.
* src/xdisp.c (redraw_image_glyphs_window)
(redraw_image_glyphs_window_tree, redraw_image_glyphs): New functions to
redraw only the glyphs referencing a given canvas image spec, falling
back to a full frame redraw if the frame is garbaged.
* test/src/emacs-module-resources/mod-test.c (mod-test-canvas-read)
(mod-test-canvas-write, mod-test-canvas-invalid): New helper functions.
* test/src/emacs-module-tests.el (test-canvas-gen-file)
(mod-test-canvas/valid, mod-test-canvas/invalid, mod-test-canvas/vector)
(mod-test-canvas/vector-reload, mod-test-canvas/unibyte)
(mod-test-canvas/file, mod-test-canvas/gc-stress): New tests.
2026-08-16 12:16:41 +03:00
Eli Zaretskii 1cc4babde2 ; Turn off a mode with -1, not zero
* lisp/xwidget.el (xwidget-webkit-isearch-exit):
* lisp/whitespace.el (whitespace-toggle-options)
(global-whitespace-toggle-options):
* lisp/url/url-handlers.el (url-handler-regexp)
(url-handlers-set-buffer-mode):
* lisp/textmodes/refill.el (refill-mode):
* lisp/strokes.el (strokes-update-window-configuration):
* lisp/so-long.el (so-long-revert-function-longlines-mode)
(turn-off-so-long-minor-mode, so-long-disable)
(so-long-unload-function):
* lisp/progmodes/verilog-mode.el (verilog-save-font-no-change-functions)
(verilog-scan-debug):
* lisp/progmodes/flymake.el (flymake-mode-off):
* lisp/progmodes/cperl-mode.el (cperl-setup-tmp-buf):
* lisp/progmodes/cc-mode.el (c-setup-doc-comment-style):
* lisp/autorevert.el (auto-revert-tail-mode):
* lisp/proced.el (proced-mode):
* lisp/play/gametree.el (gametree-mode):
* lisp/obsolete/tpu-edt.el (tpu-toggle-overwrite-mode):
* lisp/obsolete/longlines.el (longlines-mode)
(longlines-mode-off, longlines-before-revert-hook):
* lisp/obsolete/idlw-shell.el (idlwave-shell-toggle-electric-debug-mode)
(idlwave-shell-electric-debug-all-off):
* lisp/nxml/rng-valid.el (rng-do-some-validation):
* lisp/nxml/rng-nxml.el (rng-nxml-mode-init):
* lisp/net/dictionary.el (global-dictionary-tooltip-mode):
* lisp/mouse.el (mouse-appearance-menu):
* lisp/mh-e/mh-folder.el (mh-set-scan-mode):
* lisp/menu-bar.el (menu-bar--toggle-truncate-long-lines)
(menu-bar--wrap-long-lines-window-edge):
* lisp/ldefs-boot.el (global-dictionary-tooltip-mode):
* lisp/iimage.el (turn-off-iimage-mode):
* lisp/fringe.el (fringe-mode-initialize):
* lisp/face-remap.el (buffer-face-set, buffer-face-toggle):
* lisp/erc/erc-spelling.el (spelling):
* lisp/epa-hook.el (epa-file-find-file-hook):
* lisp/editorconfig.el (editorconfig-after-apply-functions):
* lisp/desktop.el (desktop-save-mode-off, desktop-create-buffer):
* lisp/calc/calc-menu.el (calc-modes-menu):
* lisp/autorevert.el (auto-revert-tail-mode): Prefer -1 to zero
when turning off a mode.  (Bug#81569)
2026-08-16 11:56:16 +03:00
Al Haji-Ali 5b4d9683f0 Move out of strings/comments before matching in 'show-paren-mode'
* lisp/paren.el (show-paren--snap): New function.
(show-paren--default): Call 'show-paren--snap' to move out of
comments and strings before narrowing and matching.  (Bug#81611)

Copyright-paperwork-exempt: yes
2026-08-16 10:47:06 +03:00
Eli Zaretskii ec9950d5e6 Move initialization of 'debugger' to loadup.el
* lisp/emacs-lisp/debug.el (debugger): Move setting from here...
* lisp/loadup.el: ...to here.  (Bug#81609)
2026-08-16 10:39:06 +03:00
Eli Zaretskii 89825881ad Merge from origin/emacs-31
ba625035e7 ; * src/xdisp.c (move_it_vertically_backward): Fix a thin...
2026-08-16 02:02:41 -04:00
Dmitry Gutov 96ac91f627 xref-backend-xrefs-by-kind: Cleanup the intermediate buffer
* lisp/progmodes/eglot.el (xref-backend-xrefs-by-kind):
Cleanup the intermediate buffer if previously non-existent.
2026-08-16 04:32:48 +03:00
Dmitry Gutov fceb9d8db9 xref-find-by-kind: Delete " of" from the identifier prompt
* lisp/progmodes/xref.el (xref-find-by-kind): Delete " of" from
the identifier prompt.  I've gone back and forth on this - it
reads a bit better with Eglot (LSP kinds) but does not fit the
Elisp backend.
2026-08-16 03:17:56 +03:00
Dmitry Gutov 01e56224a0 Add new command: xref-find-by-kind
* lisp/progmodes/eglot.el (xref-backend-xref-kinds)
(xref-backend-xrefs-by-kind): Eglot implementations.

* lisp/progmodes/elisp-mode.el (xref-backend-xref-kinds)
(xref-backend-xrefs-by-kind): Elisp-mode implementations.

* lisp/progmodes/xref.el (xref-backend-xref-kinds)
(xref-backend-xrefs-by-kind): New generic functions.
(xref-prompt-for-identifier): Add 'xref-find-by-kind'.
(xref--find-xrefs, xref--find-definitions):
Change KIND to METHOD, and pass it on.
(xref--create-fetcher): Change KIND to METHOD and add SOURCE-NAME.
(xref--not-found-error): Change KIND to SOURCE-NAME.
(xref-find-by-kind): New command.
(xref--read-kind): New function, a helper for it.
And add new binding 'xref-find-by-kind' to esc-map.
2026-08-15 19:44:12 +03:00
plug.rifling_5y@icloud.com ef448d2ca9 NS port freezes without beach ball
* src/nsterm.m (ns_send_appdefined): Address the app-defined event to a
window that exists.  (Bug#72496)

Copyright-paperwork-exempt: yes
2026-08-15 16:42:19 +01:00
Eli Zaretskii b9e1a4d164 ; Fix merge snafu in etc/NEWS.31. 2026-08-15 11:05:37 -04:00
Eli Zaretskii a807411c75 Merge from origin/emacs-31
6a6a578c38 ; * etc/PROBLEMS: Problems with resizing frames on Waylan...
165152e7cd Fix an infloop during cursor movement
e435a8e869 Merge branch 'emacs-31' of git.savannah.gnu.org:/srv/git/...
57e9e94be9 ; etc/NEWS: Minor reordering.
c5a9ed1499 vc-dir: Set major mode before popping to the buffer
aae4cb25da hs-hide-block-behavior: Fix some terminology
2b47d71922 Backport: Fix freeze in NS event handling (bug#81510)
2026-08-15 11:02:10 -04:00
Eli Zaretskii 6db6231536 ; Merge from origin/emacs-31
The following commit was skipped:

57e9e94be9 ; etc/NEWS: Minor reordering.
2026-08-15 11:02:10 -04:00
Eli Zaretskii 5cd67dd31e Merge from origin/emacs-31
9448f8e3dd ; Improve documentation of 'char-uppercase-p'
2026-08-15 11:02:09 -04:00
Eli Zaretskii feac7c90ed ; Merge from origin/emacs-31
The following commit was skipped:

2b47d71922 Backport: Fix freeze in NS event handling (bug#81510)
2026-08-15 11:02:09 -04:00
Eli Zaretskii fb09079ced Merge from origin/emacs-31
f6e3b4232f ; Fix docs for browse-url-transform-alist.
71df1ea6d0 Fix Fns_block_system_sleep to respect activity_id lifetim...
769bd89281 Remove assertion in erc-speedbar--dframe-controlled
2dca4a8854 ; Fix recently-installed documentation changes
6f71867f27 ; Clarify issues with frames and windows in Elisp manual

# Conflicts:
#	etc/NEWS
2026-08-15 11:02:07 -04:00
Eli Zaretskii d3b3007f52 ; Merge from origin/emacs-31
The following commit was skipped:

b9c2b2d0d8 Eglot: bump version to 1.24.31 and update EGLOT-NEWS
2026-08-15 11:00:55 -04:00
Eli Zaretskii bd537c899d Merge from origin/emacs-31
da0565d9b5 Flymake: really restore advertised compatibility to Emacs 26
8f6e2cc66b ; * etc/EGLOT-NEWS: Briefly mention recent changes.
b86b9c195b Eglot: support commas in globs (bug#81425)
65efc35a91 Eglot: respect e-stay-out-of when turning off (bug#81593)
7d2988e7e4 Fix Custom keybindings in the documentation
1c69563a1c ; Fix last change in dframe.el
5f6ffef879 ; Improve and correct documentation of 'getenv'
83ec0fd8f3 Eglot: prevent showDocument disruption of sync requests (...
27ea7e6c1e * lisp/progmodes/sh-script.el (bash-ts-mode): Fix 'sexp-d...
73d959233e Fix setting windows' old_buffer in 'set-window-configurat...
8b32d77a07 Fix defcustom type of 'dframe-update-speed'
a56e964941 Speedbar: no more stale idle timers (bug#81561)

# Conflicts:
#	etc/NEWS
2026-08-15 11:00:49 -04:00
Eli Zaretskii 07bd2e2cf9 ; Merge from origin/emacs-31
The following commit was skipped:

c9cedb4e11 ; * etc/NEWS: Presentational fixes and improvements.
2026-08-15 10:56:20 -04:00
Eli Zaretskii bdc9348b9e Merge from origin/emacs-31
65eff4fd4f ; Properly initialize 'package-load-list' for 'package-is...
effafd92e0 Load all dependencies when isolating a package
293eaf323a Have 'frame-deletable-p' check other frame's terminal (Bu...
2026-08-15 10:56:19 -04:00
Eli Zaretskii 3c680886ec ; Merge from origin/emacs-31
The following commits were skipped:

ab5062855d ; * etc/NEWS: Move "Miscellaneous" to end of its section.
75b4b8932f ; * etc/NEWS: Copyedit.
f561bc6c37 ; * etc/NEWS: Use a non-commercial example.
2026-08-15 10:56:19 -04:00
Eli Zaretskii 080e2603df Merge from origin/emacs-31
ef69bf7b42 Eglot: Add vala mode support
2026-08-15 10:56:19 -04:00
Eli Zaretskii 867b20aa2b ; Fix comments of last commit (bug#81223)
* lisp/emacs-lisp/comp-run.el (comp--run-async-workers): Fix
punctuation in comments; add details.
2026-08-15 16:39:04 +03:00
James Cherti 9b66f875b3 Fix file-missing error during async native compilation (bug#81223)
The async native compilation queue can sometimes retain stale jobs
for files that no longer exist on disk (for example, when files are
removed during a package upgrade or deletion).  Attempting to resolve
the target .eln filename for these missing files signals a
file-missing error.
* lisp/emacs-lisp/comp-run.el (comp--run-async-workers): Verify
source files exist before attempting to resolve their .eln paths in
the dispatch loop.  In the process sentinel, wrap the compilation
block in a condition-case to catch file-missing errors and prevent
the async worker queue from stalling.
2026-08-15 16:34:36 +03:00
Eli Zaretskii 6d31288070 MS-Windows specific fixes of font selection
* src/w32font.c (font_supported_scripts): Fix 'tai-lue' bits.
Remove 'kanbun'.  Fix 'cypriot-syllabary'.  Fix 'symbol' bits.
(fill_in_logfont): Remove 'kanbun'.  Don't ask for GB2312 fonts
when looking for fonts supporting Yi script on Windows 10 or
later, as that causes supporting fonts to be missed.
2026-08-15 14:56:09 +03:00
Eli Zaretskii a9d79796e2 Improve fontset setup for some scripts
* lisp/international/fontset.el (script-representative-chars)
(setup-default-fontset): Add scripts which were mistakenly
omitted.  Fix fontset setup for Syriac and N'ko scripts.  Add
ol-onal.  More symbols supported by Symbola.

* admin/unidata/blocks.awk: Special rules for U+FFFC and U+FFFD.
Map Kanbun to han.  Map Vertical Forms to cjk-misc.
2026-08-15 14:52:08 +03:00
Harald Jörg 7861c30642 cperl-mode.el: Support Perl 5.44: named parameters in signatures
* lisp/progmodes/cperl-mode.el (cperl--signature-rx): Allow for a
colon before a variable name to declare a named parameter
(cperl--sloppy-signature-rx): dito
(cperl-init-faces): dito
(introduction): Delete an obsolete comment

* test/lisp/progmodes/cperl-mode-tests.el
(cperl-test-signature-rx): Add a test case for a signature with
named parameters
(cperl-test-fontify-attrs-and-signatures): Verify correct
fontification of a named parameter

* test/lisp/progmodes/cperl-mode-resources/proto-and-attrs.pl: Add
test code for named signatures

* etc/NEWS: Announce Perl 5.44 syntax support
2026-08-15 00:27:07 +02:00
João Távora 7cf18b0d18 Flymake: use proper point-setting hygiene (bug#81621)
A report touches the eol overlays whose style could be influenced by
current-ish position.  Saving point and going back to it, isn't 100%
accurate (point may have moved between scheduling and multiple reports),
but it is probably more than decent.  A marker would be better but
requires at least a buffer-local var for proper cleanup, which is
overkill IMO.

* lisp/progmodes/flymake.el (flymake-make-report-fn): Use
point-marker and save-excursion.
2026-08-14 23:16:57 +01:00
Sean Whitton 4fb098ae3f vc-dir-maybe-narrow-and-show-more-button: Affect only VC-Dir buffers
* lisp/vc/vc-dir.el (vc-dir-maybe-narrow-and-show-more-button):
Do nothing if vc-parent-buffer is not in vc-dir-mode.
2026-08-14 15:45:22 +01:00
Stephen Berman cb22cfe141 ; Fix last change to 'dired-insert-subdir'
* lisp/dired-aux.el (dired-insert-subdir): Call
`dired--check-use-ls-dired' instead of inlining the body of the
removed function `dired--ls-accept-b-switch-p'.
2026-08-13 18:41:35 +02:00
Martin Rudalics 06321adfb3 ; Document how to use the new 'display-buffer-default-alist' variable
* lisp/window.el (display-buffer-default-alist): Rewrite doc-string.
* doc/lispref/windows.texi (Choosing Window): Say how to use the
new 'display-buffer-default-alist' variable.
2026-08-13 10:46:21 +02:00
Alan Mackenzie 65ca6e153c Correct calculation of ObjC Mode imenu entries:
This fixes a bug reported on 2026-08-08 on bug-cc-mode.gnu.org.

* lisp/progmodes/cc-menus.el
(cc-imenu-objc-generic-expression): Reverse the order of the
tests in the regexp for a C function and for @implementation
(etc.), so that "@end // Classname (foo)" won't get recognised
as a C function.
(cc-imenu-objc-function): Test an ostensible "C function" for
having a ?@ at column 0.  Further coding fixes to prevent ghost
entries getting appended to the function's result, and to
append all pertinent method entries.
2026-08-12 20:40:06 +00:00
Eli Zaretskii d65a5148b1 ; Fix recently-installed documentation
* lisp/replace.el (query-replace-show-preview)
(replace-preview-cleanup):
* doc/emacs/search.texi (Replace): Improve wording of
documentation of the query-replace preview feature.
2026-08-12 14:08:12 +03:00
Eli Zaretskii 5e304cd5fc ; * etc/NEWS: Fix punctuation. 2026-08-12 13:56:56 +03:00
Martin Rudalics c693e12efa ; Minor doc fix
* doc/lispref/windows.texi (Choosing Window): Say "wrapped"
instead of "nested".
2026-08-12 10:45:08 +02:00
Stefan Monnier d0653e8f09 lisp/custom.el (custom-declare-variable): Fix thinko 2026-08-11 22:37:21 -04:00
João Távora d0fabe8228 Eglot: improve manual's section on performance slightly
* doc/misc/eglot.texi (Performance): Reword.
(Eglot Features): Fix references.
(Other Variables): Describe eglot-managed-mode-hook here.
2026-08-12 00:54:10 +01:00
João Távora 6223d243da Flymake: rework inline diagnostic text annotations
Replace flymake-show-diagnostics-at-end-of-line with a simpler, more
powerful flymake-inline-diagnostics.  The new variable has an easier name
offers the new possibilities inspired by other packages, of having only
the current diagnostic be affected by each setting..

* doc/misc/flymake.texi: Update.

* etc/NEWS: Update

* lisp/progmodes/flymake.el (flymake-annotation-style): New variable.
(flymake-inline-annotation-face)
(flymake-error-inline, flymake-warning-inline)
(flymake-note-inline): New faces.
(flymake--highlight-line)
(flymake--handle-report)
(flymake-after-change-function): Update to use new variable name.
(flymake--update-current-eol-overlay): New helper.
(flymake--eol-current-overlay): New variable.
(flymake--update-all-eol-overlays): Rename from flymake--update-eol-overlays.
(flymake-make-report-fn): Keep point stable.
(flymake--update-eol-overlays): Tweak.
(flymake--eol-overlay-summary): Rewrite.
(flymake-mode): Set post-command-hook
(flymake--update-eol-overlays): Rework.
(flymake--update-eol-overlays-1): New helper.
(flymake-diagnostic-format-alist): Enhance.
(flymake--format-diagnostic): Handle old :eol value.
(flymake-inline-annotation-face)
(flymake-error-inline)
(flymake-warning-inline)
(flymake-note-inline): New faces.
(flymake-show-diagnostics-at-end-of-line)
(flymake-end-of-line-diagnostics-face)
(flymake-error-echo-at-eol)
(flymake-warning-echo-at-eol)
(flymake-note-echo-at-eol): Deprecate
(flymake--eol-draw-fancy): Tweak geometry slightly
2026-08-12 00:54:10 +01:00
João Távora 5fda2f63ff Flymake: more adjustments to inline diagnostics
* lisp/progmodes/flymake.el (flymake--highlight-line): Simplify
eol overlay cleanup logic.
2026-08-12 00:54:10 +01:00
João Távora c03e30eb42 Flymake: respect part order in flymake-diagnostic-text
* lisp/progmodes/flymake.el (flymake-diagnostic-text): Rewrite
2026-08-12 00:54:09 +01:00
Alan Third 902f8eb633 Fix freeze in NS event handling (bug#81510)
* src/nsterm.m (EV_TRAILER): Don't queue event if it's of kind
'NO_EVENT'.
2026-08-11 19:48:08 +01:00
Rahul Martim Juliato 765411f0cd Preview the replacement text while it is typed (bug#81583)
* lisp/replace.el (query-replace-show-preview): New user option.
(query-replace-preview): New face.
(query-replace-eval-replacement-regexp): New constant, extracted
from...
(query-replace-compile-replacement): ...here.
(replace-preview-overlays): New variable.
(replace-preview-cleanup, replace-preview-update)
(replace-preview-setup): New functions.
(query-replace-read-to): New optional argument DELIMITED-FLAG.
(query-replace-read-args): Pass the delimited flag to
'query-replace-read-to'.
* lisp/isearch.el (isearch-query-replace): Pass the delimited
flag to 'query-replace-read-to'.
* test/lisp/replace-tests.el (replace-tests--preview): New
helper.
(replace-tests-preview-update, replace-tests-preview-cleanup)
(replace-tests-preview-disabled): New tests.
* doc/emacs/search.texi (Replace): Document the preview.
* etc/NEWS: Announce it.
2026-08-11 20:22:56 +03:00
Roi Martin fcee0b4ff1 Reimplement `outline-occur' using Xref and match Outline headings
Outline provides two search strategies to locate headings.  If
`outline-search-function' is defined, it is used to find the headings.
Otherwise, `outline-regexp' is used.  Reimplement `outline-occur' as
`outline-xref' using Xref and accepting a search function.  This
supports both search strategies and ensures that the headings detected
by `outline-xref' match the Outline ones.

* lisp/outline.el (outline-mode-prefix-map): Update binding.
(outline-mode-menu-bar-map): Update menu item.
(outline-occur-regexp): Remove variable.
(outline-occur): Remove function.
(outline-xref--fetch-headings, outline-xref--show-xrefs, outline-xref):
New functions (bug#81579).
* test/lisp/outline-tests.el (outline-tests--outline-occur)
(outline-tests--outline-occur-override)
(outline-tests--outline-occur-undefined-regexp): Remove tests.
(outline-tests--outline-xref-search-function)
(outline-tests--outline-xref-regexp)
(outline-tests--outline-xref-undefined): New tests.
2026-08-11 20:06:15 +03:00
Stefan Monnier 7e9e10d984 (custom-declare-variable): Check values previously set via setopt
Rename `custom-check-value` to  `custom-check-values` and make it hold
a list of values whose type-check is pending.  Check it in
`custom-declare-variable` rather than `custom-initialize-reset` to fix
bug#81372.

* lisp/custom.el (custom-initialize-reset): Don't type check previous
setopt values.
(custom-declare-variable): Do it here instead.  Change warning message
to clarify that the erroneous value was provided in some earlier setopt call.

* lisp/cus-edit.el (setop--set): Push to the `custom-check-values` only if
we can't do the type check yet, to avoid duplicate warnings (and memory
leaks).
(setopt--set-local): Fix indentation and add FIXMEs.
2026-08-11 12:28:04 -04:00
Michael Albinus 65b1e84397 Handle older inotifywait versions in Tramp
* lisp/net/tramp-sh.el (tramp-remote-inotifywait-with-P): New defun.
(tramp-sh-handle-file-notify-add-watch): Use it.

* lisp/net/tramp.el (with-tramp-progress-reporter):
Let-bind `inhibit-message'.
2026-08-11 12:12:24 +02:00
Eli Zaretskii 69b186c1bc Fix move_it_* functions when moving across face with :box
* src/xdisp.c (move_it_in_display_line_to): Restore the
it->start_of_box_run_p flag upon exiting, to the value it had
before calling PRODUCE_GLYPHS for the last time, if the iterator
didn't move to the next display element.  This prevents losing the
flag in further calls to move_it_* functions.  (Bug#81570)
2026-08-10 16:17:00 +03:00
Eli Zaretskii b157d8e96a Merge from origin/emacs-31
aec7a5c73f ; * lisp/window.el (quit-restore-window-no-switch): Fix c...
a15640e841 Warn about INFOPATH shadowing package manuals
ae9656b8b1 ; * etc/NEWS: Improve wording of a recently-added entry.
321f6a07e8 Handle transposing and rotating of dedicated windows (Bug...
7119808569 Remove overlays from package menu when performing transac...
254594306c ; Fix unbound variable warning
d5c3f053b0 ; In Elisp manual say that FRAME arg in 'frame-focus-stat...
29f292fa87 Avoid installing packages when using 'package-isolate'

# Conflicts:
#	etc/NEWS
2026-08-08 06:12:43 -04:00
Eli Zaretskii 595a4c6c91 ; Merge from origin/emacs-31
The following commit was skipped:

8466eb4499 Mitigate arbitrary code execution vulnerability
2026-08-08 06:12:37 -04:00
Eli Zaretskii e88195732e Merge from origin/emacs-31
a027452c71 Fix progress-reporter-echo-area update-text
bc92224c5f VC-Git: Pass --no-optional-locks
ed1a2e8239 Fix text-property-search-backward skipping one character ...
2026-08-08 06:12:37 -04:00
David Ponce 945667d105 Fix image map test that could fail with certain DPI settings
* test/lisp/image-tests.el (image--compute-map-and-original-map):
Specify the dimension of the test image in pixels which is a
DPI-independent unit, contrary to pt.  (Bug#70093)
2026-08-08 11:11:30 +03:00
Paul Eggert a3d43a12a4 Spelling fixes, mostly UK→US
* lisp/custom.el (custom--sort-vars-1):
* lisp/language/indonesian.el:
Use ‘dependent’ rather than British spelling in internal names.
In indonesian.el, the ‘-ant’ spelling was incorrect even for UK
spelling as it was an adjective not a noun.
* lisp/emacs-lisp/package-vc.el (package-vc--clone):
Fix typo in spelling of README-elpa file name.
* lisp/vc/vc.el (vc-revert):
Use American instead of British spelling in diagnostics.
* m4/texinfo.m4 (gl_TEXINFO_INDEXING_IS_LOCALE_DEPENDENT):
Rename from gl_TEXINFO_INDEXING_IS_LOCALE_DEPENDANT.  Use changed.
2026-08-07 16:23:25 -05:00
Yuan Fu 388717429c New variable comment-start-line-regexp (bug#80837)
* lisp/newcomment.el (comment-start-line-regexp): New variable
(bug#80837).
* lisp/progmodes/c-ts-common.el (c-ts-common-comment-setup):
* lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode):
* lisp/progmodes/dockerfile-ts-mode.el (dockerfile-ts-mode):
* lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode):
* lisp/progmodes/go-ts-mode.el (go-work-ts-mode):
* lisp/progmodes/json-ts-mode.el (json-ts-mode):
* lisp/progmodes/lua-ts-mode.el (lua-ts-mode):
* lisp/progmodes/php-ts-mode.el (php-ts-mode--comment-setup):
* lisp/progmodes/python.el (python-base-mode):
* lisp/progmodes/ruby-mode.el (ruby-base-mode):
* lisp/progmodes/sh-script.el (sh-base-mode):
* lisp/textmodes/mhtml-ts-mode.el
(mhtml-ts-mode--comment-setup):
* lisp/textmodes/toml-ts-mode.el (toml-ts-mode):
* lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode): Set it.
* doc/emacs/programs.texi (Options for Comments):
* etc/NEWS: Document it.
* lisp/progmodes/c-ts-common.el
(c-ts-common-comment-start-line-regexp): New variable.
* lisp/treesit.el (newcomment): Require.
(treesit--likely-line-comment-p): New function.
(treesit-forward-comment): Use it.  Make COUNT parameter
non-optional.
2026-08-07 11:59:30 +01:00
Michael Albinus c80349352f Revert "Add comment-start-line-regexp (bug#80837)"
This reverts commit 3735384b193617a912fbf6d25844041ed288bf28.
2026-08-07 12:23:02 +02:00
Michael Albinus a25d24b151 Use proper inotifywait arguments in Tramp
* lisp/net/tramp-sh.el (tramp-sh-handle-file-notify-add-watch):
Use -P and --format= arguments for inotifywait.
(tramp-sh-inotifywait-process-filter): Read cookie.
2026-08-07 12:23:01 +02:00
Stefan Monnier 2a5169156b (access_keymap): Remove 'autoload' arg
The argument was always true anyway.

* src/keymap.h (access_keymap):
* src/keymap.c (access_keymap_1, access_keymap): Remove 'autoload' arg.
* src/keyboard.c (read_char, menu_bar_items, tab_bar_items)
(tool_bar_items, follow_key, access_keymap_keyremap): Simplify accordingly.
2026-08-06 18:48:54 -04:00
Perry Fraser 73875a8222 * lisp/net/webjump.el (webjump-sample-sites): Fix Wikipedia's query.
See bug#81552.

Copyright-paperwork-exempt: yes
2026-08-06 12:25:30 +01:00
Sean Whitton 59518a3c21 ; Improve last change. 2026-08-06 12:22:17 +01:00
Protesilaos 60108e7f55 Show-all values for speedbar user options for hiding
* lisp/speedbar.el (speedbar-directory-unshown-regexp)
(speedbar-file-unshown-regexp): New choice for nil to not hide
anything.
(speedbar-file-lists): Check that the user options
'speedbar-directory-unshown-regexp' and
'speedbar-file-unshown-regexp' are strings before using them.
Raise a user-error if their non-nil value is not a string.
* etc/NEWS: Announce the changes.
2026-08-06 12:19:30 +01:00
Martin Rudalics b29e45ff33 Mention new variable 'display-buffer-default-alist' in a few more places
* lisp/window.el (display-buffer): In doc-string mention
new variable 'display-buffer-default-alist'.
* doc/lispref/windows.texi (Choosing Window)
(Buffer Display Action Alists): Mention new variable
'display-buffer-default-alist' in a few more places.
2026-08-06 08:19:17 +02:00
Paul Eggert 39f42a8248 Pacify -Wuseless-cast with Lucid toolkit
Problem reported by Jonathan Mitchell (bug#81554).
Also, clean up the const situation elsewhere, e.g.,
with Motif toolkit, and with no X toolkit.
* configure.ac (_CONST_X_STRING): New macro, when using X11.
This causes most X11 include files to use ‘const char *’ for
readonly strings, rather than the ‘char *’ that was needed for K&R C.
* lwlib/lwlib-Xaw.c (xaw_generic_callback):
* lwlib/lwlib.c (lw_get_widget_value_for_widget)
(lw_internal_update_other_instances):
* lwlib/xlwmenu.c (openXftFont):
* src/xdisp.c (update_redisplay_ticks):
Use char const *, not char *, for readonly strings.
* lwlib/lwlib-Xm.c (update_one_menu_entry):
A cast is needed now that XtName returns char const *,
in a context where Motif wants char *, not String.
* lwlib/xlwmenu.c (openXftFont): Put newly allocated string
into its own local variable, so that main local can be char const *.
* src/emacs.c (android_emacs_init):
* src/xterm.c (x_term_init):
Pacify both -Wuseless-cast and -Wdiscarded-qualifiers.
* src/widget.c (resources, emacsFrameClassRec):
* src/xdisp.c (update_redisplay_ticks):
* src/xfns.c (x_window):
* src/xmenu.c (create_and_show_popup_menu):
* src/xterm.c (emacs_options) [USE_X_TOOLKIT]:
Omit now-useless casts.
* src/xfns.c (Fx_file_dialog):
Use char *, not String, for a mutable string.
2026-08-05 23:49:26 -05:00
Sean Whitton 69b9bfeb01 New face vc-mode-line-busy-indicator
* lisp/vc/vc-dispatcher.el (vc-mode-line-busy-indicator): New
face.
(vc-set-mode-line-busy-indicator): Use it.
2026-08-05 15:54:14 +01:00
Sean Whitton 0ab4c2e4ff Merge from origin/emacs-31
e54ba84245 ; * etc/PROBLEMS (Build-time problems): Discuss bug#81211.
cc210dbf14 Fix JSX tag angle-bracket pairing in tsx-ts-mode
8b521b98ed ; * etc/NEWS: Fix level of last change.
b1687dbe02 * admin/notes/jargon: Add FUD.
287187f202 pcm-try-completion: collapse ** into *
db6beef260 Distinguish UTC vs. UTC+0:00 times in iCalendar library
1b500ce5a5 Fix documentation of ':set' function in 'defcustom'
a93e0ff7b1 ; AGENTS.md, CLAUDE.md: New files.

# Conflicts:
#	etc/NEWS
2026-08-05 11:40:20 +01:00
Roi Martin 9e6f03993b * lisp/outline.el (outline-occur): Autoload. 2026-08-05 11:35:03 +01:00
Roi Martin 8a88f3ed5a Add outline-occur' command and display-buffer-default-alist' variable
Add the `outline-occur' command that allows navigating the current
buffer's outline using Occur.  Also add the
`display-buffer-default-alist' variable, which Lisp programs may
let-bind to specify conditional actions for nested `display-buffer'
calls.

* doc/lispref/windows.texi (Choosing Window)
(Precedence of Action Functions): Document
`display-buffer-default-alist' variable.
* etc/NEWS: Add `outline-occur' and `display-buffer-default-alist'
entries.
* lisp/outline.el (outline-mode-prefix-map): Bind `outline-occur'.
(outline-mode-menu-bar-map): Add `outline-occur' menu item.
(outline-occur-regexp): New buffer-local variable.
(outline-occur): New command.
* lisp/replace.el (occur-1): Call `display-buffer' with category.
* lisp/window.el (display-buffer-alist): Update docstring.
(display-buffer-default-alist): New variable.
(display-buffer): Handle `display-buffer-default-alist' variable.
* test/lisp/outline-resources/outline.txt: New test file.
* test/lisp/outline-tests.el: New test suite.  (Bug#81512)

Co-authored-by: Martin Rudalics <rudalics@gmx.at>
Co-authored-by: Juri Linkov <juri@linkov.net>
2026-08-04 21:16:37 +03:00
Zach Shaftel 602cde3163
elisp-scope: Improve support for :inherit face specs (bug#81534)
* lisp/emacs-lisp/elisp-scope.el (elisp-scope--match-spec-to-arg):
Update to support lists of faces in :inherit.  Update analyzers for
a few functions to use it.

* test/lisp/progmodes/elisp-mode-resources/semantic-highlighting.el:
Extra testing for lists of faces.
2026-08-03 13:00:20 +02:00
Sean Whitton c7639dce30 ; * lisp/minibuffer.el (completion--in-region-1): Fix last change. 2026-08-03 11:54:14 +01:00
Sean Whitton a1f5b8cf86 Don't immediately show *Completions* for icomplete-in-buffer
* lisp/minibuffer.el (completion--icomplete-in-buffer-p):
New function.
(completion--do-completion, completion--in-region-1):
Use it (bug#81537).
* etc/NEWS: Say that NEWS.30 advice-add isn't needed anymore.
* lisp/icomplete.el (icomplete-in-buffer): Remove advice-add
instructions.
2026-08-03 11:49:20 +01:00
Sean Whitton 67dd54157e ; * test/lisp/vc/vc-tests/vc-test-misc.el: Missing declaration. 2026-08-03 10:38:17 +01:00
Aaron L. Zeng fc9af262e0 vc-hg-diff: Skip unnecessary call to vc-working-revision
* lisp/vc/vc-hg.el (vc-hg-diff): Skip unnecessary call to
vc-working-revision (bug#81527).
2026-08-03 10:36:47 +01:00
Sean Whitton e1338c6c62 Merge from origin/emacs-31
afda8c2779 Fix vc-hg-diff arguments to diff vs empty tree
d828a19fdc Eglot: fix use of progress reporters again (bug#81514)
74ec15e768 ; Fix 'package--save-selected-packages' edge case (Bug#81...
983995b54c ; Delete obsolete comment.
2026-08-03 10:26:25 +01:00
Stefan Monnier 1095d63d28 lisp/mpc.el (mpc-last-seek-time, mpc--faster): Not used any more 2026-08-01 18:00:41 -04:00
Sean Whitton d9218edb3e * lisp/cus-start.el (completion-ignore-case): Make customizable. 2026-08-01 20:09:13 +01:00
Eli Zaretskii 04d5bb486a Merge from origin/emacs-31
42e283fe9d ; 'use-cjk-char-width-table': Avoid byte-compiler warning.
2026-08-01 08:19:02 -04:00
Eli Zaretskii e2b5dc2d70 ; Update ldefs-boot.el. 2026-08-01 07:42:17 -04:00
Eli Zaretskii c150777f49 Fix merge snafu in dired-aux.el
* lisp/dired-aux.el (dired-insert-subdir): Replace call
to 'dired--ls-accept-b-switch-p' (which no longer exists)
with equivalent code.
2026-08-01 07:37:50 -04:00
Eli Zaretskii 8ed037b9c5 Merge from origin/emacs-31
d31d3245ba Fix display of ambiguous-width CJK characters in GUI sess...
cf98d9d725 Eglot: do more orthodox use of progress reporters (bug#81...
0b8d2acdd2 ; * lisp/dired-aux.el (dired-create-destination-dirs): Do...
660e2f9f6f ; * lisp/emacs-lisp/package.el (package-upgrade-all): Fix...
26e1c1792e Summarize changes when upgrading packages
ed4a3e251b Prevent 'package-menu--mark-upgrades-1' from blocking
a9fc13614e Export GIT_OPTIONAL_LOCKS=0 for "git status" invocations ...
8e70e6d687 * lisp/vc/vc.el (vc-delete-file): Don't backup backup files.
c6e2bd3e3b Restore current buffer after clone-indirect-buffer-hook e...
b21266e4cb Assign some calendar & icalendar files to packages
b6332ac21b Do not asynchronously prompt to save buffers after vc-che...
4f36e9e885 File name with newline: require 'ls' --dired switch
cba18a7f9c Fix starting local processes in the MS-Windows build
2026-08-01 07:14:54 -04:00
Eli Zaretskii 2fd87a1db4 ; Merge from origin/emacs-31
The following commits were skipped:

99a9307235 Avoid errors in 'dabbrev-expand'
7b0f33cb74 Backport: Use default exec-suffixes when needed (bug#8128...
2026-08-01 07:14:54 -04:00
Eli Zaretskii 79c1f363a3 Merge from origin/emacs-31
ad60eb855d ; Improve documentation of "shadow cursor"
c6d6033360 Fix attendee lookup in gnus-icalendar
5b5cc17832 vc-working-revision: Don't bind default-directory to a re...
ab88a0be86 Fix Dired problem with nonexistent directory (bug#81509)
158a039135 ; * admin/MAINTAINERS: Mark F. Jason Park as co-maintaini...
1da79a162d ; * src/treesit.c (treesit_cursor_helper_1): Further expl...
037076824f ; * src/treesit.c (treesit_cursor_helper_1): Fix last cha...
5e3f68c669 Fix emacs-eglot test on emba
97e24e12d5 Fix C-x v w a/A on the repository root
b65f8ef93d (sh-font-lock-paren): Fix bug#81192

# Conflicts:
#	etc/NEWS
2026-08-01 07:14:49 -04:00
Rahul Martim Juliato a8539b7919 markdown-ts-mode: Make inline HTML embed local (bug#81334)
* lisp/textmodes/markdown-ts-mode.el (markdown-ts--set-up): Mark
the html_tag markdown-inline embed as ':local t', matching the
sibling html_block embed.  Avoids non-local range updates that
scale poorly on buffers with many inline blocks.
2026-08-01 12:46:28 +03:00
Rahul Martim Juliato 7eb0fd17e3 Cache resolved tree-sitter languages (bug#81334)
* src/treesit.c (treesit_lang_cache_get)
(treesit_lang_cache_put): New functions implementing a
per-session cache of resolved languages.
(treesit_load_language): Consult and populate the cache, to
avoid repeating the dlopen/dlsym and ABI-version check on every
parser creation.
2026-08-01 12:45:37 +03:00
Eli Zaretskii 13cff6ffad Avoid crashes due to weird 'auto-coding-regexp-alist' values
* src/chartab.c (uniprop_table): Bind 'coding-system-for-read'
to 'utf-8-emacs-unix' for inserting the contents of the uni-*.el
files.  This avoids crashes if the 'coding:' cookies in these
files are overridden by some means.  (Bug#81445)
2026-08-01 12:38:45 +03:00
Eli Zaretskii 5c10089194 ; * etc/NEWS: Announce support of Kmscon. (Bug#81428) 2026-08-01 11:44:15 +03:00
Sven Joachim b54ef91209 Add support for the kmscon terminal emulator
* lisp/term/kmscon.el: New file.  (Bug#81428)
2026-08-01 11:40:33 +03:00
Sean Whitton 96e2a7ff0d Make "NN outgoing revisions" in VC-Dir clickable again
* lisp/vc/vc-dir.el (vc-dir--count-outgoing)
(vc-dir-async-header-values): Switch to using the overlay's main
text instead of an `after-string' so that it's clickable again.
2026-07-31 17:02:13 +01:00
Stephen Berman 698776764d Adjust 'log-edit-insert-changelog-entry' to recent 'vc-dir' change
* lisp/vc/log-edit.el (log-edit-insert-changelog-entry): Since
commit 0a714557eb 'vc-dir' does not always resolve the working
directory to its truename, but 'vc-dir-deduce-fileset' does expand
file names, so do that also when generating the list of changed
files according to the ChangeLog entry in order to prevent a
spurious failure on comparing the two lists of files.
2026-07-31 12:04:53 +02:00
Michael Heerdegen 6534d67a1f Fix rect mark mess up in unselected windows
* lisp/rect.el (rectangle--highlight-for-redisplay): Move
`save-excursion' inside `with-selected-window' to ensure it always takes
effect.  (Bug#81451)
2026-07-31 05:14:20 +02:00
Stéphane Marks a1fa371488 Draw NS window title with dimensions only when being dragged (bug#81458)
This avoids stale temporary window titles when resizing is
initiated mechanically via Applescript or using a macOS window
manager like yabai.

* src/nsterm.m: ([EmacsView windowWillResize:toSize]): Draw
window title with new dimensions only when inLiveResize is true.
2026-07-30 23:10:49 +01:00
Stephen Berman 5a58e37169 Handle file names with newlines in Dired subdirs (bug#81295)
* lisp/dired.el (dired-internal-noselect): Add to the comment
about displaying a warning about literal newlines a reference to
needing the same test with subdirs.
(dired--filename-with-newline-p): If the Dired buffer has subdirs,
check these for file names with newlines.

* lisp/dired-aux.el (dired-insert-subdir): Test for file names
with literal newlines in subdirs and if there are display a
warning.  Add a comment about buggy Dired display when using extra
'ls' switches on inserting a subdir, and display a temporary
warning about this (to be removed when the bug is fixed).
2026-07-30 23:05:48 +02:00
Eshel Yaron f13363507d
; (eww-read-alternate-url): Fix regression with single link.
In commit aee0e67a we changed 'eww--alternate-urls' to
return a list of (propertized) strings rather than an alist,
but we didn't properly adapt the just-one-link branch of
'eww-read-alternate-url' accordingly.

* lisp/net/eww.el (eww-copy-alternate-url): Fix it.
2026-07-30 19:58:03 +02:00
Daniel Mendler 8b8aa7ced6 Delete empty local-variable block ad prop line
Delete local variable block or prop line when it became empty
after deleting a variable.  (Bug#81516)

* lisp/files-x.el (modify-file-local-variable)
(modify-file-local-variable-prop-line): Delete empty block or
prop-line.
* test/lisp/files-x-tests.el (files-x-test-add-file-local-variable)
(files-x-test-add-file-local-variable-prop-line)
(files-x-test-delete-file-local-variable)
(files-x-test-delete-file-local-variable-prop-line): New tests.
2026-07-30 17:37:51 +03:00
Eli Zaretskii fb6ad8aa78 ; * doc/lispref/symbols.texi (Shorthands): Fix markup and whitespace. 2026-07-30 09:33:16 +03:00
Eli Zaretskii df68768d1d Avoid errors when "-*- -*-" prop line of a file has no tags
* lisp/files.el (set-auto-mode): Don't add an invalid "-mode" to
'modes', if the mode tag is empty.
(set-auto-mode-1): Make sure we return a position that is at or
after point.  (Bug#81516)
2026-07-30 07:18:29 +03:00
Stefan Monnier c1337758a6 Merge remote-tracking branch 'origin/scratch/intern-without-shorthands' 2026-07-29 22:12:50 -04:00
Ihor Radchenko e0d2d80a62
lisp/vc/diff-mode.el (diff-find-text): Match case-sensitively (bug#81395) 2026-07-29 18:50:36 +02:00
Yuan Fu fb5cf238a9 New variable comment-start-line-regexp (bug#80837)
* lisp/newcomment.el (comment-start-line-regexp): New variable
(bug#80837).
* lisp/progmodes/c-ts-common.el (c-ts-common-comment-setup):
* lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode):
* lisp/progmodes/dockerfile-ts-mode.el (dockerfile-ts-mode):
* lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode):
* lisp/progmodes/go-ts-mode.el (go-work-ts-mode):
* lisp/progmodes/json-ts-mode.el (json-ts-mode):
* lisp/progmodes/lua-ts-mode.el (lua-ts-mode):
* lisp/progmodes/php-ts-mode.el (php-ts-mode--comment-setup):
* lisp/progmodes/python.el (python-base-mode):
* lisp/progmodes/ruby-mode.el (ruby-base-mode):
* lisp/progmodes/sh-script.el (sh-base-mode):
* lisp/textmodes/mhtml-ts-mode.el
(mhtml-ts-mode--comment-setup):
* lisp/textmodes/toml-ts-mode.el (toml-ts-mode):
* lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode): Set it.
* doc/emacs/programs.texi (Options for Comments):
* etc/NEWS: Document it.
* lisp/progmodes/c-ts-common.el
(c-ts-common-comment-start-line-regexp): New variable.
* lisp/treesit.el (newcomment): Require.
(treesit--likely-line-comment-p): New function.
(treesit-forward-comment): Use it.  Make COUNT parameter
non-optional.
2026-07-29 12:20:33 +01:00
Stefan Monnier 9a431e431a (Fcall_interactively): Fix use-after-free bug#81110
* src/callint.c (Fcall_interactively): Don't use alloca'd vars after we
`unbind_to` and don't bind `current-minibuffer-command`.
* src/minibuf.c (read_minibuf): Bind `current-minibuffer-command` here.
* test/src/callint-tests.el (test-many-interactive-args):
New test (authored by Pip Cet <pipcet@protonmail.com>).
2026-07-27 19:19:53 -04:00
Stefan Monnier eac013a785 (custom-initialize-changed): Don't catch errors in custom-set
* lisp/custom.el (custom-initialize-reset): Simplify.
(custom-initialize-changed): Don't catch errors in `custom-set` (bug#81396).
(custom-initialize-delay, custom-initialize-after-file-load):
Adjust arg name to align with other `custom-initialize-*`.
2026-07-27 19:12:30 -04:00
Stephen Berman 75441af2c5 ; Fix last change to 'insert-directory'
* lisp/files.el (insert-directory): Reuse an existing "*ls error*"
buffer or, if there is none, generate a new one and make it
read-only (bug#80499, Message #305).
2026-07-27 13:55:04 +02:00
Roi Martin 810e9d675b Fix void-function' error after edebug-remove-instrumentation'
After using `edebug-remove-instrumentation' to remove Edebug
instrumentation from a command, calling that command interactively
produces a `void-function' error.  This happens because Edebug does not
unwrap the command's interactive form.

* lisp/emacs-lisp/edebug.el (edebug-unwrap*): Unwrap the interactive
form of an `interpreted-function'.  (Bug#81438)
2026-07-26 15:18:26 -04:00
Sean Whitton 59f402717a Merge from origin/emacs-31
b5119ab920 ; * etc/PROBLEMS: Document problems with pasting on Windo...
6bd90deb26 ; Fix fallout from 'image-dired-display-image-mode' chang...
39cb1e483f ; * lisp/bookmark.el (bookmark-alist): Doc fix (bug#81461).
296869994e ; Remove 'sit-for' treesit parser workaround (bug#81019)
633a998bcf ; Improve documentation of text properties for strings
2026-07-26 12:42:46 +01:00
Sean Whitton 6e4dee5bf4 ; Merge from origin/emacs-31
The following commits were skipped:

30539fe149 Backport: ; Fix last change, again
7cc260dddd Backport: ; Fix last change
0448b4e09a Backport: Fix 'with-tramp-progress-reporter' (bug#81455)
2026-07-26 12:42:46 +01:00
Sean Whitton 187e1d8048 Merge from origin/emacs-31
2771f99c72 ; * admin/MAINTAINERS: Mark Amin as maintaining some more...
19eeda16a4 ; Fix recent changes in treesit documentation
29bbd02347 Fix treesit_cursor_helper_1 for zero-width nodes (bug#81436)
6b670907fa Update tree-sitter manual for embed level
0f6d977a88 ; * test/src/xdisp-tests.el (xdisp-test-format-mode-line)...
2026-07-26 12:42:46 +01:00
Sean Whitton 69a193bc0e ; Merge from origin/emacs-31
The following commit was skipped:

6f992eaa49 vc--count-outgoing: Set process query on exit flag to nil
2026-07-26 12:42:46 +01:00
Sean Whitton d3bc86023b Merge from origin/emacs-31
1bdbdade6b Merge branch 'emacs-31' of git.savannah.gnu.org:/srv/git/...
f8d7f87e73 ; * ChangeLog.5: Remove an entry which shouldn't have bee...
1c042fa0b1 Fix discarding user edits after async commit completes (b...
2026-07-26 12:42:45 +01:00
Eli Zaretskii 57ab505007 ; * lisp/net/eww.el (eww--alternate-urls): Doc fix. 2026-07-26 12:42:02 +01:00
Eshel Yaron aee0e67a73 Fix 'eww-read-alternate-url' completion annotations
The 'annotation-function' used by 'eww-read-alternate-url'
assumed, for alignment purposes, that completions are shown
in one column, one completion per line.  But that doesn't
hold with the default value of 'completions-format'.

This commit fixes the issue by using ':width' space specs
for alignment instead of ':align-to'.

While we're at it, simplify a bit and switch to an
'affixation-function', so alignment adapts to the current
completions (those that match the current input string).

* lisp/net/eww.el: Move 'provide' form to bottom.
(eww--alternate-urls): Simplify using 'seq-keep'.
Return propertized strings instead of an alist.
(eww--alternate-urls-affixation): New function.
(eww-read-alternate-url): Use it.
2026-07-26 12:41:57 +01:00
Eli Zaretskii 6f5bcd19b2 ; * etc/NEWS: Fix typo and wording of recently-added entry. 2026-07-26 12:40:30 +01:00
Dmitry Gutov 0a714557eb vc-dir: Don't resolve DIR to truename unnecessarily
* lisp/vc/vc-dir.el (vc-dir): Use DIR without resolving truename
if the responsible VC backend is found.
(https://lists.gnu.org/archive/html/emacs-devel/2026-07/msg00147.html)
2026-07-25 06:45:27 +03:00
Paul Eggert ba331c27f1 Port some timestamp tests to 32-bit time_t
* test/lisp/calendar/icalendar-recur-tests.el:
(ict:recur-tz-observance-on):
* test/lisp/gnus/gnus-icalendar-tests.el (gnus-icalendary-byday):
Skip these tests, which use timestamps before 1970, if the
platform does not support that, e.g., unsigned 32-bit time_t,
or signed 32-bit time_t for timestamps before 1901.
2026-07-24 12:33:09 -07:00
Eli Zaretskii 0e8fbd63e9 Avoid errors in 'dabbrev-expand'
* lisp/dabbrev.el (dabbrev-expand): Fix use of
'dabbrev--last-buffer-found': it could be a killed buffer.
(Bug#81452)
2026-07-24 13:54:51 +03:00
Michael Albinus 706828afa1 ; * etc/NEWS: Presentational fixes and improvements. 2026-07-24 12:20:41 +02:00
Paul Eggert 57c5967828 current-time-list now defaults to nil
Change the default value from current-time-list from t to nil.
This continues the transition that was begun in Emacs 29, so
that functions like current-time generate timestamps in the
more-efficient and more-consistent (TICKS . HZ) form.
* src/timefns.c: Default to false.
2026-07-23 23:05:13 -07:00
Sean Whitton 21c979ee60 vc-dir-mode: Tidy handling of read-only status
* lisp/vc/vc-dir.el (vc-dir-mode): Delete unneeded binding of
buffer-read-only in :after-hook.  Bind inhibit-read-only instead
of buffer-read-only.
2026-07-23 20:12:33 +01:00
Paul Eggert 492dd42633 Pacify gcc -Wanalyzer-null-dereference in load_comp_init
This pacifies gcc 16.1.1 20260515 (Red Hat 16.1.1-2)
when Emacs is configured with --enable-gcc-warnings.
* src/comp.c (load_comp_unit): Change eassert to eassume.
2026-07-23 11:36:02 -07:00
Paul Eggert 53e564eebb Insulate doc against N. American timezone changes
Recent changes to the meaning of "Pacific Time" in western Canada, along
with possible broader changes to US timekeeping in the US Sunshine
Protection bill (H.R. 139), make it advisable to avoid using examples
like "PST" in Emacs documentation as these abbreviations are too likely
to be ambiguous.  Use more-stable abbreviations like "IST" and "JST".
2026-07-23 11:35:31 -07:00
Michael Albinus b1a5151dbb ; Fix last change, again 2026-07-23 18:39:16 +02:00
Sean Whitton 7e0a449464 vc-dir-mode: Delay call to vc-dir-refresh until after mode hooks
* lisp/vc/vc-dir.el (vc-dir-mode): Delay call to vc-dir-refresh
until after mode hooks, using :after-hook.
2026-07-23 17:35:06 +01:00
Stefan Monnier 389be0b247 (itree_remove): Use itree_validate (bug#81448)
* src/itree.c (itree_contains): Don't use ITREE_FOREACH.
It has side-effects (makes some nodes clean) which is
undesirable for this function that is used only in assertions.
Suggested by Helmut Eller <eller.helmut@gmail.com>.
(itree_remove): Use `itree_validate`.
2026-07-23 11:23:42 -04:00
Aaron L. Zeng 5df6b1ad65 VC: Prevent outgoing revision count process from querying on exit
* lisp/vc/vc-dir.el (vc-dir--count-outgoing): Set query-on-exit
flag for this process to nil (bug#81454).

Copyright-paperwork-exempt: yes
2026-07-23 15:38:38 +01:00
Michael Albinus e4df903f6b ; Fix last change
* lisp/net/tramp.el (with-tramp-progress-reporter):
Deactivate `progress-reporter-echo-area' when calling
`progress-reporter-done'.  We call `tramp-message' instead.

* lisp/net/tramp-fuse.el (tramp-fuse-handle-insert-directory):
* lisp/net/tramp-sh.el (tramp-sh-handle-insert-directory):
Use progress reporter.
2026-07-23 15:56:02 +02:00
Stéphane Marks 1f9a492aea Fix 'with-tramp-progress-reporter' (bug#81455)
Clear stateful progress reporters like 'system-taskbar'.

* lisp/net/tramp.el (with-tramp-progress-reporter): Call
'progress-reporter-done' in 'unwind-protect'.
2026-07-23 15:27:12 +02:00
Sean Whitton 301cb3218f Merge from origin/emacs-31
7726d55ea0 ; * admin/make-tarball.txt: Don't use "regenerate" in one...
3bd3dd6a27 ; * admin/make-tarball.txt: Streamline the process in sev...
2026-07-23 13:58:56 +01:00
Sean Whitton 6bb5437870 ; Merge from origin/emacs-31
The following commits were skipped:

57581b8bc2 ; Update ldefs-boot.el.
60da04d179 Bump Emacs version to 31.0.91
2026-07-23 13:58:56 +01:00
Sean Whitton cef2206c97 Merge from origin/emacs-31
d8af318118 ; Update exported ChangeLog files and etc/AUTHORS
1bd56ff932 ; Fix last change.
76c8065bf6 VC-Annotate menu: Fix inserting "Span NN.NN days" entries
7822f2d5ea Fix typo in Fmatch_end's doc string
d365328e6d Fix false positive warnings in 'elisp-flymake-checkdoc' w...
58e4dc3c53 Fix void-function on push-button in goto-address-mode
429336b409 Fix perl-calculate-indent
fc3ba09401 * admin/notes/documentation: Describe quoting of key names.
ade36467bf Fix 'url-parse-query-string'
94ee683d63 markdown-ts-mode: Fix code-block fontification leak
2026-07-23 13:58:56 +01:00
Eli Zaretskii baf195d1eb ; Fix extra whitespace in 'report-emacs-bug'
* lisp/mail/emacsbug.el (report-emacs-bug--os-description):
Account for 'os' being nil.  (Bug#81437)
2026-07-23 10:09:46 +03:00
Eli Zaretskii 556b803339 ; Fix last change
* src/keyboard.c (Fposn_point): Doc and commentary fixes.

* test/src/keyboard-tests.el (keyboard-tests-keymap-property): New
test, taken from reproduction recipe by Spencer Baugh
<sbaugh@janestreet.com>.  (Bug#81386)
2026-07-23 09:53:26 +03:00
Spencer Baugh 0c83d2cdbb Fix 'current-active-maps' for 4-element position list
'current-active-maps' called POSN_BUFFER_POSN to get the buffer
location out of a position list.  But POSN_BUFFER_POSN is not
correct: to get the buffer location you need the more
complicated logic in 'posn-point', you can't just take the 5th
element of POSN.  Fix it by calling 'posn-point' instead, which
is now moved to C for this purpose.
* src/keyboard.c (Fposn_point): New function, moved from
subr.el.
(syms_of_keyboard): Defsubr it.
* lisp/subr.el (posn-point): Delete; moved to C.
* lisp/emacs-lisp/byte-opt.el (side-effect-free-fns): Add the
new C implementation of 'posn-point'.
* src/keymap.c (Fcurrent_active_maps): Call 'posn-point' instead
of 'POSN_BUFFER_POSN'.  (Bug#81386)
2026-07-23 09:37:15 +03:00
Petteri Hintsanen 074cdea573 timeclock: Optionally use 24-hour clock
* lisp/calendar/timeclock.el (timeclock-use-24hr-format): New defcustom.
(timeclock-time-format): New function.
(timeclock-status-string, timeclock-when-to-leave-string)
(timeclock-generate-report): Call timeclock-time-format to format
displayed times.  (Bug#81440)

* etc/NEWS: Document the change.

* test/lisp/calendar/timeclock-tests.el: New file.
2026-07-23 09:14:35 +03:00
Stefan Monnier 201520c0f4 etc/NEWS: Document the change in intern and shorthands 2026-07-22 15:57:32 -04:00
Helmut Eller 6c74a7a1e7 Avoid a GOT indirection for constants in native code on ELF
Make the d_reloc variable internal instead of external.  For Lisp code
like

  (defun foo () 'abc)

the generated code used to look like

  // Pseudo code:
  extern Lisp_Object d_reloc[NCONST];
  Lisp_Object foo (void) { return d_reloc[OFFSET_OF_ABC]; }
  // Assembler code:
  0000000000001100 <F666f6f_foo_0>:
    1100: mov    0x2ec1(%rip),%rax    # 3fc8 <d_reloc-0x1b8>
    1107: mov    (%rax),%rax
    110a: ret

the new version looks like:

  // Pseudo code:
  static Lisp_Object d_reloc[NCONST];
  extern Lisp_Object *d_reloc_addr (void) { return d_reloc; }
  Lisp_Object foo (void) { return d_reloc[OFFSET_OF_ABC]; }
  // Assembler code:
  0000000000001120 <F666f6f_foo_0>:
    1120: mov    0x3059(%rip),%rax        # 4180 <d_reloc>
    1127: ret

where the function d_reloc_addr is used to initialize the d_reloc array
and comp_unit->data_relocs.  Note that the assembler code has one load
less in the new version.  (This is only true for ELF; PE and Mach-O
don't need the indirection in the old version.)

* src/comp.c (DATA_RELOC_ADDR_SYM, DATA_RELOC_EPHEMERAL_ADDR_SYM): New
symbols.
(declare_imported_data_relocs): Create the internal variable and the
external function.
(declare_imported_data): Supply the symbols for the functions.
(find_relocs): New function.
(check_comp_unit_relocs, load_comp_unit): Use it instead of a plain
dynlib_sym.
(ABI_VERSION): Bump version to 13.
2026-07-22 21:00:36 +02:00
Stefan Monnier 3f70cfde38 fund-func: Find definitions that use shorthands
* lisp/emacs-lisp/find-func.el (find-func--regexp-of-symbol-name):
New function.
(find-function-search-for-symbol): Use it to find shorthands.

* lisp/emacs-lisp/cl-generic.el (cl--generic-search-method):
Find method defined with shorthands (and funny chars).
2026-07-22 13:12:50 -04:00
Stefan Monnier 4b23583f60 doc/lispref/symbols.texi (Converting to/from shorthands): New subsection 2026-07-22 13:12:50 -04:00
Stefan Monnier 7c7616e3f0 (intern): Don't obey read-symbol-shorthands any more (bug#80574)
* src/lread.c (Fintern, Fintern_soft, Funintern): Don't obey
`read-symbol-shorthands` any more.

* lisp/emacs-lisp/shorthands.el (shorthands-of-symbol): New function,
adapted from `elisp--read-symbols-shorthands`.
(shorthands-to-longhand, shorthands-intern, shorthands-intern-soft)
(shorthands-unintern): New functions.
(shorthands-font-lock-shorthands): Use `shorthands-intern-soft`.

* lisp/progmodes/elisp-mode.el (elisp-context-menu)
(elisp--company-doc-buffer, elisp--company-doc-string)
(elisp--company-location, elisp--company-kind)
(elisp--company-deprecated, xref-backend-definitions)
(elisp--xref-find-definitions, eval-sexp-add-defvars)
(elisp--current-symbol): Use `shorthands-intern(-soft)`.
(elisp--read-symbol-shorthands): Use `shorthands-of-symbol`.
(elisp-completion-at-point): Use the `elisp--longhand` to simplify.
Use `shorthands-intern(-soft)`.

* lisp/minibuffer.el (completion-shorthand-try-completion):
Simplify using `shorthands-to-longhand`.

* lisp/emacs-lisp/lisp-mode.el (lisp-indent-function):
* lisp/thingatpt.el (symbol-at-point): Use `shorthands-intern(-soft)`.

* test/src/lread-tests.el (lread-unintern):
Use `shorthands-(un)intern(-soft)`.
2026-07-22 13:08:10 -04:00
Helmut Eller 6faf3cb68b Improve diff-unified->context
Preserve comments in hunk headers (usually a function name).

* lisp/vc/diff-mode.el (diff-unified->context): Parse the comment in the
hunk header and insert it in the corresponding hunk header in the
context diff.
(diff-context->unified): Change analogously.
* test/lisp/vc/diff-mode-tests.el (diff-mode-tests-undo-unified->context):
New test.
(diff-mode-tests--context-patch, diff-mode-tests--unified-patch): New
variables.
2026-07-22 17:46:01 +02:00
Harald Jörg ad23356910 ;cperl-mode.el: Do not take "=end" as an end of POD
Discovered by choroba, reported via GitHub:
https://github.com/HaraldJoerg/cperl-mode/issues/28

* lisp/progmodes/cperl-mode.el
(cperl-electric-pod, cperl-linefeed, cperl-find-pods-heres):
Remove "=end" from regular expressions.  "=end" is the end-of-POD
indicator in Raku (formerly called Perl6) but not in Perl.
2026-07-22 15:02:46 +02:00
Eli Zaretskii 0f086c307c Merge from origin/emacs-31
6107196a32 ; * etc/NEWS: Fix capitalization of arrow keys.
1a2fc844ca Revert "; * admin/authors.el (authors-aliases): Fix Borys...
cf6918c189 ; * admin/authors.el (authors-aliases): Fix Borys Buliha'...
eac0aaf7a1 ; * doc/misc/cl.texi (Modify Macros): Remove 'with-memoiz...
c6c8012d7a Fix 'mouse-drag-copy-region' = 'non-empty'

# Conflicts:
#	etc/NEWS
2026-07-18 05:59:00 -04:00
Eli Zaretskii 72842af763 ; Merge from origin/emacs-31
The following commit was skipped:

f532313220 ; DUMP_RELOCATION_ALIGNMENT comment fix
2026-07-18 05:58:55 -04:00
Eli Zaretskii 5172d275c0 Merge from origin/emacs-31
39e1e9c367 ; * doc/lispref/keymaps.texi (Changing Key Bindings): Fix...
3b4cba3b68 Fix `with-tramp-local-environment'
2026-07-18 05:58:55 -04:00
Eli Zaretskii 036a2e7efc ; Merge from origin/emacs-31
The following commit was skipped:

82166cbd00 project.el: Bump version to 0.12
2026-07-18 05:58:55 -04:00
Boris Buliga b0d799c016 Don't build untranslated doc directories per language (bug#81332)
With DOCLANGS='default fr', the top-level doc targets ran a sub-make
in every doc directory once per language.  The Makefiles of the
directories without translations (emacs, lispintro, lispref) ignore
DOCLANG, so the non-default sub-make repeated the default-language
build, and under "make -j" two sub-makes produced the same outputs
concurrently, failing intermittently with:

  cp: cannot create regular file '../../info/cons-2a.txt': File exists

* Makefile.in (FILTER_DOCLANGS): New function: languages from
DOCLANGS to build for a doc directory, the default language when
present in DOCLANGS plus every language that has translations for
this directory (doc/translations/<lang>/<dir>).  Do not force the
default language when DOCLANGS omits it.  Suggested by Vincent
Belaiche <vincentb1@users.sourceforge.net>.
(MAKE_DOC): Take the list of languages as a second argument and use
it instead of DOCLANGS.
2026-07-18 12:21:25 +03:00
Boris Buliga 34436c11ca Fix info/dir generation in fresh checkouts (bug#81332)
The previous bug#81332 fix made info/dir depend on doc/misc/NAME.texi
names derived from INFO_COMMON.  For the manuals whose source is .org
(modus-themes, org), these .texi files are generated and do not exist
in a fresh checkout, and there is no rule to build them at this level,
so building Emacs fails with:

  make[1]: *** No rule to make target 'doc/misc/modus-themes.texi',
  needed by 'info/dir'.  Stop.

* Makefile.in (srcdir_doc_info_dir_inputs): For the default language,
depend on the actual sources reported by doc/misc echo-sources
(texi_misc_default), which lists .org sources for the org-based
manuals; make-info-dir extracts dir entries from both formats.
(GET_DOC_SRC): Only handle translated languages; drop the mapping of
default translation names to doc/misc .texi names.
2026-07-18 12:20:26 +03:00
Alan Mackenzie 9307284c69 Recognize non-alphanumeric characters in 'sh-script' defun names
Also amend the doc string of defun-prompt-regexp.  This fixes
bug#81401.
* lisp/progmodes/sh-script.el (sh-base-mode): Amend the value
of 'defun-prompt-regexp' to use a "negative" rather than a
"positive" list of characters.
* lisp/emacs-lisp/lisp.el (defun-prompt-regexp).  Amend the doc
string for clarity.
2026-07-18 12:07:29 +03:00
Eli Zaretskii e3ec1cb8cc Fix MinGW build as followup to recent Gnulib changes
Gnulib added AT_EMPTY_PATH support to its 'fstatat', but
the MinGW build must use its own 'fstatat' implementation.
These changes avoid compiling Gnulib's fstatat.c, and add
support for AT_EMPTY_PATH to the MinGW implementation.
* src/w32.c (fstatat): Support AT_EMPTY_PATH.

* nt/inc/unistd.h (AT_EMPTY_PATH): Define.
* nt/mingw-cfg.site (gl_cv_func_fstatat_null_file): Set to 'yes'
to avoid compiling Gnulib's fstatat.
2026-07-18 09:25:21 +03:00
Paul Eggert d71a399fdd Remove lib/af_alg.h, to adjust to recent Gnulib
Gnulib deprecated the crypto/af_alg module,
following the deprecation of the AF_ALG API in Linux 7.2.
This means Emacs needs to do less work to avoid using it.
* admin/merge-gnulib (AVOIDED_MODULES):
Remove crypto/af_alg as we no longer need to avoid it.
* configure.ac (emacs_files): Omit lib/af_alg.h.
* lib/af_alg.h: Remove; no longer used.
* lib/gnulib.mk.in: Regenerate.
2026-07-17 14:09:18 -07:00
Paul Eggert 5249f84d8b Update from Gnulib by running admin/merge-gnulib 2026-07-17 14:09:18 -07:00
Filipp Gunbin 10fc4559e1 Fix end-of-defun with argument < -1
When end-of-defun is invoked with argument < -1 after the end of
defun, and there is some text between the end of defun and
point, the result is off by 1 (Bug#81305).
* lisp/emacs-lisp/lisp.el (end-of-defun): Always move point to
beg.
* test/lisp/emacs-lisp/lisp-tests.el (end-of-defun-twice): Add
test case.
2026-07-17 18:02:06 +03:00
Earl Hyatt 541f693ca2 Create macro 'pcase-let*-strict'
Create a version of 'pcase-let*' that signals an error when a 'pcase'
pattern does not match its corresponding value.

* lisp/emacs-lisp/pcase.el (pcase--let*): Add the optional argument
'strict' to generate code for signaling an error when a 'pcase'
pattern does not match its corresponding value.
* lisp/emacs-lisp/pcase.el (pcase-let*-strict): Add the new macro.
* test/lisp/emacs-lisp/pcase-tests.el (pcase-tests-let*-strict):
Add new test.
* etc/NEWS (Pcase): Add heading for 'pcase'.
* etc/NEWS (Add 'pcase-let*-strict'): Add news entry for new macro.
2026-07-16 16:33:04 -04:00
Eli Zaretskii ae2ce54a11 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs 2026-07-16 13:39:24 +03:00
Eli Zaretskii 27771b1ca5 ; * etc/emacs-buffer.gdb (ybuffer-contents): Fix for MS-Windows. 2026-07-16 13:38:17 +03:00
Paul Eggert 3c0bc3f2eb Port pdumper back to 32-bit MinGW --with-wide-int
Problem reported by Eli Zaretskii (bug#44531#91).
* src/pdumper.c (DUMP_RELOCATION_ALIGNMENT):
Don’t make it larger than alignof (void *).
2026-07-16 00:51:53 -07:00
Eli Zaretskii 7113255b84 ; * src/pdumper.c (dump_reloc_set_offset): Improve error text (bug#44531). 2026-07-16 09:18:04 +03:00
Dmitry Gutov 094e2e5692 project.el: Bump the version 2026-07-16 06:16:27 +03:00
Paul Eggert 3b4dd7829f ; Fix typo in newsticker--decode-rfc822-date doc string
* lisp/net/newst-backend.el (newsticker--decode-rfc822-date):
"MET" is not a valid RFC 822 time zone abbreviation.
2026-07-15 13:43:30 -07:00
Paul Eggert f167bd0230 Update doc for North American time zone changes
This year British Columbia and Alberta moved one time zone east,
discarding daylight saving time, and it’s possible that more of North
America will follow suit.  Adjust doc strings and manual to be
more robust in the presence of these changes.
2026-07-15 13:39:59 -07:00
Paul Eggert ad0c340975 Bump DUMP_RELOCATION_ALIGNMENT to alignof (Lisp_Object)
* src/pdumper.c (DUMP_RELOCATION_ALIGNMENT): Now alignof
(Lisp_Object) on all platforms.  This supports larger offsets on
many platforms, and does not shrink the maximum supported offset
on any known platform.  See Bug#44531.
2026-07-15 12:53:15 -07:00
Paul Eggert 68a9c61fa9 Merge from origin/emacs-31
407de5142c Port pdumper to m68k
0818bb3eb3 ; * etc/NEWS: Presentational fixes and improvements.
f620924322 ; Improve doc-strings of window rotation commands
937de3fa92 ; Fix typos in preceding commit
48a481ac8d ; Improve documentation of window-rotation commands
afc5fc709b browse-url-with-browser-kind: Use strings for DEF
4be321d511 Fix issues related to window layout changes (Bug#81406)
86b65d82c7 Turn off combination resizing in 'window--transpose-1' (B...
7a9c004924 ; Clarify documentation of 'filter-buffer-substring'
b6412271e1 Fix copy-by-mouse in *Backtrace* buffers
eebc9c7fe7 ; * etc/DEBUG: Info about -g3 on OpenBSD (bug#81109).
2b8aa16b0b Support javascript "using" keyword (bug#81351)

# Conflicts:
#	etc/NEWS
2026-07-15 11:40:46 -07:00
Paul Eggert 71a81c9853 Fix benchmark failure when no native compilation
* test/lisp/emacs-lisp/benchmark-tests.el (benchmark-tests):
Run benchmark-run-compiled only if native compilation is available.
2026-07-15 11:39:50 -07:00
Paul Eggert 8c1345b48d Pacify gcc 16 -Wuseless-cast in oldXMenu
* oldXMenu/Create.c (XMenuCreate):
* oldXMenu/XCrAssoc.c (XCreateAssocTable):
Omit useless casts.
2026-07-15 11:39:50 -07:00
Sean Whitton 36423e4572 ; * lisp/vc/vc-dir.el (vc-dir-headers): Use "DWIM next". 2026-07-14 14:05:28 +01:00
Stefan Monnier c6147e2b53 lisp/net/gnutls.el (gnutls-negotiate): Avoid %s for lists 2026-07-11 09:39:21 -04:00
Eli Zaretskii 02a92e481f Merge from origin/emacs-31
1e986295f4 ; * etc/PROBLEMS (Android): Document problems with Leim (...
af7f189e0a ; Clarify documentation of 'define-globalized-minor-mode'
9ebc5b9d93 Ensure the correct current buffer in completions--backgro...
2026-07-11 06:33:27 -04:00
Manuel Giraud b22a3beb59 Remove text fragments from URL target
* lisp/net/eww.el (eww-parse-target): New function to parse a
more complex URL target.
(eww-render): Use it.  (Bug#81301)
2026-07-11 11:39:10 +03:00
Sean Whitton a465009585 Merge from origin/emacs-31
d0bd9b39a3 ; completion-pcm-bug80914: Only look at the car of the list.
8e5c0386f1 Improve eldoc-help-at-pt docstrings
f9a8c61f50 Fix 'eldoc-show-help-at-pt'
7621ee1d01 Fix uninit read in Android TrueType font scan
95ab9ef627 Fix OOB read in Android TrueType font scan
4ccf2584e3 Have 'replace-buffer-in-windows' remove BUFFER-OR-NAME ev...
0b30e299f5 Fix test breakage in files-tests
549d2f8637 Check for a live buffer in 'quit-restore-window'
2026-07-10 13:05:08 +01:00
David Ponce 300deca4a8 Fix error in `cl-defstruct' when slot names contain % characters
* lisp/emacs-lisp/cl-macs.el (cl--do-arglist): Escape % in slot
names.
(cl-defstruct): Do not pass again to `format' an already
formatted doc string.
2026-07-09 11:54:51 +01:00
Paul Nelson d7b070b74c ; * lisp/mail/rmail.el (rmail): Clarify comment (bug#81368). 2026-07-08 18:53:24 +03:00
Vincent Belaïche b0d7164edc bug#81332 fix, info/dir generation with manual translations
* doc/translations/default/misc/info_common.mk,
* doc/translations/fr/misc/info_common.mk: Moved to `misc'
subdirectory, in order to account that `INFO_COMMON' content
depends on the subdirectory.

* doc/misc/Makefile.in: `info_common.mk' is moved.

* Makefile.in (GET_DOC_SRC): `info_common.mk' is moved and
`srcdir_doc_info_dir_inputs' computation is fixed with correct
conversion of default translation path.
2026-07-08 16:21:17 +02:00
Eli Zaretskii e1a4bb7a33 ; * lisp/mail/rmail.el (rmail): Add comment (bug#81368). 2026-07-08 16:21:33 +03:00
Paul Nelson 29c91f781c Disable 'auto-mode-alist' during M-x rmail
* lisp/mail/rmail.el (rmail): Bind 'auto-mode-alist' to nil
while visiting the Rmail file, so that filename-based major mode
selection does not invoke 'rmail' recursively.  (Bug#81368)
2026-07-08 16:17:46 +03:00
Sean Whitton 202d29726d Merge from origin/emacs-31
0748af27c0 ; * admin/notes/repo (Bisecting): Refine 'git bisect run'...
c565251dd6 ; * admin/notes/repo (Bisecting): Provide a 'git bisect r...
ba781ed754 Fix blinking Eldoc messages
3e7908fe23 ; Fix two tests
924d88a736 ; Warn about killed buffers returned by 'window-prev-buff...
b07e634e4c Fix undefined behavior in pbm_load
5404761a47 ; Correct treesit-font-lock-level customize type (issue#8...
6464453558 Avoid destructively modifying 'package--builtin-alist'
ffad15bf73 Update to Org 9.8.7
9ab1aa887a Ensure, that `buffer-file-name' is expanded in tramp-archive
4721a44e8a ; * doc/lispref/buffers.texi (Buffer File Name): Clarify ...
9777acdc95 ; etc/NEWS: Fix duplicate "Emacs Lisp mode" heading.

# Conflicts:
#	etc/NEWS
2026-07-07 16:01:01 +01:00
Dan 0f043af4dd Make woman-topic-history an obsolete alias
* lisp/woman.el (woman-topic-history): Make it an obsolete
variable alias.
(woman-file-name): Use 'Man-topic-history' instead of
'woman-topic-history' (bug#81347).
* etc/NEWS: Announce the change.
2026-07-07 15:57:23 +01:00
Sean Whitton bfc1998fb9 New macro without-local-variable-queries (bug#81233)
* lisp/files.el (without-local-variable-queries): New macro.
* lisp/vc/diff-mode.el (diff-syntax-fontify-props):
* lisp/vc/vc-dir.el (vc-dir--count-outgoing):
* lisp/vc/vc.el (vc-find-revision-no-save): Use it.
* lisp/files.el (hack-local-variables-confirm): Warn when it
looks like the caller should have used it.
2026-07-07 14:26:14 +01:00
Sean Whitton 637d6cf08e ; * lisp/vc/vc-dir.el (vc-dir): Return to calling 'vc-dir-mode'. 2026-07-07 11:37:31 +01:00
Sean Whitton d423017cae * lisp/vc/vc-dir.el (vc-dir-headers): Try a hints separator line. 2026-07-07 11:11:40 +01:00
Sean Whitton c7aab69e30 Delete dir-mode VC backend method
This overlapped with the existing support for a backend-specific
minor mode.

* lisp/vc/vc.el (dir-mode): Delete specification.
(vc-dir-mode): De-declare.
(vc-default-dir-mode): Delete.
* etc/NEWS: Update.
2026-07-06 16:50:00 +01:00
Sean Whitton 83b6d619fe VC-Dir: New button to toggle key binding hints
* lisp/vc/vc-dir.el (vc-dir--key-binding-hints): New variable.
(vc-dir-headers): Set it and use it.  Insert a toggle button.
(vc-dir-toggle-hints): New command.
(vc-dir-mode-map): Bind it.
2026-07-06 15:50:45 +01:00
Sean Whitton 02fb63f7fe VC-Dir: Let backends supply a custom mode and key binding hints
* lisp/vc/vc.el (dir-extra-hints, dir-mode): Specify new backend
methods.
(vc-dir-mode): Declare.
(vc-default-dir-mode, vc-default-dir-extra-hints): New
functions.
* lisp/vc/vc-dir.el (vc-dir-headers, vc-dir): Call the new
backend methods.
* lisp/cedet/ede.el (ede-turn-on-hook): Use derived-mode-p
instead of looking at major-mode directly.
* etc/NEWS: Document the new backend methods.
2026-07-06 15:50:45 +01:00
Sean Whitton 7c08520456 vc-dir-headers: Move hints to top, delete \<vc-dir-mode-map>
* lisp/vc/vc-dir.el (vc-dir-headers): Move hints to top of
buffer (bug#81190).  Delete unneeded and possibly harmful
\<vc-dir-mode-map>.
2026-07-06 14:38:31 +01:00
Michael Heerdegen b319542835 ; * lisp/obsolete/cl-compat.el: Remove obsolete file variable 2026-07-06 03:42:18 +02:00
Eli Zaretskii 040b5a18fc ; * etc/NEWS: Fix wording of last change. 2026-07-05 08:04:20 +03:00
Paul Nelson 35af392aee Keep Rmail collection buffers unibyte
* lisp/mail/rmail.el (rmail-enable-multibyte): Remove it.
(rmail-mode): Do not bind 'rmail-enable-multibyte'.  Do not make
the collection buffer multibyte.  (Bug#81274)
(rmail-revert): Default 'coding-system-for-read' to
'no-conversion, as in 'rmail'; remove corresponding FIXME
comment.
(rmail-get-new-mail): Do not bind 'rmail-enable-multibyte'.
* lisp/files.el (auto-mode-alist): Add Rmail file pattern.
* lisp/international/mule-conf.el (file-coding-system-alist):
Add Rmail file pattern.

* doc/emacs/rmail.texi (Rmail Files): Document that "RMAIL" and
"*.rmail" files now visit in Rmail mode automatically.

* etc/NEWS: Announce the changes.

* test/lisp/mail/rmail-tests.el
(rmail-mode-makes-collection-buffer-unibyte): New test.
2026-07-05 08:03:51 +03:00
Eshel Yaron 2a2675fd39
New macro 'elisp-scope-define-function-spec' (bug#81355)
* lisp/emacs-lisp/elisp-scope.el
(elisp-scope--analyze-function-args): New helper function.
(elisp-scope-define-function-spec): New macro.
Convert simple function analyzers to use it.

* etc/NEWS: Announce it.
2026-07-04 21:49:57 +02:00
Eshel Yaron 8c8caa3088
elisp-scope.el: Support associating analyzers with multiple symbols
Many analyzers (those defined with
'elisp-scope-define-analyzer' and friends) are appropriate
for more than one function/macro.  Before this commit, our
way of reusing an analyzer was to do this:

  ;; Define analyzer for `foo'
  (elisp-scope-define-function-analyzer foo (...) ...)

  ;; Reuse it for `bar'
  (put 'bar 'elisp-scope-analyzer #'elisp-scope--analyze-foo)

This isn't a good solution for users/packages that want to
reuse their custom analyzers, because it relies on too many
brittle internal implementation details.
This commit provides a nicer solution: we generalize the
analyzer-defining macros so they can take a list of symbols
and directly associated the defined analyzer with all of
the given symbols.  So the above example is simplified to:

  (elisp-scope-define-function-analyzer (foo bar) (...) ...)

* lisp/emacs-lisp/elisp-scope.el (elisp-scope-define-analyzer):
Accept either a symbol or a list of symbols, and register
the analyzer function for each symbol in the list (bug#81355).
(elisp-scope--define-function-analyzer)
(elisp-scope-define-function-analyzer)
(elisp-scope-define-macro-analyzer)
(elisp-scope-define-special-form-analyzer): Likewise.
Convert all call sites that used to register extra symbols
via separate 'put' calls to use this new feature instead.

* etc/NEWS: Announce it.
2026-07-04 21:48:22 +02:00
Stephen Berman 56154c939b Improve commit log entry creation from ChangeLog (bug#80928)
* lisp/vc/log-edit.el (log-edit-insert-changelog-entry): New function.
(log-edit-insert-changelog-entries): Use it when all log entries
come from the same ChangeLog file or buffer.

* test/lisp/vc/vc-tests/vc-test-misc.el
(vc-test-log-message-from-changelog): New test.

* doc/emacs/maintaining.texi (VC With A Merging VCS):
(Log Buffer): Document improved creation of commit messages from
ChangeLog.  Improve documentation of *vc-log* header lines.
Document 'log-edit-hook'.
(VC Directory Commands): Correct documentation of 'M' and 'U'.
Document determination of current VC fileset without marking.
(Format of ChangeLog): Improve documentation of multi-item entries.

* etc/NEWS: Announce user-facing changes.
2026-07-04 15:57:00 +02:00
Eli Zaretskii c32fae39f8 Merge from origin/emacs-31
f13e409cf4 Fix min-width in mode-line constructs
2026-07-04 08:14:32 -04:00
Eli Zaretskii 2adce1839d Merge from origin/emacs-31
7d01f8f7a4 Fix syntax of tsx tag angle brackets to use matching pairs
43ff22a0d1 ; * etc/NEWS: Presentational fixes and improvements.
d837ba1ed6 ; * etc/NEWS: Fix broken reference to standard-mode-line-...
3b22019ff0 Fix Tramp container name completion
e45a83cb70 ; * etc/NEWS: Document mode line minimum widths change (b...
5d6a13136a server-tests/can-create-frames-p: Check for TERM=dumb-ema...
a07abfc6bc ; * test/lisp/emacs-lisp/package-tests.el (lm-version): D...

# Conflicts:
#	etc/NEWS
2026-07-04 04:28:34 -04:00
Eli Zaretskii c7c131c30d ; Merge from origin/emacs-31
The following commit was skipped:

c794719167 Disable failing SCCS tests on the release branch
2026-07-04 04:28:28 -04:00
Eli Zaretskii 6b006c92f4 Merge from origin/emacs-31
388adcc570 Finish reverting experiment with proportional font on mod...
7746db313a CC Mode: Fix erroneous type: arguments to two defcustoms.
ba7c04d26c ; Fix double docstring in a test
82009df4de Fix initials completion style after // in file name
6b31360a31 Fix c-pcm-try-completion with boundaries completion
e560eacf6d In pgtk_free_frame_resources transfer keyboard focus to p...
6f9ac7ffdb Fix fullscreen state handling for PGTK (Bug#81165, Bug#81...
727a57d971 ; Don't autoload 'define-multisession-variable'
d1c3ba95cb * lisp/progmodes/project.el: Update Commentary.
5fde9732b4 Localize cache invalidation to project-try-vc
707b0ba0f4 Fix project--clear-cache and project--value-in-dir in spe...
ba7d2b8232 * admin/notes/jargon: Add TTTT.
bcb83d7d2a Fix error handling in Tramp delete-{file,directory}
2026-07-04 04:28:26 -04:00
Eli Zaretskii b1d827a428 ; Merge from origin/emacs-31
The following commit was skipped:

b8d3c4f801 Change Tramp version integrated in Emacs 31.1 (don't merge)
2026-07-04 04:28:26 -04:00
Eli Zaretskii 9d616a13fa Merge from origin/emacs-31
521c6263fa ; * src/buffer.c (Fbuffer_file_name): Doc fix (bug#81340).
69463bfc0c ; * etc/PROBLEMS: Problem with Enchant 2.x.  (Bug#81330)
5dd8fe25c2 Correct cursor range in Ftreesit_query_capture (bug#81297)
2026-07-04 04:28:26 -04:00
Eli Zaretskii 78c3c8c1b0 ; Merge from origin/emacs-31
The following commit was skipped:

a057a32bf9 vc-dir-update: Remove assertion invalid on this branch
2026-07-04 04:28:26 -04:00
Eli Zaretskii 017c7c8c87 Merge from origin/emacs-31
7b812bc38a Don't use window manager activation when a child frame ha...
b8f71a6011 Compile User Lisp files after adjusting 'load-path'
1ac2f60b53 Fix strange logic in vc-git-incoming-revision
10ae134ceb ; Add new text for xdisp.c
4d2701ecde Fix 'format-mode-line' when faces are in format string
a34c29e459 Restore frame's fullheight/fullwidth after exiting from f...
c12c91563e Fix interactive mode spec of `xwidget-webkit-end-edit-tex...

# Conflicts:
#	src/xterm.c
2026-07-04 04:28:21 -04:00
Lin Sun 43f2c8f969 emacs-lock-mode: user-error instead of error
* lisp/emacs-lock.el (emacs-lock--kill-emacs-hook): Use 'user-error'
instead of signaling an error.  (Bug#81292)
2026-07-04 10:39:58 +03:00
James Cherti f6a86d6492 Fix wrong-type-argument errors in SMIE arithmetic operations
* lisp/emacs-lisp/smie.el (smie-indent-virtual): Fall back to
'current-column' if a non-numeric symbol like 'noindent' is
encountered and display a warninig.
(smie-auto-fill, smie-config--guess-value): Check that the value
returned by smie-indent-calculate is a number before using it in
arithmetic operations.  (Bug#81102)
2026-07-03 09:38:43 +03:00
Po Lu e8a22f83ac ; * java/org/gnu/emacs/EmacsFillPolygon.java: Remove deprecation directive. 2026-07-03 14:01:35 +08:00
Po Lu 44bff5182d ; * etc/NEWS: Clarify entry regarding Android 17. 2026-07-03 00:06:59 +08:00
Po Lu 6cfb38ca95 Merge remote-tracking branch 'savannah/master' into master-android-1 2026-07-02 20:11:24 +08:00
Po Lu 850cbdfa1b Update to Android 17
* configure.ac (emacs_cv_android_x_or_later): Rename from
`emacs_cv_android_w_or_later', and test for attributes of
Android 17.

* doc/emacs/android.texi (Android Environment): Document new
permission `ACCESS_LOCAL_NETWORK'.

* java/AndroidManifest.xml.in: Declare permission
android.permission.ACCESS_LOCAL_NETWORK to re-enable Emacs to
access local network devices.  Update `targetSdkVersion' to 37.

* java/INSTALL: Document new build-time requirements and
compatibility with recent build-tools releases.

* java/org/gnu/emacs/EmacsFillPolygon.java (perform): Use
non-deprecated variant of `Path#computeBounds'.

* src/android-asset.h (struct AAsset): <bytes_read>: New field.
(AAssetManager_open): Clear exceptions if no asset fd could be
created.
(android_asset_read_internal): Cast `buffer' to (jbyte *).
Record number of bytes read from the InputStream.
(AAsset_seek): Attempt to satisfy seek operations which do not
modify the file pointer.
2026-07-02 20:08:35 +08:00
Dmitry Gutov 220bd832e1 flymake-show-project-diagnostics: Fix when invoked outside of projects
* lisp/progmodes/flymake.el (flymake-show-project-diagnostics):
Fix when invoked outside of all recognizable projects (bug#81288).

Co-Authored-By: Spencer Baugh <sbaugh@janestreet.com>
2026-07-02 09:46:49 +03:00
Dmitry Gutov c04bae8bff Have project-files + default project backend include symlinks
* lisp/progmodes/project.el (project--files-in-directory): Use
'-L' to follow symbolic links when listing project files.
Requested in bug#81278.
2026-07-02 09:26:47 +03:00
Michael Albinus 398a8c7a6e Change Tramp version integrated in Emacs 31.1
* doc/misc/trampver.texi:
* lisp/net/trampver.el (tramp-version): Adapt Tramp versions.

* lisp/net/trampver.el (customize-package-emacs-version-alist):
Change Tramp version integrated in Emacs 31.1.
2026-07-01 17:10:46 +02:00
F. Jason Park badce2d952 Allow slashes and periods in ERC ISUPPORT params
* lisp/erc/erc-backend.el (erc-server-005): Add "." and "/" to regexp
for parameter keys as per the updated recommendation of the living
specification.  See https://github.com/ircdocs/modern-irc/pull/251 and
the corresponding issue it closed.
* test/lisp/erc/erc-tests.el (erc-server-005): Expect slashes and
periods in parameter keys.
2026-06-30 20:28:07 -07:00
F. Jason Park cab6a0d0e3 Make erc-settings a module
* doc/misc/erc.texi: Add Settings node under Modules.
* etc/ERC-NEWS: Mention new module along with function
`erc-channel-buffer-p.
* lisp/erc/erc-networks.el (erc-settings): Move to new module library
`erc-settings'.
(erc-get): Neuter completely by effectively aliasing to `ignore'.
* lisp/erc/erc-settings.el: New file.
* lisp/erc/erc.el (erc-channel-buffer-p): New function.
(erc-modules): Add `settings' to custom set.
* test/lisp/erc/erc-scenarios-settings.el: New file.
* test/lisp/erc/erc-settings-tests.el: New file.
* test/lisp/erc/erc-tests.el (erc-tests--modules): Add `settings'.
* test/lisp/erc/resources/settings/basic-sasl.eld: New file.
* test/lisp/erc/resources/settings/basic.eld: New file.
(Bug#76019)
2026-06-30 20:28:07 -07:00
F. Jason Park 7c8c769a4d Set major-mode before updating modules in erc-open
* etc/ERC-NEWS: Mention change.
* lisp/erc/erc-button.el (erc-button-mode, erc-button-enable)
(erc-button-disable): Use `erc-with-initialized-session' instead of
`erc-mode-hook'.
* lisp/erc/erc-common.el (erc-with-initialized-session): New macro.
* lisp/erc/erc-goodies.el (erc-scrolltobottom-mode)
(erc-scrolltobottom-enable, erc-scrolltobottom-disable)
(erc-move-to-prompt-mode, erc-move-to-prompt-enable)
(erc-move-to-prompt-disable): Use `erc-with-initialized-session' instead
of `erc-mode-hook'.
* lisp/erc/erc-imenu.el (erc-imenu-mode, erc-imenu-enable)
(erc-imenu-disable): Use macro instead of `erc-mode-hook'.
* lisp/erc/erc-stamp.el (erc-stamp-mode, erc-stamp-enable)
(erc-stamp-disable): Use macro instead of `erc-mode-hook'.
* lisp/erc/erc-track.el (erc-track-mode, erc-track-enable)
(erc-track-disable): Use macro instead of `erc-mode-hook'.
* lisp/erc/erc-truncate.el (erc-truncate-mode, erc-truncate-enable)
(erc-truncate-disable): Use macro instead of `erc-mode-hook'.
* lisp/erc/erc.el (erc--set-modules-functions): New variable, an
internal hook to modify erc-modules membership.
(erc-open): Set major mode before updating modules and run
`erc--set-modules-functions'.  (Bug#76019)
2026-06-30 20:27:04 -07:00
F. Jason Park 5d3fadb247 Use erc-match API for erc-desktop-notifications
* etc/ERC-NEWS: New entries for the `erc-match' API and notification
options.
* lisp/erc/erc-desktop-notifications.el
(erc-desktop-notifications-ignored-when-focused): New option.
(erc-desktop-notifications-skip-predicates): New option.
(erc-notifications-notify): Address ancient comment regarding PRIVP
parameter possibly being unneeded when the current target matches the
nick.
(erc-notifications-PRIVMSG): Deprecate.
(erc-desktop-notifications-untracked-p, erc-desktop-notifications-fool-p)
(erc-desktop-notifications-focused-p): New functions for
`erc-desktop-notifications-skip-predicates'.
(erc-notifications-notify-on-match): Account for new options, and use
new `erc-match' API.
(erc-notifications-mode, erc-notifications-enable)
(erc-notifications-disable): Instead of the "PRIVMSG" response-handler
hook, use the `erc-match' API.
(erc-desktop-notifications--setup): New function.
(erc-desktop-notifications--query-NOTICE-p): New variable.
(erc-desktop-notifications-match-query): New struct type.
(erc-desktop-notifications--query-p): New function.
(erc-desktop-notifications--query-notify): New function.
* test/lisp/erc/erc-desktop-notifications-tests.el: New
file.  (Bug#73798)
2026-06-30 20:27:04 -07:00
F. Jason Park 3c0fa74ca9 Introduce lower level erc-match API
* doc/misc/erc.texi (Match API): New node under the Advanced chapter.
Update menus.
* lisp/erc/erc-match.el (erc-match--opt-pat-cache): New variable.
(erc-match--opt-pat-custom-set): New function.
(erc-pals, erc-fools, erc-keywords, erc-dangerous-hosts): Specify
`erc-match--opt-pat-custom-set' as `custom-set' function.
(erc-pal-highlight-type, erc-fool-highlight-type)
(erc-dangerous-host-highlight-type): Add `nick-or-mention' variant.
(erc-match-functions): New option.
(erc-add-entry-to-list, erc-remove-entry-from-list): Clear options
cache.
(erc-match, erc-match-traditional, erc-match-opt-current-nick)
(erc-match-opt-keyword, erc-match-user, erc-match-opt-fool)
(erc-match-opt-pal, erc-match-opt-dangerous-host): New struct types.
(erc-match--opt-pat-get, erc-match--opt-pat-make)
(erc-match--opt-pat-make-kw, erc-match--opt-pat-make-addr-beg)
(erc-match--opt-pat-make-addr-end, erc-match--current-nick-p)
(erc-match--keyword-p, erc-match--user-nuh-or-mention-p): New functions.
(erc-match-highlight-by-part): New generic function and methods.
(erc-match-highlight-matched): New variable.
(erc-match--instances): New variable.
(erc-match-highlight): New function.
(erc-match-get-message-body): New function.
(erc-match-get-match): New function
(erc-match--run-match): New function.
(erc-match--message): New function.
(erc-match-use-legacy-logic-p): New variable.
(erc-match-message): Move body to `erc-match--message-legacy.  Rework as
thin wrapper.
(erc-match--message-legacy): New function with former body of
`erc-match-message'.
(erc-log-matches): Rework to be slightly less wasteful.
* test/lisp/erc/erc-match-tests.el (erc-match-tests--perform): Shadow
`erc-match--opt-pat-cache'.
(erc-match-message/pal/nick/legacy, erc-match-message/fool/nick/legacy)
(erc-match-message/dangerous-host/nick/legacy): New tests.
(erc-match-tests--hl-type-nick-or-mention): New function.
(erc-match-message/pal/nick-or-mention)
(erc-match-message/fool/nick-or-mention)
(erc-match-message/dangerous-host/nick-or-mention)
(erc-match-message/pal/message/legacy)
(erc-match-message/fool/message/legacy)
(erc-match-message/dangerous-host/message/legacy)
(erc-match-message/pal/all/legacy, erc-match-message/fool/all/legacy)
(erc-match-message/dangerous-host/all/legacy)
(erc-match-message/current-nick/nick-or-keyword/legacy)
(erc-match-message/keyword/keyword/legacy, erc-log-matches/legacy)
(ert-deftest erc-match--opt-pat-cache)
(erc-match-functions/api/non-parts-based)
(erc-match-functions/api/parts-based): New tests.
* test/lisp/erc/erc-scenarios-match-api.el: New file.
* test/lisp/erc/resources/match/functions/custom-match-log: New file.
* test/lisp/erc/resources/match/functions/custom.eld: New file.
(Bug#73798)
2026-06-30 20:27:04 -07:00
F. Jason Park f0e01e0d14 Make prefix-body boundary more detectable in ERC
* lisp/erc/erc-button.el
(erc-button--display-error-notice-with-keys-and-warn): Use utility for
skipping past first word.
* lisp/erc/erc-fill.el (erc-fill-wrap): Use new `erc--pfx' msg-prop
interface.
* lisp/erc/erc-goodies.el (erc--command-indicator-body-find): New
function.
(erc--command-indicator-display): Add `erc--pfx' function-valued msg
prop for moving past command-indicator prompt to start of body.  Stash
inserted prompt string in oneoff `erc--command-indicator' prop.
* lisp/erc/erc.el (erc--ensure-spkr-prop): Add `erc--pfx' msg prop for
finding the start of the message body after a speaker tag with the
`erc--speaker' text property.
(erc-display-message-highlight): Add `erc--pfx' functions for known
variants of the `erc-display-message' TYPE parameter, such as `notice'
and `error'.
(erc--ctcp-action-speaker-in-prefix-p): New variable.
(erc--pfx-skip-word-fwd, erc--pfx-skip-spkr-fwd)
(erc--pfx-skip-notice-fwd, erc--pfx-skip-template-fwd): New functions.
* test/lisp/erc/erc-tests.el (erc--pfx-skip-notice-fwd)
(erc--pfx-skip-template-fwd): New tests.  (Bug#73798)

;; test/lisp/erc/resources/fill/snapshots/merge-01-start.eld:
;; test/lisp/erc/resources/fill/snapshots/merge-02-right.eld:
;; test/lisp/erc/resources/fill/snapshots/merge-wrap-01.eld:
;; test/lisp/erc/resources/fill/snapshots/merge-wrap-indicator-pre-01.eld:
;; test/lisp/erc/resources/fill/snapshots/monospace-01-start.eld:
;; test/lisp/erc/resources/fill/snapshots/monospace-02-right.eld:
;; test/lisp/erc/resources/fill/snapshots/monospace-03-left.eld:
;; test/lisp/erc/resources/fill/snapshots/monospace-04-reset.eld:
;; test/lisp/erc/resources/fill/snapshots/spacing-01-mono.eld:
;; test/lisp/erc/resources/fill/snapshots/stamps-left-01.eld: Update.
2026-06-30 20:27:04 -07:00
F. Jason Park 500afb626c Add module example to ERC's documentation
* doc/misc/erc.texi: Add "Modules" section to the main detailed menu.
(Modules): Promote "Local Modules" and "Module Loading" subheadings to
sections and proper nodes.  Rename "Local Modules" to "Module Scope" but
retain anchor for compatibility.
(Module Example): New section under the Modules chapter.
2026-06-30 20:27:04 -07:00
F. Jason Park c86cec9202 Rename erc--with-dependent-type-match for clarity
* lisp/erc/erc-common.el (erc--with-dependent-type-match)
(erc--custom-with-type-match-features): Rename former to latter
to avoid confusion between actual Lisp types and Custom types.
* lisp/erc/erc-track.el (erc-track-faces-priority-list)
(erc-track-faces-normal-list): Use new name.

;; The problem this macro rather bluntly attempts to work around is
;; one of option values referencing symbols from libraries that
;; haven't been loaded.  A general solution might be possible were
;; it not for ERC's inconsistent face and option names.  Some don't
;; even reflect module aliases let alone their group or library,
;; e.g., `erc-pal-face'.  If they were someday properly namespaced,
;; this macro could be replaced with a custom :match function that
;; adds temporary advice :after-until
;;
;;   (compat-call plist-get (cdr (get 'face 'widget-type)) :match)
;;
;; It could then find the longest group name loaded by `cus-load'
;; that's a prefix of the face in question and then load the group's
;; `custom-loads' libraries (see `customize-read-group') with
;; `custom-load-symbol', all before trying `facep' again.
2026-06-30 20:27:04 -07:00
F. Jason Park 3b52f8f981 ; Add erc-stamp test for right-margin face
* test/lisp/erc/erc-scenarios-fill-wrap.el
(erc-scenarios-fill-wrap/right-margin-stamp-face--assert-superior): New
function.
(erc-scenarios-fill-wrap/right-margin-stamp-face): New test that fails
if the right-margin's timestamp doesn't display its face property
correctly.
* test/lisp/erc/resources/erc-scenarios-common.el
(erc-scenarios-common--run-in-term): Add control channel to run code
from the subprocess in the controlling process.
(erc-scenarios-common-term-with-line-mode): New macro.
(erc-scenarios-common--inferior-term-c2-proc): New variable.
(erc-scenarios-common-term-call-in-superior): New function.  (Bug#80693)
2026-06-30 20:27:04 -07:00
Juri Linkov b2177acb8c Fix prog-fill-reindent-defun to better handle an active region
* lisp/progmodes/prog-mode.el (prog--text-at-point-or-region-p):
New function (bug#63790, bug#81281).
(prog-fill-reindent-defun-default):
Use it instead of 'prog--text-at-point-p'.

* lisp/treesit.el (treesit-fill-reindent-defun):
Use it instead of 'prog--text-at-point-p'.
2026-06-30 18:52:41 +03:00
Juri Linkov d56e98592e Clicking mode line menus in inactive windows now switches the window
* lisp/bindings.el (mode-line-window-select): New function (bug#81178).
(x-pre-popup-menu-hook): Add it to 'x-pre-popup-menu-hook'.
2026-06-30 18:47:15 +03:00
Sean Whitton 5b9a4b8891 ; * lisp/vc/vc-dir.el (vc-dir-refresh): Use if-let*. 2026-06-29 16:09:44 +01:00
Sean Whitton fcbff4df7a Inline vc-dir-next-line after marking or unmarking
This fixes where point goes after using a marking or unmarking
command with point before the "./" entry.

* lisp/vc/vc-dir.el (vc-dir-mark-unmark, vc-dir-mark-file)
(vc-dir-unmark-file): Inline the relevant part of
vc-dir-next-line to skip the 'vc-dir--before-dotname-p'
conditional.
2026-06-29 11:26:09 +01:00
Sean Whitton c6fc5fbb7d ; vc-dir-next-line: Delete unneeded with-no-warnings. 2026-06-29 11:24:38 +01:00
Sean Whitton 62ec74e9ed VC pull/push: Consistently return and use process object
* lisp/vc/vc-hg.el (vc-hg--pushpull): Return the process object.
* lisp/vc/vc.el (vc-pull, vc-push): Use it.
(pull, push): Specify that it should be returned.
2026-06-29 11:14:05 +01:00
Sean Whitton f48072a700 ; Fix comment locations. 2026-06-29 10:51:06 +01:00
Sean Whitton 1c479143e3 vc-dir--set-vc-dir-process-buffer: Use setq-local
* lisp/vc/vc-dir.el (vc-dir--set-vc-dir-process-buffer): Use
setq-local.
2026-06-29 10:47:18 +01:00
Eli Zaretskii b24ed25b39 ; Update ldefs-boot.el. 2026-06-27 06:33:46 -04:00
Eli Zaretskii e53f0b4749 Merge from origin/emacs-31
b365ef37b9 Fix pixels-vs-columns confusion in margin face fill (bug#...
e0185b0907 Fix ISO date insertion in diary
3c9517300e ; Tag process-test-stderr-filter :unstable on emba
422bf36847 Minor fix for 'format-mode-line'
1381479572 Improve the previous fix in toggle-window-dedicated
2026-06-27 06:28:26 -04:00
Eli Zaretskii 4724964ad2 ; Merge from origin/emacs-31
The following commit was skipped:

f2c4c1029d VC-Dir: Fix removing empty directory entries
2026-06-27 06:28:26 -04:00
Eli Zaretskii b1dce84c0b Merge from origin/emacs-31
5d15b4522b Fix interactive spec of some commands bound on the mode line
2026-06-27 06:28:26 -04:00
Eli Zaretskii 6f6a33629e ; Merge from origin/emacs-31
The following commit was skipped:

e050c74581 vc-dir--count-outgoing: Bind enable-local-variables
2026-06-27 06:28:26 -04:00
Eli Zaretskii fd969ace83 Merge from origin/emacs-31
e486f2d975 Support tramp-rpc in filenotify-tests.el
f6a244333d ; * etc/NEWS: Presentational fixes and improvements.
c19e9ddd48 ; Improve documentation of 'emacs-lock' features
749ce42049 CC Mode: Set parse-sexp-lookup-properties for every mode
def15c1b97 Disable DMABUF and Compositing for xwidget
2c5b4911b3 ; * doc/lispref/commands.texi (Interactive Codes): More e...
ea87a99b84 ; Fix recent improvements in docs of splitting and mergin...
0ec6a3fd44 Fix failure code in 'run-hook-query-error-with-timeout'
72b8d88171 Use default-value in project--value-in-dir
b34952ee94 etags-regen--maybe-generate: No error when no project found
30fc250a26 ; * doc/lispref/frames.texi (Deleting Frames): Fix typo i...
8679bdf081 Mark ChangeLog entry as tiny change
070a3a356f VC revert: When un-adding, clear vc-backend property
c8a86c1561 ; make change-history-commit
884d7a198c Document new option 'delete-frame-choose-selected' (Bug#8...
f0bfa33039 Document 'split-frame' and 'merge-frames' in Elisp manual
0d67e76b94 Eglot: release version 1.24
f52457d17e Jsonrpc: release version 1.0.29
4f6b6f462c jsonrpc-shutdown: Ensure we wait whole timeout & increase...

# Conflicts:
#	etc/NEWS
2026-06-27 06:28:20 -04:00
Lin Sun 6ef0e6ba1a Send systemd notification after 'kill-emacs-hook'
* src/emacs.c (kill-emacs): Send systemd STOPPING notification only
after calling 'kill-emacs-hook', because that hook could prevent
Emacs from exiting.  (Bug#81296)
2026-06-27 12:15:22 +03:00
James Cherti a57a3fd1ab Set 'tab-width' to 2 in 'yaml-ts-mode'
* lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode): Set 'tab-width'
to 2 locally, as YAML conventionally uses 2 space indentation.
(Bug#81257)
2026-06-27 12:02:31 +03:00
Sean Whitton 5995c27abb ; Fix last change. 2026-06-26 15:52:38 +01:00
Sean Whitton 9f16375426 Refresh VC-Dir headers after pull or push
* lisp/vc/vc-dir.el (vc-dir--buffers-dolist): New macro,
factored out.
(vc-dir-resynch-file): Use it.
(vc-dir--refresh-headers): New function.
* lisp/vc/vc.el (vc-pull, vc-push): Use it.
2026-06-26 15:51:46 +01:00
Sean Whitton 268e055e05 Limit VC-Dir status process output processing
* lisp/emacs-lisp/ewoc.el (ewoc--set-buffer-bind-dll-let*): New
debug declaration.
(ewoc-set-hf): Make it possible to set only the header or
footer.
* lisp/vc/vc-dir.el (vc-dir--set-header): New RESET-FOOTER
parameter.
(vc-dir-refresh): Pass it.
(vc-dir-process-output-limit): New variable.
(vc-dir-show-more-button)
(vc-dir-maybe-narrow-and-show-more-button): New functions.
* lisp/vc/vc-bzr.el (vc-bzr-dir-status-files):
* lisp/vc/vc-cvs.el (vc-cvs-dir-status-files):
* lisp/vc/vc-git.el (vc-git-dir-status-goto-stage):
* lisp/vc/vc-hg.el (vc-hg-dir-status-files):
* lisp/vc/vc-svn.el (vc-svn-dir-status-files): Preserve a
binding of vc-dir-process-output-limit in the delayed process.
Call vc-dir-maybe-narrow-and-show-more-button.
* lisp/vc/vc.el (dir-status-files):
* etc/NEWS: Document the change.
2026-06-26 14:53:13 +01:00
Sean Whitton 8eeb817498 ; * test/lisp/vc/vc-tests/vc-test-misc.el: Fix compilation warnings. 2026-06-26 14:20:03 +01:00
Sean Whitton 35d71606c2 vc-region-history: Respect vc-buffer-overriding-fileset
* lisp/vc/vc.el (vc-region-history): Respect
vc-buffer-overriding-fileset.
2026-06-26 10:26:22 +01:00
Sean Whitton 98f3bfe7e1 Factor out vc-dir--set-vc-dir-process-buffer
* lisp/vc/vc-dir.el (vc-dir--set-vc-dir-process-buffer): New
function, factored out.  Also set vc-parent-buffer in the
vc-dir-process-buffer.
(vc-dir-refresh-files, vc-dir-refresh): Use it.
2026-06-25 17:59:51 +01:00
Stephen Berman e0327f3454 VC Dir: don't mark directories with marked files (bug#81277)
* lisp/vc/vc-dir.el (vc-dir-mark-all-files): When called on a
directory entry that is marked, remove the mark.
(vc-dir-unmark-file): When called on a file, at least one of whose
ancestors (i.e. containing directory entries) is marked, unmark
the nearest such ancestor and mark all descendents of that
directory that are file entries, except the file entry on which
the command is called, and leave the descendents that are
directory entries unmarked.

* test/lisp/vc/vc-tests/vc-test-misc.el (vc-test-vc-dir-next/previous)
(vc-test-vc-dir-mark/unmark-all-dir-entry): Add bug number reference.
(vc-test-vc-dir-mark-all-with-marked-directory): New test.
(vc-test--vc-dir-unmark-file): New function.
(vc-test-vc-dir-unmark-file-with-marked-directory): Use it in this
new test.
2026-06-25 18:58:47 +02:00
Sean Whitton 69b9018ed6 VC-Dir: Fix removing empty directory entries
* lisp/vc/vc-dir.el (vc-dir-update): New CLEAR-OTHERS parameter.
(vc-dir-refresh-files): Use it instead of calling ewoc-filter
ourselves.
2026-06-25 17:53:34 +01:00
Sean Whitton 13ce6f3083 Make vc-dir-hide-state ignore the states of directory entries
* lisp/vc/vc-dir.el (vc-dir-hide-state): Don't consider
directory entries when removing based on state.
(vc-dir-refresh-files): Remove old workaround.
2026-06-25 17:40:08 +01:00
Stephen Berman b66c995d5f Improve 'vc-dir-unmark-all-files' (bug#81249)
* lisp/vc/vc-dir.el (vc-dir-unmark-all-files): Confine the scope
of this command, when called on a VC Dir directory entry, to the
immediate child files of that directory.  This is in accordance
with the command's doc string and makes it behave analgously to
'vc-dir-mark-all-files', whose behavior was change to be like this
much earlier.

* test/lisp/vc/vc-tests/vc-test-misc.el
(vc-test-vc-dir-mark/unmark-all-dir-entry): New test.
2026-06-25 18:05:02 +02:00
Stephen Berman 5e28bcb2d8 Improve vc-dir-next-* commands (bug#81248)
* lisp/vc/vc-dir.el (vc-dir--before-dotname-p): New function.
(vc-dir-next-line, vc-dir-next-directory): Use it to enable using
these commands to move point to the VC Dir root directory entry "./".

* test/lisp/vc/vc-tests/vc-test-misc.el
(vc-test-vc-dir-next/previous): New test.
2026-06-25 17:39:45 +02:00
Filipp Gunbin c9da3c1a5e 'insert-directory': Make 'ls' error buffer read-only
* lisp/files.el (insert-directory): Set 'buffer-read-only' to t
for buffer "*ls error*", since it is only an informational buffer,
and let-bind 'inhibit-read-only' to t to write any 'ls' error
message to it (bug#80499, Message #230 and followups).
2026-06-25 11:48:12 +02:00
Eli Zaretskii 5a110cad82 ; * doc/lispref/elisp.texi (Top): Update @detailmenu. 2026-06-25 10:11:16 +03:00
Andrew Hyatt bd064471e6 New package uuid.el
* lisp/emacs-lisp/uuid.el: New file.
* test/lisp/emacs-lisp/uuid-tests.el: New tests.
* doc/lispref/processes.texi (UUIDs): New section.
2026-06-25 10:09:50 +03:00
Juri Linkov e2abbab680 Add safeguard to 'set-variable' (bug#81244)
* lisp/simple.el (set-variable): Add check with 'boundp'
before using 'symbol-value'.  This helps in rare cases
when used on an undefined variable name.
2026-06-24 18:23:30 +03:00
Juri Linkov 33a9d230ee Update momentary message in isearch-toggle-invisible
* lisp/isearch.el (isearch-toggle-invisible):
Improve wording of message (bug#81287).
2026-06-24 18:19:07 +03:00
Sean Whitton d5a10ea708 * lisp/vc/vc-dir.el (vc-dir-mark-some-files): New function. 2026-06-24 13:24:15 +01:00
Michael Heerdegen 97d9f7df24 ; Fix defcustom of byte-compile-warnings
* lisp/emacs-lisp/bytecomp.el (byte-compile-warnings):
Fix :type.  (Bug#81226)
2026-06-24 01:25:41 +02:00
Sean Whitton b8b52458c0 ; markdown-ts--table-delimiter-cell-subtypes: Fix long line. 2026-06-23 15:17:49 +01:00
Stéphane Marks e84f48e5e4 markdown-ts-mode: Fix abutting table detection (bug#81199)
Correct for navigating between empty table cells which should be
respected rather than treated as blanks to skip.

* lisp/textmodes/markdown-ts-mode.el (markdown-ts--table-abutting-pos):
Fix to directly detect being in a table rather than inferring it.
2026-06-23 15:17:07 +01:00
Joshua Murphy 4b61c48986 with-output-to-temp-buffer: Call delete-all-overlays.
* lisp/subr.el (with-output-to-temp-buffer): Call
delete-all-overlays (bug#81284).

Copyright-paperwork-exempt: yes
2026-06-23 14:01:31 +01:00
Sean Whitton 3ca168b80a Merge from origin/emacs-31
eb814fbb5c vc-hg-state-slow: Run from the repository root
3660bd3eb4 vc-dir-delete-file: Call vc-delete-file on FILESET-ONLY-F...
a3a72ae355 Fix 'truncate-string-pixelwise' to restore the window buffer
b684922900 Restore progress-reporter suffix as update-text (bug#81134)
e182c704c7 Rename recently added after-delete-frame-select-mru-frame
e47bd3070a Eglot: decode unhexed file URI paths as UTF-8 (bug#79897)
e940326250 ; * etc/NEWS: Mention limitation of diff-apply-buffer.
25084664ba Sync with Tramp 2.8.2
7be92efa5e Rename variable to macroexp-enable-preserve-posification
2066a0c9e8 New variable 'macroexp-enable-pos-preservation' (bug#79599)
00c290be85 Avoid infinite loop in some Dired marking commands

# Conflicts:
#	etc/NEWS
2026-06-23 11:54:46 +01:00
Stefan Monnier eba26e9489 buffer.c: Don't involve the redisplay if the overlay has no proprties
* src/buffer.c (drop_overlay, Fmove_overlay): Test overlay's
plist before calling `modify_overlay`.
2026-06-22 12:46:50 -04:00
Michael Albinus dcdd76f89e Use default exec-suffixes when needed (bug#81280)
* lisp/files.el (executable-find): Use (default-value 'exec-suffixes).

* src/callproc.c (Qexec_suffixes): Declare.
(call_process):
* src/process.c (Fmake_process): Use Fdefault_value (Qexec_suffixes).

* test/lisp/files-x-tests.el (files-x-test--variables6):
New defconst.
(files-x-test-connection-local-special-variables): New test.
2026-06-22 18:30:53 +02:00
Stefan Monnier 51c21cb729 keyboard.c (Finsert_special_event): Remove redundant test
* src/keyboard.c (Finsert_special_event): Remove redundant test.
(kbd_buffer_get_event): Simplify.
2026-06-22 12:18:34 -04:00
Stefan Monnier c7b156dce3 gv.el: Allow use of ignore as a place (bug#81217)
* lisp/emacs-lisp/gv.el (error): Delete redundant `gv-expander` definition.
(ignore): Add a setter.
* doc/lispref/functions.texi (Calling Functions): Document `ignore`
as a place.
* lisp/xdg.el (xdg-mime-collect-associations): Silence compiler warning.
2026-06-22 12:13:36 -04:00
Sean Whitton 4797eef57a vc-dir--count-outgoing: Bind default-directory to correct value
* lisp/vc/vc-dir.el (vc-dir--count-outgoing): Bind
default-directory to the correct value in the idle callback, so
that we know we count the outgoing revisions for the correct
repo.
2026-06-22 15:14:18 +01:00
Sean Whitton ced965f7c4 vc-dir--count-outgoing: Use run-with-idle-timer
* lisp/vc/vc-dir.el (vc-dir--count-outgoing): Wrap calling
vc-incoming-outgoing-internal in a run-with-idle-timer, and put
the timer in the 'timer' overlay property.
(vc-dir-async-header-values): Document 'timer' overlay property.
(vc-dir--set-header): Cancel timers in the 'timer' overlay
property.
2026-06-22 13:27:31 +01:00
Wilson Snyder b3574e6464 verilog-mode: Update from upstream; fix incorrect indentation when using local.
* lisp/progmodes/verilog-mode.el: Fix incorrect indentation when using the
local keyword.  Reported by Nikolay Puzanov.
2026-06-21 22:30:31 -04:00
Eli Zaretskii 5ab3553e70 Fix 'rmail-revert' with non-ASCII characters in email messages
* lisp/mail/rmail.el (rmail-revert): Don't convert the buffer to
multibyte, it should remain unibyte for the revert to DTRT.
2026-06-21 18:00:51 +03:00
Protesilaos 107dfb4db8
Update modus-themes to version 5.3.0
* doc/misc/modus-themes.org: Rewrite the manual in the interest
of clarity and consistency.

* etc/themes/modus-operandi-deuteranopia-theme.el:
* etc/themes/modus-operandi-theme.el:
* etc/themes/modus-operandi-tinted-theme.el:
* etc/themes/modus-operandi-tritanopia-theme.el:
* etc/themes/modus-vivendi-deuteranopia-theme.el:
* etc/themes/modus-vivendi-theme.el:
* etc/themes/modus-vivendi-tinted-theme.el:
* etc/themes/modus-vivendi-tritanopia-theme.el: Update the theme files.

* etc/themes/modus-themes.el: Refine existing faces, add support
  for new faces, and make improvements to helper functions.

Release notes: <https://protesilaos.com/codelog/2026-06-21-emacs-modus-themes-5-3-0/>.
2026-06-21 16:37:43 +03:00
Zhengyi Fu e13fb667a2 Support OSC 8 hyperlinks in man pages
* lisp/man.el: Require `ansi-osc'.
(Man-ansi-osc-handlers): New variable.
(Man-fontify-manpage): Call ansi-osc-apply-on-region to buttonize
OSC 8 hyperlinks.  (Bug#81240)

* etc/NEWS: Announce the new feature.
2026-06-21 08:55:30 +03:00
Stéphane Marks cc78db98f1 ; Backward compatibility for variables set via 'setopt--set-local' (bug#81120)
Ensure that buffer locals are set despite setters not supporting
'buffer-local (signaling an error is too heavy handed).

* lisp/cus-edit.el (setopt--set-local): If the defcustom setter
does not support 'setopt-local', warn and set the buffer local.
2026-06-21 08:50:44 +03:00
Andrea Alberti 0ff6ee371f Fix :align-to 'center' when line numbers are displayed
When line numbers are shown, 'center' was computed as the center of the
whole text area, which includes the line-number display, so it landed
half the line-number width too far to the right.  Center it on the
editable text area instead.  (Bug#81275)
* src/xdisp.c (calc_pixel_width_or_height): Correct the adjustment of
'center' for line-number display, so 'center' is the center of the
editable part of the text area.

* doc/lispref/display.texi (Pixel Specification): Say that 'center'
denotes the center of the editable text area.
2026-06-21 08:44:59 +03:00
Andrea Alberti 5e48f10685 Fix :align-to when a number precedes a window element
* src/xdisp.c (calc_pixel_width_or_height): Track the line-number
width in a new LNUM_ADDED argument instead of overloading *ALIGN_TO,
so it is counted once and a window element following a numeric term is
still recognized.  (Bug#81253)
(produce_stretch_glyph, display_min_width): Pass the new argument.
2026-06-21 08:40:51 +03:00
Manuel Giraud 9195e692ea Fix display of overlay arrow in margin
Follow-up on bug#81109.
* src/xdisp.c (get_overlay_arrow_glyph_row): Add a parameter to
select the base face.
(display_line): Use it to default to margin face for drawing
overlay arrow in margin.  Also fix placement calculation.
2026-06-21 08:36:48 +03:00
Eli Zaretskii 4cfcf6ac67 Merge from origin/emacs-31
e78a0fc9f4 Resurrect effect of 2nd arg t in 'format-mode-line'
2026-06-20 07:20:28 -04:00
Eli Zaretskii 6505ac5c94 Merge from origin/emacs-31
3eb124692d Fix 'format-mode-line' for integer second argument
2026-06-20 06:33:53 -04:00
Eli Zaretskii 2ba2024558 Merge from origin/emacs-31
4f1af6fa6e ; * doc/lispref/commands.texi (Interactive Codes): Clarif...
75cd277198 markdown-ts-mode: fix code block and table overlays (bug#...
ae69929472 ; Improve code comment and 'winner-redo' docstring (bug#8...
ca7c8208b7 markdown-ts-mode: Fix computing code block current region...
c3bc049549 Eglot: add 'nu-ts-mode' as a nushell major mode
c0a33a474d Fix c-ts-mode bsd-style indentation of union bodies (bug#...
9d1b0c2d7f Fix markdown-inline incremental parsing issue (bug#81019)
a94a33827b Avoid an unusual error when visiting a directory in Dired
b6e7962700 Fix "diff-apply-buffer applies to the wrong file"
14bf2a707c Fix thinko in 'set-frame-size-and-position' (Bug#81193)
050ca1a40f ; Remove NS port toolbar styling code (bug#80307)
2ac289d096 Correct default native-comp tests
a25cf2b986 Revert "Fix the Android build"
a6f5437110 (comint--intersect-regions): Fix bug#81243
ea09986dae ; * lisp/window.el (display-buffer): Fix doc-string typo.
7b4e12b51c ; * lisp/help.el (temp-buffer-resize-mode): Fix doc-strin...
a8da2d20d0 ; * src/keyboard.c (Finsert_special_event): Fix quotes.
df60bad165 Update to Org 9.8.6
d48977dea8 src/keyboard.c (Finsert_special_event): Don't ignore unkn...
669e93ec5d Eglot: restore compatibility to Emacs 26.3
2026-06-20 06:26:29 -04:00
Joshua Murphy 3e0915c688 ; * etc/NEWS: Document 'newsticker-treeview-copy-url' (bug#81013).
Copyright-paperwork-exempt: yes
2026-06-20 13:11:07 +03:00
Joshua Murphy dc6287d113 Add function to copy url of newsticker item
* lisp/net/newst-treeview.el (newsticker-treeview-copy-url):
Allow copying selected url.
(newsticker-treeview-mode-map): Add binding.  (Bug#81013)

Copyright-paperwork-exempt: yes
2026-06-20 13:08:51 +03:00
Morgan Willcock 9f61797da5 Accept file:// scheme in 'mml-expand-html-into-multipart-related'
* lisp/gnus/mml.el (mml-expand-html-into-multipart-related):
Accept URLs which both use a file:// scheme and have an empty host
component.  These URLs describe absolute local file names and are
the only format accepted by 'url-generic-parse-url' which can
contain a Windows driver letter.  (Bug#81250)
2026-06-20 11:37:11 +03:00
kobarity d0087b3346 Sanitize sys.path when executing Python import management
* lisp/progmodes/python.el (python--list-imports): Add
sanitizing sys.path.
(python--run-module): New constant.
(python--do-isort, python-fix-imports): Use it.  (Bug#70440)
2026-06-20 11:10:23 +03:00
Paul Nelson 29c44e61c5 Fix VC Git patch check-in for sparse checkouts
* lisp/vc/vc-git.el (vc-git--with-temp-index): New macro.  Pass
the temporary index through 'file-local-name' when setting
GIT_INDEX_FILE.
(vc-git--stash-staged-changes): Use it.  This fixes a Tramp bug:
GIT_INDEX_FILE was previously set to the full remote name of the
temporary index, which the remote Git process cannot use.
(vc-git--checkin): Prepare git apply --3way with a temporary
GIT_INDEX_FILE, so that sparse checkout errors from out-of-cone
untracked files do not leave the user's index partially
modified.  (Bug#80951)
* test/lisp/vc/vc-git-tests.el: Require log-edit.
(vc-git-test-checkin-patch-sparse-checkout): New test.
2026-06-19 16:02:57 +01:00
Sean Whitton b49da1b7e0 vc-git, vc-hg log outgoing: Avoid unnecessary mergebase calls
* lisp/vc/vc.el (vc-standard-log-outgoing): New function.
(vc-default-log-outgoing):
* lisp/vc/vc-git.el (vc-git-log-outgoing):
* lisp/vc/vc-hg.el (vc-hg-log-outgoing): Use it.
2026-06-19 16:01:44 +01:00
Sean Whitton 08f02cbae0 VC-Dir shows key binding hints
* lisp/vc/vc-dir.el (vc-dir-key-binding-hint-label): New
defcustom.
(vc-dir-headers): Show key binding hints (bug#81190).
* etc/NEWS: Document the change.
2026-06-19 15:50:32 +01:00
Sean Whitton 4470996198 * lisp/vc/vc-hg.el (vc-hg-previous-revision): Use 'hg log'.
'hg id' is much slower than 'hg log'.
2026-06-19 11:08:33 +01:00
Stefan Monnier 6f2cc5417f gv.el (cond): Emit a warning if there's no default branch
* lisp/emacs-lisp/gv.el (gv--cond-expander): New function, extracted
from the `gv-expander` of `cond`.
(cond) <gv-expander>: Use it, and add a warning for missing default branch.
2026-06-18 11:49:18 -04:00
Eli Zaretskii f188e34d81 ; (visual-wrap-tests/line-numbers-align-to-wrap-prefix): Simplify. 2026-06-18 11:48:44 +03:00
Aaron Jensen 5b8496400a ; Make visual-wrap-tests work in interactive sessions
* test/lisp/visual-wrap-tests.el (visual-wrap-tests--wrap-prefix)
(visual-wrap-tests--string-with-properties): New wrapper
functions.
(visual-wrap-tests/simple, visual-wrap-tests/safe-display)
(visual-wrap-tests/unsafe-display/within-line)
(visual-wrap-tests/wrap-prefix-stickiness)
(visual-wrap-tests/cleanup)
(visual-wrap-tests/negative-extra-indent): Use the wrappers
instead of hard-coded pixel values.
(visual-wrap-tests/line-numbers-align-to-wrap-prefix): Don't skip
on TTY frames in interactive sessions.  (Bug#81253)
2026-06-18 11:46:51 +03:00
Eli Zaretskii d0b693e3e9 ; Fix last change
* src/xdisp.c (calc_pixel_width_or_height): Improve commentary.
(Bug#81253)
2026-06-17 16:17:03 +03:00
Aaron Jensen e0f3a4d4b2 Fix :align-to when line numbers are displayed
* src/xdisp.c (calc_pixel_width_or_height): Don't account for the
line-number display more than once.  (Bug#81253)

* test/lisp/visual-wrap-tests.el
(visual-wrap-tests/line-numbers-align-to-wrap-prefix): New test.
2026-06-17 16:14:13 +03:00
Martin Rudalics 6f27a2edba Fix ‘read-minibuffer-restore-windows’ and 'focus-follows-mouse' behaviors
* src/window.c (Fset_window_configuration): When
'focus-follows-mouse' equals 'auto-raise', explicitly select the
frame and set its input focus if necessary.
(restore_focus_frame): New function.
* src/window.h (restore_focus_frame): Add declaration.
* src/minibuf.c (read_minibuf): Restore frame focus also when
'read-minibuffer-restore-windows' is nil.
* src/xterm.c (x_focus_frame): Don't use window manager activation
when 'focus-follows-mouse' equals 'auto-raise'.
2026-06-15 11:27:51 +02:00
Manuel Giraud ca44dce1ec In Edebug, don't setup a margin for fringe users
* lisp/emacs-lisp/edebug.el (edebug--display-1): Prevent setting
up a left margin when the user already has a left fringe.
(Bug#81109)
2026-06-14 12:38:58 +03:00
Stefan Monnier 233b00a683 Don't load diff-mode so eagerly (bug#81222)
* .dir-locals.el (diff-add-log-use-relative-names): Move to `diff-mode`.

* lisp/vc/vc-git.el: Don't require `diff-mode`.
(vc-git-region-history-mode-map): Don't set the keymap parent yet.
(vc-git-region-history-font-lock): Declare `diff-font-lock-keywords` to
silence the compiler warning.
(vc-git-region-history-mode): Require `diff-mode` and set the keymap
parent here.
2026-06-13 13:22:49 -04:00
Matthew Batson 0bc48084fb ; Improve doc string of electric-indent internal
* lisp/electric.el (electric-indent--activate-indent-actions): Doc
string fix.
2026-06-13 10:20:51 -07:00
Paul Eggert fa41113380 ; Further improve electric quote doc
This is mostly by adding brevity.
2026-06-13 10:20:51 -07:00
Matthew Batson 9208a1bdd2 ; Improve doc strings of electric.el user options
Change suggested by Richard Stallman in:
https://lists.gnu.org/r/emacs-devel/2026-06/msg00232.html

* lisp/electric.el (electric-indent-actions, electric-indent-chars)
(electric-indent-functions, electric-indent-inhibit)
(electric-layout-rules, electric-layout-allow-duplicate-newlines)
(electric-layout-allow-in-comment-or-string, electric-quote-comment)
(electric-quote-string, electric-quote-chars, electric-quote-paragraph)
(electric-quote-context-sensitive, electric-quote-replace-double)
(electric-quote-replace-consecutive, electric-quote-inhibit-functions)
(electric-quote-mode): Clarify in doc strings the effects, from the
user's point of view, of electric-indent-mode's, electric-layout-mode's,
and electric-quote-mode's user-facing options.
2026-06-13 10:20:51 -07:00
Matthew Batson d22d2ea4c8 ; * lisp/electric.el (electric-indent-can-reindent-p): Fix typo. 2026-06-13 10:20:51 -07:00
Eli Zaretskii 4a86a530de Merge from origin/emacs-31
498eafb4f1 ; * lisp/help.el (temp-buffer-resize-mode): Doc fix (bug#...
19a7d4ce7c Fix behavior of 'temp-buffer-resize-mode' (Bug#81207)
927a7fff5e Restore public interfaces for accessing built-in package ...
ea3d78898a Allow uninstalling dependency with multiple installations
4a3d5b110e Fix memcpy size in 'merge_faces'
2026-06-13 06:16:54 -04:00
Eli Zaretskii 283fad1d47 ; * etc/NEWS: Fix formatting. 2026-06-13 11:53:15 +03:00
Manuel Giraud 15e5f404f0 Optional display of overlay-arrow in margin (bug#81109)
* lisp/emacs-lisp/edebug.el (edebug-prepare-margin): New
function to set up left margin for Edebug.
(edebug--display-1): Use it.
* src/xdisp.c (display_line): Try to use left margin to display
overlay arrow and fallback to the text area otherwise.
* doc/lispref/display.texi (Overlay Arrow):
* doc/lispref/edebug.texi (Using Edebug):
* doc/emacs/building.texi (Debugger Operation): Document the
change.
* etc/NEWS: Announce the change.
2026-06-13 11:51:27 +03:00
Pip Cet 90de836831 Unbind specpdl when leaving replace-region-contents (bug#81169)
* src/editfns.c (Freplace_region_contents): Call SPECPDL_INDEX before
code_conversion_save adds specpdl entries.
2026-06-12 16:19:37 +00:00
Paul Eggert f5cb95423e replace-region-contents malloc fallback
* src/editfns.c (Freplace_region_contents): If the temporary
storage is so large that malloc fails, do not signal an error.
Instead, fall back on destructive replacement.
2026-06-12 14:07:51 +00:00
Paul Eggert 90f25503d8 Refactor replace-region-contents init
* src/editfns.c (Freplace_region_contents):
Make it more obvious that everything fits.
2026-06-12 14:07:51 +00:00
Paul Eggert 09047cde59 Speed up replace-region-contents memory allocation
* src/editfns.c (Freplace_region_contents):
Coalesce three SAFE_ALLOCAs into one.
2026-06-12 14:07:51 +00:00
Pip Cet 565639eb32 Simplify character comparisons in Freplace_region_contents
We expect 'compareseq' to call 'buffer_chars_equal' very often, so
it's worth it to use some memory and make it as fast as possible.

* src/editfns.c (EXTRA_CONTEXT_FIELDS): Drop buffer, beg, and unibyte
fields; add arrays of character codes stored as C ints.
(Freplace_region_contents): Generate such arrays from the two regions
to be compared.
(buffer_chars_equal): Compare array elements instead of buffer
characters.
2026-06-12 14:07:51 +00:00
Dmitry Gutov 568a435af9 * lisp/progmodes/project.el (project-vc-dir): Add clarifying comment. 2026-06-12 06:28:10 +03:00
Dmitry Gutov 87133286d6 Revert "project-vc-dir: Use truenames"
This reverts commit 1d91d9b717.
2026-06-12 06:20:12 +03:00
Dmitry Gutov d813a8bf98 Revert "* lisp/progmodes/project.el (project-vc-dir): Make interactive-only."
This reverts commit 4c12da0888.
2026-06-12 06:17:16 +03:00
Dmitry Gutov 6370b66a87 Revert "; * lisp/progmodes/project.el (project-vc-dir): Fix docstring."
This reverts commit d0653b46f6.

Given the examples in
https://lists.gnu.org/archive/html/emacs-devel/2026-06/msg00276.html
it's clear that there is no consensus on using canonical names here.
2026-06-12 06:13:42 +03:00
Paul H. McClelland 78a10d17c6 Convert outline-search-function to defcustom
Make 'outline-search-function' a user option with named choices for
its predefined values, so users can configure it via Customize.
Preserves existing docstring and runtime semantics (bug#81053).

* lisp/outline.el (outline-search-function): Convert to defcustom.
* etc/NEWS: Announce it.
2026-06-11 20:47:40 +03:00
Paul Hsin-ti McClelland 194c28aaf2 Add outline-search-from-regexp generic helper
Add outline-search-from-regexp generic helper (bug#80887)

Minor modes and third-party packages that customize 'outline-regexp'
typically need an 'outline-search-function' implementation that
searches for 'outline-regexp' anchored at beginning of line.  Without
a generic helper, each such user reinvents the function locally.
Add it to outline.el.

This pattern has been in production use as a default value of
'outline-search-function' (set via 'setq-default') without issues.

* lisp/outline.el (outline-search-from-regexp): New function.
* etc/NEWS: Announce it.
2026-06-11 20:42:29 +03:00
James Cherti b079716674 Document outline-show-entry-and-parents in the Emacs manual
* doc/emacs/text.texi (Outline Visibility): Document the new
'outline-show-entry-and-parents' command and its 'C-c C-e' keybinding.
(Foldout): Update the Foldout example to reference the new command
(bug#79286).
2026-06-11 20:38:37 +03:00
Sean Whitton 0cef3ee64b ; Merge from origin/emacs-31
The following commits were skipped:

2c6a03b08c Fix fontification in short unintegrated changes logs (bug...
7b23e17eb8 * lisp/vc/vc.el (vc-log-remote-unintegrated): Set vc-log-...
2026-06-11 16:12:15 +01:00
Sean Whitton 5c85d3f59d Merge from origin/emacs-31
ffa25543a1 vc-hg-trunk-or-topic-p, vc-hg-topic-outgoing-base: Fix re...
fe45d875a4 ; Fix last Tramp change
2026-06-11 16:12:15 +01:00
Sean Whitton ba13312811 ; Merge from origin/emacs-31
The following commit was skipped:

133c79b6bc markdown-ts-mode: Sanitize work-buffer pool
2026-06-11 16:12:15 +01:00
Sean Whitton f836632aee Merge from origin/emacs-31
f89ff62367 Extend Tramp external operations
4dea6ea36b markdown-ts-mode: fix duplicated menu entries (bug#81201)
9cad2da66e ; Fix last change.
cd84bd6a0c vc-dir-recompute-file-state: Change directory to DEF-DIR
47bdbc8d85 Restore "interactive" when describing functions
1a5d9a4be3 Inhibit follow-link via `mouse-1' on the tab-bar (bug#81036)
c94d58ddbf Fix the tab close button appearance when clicking (bug#76...
a21614d4d6 ; Skip one vc-dir test on MS-Windows
abddd2075a ; Fix last change to vc-dir-recompute-file-state.
89bda8736a Install images with info documentation (bug#81204)
466789b511 vc-dir-recompute-file-state: Return nil state for nonexis...
2026-06-11 16:12:15 +01:00
Sean Whitton cda9d9c733 Fix fontification in short unintegrated changes logs (bug#81215)
* lisp/vc/vc.el (vc-log-view-type): Replace with ...
(vc-log-view-types): ... this.  All uses changes.
(vc-log-remote-unintegrated): Newly pass a value for the log
view types.  This matters for Hg repositories.
(vc-print-log-internal): Ensure log view types always contains
either 'long' or 'short'.
(vc-root-log-incoming, vc-root-log-outgoing, vc-log-search):
* lisp/vc/vc-dir.el (vc-dir--count-outgoing): Pass both
log-incoming/log-outgoing/log-search and short/long for the log
view types.  This is necessary because these functions don't
call vc-print-log-internal.  This will need to be refactored
when implementing the new fileset-specific vc-log-incoming and
vc-log-outgoing.
2026-06-11 14:34:13 +01:00
Boris Buliga 8486669e37 Disable one-time-code AutoFill heuristics in Emacs.app
* nextstep/templates/Info.plist.in: Set
NSAutoFillRequiresTextContentTypeForOneTimeCodeOnMac to true.

Copyright-paperwork-exempt: yes
2026-06-11 12:17:22 +01:00
Eli Zaretskii 51703705e7 ; Fix last change
* etc/NEWS:
* doc/lispref/variables.texi (Creating Buffer-Local): Improve
wording of last change's documentation.  (Bug#81111)
2026-06-11 10:41:48 +03:00
Stéphane Marks c6c4888ced 'work-buffer--release' kill locals silently and reset the buffer (bug#81111)
This change helps ensure that work buffers are "clean" for reuse
by arbitrary callers.

* lisp/emacs-lisp/subr-x.el (work-buffer--release): Call
'kill-all-local-variables' with KILL-PERMANENT 'reset.
* src/buffer.c (Fkill_all_local_variables): If KILL-PERMANENT is
'permanent-local, kill all locals without prejudice.  If
KILL-PERMANENT is 'reset, also call 'reset_buffer'.
* test/lisp/emacs-lisp/subr-x-tests.el
(subr-x-with-work-buffer-locals-killed): New test.
* doc/lispref/variables.texi: Update 'kill-all-local-variables'
documentation.
* etc/NEWS: Announce the change to 'kill-all-local-variables'.
2026-06-11 10:34:44 +03:00
Eli Zaretskii 1c17d2a045 ; * lisp/cus-edit.el (setopt-local-type-mismatch): Another doc-string fix. 2026-06-11 09:29:48 +03:00
Eli Zaretskii 378c4a3d49 ; Fix last change
* etc/NEWS:
* lisp/cus-edit.el (setopt-local-type-mismatch): Improve wording
of documentation in last change.  (Bug#81120)
2026-06-11 09:28:15 +03:00
Stéphane Marks 725120ca3d Set user options in file/directory locals like 'setopt-local' (bug#81120)
This ensures defcustom ':set' functions are invoked.  The new
user option 'setopt-local-type-mismatch' can prompt users to
accept or discard type-mismatched values or to always accept or
discard such values.

* lisp/cus-edit.el (setopt-local-type-mismatch): New defcustom.
(setopt--set-local): Consult setopt-local-type-mismatch.
* lisp/files.el (hack-one-local-variable): Detect a custom
variable and call 'setopt--set-local'.
* etc/NEWS: Announce the change.
2026-06-11 09:17:52 +03:00
Dmitry Gutov 6e67ac222b * src/xterm.c: (x_suspend_background_fills): Improve commentary. 2026-06-11 07:56:18 +03:00
James Cherti 8decb653ff Fix outline-end-of-subtree at end of buffer
When a subtree is at the end of the buffer and followed by a
newline, flagging the subtree as invisible incorrectly swallows
the final newline.

* lisp/outline.el (outline-end-of-subtree): Check for eobp
to ensure the function steps back over the final newline when
the subtree ends at the end of the buffer (bug#80917).
2026-06-10 18:54:10 +03:00
James Cherti e7e9c55ba7 Add outline-show-entry-and-parents to reveal entry hierarchy
* lisp/outline.el (outline-mode-prefix-map):
Rebind 'C-e' from 'outline-show-entry'
to 'outline-show-entry-and-parents'.
(outline-mode-menu-bar-map): Use 'outline-show-entry-and-parents'
instead of 'outline-show-entry'.
(outline-isearch-open-invisible): Use the new command instead of
the 'outline-show-entry' primitive.  This prevents unintended
side effects for packages relying on the base API and avoids the
'isolated item' effect.
(outline-show-entry-and-parents): New function to climb the tree,
reveal parent headings, and unfold the current entry (bug#79286).
2026-06-10 18:47:04 +03:00
Sean Whitton 971fa88a58 VC-Dir: Clear and populate async headers in vc-dir-resynch-file too
* lisp/vc/vc-dir.el (vc-dir--set-header): New function, factored out.
(vc-dir-resynch-file, vc-dir-refresh): Use it.
2026-06-10 15:26:36 +01:00
Sean Whitton d0653b46f6 ; * lisp/progmodes/project.el (project-vc-dir): Fix docstring. 2026-06-10 10:04:49 +01:00
Sean Whitton 4c12da0888 * lisp/progmodes/project.el (project-vc-dir): Make interactive-only. 2026-06-10 10:00:13 +01:00
Tomas Nordin 02f22865f6 Partially revert changes from bug#6157 (bug#81170, bug#45226)
* lisp/emacs-lisp/lisp.el (narrow-to-defun): Partially revert
changes from bug#6157 (bug#81170, bug#45226)
2026-06-09 22:07:05 +03:00
Paul Eggert 669ca4df18 Default to quoting `like this' in Elisp strings
Problem reported by Matthew Batson in:
https://lists.gnu.org/r/emacs-devel/2026-06/msg00172.html
* lisp/emacs-lisp/lisp-mode.el (lisp-data-mode):
Don’t set electric-quote-string to t.
2026-06-09 08:46:13 -07:00
Sean Whitton d7e7dd62ff Merge from origin/emacs-31
71ea4bbb6c vc-test-vc-dir-on-symlink: Use vc-test--with-author-identity
b8fa2243ea Fix M-RET in 'markdown-ts-in-table-mode-map'
c244314974 Fix recurrence of bug#80803 after changes in bug#80967
2026-06-09 11:33:26 +01:00
Sean Whitton f343f20b94 Mark vc-dir-show-outgoing-count obsolete
* lisp/vc/vc-dir.el (vc-dir-show-outgoing-count): Mark obsolete.
(vc-dir-async-header-values): Use a list of cons.
(vc-dir-headers, vc-dir-refresh): Update for new
vc-dir-async-header-values structure.
* doc/emacs/maintaining.texi (VC Directory Buffer): Delete
mention of the variable.
* etc/NEWS: Announce the obsoletion.
2026-06-09 11:32:13 +01:00
Sean Whitton a0dc061fa2 VC-Dir: Handle counting outgoing revisions asynchronously
* lisp/vc/vc-dir.el (log-view-message-re): Declare.
(vc-dir--count-outgoing): Rewrite to not block on populating the
outgoing log.
(vc-dir-async-header-values): New variable.
(vc-dir-headers): Just insert "Outgoing   : ", not its value.
(vc-dir-refresh): Insert overlays for async fields.
* lisp/vc/vc.el (vc--count-outgoing): Delete.
2026-06-08 19:17:47 +01:00
Michael Albinus 1da4eeb8c6 ; * doc/translations/README: Fix typos. 2026-06-08 18:39:03 +02:00
Vincent Belaïche 60171b3714 Better document compiling doc translations
* doc/translations/README: Document how to compile all
translations, or just for one language. Clarify where Texinfo
source code resides, and where compiled output goes.
2026-06-08 16:52:18 +02:00
Vincent Belaïche cc68545ff1 Fix build: doc dependency derivation from DOCLANGS
* Makefile.in (srcdir_doc_info_dir_inputs): Compute using sources
for each available translation. This fixes build error
``No rule to make target
'doc/misc/../translations/fr/misc/auth.texi', needed by
'info/dir''' introduced by support for doc translations.
2026-06-08 16:52:17 +02:00
Sean Whitton 0fac164893 Merge from origin/emacs-31
fff343c332 ; Fix typos in iCalendar macro and recurrence docstrings
912c8e3691 Ensure Tramp backward compatibility
df9b97e516 ; update README for windows binaries
9e37c94079 Read a key sequence instead of a single key in 'map-y-or-...
2755f171fc ; Document new features and update NEWS
13842157d2 ; * etc/NEWS: Presentational fixes and improvements.

# Conflicts:
#	etc/NEWS
2026-06-08 15:36:26 +01:00
Sean Whitton d71cb00408 ; Merge from origin/emacs-31
The following commit was skipped:

f653fd9f10 Avoid recursive error in debug-early in batch mode
2026-06-08 15:36:23 +01:00
Sean Whitton 8636e39abb Merge from origin/emacs-31
df2508a8f6 Remove from CC Mode code that modifies 'major-mode-remap-...
3106dc7766 Assert we don't double-free timers (bug#81108)
90314895dd Don't cancel random timers in x_get_foreign_selection (bu...
5cd7785b0a Fix use-after-free in Ffuncall_with_delayed_message (bug#...
2026-06-08 15:36:23 +01:00
Sean Whitton 1d91d9b717 project-vc-dir: Use truenames
* lisp/progmodes/project.el (project-vc-dir): When called
interactively, call file-truename on the project root first.
* etc/NEWS: Document the change.
2026-06-08 15:35:42 +01:00
William Theesfeld 31eaf18276 ; * lisp/replace.el (occur-1): Use seq-some.
Copyright-paperwork-exempt: yes
2026-06-08 11:12:32 +01:00
Stefan Monnier fa528b4e5c lisp/emacs-lisp/debug-early.el (debug-early--handler): Fix bug#80916 2026-06-07 00:20:40 -04:00
Eli Zaretskii 4d8fb1623c Merge from origin/emacs-31
a24b081602 ; Fix last change
e33e9f7e85 Document 'margin' face as base for margin display strings...
cff9c8bc00 Improve prompting for mail sending by by 'report-emacs-bug'

# Conflicts:
#	etc/NEWS
2026-06-06 06:19:09 -04:00
Po Lu 7ffbf45886 Merge from savannah/emacs-31
916572f6e0 Fix the Android build
3801c09ae2 Don't resurrect invisible child frames when rebuilding pa...
e4350c538f Improve progress-reporter state to remove hard coded leng...
30df8657fb (tex-main-file): Add forgotten safety predicate (bug#81099)
35a82765bf Fix bug in latexenc when AUCTeX is loaded
e9d1367a32 paren.el: Fix part of bug#81035
fd1b5cd890 ; * test/lisp/files-tests.el (w32-downcase-file-names): D...
79391d3e19 ; * lisp/mouse.el (send-to--resolve-handler): Fix last ch...
eb1de3f585 ; Avoid rebuilding Emacs Lisp Intro when building release...
f26f2a832c ; Avoid byte-compilation warning in mouse.el
cf325876fa Adapt Tramp version
84556123eb ; * admin/make-tarball.txt: Update.
8f5b786cac Check buffer-local value in tramp-local-environment-varia...
2026-06-06 11:39:01 +08:00
Po Lu a21e93b7e2 ; * doc/lispref/compile.texi (Speed of Byte-Code): Fix typo. 2026-06-06 11:38:49 +08:00
Paul Eggert 2f69971714 mpc-last-seek-time and mpc--faster are no longer used
* lisp/mpc.el (mpc-last-seek-time, mpc--faster):
Add a FIXME; should they be removed?
2026-06-05 19:16:29 -07:00
Paul Eggert 4fd59d0eba Omit a ‘/’ from org-clock-resolve
* lisp/org/org-clock.el (org-clock-resolve): Replace (floor (/ X
60)) with (floor X 60).
2026-06-05 19:16:29 -07:00
Paul Eggert 5eee9e239b Simplify gnus-backend-trace time calc
* lisp/gnus/gnus-int.el (gnus-backend-trace):
Simplify, since (float-time (time-since nil)) returns 0.0.
2026-06-05 19:16:29 -07:00
Paul Eggert 56b93016fc Simplify epa-ks--display-keys time calc
* lisp/epa-ks.el (epa-ks--display-keys):
Simplify by using time-less-p.  This also avoids a rounding error.
2026-06-05 19:16:29 -07:00
Paul Eggert 2dc98b69e0 format-seconds takes time values, not just numbers
* lisp/calendar/time-date.el (format-seconds): Document that the arg
can be any time value, and need not be a number.
This has been true for some time, but has not been documented.
Avoid some (but not all) rounding errors internally, and add a
comment about the remaining rounding error.
* lisp/emacs-lisp/timer-list.el (list-timers):
* lisp/org/org-timer.el (org-timer-show-remaining-time):
* lisp/org/ox.el (org-export--stack-generate):
* lisp/time.el (emacs-uptime): Omit unnecessary conversion of time
value that can increase rounding error.
* test/lisp/calendar/time-date-tests.el (test-format-seconds):
Test that format-seconds works on time values that are not numbers.
2026-06-05 19:16:29 -07:00
Paul Eggert 1b019b135b Avoid double-rounding in byte-code speed doc
* doc/lispref/compile.texi (Speed of Byte-Code):
Avoid some double-rounding in time calculations.
Modernize the timings.
2026-06-05 19:16:29 -07:00
Andrea Alberti bf9a1e1f16 Fix respondsToSelector: selector for native fullscreen check
The two -respondsToSelector: guards in -[EmacsWindow
setParentChildRelationships] tested @selector(toggleFullScreen) without
the trailing colon, but the method is -toggleFullScreen:.  The colon-less
selector matches nothing, so the guarded code was always skipped.  This
is inert on modern builds (MAC_OS_X_VERSION_MIN_REQUIRED >= 1070, where
the check is #if'd out), but on a binary targeting pre-10.7 yet running
on 10.7+ it would wrongly skip taking a child frame out of native
fullscreen.

* src/nsterm.m ([EmacsWindow setParentChildRelationships]): Add the
missing colon to both @selector(toggleFullScreen:) checks.
2026-06-05 19:29:58 +01:00
Stefan Monnier 66e02b3123 (Fmarkers_in): New function (bug#81153)
* src/marker.c (Fmarkers_in): New function.
(syms_of_marker): Defsubr it.
* doc/lispref/text.texi (Replacing): Add markers-in.
* test/src/marker-tests.el (marker-markers-in): New test.
2026-06-05 14:04:22 -04:00
Sean Whitton 921273999a ; Merge from origin/emacs-31
The following commits were skipped:

0ee48ac4df ; Update ldefs-boot.el.
4f4af26dd2 Bump Emacs version to 31.0.90
2026-06-05 11:19:07 +01:00
Sean Whitton 5e160e2784 Merge from origin/emacs-31
b8133a416d ; Update exported ChangeLog files and etc/AUTHORS
5e3e1a5bb2 ; Tweak some package short descriptions.
bbe805e4b1 message.el: Fix part of bug#81035
621239ae6a Fix prompt in remote shell
6df1d33b6c Fmake_xwidget: Use about:blank workaround only when needed
f3b17c4969 Allow brew/macports libgccjit for default native compilation
7226082f46 vc-dir-refresh: Respect non-essential wrt saving buffers
438af2764d ; * doc/lispref/text.texi (Mode-Specific Indent): Fix mar...
6b39919408 ; Fix typo in prog-indentation-context documentation (bug...
95ac082d5b Merge branch 'emacs-31' of git.savannah.gnu.org:/srv/git/...
3d9d9be3a1 CC Mode: Fontify a cast type preceding a brace initializa...
fe1c02d849 Fix Tramp distrobox integration
108710992d ; * doc/misc/ert.texi (erts files): Improve example (bug#...
0989625d36 markdown-ts-mode: fix first-item indent (bug#81118)
07e02917ee [GTK3] Re-fix the stored values for width and height
776ee085ff Eglot: mentions markdown-ts-view-mode less (bug#81150)
2d915236dc vc--subject-to-file-name: Fix over-greedy regex (bug#81017)
05f89d711d Fix more missing faces on ERC margin strings
3229d6f0e3 Eglot: Simplify markdown rendering support (bug#81150)
8855e88d74 ; Improve doc strings of brows-url commands
933d35ef10 ; * lisp/net/browse-url.el (browse-url-firefox-program): ...
2026-06-05 11:19:07 +01:00
Sean Whitton e21d3af2f9 ; Merge from origin/emacs-31
The following commit was skipped:

f357a549ac Prevent segfaults due to frame resizing at the wrong time
2026-06-05 11:19:07 +01:00
Pip Cet c1eb458d6b Avoid relying on FOR_EACH_TAIL internals in 'Fnthcdr' (bug#81115)
The new FOR_EACH_TAIL code detects simple cycles sooner than the old
code did, leading to integer overflows.

* src/fns.c (Fnthcdr): Avoid integer overflow if cycle is detected
early.
2026-06-04 20:45:34 +00:00
Pip Cet 0bef3c0e87 Improve FOR_EACH_TAIL (bug#81115)
* src/lisp.h (struct for_each_tail_internal): Reduce to two words.
(FOR_EACH_TAIL_BASIC): Add compiler hint to indicate that tail is most
likely Qnil after the loop and a non-nil non-cons is unlikely.
(FOR_EACH_TAIL_STEP_CYCLEP): Rewrite.
2026-06-04 20:45:34 +00:00
Pip Cet de67c677fe * src/lisp.h (EQ): Use new 'likely' macro. 2026-06-04 20:45:34 +00:00
Pip Cet 0f6c382888 Make 'likely' macro available in all of Emacs (bug#81115)
* src/android.c (likely): Move ...
* src/conf_post.h (likely): ... here.  Ensure true values which aren't
equal to 1 are still predicted correctly.
2026-06-04 20:45:34 +00:00
Eli Zaretskii 35f69be393 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs 2026-06-04 14:48:05 +03:00
Eli Zaretskii 8a00733af5 ; Fix last change
* lisp/plstore.el (plstore--decode, plstore--encode)
(plstore-get, plstore-find): Fix last change.  (Bug#81061)
2026-06-04 14:47:13 +03:00
Sean Whitton 0a8a5d4fad Don't query on exit for dir-status-files VC backend processes
* lisp/vc/vc-bzr.el (vc-bzr-dir-status-files):
* lisp/vc/vc-cvs.el (vc-cvs-dir-status-files):
* lisp/vc/vc-git.el (vc-git-dir-status-goto-stage):
* lisp/vc/vc-hg.el (vc-hg-dir-status-files):
* lisp/vc/vc-svn.el (vc-svn-dir-status-files): Set the
query-on-exit flag for the processes populating VC-Dir buffers
to nil.
2026-06-04 12:04:13 +01:00
Xiyue Deng aa6acc69ed plstore: use 'plstore--has-secret-keys'
* lisp/plstore.el (plstore-find, plstore-get, plstore--encode)
(plstore--decode): Use 'plstore--has-secret-keys' to replace
manual check for existence of secret keys.  (Bug#81061)
2026-06-04 11:52:14 +03:00
David Ponce e6e79b1e09 Don't unconditionally append the :ascent property in wid-edit
* lisp/wid-edit.el (widget-toggle-value-create): Don't
duplicate the :ascent property if already set.  (Bug#81167)
2026-06-04 09:06:52 +03:00
Xiyue Deng d852d36c77 Decrypt plstore when needed in 'plstore-delete'
When a plstore has entries with secret keys, processing the plstore
file would require decryption first.  However, unlike other functions
like 'plstore-get', 'plstore-put', etc., 'plstore-delete' does not
check for secret keys and decrypt the file, which would corrupt the
file when deleting any entries with secret keys.
This patch adds checking for secret keys and decrypt the file when
needed before removing the entry with name.
* lisp/plstore.el (plstore--has-secret-keys): New.
* lisp/plstore.el (plstore-delete): Check for secret keys of the entry
and decrypt plstore before performing the deletion.  (Bug#81061)
2026-06-04 08:37:25 +03:00
Dmitry Gutov c9dfe2abe6 Avoid background fills on parent during child frame resize/move/hide
* src/xterm.c (x_suspend_background_fills)
(x_restore_background_fills): New functions.
(x_set_window_size, x_set_window_size_and_position)
(x_make_frame_invisible): Use them (bug#80961).
2026-06-04 06:42:19 +03:00
Pip Cet 08336b9a55 Always return a list from send-to--collect-items
* lisp/send-to.el (send-to--collect-items): Return singleton list, not
a string directly.
2026-06-03 18:15:22 +00:00
Pip Cet 44fa1595ce * lisp/send-to.el (send-to--resolve-handler): Add autoload. 2026-06-03 18:15:22 +00:00
Michael Albinus 2db5a145ac Support Ansible messages in compilation-mode
* etc/NEWS: Mention Ansible integration in compilation mode.

* etc/compilation.txt: Add examples of Ansible error, warning and
note messages.  Fix typos.

* lisp/progmodes/compile.el
(compilation-error-regexp-alist-alist): Add Ansible regexps for
error, warning and note messages.

* test/lisp/progmodes/compile-tests.el
(compile-tests--test-regexps-data): Add new test cases.
(compile-test-error-regexps): Increase expected infos.
2026-06-02 12:43:08 +02:00
João Távora bfa4d6dd40 Disable markdown-ts-mode & markdown-ts-view-mode for Emacs 31
Ported from emacs-31 release branch:

   commit 984932d4dc
   Author: Sean Whitton <spwhitton@spwhitton.name>
   Date:   Mon Jun 1 11:48:42 2026 +0100

       Disable markdown-ts-mode & markdown-ts-view-mode for Emacs 31

This synchronizes master's Eglot with emacs-31.  The goal of that commit
is to demote those markdown-ts-mode.el modes to "experimental" status in
emacs-31, but Eglot was already relying on them and changes were needed.

984932d4dc is not the commit that best
does those changes, but since that commit was marked "do not merge" on
emacs-31, I thought it best to bring it here manually so any further
work -- which doesn't contradict the overarching intention -- can
continue in emacs-31 with clean merges to master (where the GNU-devel
core Elpa package is pulled from).

* lisp/progmodes/eglot.el (eglot-documentation-renderer)
(eglot--format-markup): Don't call eglot--builtin-mdown-p.
* doc/misc/eglot.texi (Customization Variables):
* etc/EGLOT-NEWS: Don't mention markdown-ts-mode

Co-authored-by: Sean Whitton <spwhitton@spwhitton.name>
2026-06-01 19:11:46 +01:00
Paul Eggert 43f1630346 Improve x_free_gc checking when debugging
* src/xfaces.c (x_free_gc): When debugging,
also diagnose unlikely case when ngcs == INT_MIN.
2026-06-01 09:55:54 -07:00
Paul Eggert 7502836378 Pacify -Wuseless-cast if --enable-checking=all
Problem reported by Helmut Eller (Bug#81132#25).
* src/dispextern.h (IF_DEBUG): Omit cast that is useless if
the argument is already void.
* src/ftfont.c (adjust_anchor): Omit useless cast.
2026-06-01 09:55:54 -07:00
Eli Zaretskii 94eb6389d4 Prevent segfaults due to frame resizing at the wrong time
* src/dispextern.h:
* src/xdisp.c (dont_resize_frames): New variable.
(unwind_format_mode_line): Decrement 'dont_resize_frames'.
(gui_consider_frame_title, display_mode_line, Fformat_mode_line):
Increment 'dont_resize_frames'.
* src/dispnew.c (do_pending_window_change): Don't resize frames if
'dont_resize_frames' is non-zero.  (Bug#81121)
2026-06-01 15:03:45 +03:00
Sean Whitton 32c329253f ; Move markdown-ts-mode to correct NEWS file. 2026-06-01 12:53:44 +01:00
Dan R. K. Ports eac3779a8f Check whether g_settings_schema_source_get_default returned NULL
* src/pgtkfns.c (parse_resource_key):
* src/xsettings.c (init_gsettings): Check whether
g_settings_schema_source_look up returned NULL (bug#81166).

Copyright-paperwork-exempt: yes
2026-06-01 12:49:24 +01:00
Sean Whitton ba0b29e808 ; Merge from origin/emacs-31
The following commit was skipped:

984932d4dc Disable markdown-ts-mode & markdown-ts-view-mode for Emac...
2026-06-01 11:52:53 +01:00
Sean Whitton b64d163979 Merge from origin/emacs-31
2c2f1c00ac ; * lisp/vc/vc-dir.el (vc-dir-update): Add an assertion.
51f823a3af ; * etc/NEWS: Fix annotation.
271cc5c76c More tests for fill-paragraph-handle-comment.erts
cc9f35c54b ; * etc/PROBLEMS: Minor fixes of last change.
2727a6f4e8 ; Document problems caused by validation of *.eln files o...
f1dd84bec9 ; * lisp/play/doctor.el (doctor-death): Fix Samaritans UR...
0bfbe06090 Update to Org 9.8.5
aac5e0457a Eglot: replace eglot-prefer-plaintext with eglot-document...
ec3d662de0 Make HTML button elements tab-stoppable in eww (bug#81107)

# Conflicts:
#	etc/NEWS
2026-06-01 11:52:53 +01:00
Po Lu 75d8e5773d Restore runtime dependencies to documentation files
* Makefile.in (MAKE_DOC_FOR_DOCLANG): Remove unnecessary .PHONY
definitions for targets which will be encompassed by $(DOC).
(MAKE_DOC): Create a common target to to which to assign runtime
dependencies.
(misc-info-common, misc-dvi-common, misc-html-common)
(misc-pdf-common, misc-ps-common): Assign runtime dependencies
on Lisp etc. previously assigned to the bare targets now subject
to indirection.
2026-06-01 12:15:04 +08:00
Paul Eggert 6db4271ee8 Ignore SO_RCVTIMEO errors in emacsclient
* lib-src/emacsclient.c: Include <stdckdint.h>
(timeout): Now signed, and initially -1.  All uses changed.
(decode_options): Do not worry about ERANGE or ranges, as other
code now deal with this; the old code was wrong anyway as it mixed
uintmax_t with INTMAX_MAX and INTMAX_MIN.  But do check for syntax
errors and negative values.
(set_socket_timeout): Don’t time out if the timeout is 0 or enormous.
Silently ignore errors (Bug#81160).
(main): Allow --timeout=0, as per documentation.
2026-05-31 12:48:42 -07:00
Vincent Belaïche 8902361cba README for manual translations available, and how to compile them 2026-05-31 14:57:41 +02:00
Vincent Belaïche 35af8d1099 Make build in doc/ happen in parallel over DOCLANGS
This also avoids using ";" in make rules, which doesn't propagate
errors from the first command to the entire line.

* Makefile.in (MAKE_DOC_FOR_DOCLANG): New.
  (MAKE_DOC): delegate to 'MAKE_DOC_FOR_DOCLANG' per language doc build.
2026-05-31 14:22:36 +02:00
Vincent Belaïche 3d01d53c1e Make doc/ build fail on DOCLANG=dummy
* doc/misc/Makefile.in (DOCLANG): Call 'error' when asked to
  produce manuals for a language we don't know about.
2026-05-31 14:22:34 +02:00
Vincent Belaïche 1f662e2ab7 ; * m4/texinfo.m4 (gl_SET_MAKEINFO): Fix introductory comment. 2026-05-31 14:22:33 +02:00
Vincent Belaïche c44f7ada0c Avoid using the LANG environment variable
Amend commit 75153f7b76 " Fix clash with locale variable" by Andreas Schwab.
Use DOCLANG instead of INFO_LANG for renaming, as documentation does not
produce only info output, and DOCLANG is iterating over DOCLANGS.

* Makefile.in: Rename 'LANG' to 'DOCLANG' to avoid clash with well-known
  environment variable.

* doc/misc/Makefile.in: Adjusted accordingly, rename 'INFO_LANG' to 'DOCLANG'
  where Andreas had already renamed 'LANG'.

* doc/translations/fr/misc/ses-fr.texi: rename 'INFO_LANG' to 'DOCLANG' in
  explanatory comment.
2026-05-31 14:20:14 +02:00
Andreas Schwab 75153f7b76 Fix clash with locale variable
LANG is a locale variable, use INFO_LANG instead.

* doc/misc/Makefile.in (INFO_LANG): Renamed from LANG, all uses
changed.
* doc/translations/fr/misc/ses-fr.texi: Use INFO_LANG instead of
LANG.
2026-05-31 11:08:51 +02:00
Eli Zaretskii 64f4ce7b2d Allow optionally disabling the use of TABs for TTY cursor movement
* src/term.c (syms_of_term) <tty-cursor-movement-use-TAB>: New var.
<tty-cursor-movement-use-TAB-BS>: Doc fix.
* src/cm.c (calccost): Use it to disable use of TABs for cursor
motion on text terminals.

* etc/NEWS: Announce the new variable.
2026-05-31 11:36:15 +03:00
Eli Zaretskii 3a0bce8f02 ; Fix a recent change
* doc/misc/Makefile.in (DOCMISC_W32_TARGET): Define.
2026-05-31 08:47:02 +03:00
Eli Zaretskii c4803e57c8 ; * doc/translations/fr/info_common.mk: Fix typos. 2026-05-31 08:41:59 +03:00
Eli Zaretskii 085eeb1bdd Fix rules in doc/misc/Makefile.in
* doc/misc/Makefile.in (INFO_TARGETS): Always build efaq-w32.info.
(info_template): Remove unnecessary extra prerequisite for
$$(buildinfodir)/$(1)$$(lang_suffix).info, which repeats an
existing pattern rule and causes ccmode.info be constantly
regenerated.
2026-05-31 08:28:25 +03:00
Eli Zaretskii d70c646894 Merge from origin/emacs-31
72d890c43e ; Update the documentation of 'debug'
69fd4b87f4 Don't make buffer read-only when reverting if 'view-mode'...
2955b51e80 ; * etc/NEWS: Document the change in mode-line faces.

# Conflicts:
#	etc/NEWS
2026-05-30 07:43:08 -04:00
Stefan Monnier a2379402fc (reftex-isearch-minor-mode): A few more simplifications
* lisp/textmodes/reftex-global.el (reftex-isearch-minor-mode):
Simplify docstring.  Remove redundant `setq`s and mode line update.
2026-05-29 17:36:06 -04:00
Luniya DW 36c6908616 Refactor reftex-isearch-minor-mode to use define-minor-mode
See L88 in etc/TODO.

* lisp/textmodes/reftex-global.el (reftex-isearch-minor-mode):
Use `define-minor-mode`.
* lisp/textmodes/reftex.el (reftex-isearch-minor-mode):
Remove redundant variable definition.
2026-05-29 17:29:52 -04:00
Andreas Schwab 31ee325352 Fix build outside source directory 2026-05-29 15:58:19 +02:00
Andreas Schwab 5c36f6c228 Fix overquoting in gl_SET_MAKEINFO 2026-05-29 15:42:38 +02:00
Sean Whitton ee1092aaac Merge from origin/emacs-31
2487984685 * lisp/shell.el (shell): Fix typo: use process-live-p (bu...
545bbc6ebe widget-image-find: Use 'image-load-path' (bug#81140)
69286be27d ; Fix an overwide docstring line.
2026-05-29 11:01:26 +01:00
Sean Whitton 00771a87c3 ; Merge from origin/emacs-31
The following commit was skipped:

d8933b9f07 Fix the MSDOS build
2026-05-29 11:01:26 +01:00
Sean Whitton c7167f2a1e Merge from origin/emacs-31
c3babe4b89 Fix lax whitespace highlight during query-replace
2e70b88623 Fix fill-paragraph combining text with preceding comment
ea54c33950 ; * etc/PROBLEMS: Link to bug#81124.
02897e208d emacsclient quote_argument is void
c618178066 ; Mark process-test-stderr-buffer as :unstable when runni...
2c1b45f5c5 ; Improve documentation of 'vc-dir-auto-hide-up-to-date'
768c8bf004 Revert "* admin/notes/documentation: Recommend not using ...
a7414f1859 native--compile-skip-on-battery-p: Try to fix ?b, ?B cond...
7cee526a8c Save and restore original local keymap in grep-edit-mode
4d87d203cf Fix display of inline SVG images in Rmail
4c55d04ebe Add treesit-ready-p check back to tree-sitter major modes...
7892ae5eaf Fix pathological slowness in flex completion
12eec781ed No longer raise error on HTTP 402 (Payment Required) (bug...
1800350b18 Avoid compilation-mode matching rust as gnu
2026-05-29 11:01:25 +01:00
Vincent Belaïche 4870bc06fa ses doc, add comment how to compile individually the manuals. 2026-05-29 09:27:51 +02:00
Vincent Belaïche 02c806cb47 Use a shell function to delay message.
Do not insert a message between AC_MSG_CHECKING and AC_MSG_RESULT.
2026-05-29 09:27:51 +02:00
Vincent Belaïche 5eaacff65b Add a checking/result message for DOCLANGS derivation. 2026-05-29 09:27:50 +02:00
Vincent Belaïche e3b2d6f862 Set DOCLANGS with autoconf depending on texinfo.tex/texindex versions. 2026-05-29 09:27:47 +02:00
Vincent Belaïche 2455b32dd3 Move Texinfo related autoconf code to a new separate texinfo.m4 file. 2026-05-29 09:25:18 +02:00
Vincent Belaïche ca346be53c Handle the info duplicate target issue as close as possible to the conflict.
The problems are:
- filtering out the info from info making templates misses some dependencies.
- naming PHONY target info.info is misleading, as there is also an info.info
  in the info build directory
2026-05-29 09:25:17 +02:00
Vincent Belaïche 0275b41d1c Generate manual for other languages than default.
* doc/translations/fr/info_common.mk:
* doc/translations/default/info_common.mk: New file.

* doc/misc/Makefile.in: Get INFO_COMMON from language respective
info_common.mk helper script.
(INFO_TARGETS): Make it depend from info_common.mk settings.
(ORG_SETUP, ORG_SRC): Make it point at language specific sub-directory.
(texi_sources, DVI_TARGETS, HTML_TARGETS, PDF_TARGETS)
(PS_TARGETS, echo-info, info_template,efaq%$(lang_suffix).dvi)
(efaq%$(lang_suffix).pdf, efaq%$(lang_suffix).texi)
(efaq%$(lang_suffix).html): Make it use language specific suffix.
(${buildinfodir}/%$(lang_suffix).info, %$(lang_suffix).dvi)
(%$(lang_suffix).pdf, %$(lang_suffix).html, %$(lang_suffix).ps):
Make it use language specific suffix/subdirectory.

* Makefile.in (DOCLANGS): New variable, list of languages.
(install-info, uninstall): List targets into 'info_misc' for all languages.
(TAGS tags): Make tags for all languages.
($(DOCS)): Create target for all languages.
(texi_misc_fr, texi_misc_default): Set macro for all languages.
(srcdir_doc_info_dir_inputs): Macro concatenate texi_misc_lll for
all language lll.
2026-05-29 09:25:15 +02:00
Vincent Belaïche 3621ef5c42 Add dependance of info file on source.
Suppress also superfluous exta .info extension of info.info.
2026-05-29 09:25:14 +02:00
Stefan Monnier 0a5e69eaef lisp/visual-wrap.el (visual-wrap--content-prefix): Adjust doc
Suggested by Andrea Alberti <a.alberti82@gmail.com>.
2026-05-28 17:36:19 -04:00
Eli Zaretskii 7ee3314398 Speed-up cursor motion under 'display-line-numbers-mode'
* src/xfaces.c (Finternal_lisp_face_equal_p): Accept an additional
optional argument INHERIT; if non-nil, consider two faces equal if
one inherits from the other and doesn't specify any other
attributes to be different from it.
* src/xdisp.c (try_cursor_movement, try_window_id): Call
'Finternal_lisp_face_equal_p' with non-nil INHERIT argument, to
speed up redisplay in the default case when line numbers are shown.
(Bug#81133)

* test/src/xfaces-tests.el (xfaces-test-face-equality): New test.
2026-05-28 18:36:11 +03:00
Michael Albinus 833553dd9a dbus-call-method-asynchronously supports also an ERROR-HANDLER
* doc/misc/dbus.texi (Asynchronous Methods): HANDLER can also be
(HANDLER . ERROR-HANDLER).

* etc/NEWS: Mention ERROR-HANDLER of dbus-call-method-asynchronously.

* lisp/net/dbus.el (dbus-call-method-asynchronously): Adapt docstring.
(dbus-check-event, dbus-handle-event): HANDLER can also be
(HANDLER . ERROR-HANDLER).

* src/dbusbind.c (Fdbus_message_internal): HANDLER can also be
(HANDLER . ERROR-HANDLER).  (Bug#80952)

* test/lisp/net/dbus-tests.el (dbus--test-method-another-handler)
(dbus--test-method-error-handler): New defvars.
(dbus--test-method-another-handler)
(dbus--test-method-error-handler): New functions.
(dbus-test04-call-method-error-handler): New test.
(dbus-test10-keep-fd): Extend test.
2026-05-28 10:03:05 +02:00
Po Lu de926d281a Fix the MSDOS build
* msdos/sedlibmk.inp (GL_GNULIB_STDC_[^ =] &c.): Rename from
GL_STDC_... and define to 1 before other variables prefixed
GL_GNULIB_ are defined to 0.
(NEXT_AS_FIRST_DIRECTIVE_STDBIT_H)
(NEXT_AS_FIRST_DIRECTIVE_STDCOUNTOF_H, STDCOUNTOF_H): Define.
(GL_HAVE_STDBIT_H_CONDITION): Replace
GL_GENERATE_STDBIT_H_CONDITION.
(CXX_HAVE_STDCOUNTOF_H, GL_GNULIB_STREQ, GL_GNULIB_MEMEQ)
(GL_GNULIB_STRNUL, GL_GENERATE_STDCOUNTOF_H_CONDITION):
Substitute "1".

* src/conf_post.h (_REGEX_AVOID_UCHAR_H) [MSDOS]: Define to 1.

* src/term.c (init_tty) [MSDOS]: Set TN_max_colors to 16,
which was deleted inadvertently with recent MS Windows
modifications.

* config.bat: Rename stdcountof.in.h appropriately.
2026-05-28 12:59:55 +08:00
Po Lu 330b4e2a94 Fix the Android build again
* exec/trace.c (ARRAYELTS, establish_seccomp_filter): Restore
ARRAYELTS, since Gnulib is not available in the exec library.
2026-05-28 11:31:16 +08:00
Paul Eggert 6728239f32 Use compound literal in lisp_h_make_fixnum_wrap
* src/lisp.h (lisp_h_make_fixnum_wrap) [USE_LSB_TAG]: Use compound
literal, not cast.  This pacifies -Wuseless-cast when building on
Fedora 44 x86-64 with ‘./configure --enable-gcc-warnings
CFLAGS='-O2 -DDEFINE_KEY_OPS_AS_MACROS'’.
2026-05-27 14:01:40 -07:00
Paul Eggert 54b6ea14a9 Port MinGW GCC 9.2 image.c fix to non MS-Windows
Avoid useless casts on GCC 14+ platforms on non MS-Windows, by
using a cast only if HAVE_NTGUI.  That cast should not provoke
-Wuseless-cast regardless of how MS-Windows defines HDC, since it
casts to an Emacs-defined type.  This change lets the code compile
again on Fedora 44 with --enable-gcc-warnings.
* src/dispextern.h (PIX_CONTAINER_TO_CONTEXT): New macro.
It defaults to the identity macro.
(Emacs_Pix_Context): Default to Emacs_Pix_Container.
* src/image.c (pbm_load, png_load_body, jpeg_load_body)
(tiff_load, gif_load, svg_load_image): Use the new macro
instead of a cast.
2026-05-27 08:37:39 -07:00
Collin Funk 967d8182cf pgtk: Fix -Wint-conversion compilation error.
* src/pgtkgui.h (WINDOW_HANDLE_UINTPTR): New macro to override the
default one in src/dispextern.h.
2026-05-27 07:59:54 -07:00
Eli Zaretskii 689448a041 Unbreak MS-Windows build broken by Gnulib sync
* src/conf_post.h: Add leading underscores to 'gl_consolesafe_*'
functions, to follow Gnulib's renaming.
* src/image.c (pbm_load, png_load_body, jpeg_load_body)
(tiff_load): Revert previous change that removed "useless" casts,
as removing them triggers warnings from MinGW GCC 9.2.
2026-05-27 16:30:23 +03:00
Paul Eggert b174382a2d Also copy lib/mini-gmp-gnulib.c from Gnulib 2026-05-26 22:21:08 -07:00
Paul Eggert 225876e979 ARRAYELTS → countof
C2y will standardize countof as the macro that Emacs uses the name
ARRAYELTS for.  Switch to the standard name, which is supported
by GCC 16+, by Clang 21, and by the Gnulib stdcountof-h module already
in use for compilers that do not support countof.
Also, use countof in a few places where we missed using ARRAYELTS.
* admin/coccinelle/arrayelts.cocci: Suggest countof, not ARRAYELTS.
* admin/merge-gnulib (GNULIB_MODULES): Add stdcountof-h,
as it is now a direct rather than an indirect dependency.
* exec/trace.c, src/lisp.h, src/sfnt.c: Include <stdcountof.h>.
(ARRAYELTS): Remove.  All uses replaced by countof.
* lib-src/ebrowse.c, lib-src/etags.c, lib-src/make-docfile.c:
* lib-src/seccomp-filter.c, lwlib/lwlib-Xaw.c:
Prefer <stdcountof.h> and countof to doing things by hand.
2026-05-26 21:57:20 -07:00
Paul Eggert 834ff524f9 Update from Gnulib by running admin/merge-gnulib
In addition to the automatic changes, also do the following,
needed due to recent Gnulib changes.
* admin/merge-gnulib (AVOIDED_MODULES): Add btoc32,
c32_apply_type_test, c32_get_type_test, c32isalnum, c32rtomb,
c32tolower, c32toupper, localeinfo, mbrtoc32-regular.
Remove btowc, iswctype, mbrtowc, wcrtomb, wctype, wctype-h.
Also remove iswblank, iswdigit, iswxdigit, locale-h, raise,
stdarg-h, some of which perhaps could have been removed earlier.
* configure.ac (_REGEX_AVOID_UCHAR_H): New macro.
2026-05-26 21:57:20 -07:00
Paul Eggert 6fb6a4f76d Pacify GCC better when building the test module
* test/Makefile.in ($(test_module)):
Compile mini-gmp-gnulib.c, not mini-gmp.c,
so that we get its pragmas to pacify GCC.
2026-05-26 21:57:19 -07:00
Paul Eggert 5d8bb14d3b Omit useless casts found by GCC 16
GCC 16’s -Wuseless-cast warning can be useful.
Fix the useless casts it identifies, and also fix false positives
by using compound literals, which are safer anyway than casts.
* src/composite.c (composition_adjust_point)
(Ffind_composition_internal):
* lwlib/xlwmenu.c (xlwMenuResources, xlwMenuClassRec)
(resource_widget_value, XlwMenuDestroy, Select):
* src/alloc.c (process_mark_stack):
* src/data.c (Faref):
* src/emacs-module.c (module_extract_big_integer):
* src/fileio.c (Finsert_file_contents):
* src/frame.h (FRAME_MESSAGE_BUF_SIZE):
* src/gtkutil.c (xg_tool_item_stale_p, update_frame_tool_bar):
* src/image.c (pbm_load, png_load_body, jpeg_load_body)
(tiff_load, gif_load):
* src/pdumper.c (ptrdiff_t_to_dump_off, dump_queue_dequeue)
(field_relpos, dump_field_emacs_ptr)
(dump_object_start_pseudovector, pdumper_remember_scalar_impl)
(pdumper_load, syms_of_pdumper):
* src/regex-emacs.c (BUF_PUSH, BUF_PUSH_2, POINTER_TO_OFFSET):
* src/xdisp.c (remember_mouse_glyph, pint2str):
* src/xterm.c (cvt_string_to_pixel, handle_one_xevent):
Omit useless casts.  Perhaps they were formerly needed,
but they should not be needed now.
* src/alloc.c (Fmemory_info):
* src/category.c (Fdefine_category, Fmodify_category_entry):
* src/data.c (Fash):
* src/dispextern.h (GLYPH_CODE_P):
* src/emacs.c (load_seccomp):
* src/fns.c (Flocale_info, maybe_resize_hash_table):
* src/indent.c (check_display_width):
* src/json.c (symset_size):
* src/lisp.h (XUNTAG, BOOL_VECTOR_LENGTH_MAX, obarray_size)
(hash_table_index_size):
* src/lread.c (make_obarray, grow_obarray, Fobarray_clear):
* src/menu.c (digest_single_submenu, x_popup_menu_1):
* src/term.c (init_tty):
* src/widget.c (update_wm_hints):
* src/xdisp.c (truncate_echo_area):
* src/xfns.c (x_set_border_pixel):
* src/xfont.c (xfont_match, xfont_open):
* src/xmenu.c (set_frame_menubar):
* test/src/emacs-module-resources/mod-test.c (emacs_module_init):
Use compound literal instead of a cast that is useless in
some platforms but not others.
* src/dispextern.h, src/haikugui.h, src/w32gui.h:
(WINDOW_HANDLE_UINTPTR): New macro.
* src/frame.c (gui_report_frame_params):
* src/xterm.c (x_try_cr_xlib_drawable):
Use it.
* src/lisp.h (XUNTAG): And tag with UINTPTR_MAX to pacify
gcc warning about a constant out of range.
(hash_idx_t): Make it int_least32_t, as it need not be exactly 32 bits.
(PRIdHASH_IDX): New macro.
* src/pdumper.c (dump_queue_dequeue): Use it.
* src/profiler.c (setup_cpu_timer): Make a local EMACS_INT
rather than int, to avoid need for casting later.
* src/syntax.c (uninitialized_interval):
Use 1u rather than 1 so the cast is always useful.
A compound literal wouldn’t do here, as this macro
needs to be an integer constant expression.
* src/xfns.c (XICCallback, XICProc): Remove macros.
(Xxic_preedit_start_callback): Use a cleaner way to specify it,
avoiding the need for type macros, and for a cast
if HAVE_XICCALLBACK_CALLBACK.
* src/xterm.c (handle_one_xevent): 2nd arg is now XEvent *
on all platforms, as there is no need to diverge, and
diverging meant we needed lots of unnecessary casts.
2026-05-26 21:57:19 -07:00
Andrea Alberti ca5e9976b1 Pixel-direct alignment in visual-wrap-prefix-mode (bug#81039)
`visual-wrap--content-prefix' previously returned a column count
computed as

    (max (string-width prefix)
         (ceiling (string-pixel-width prefix) avg-space-width))

with two problems:

* `string-width' ignores `buffer-invisibility-spec', so an invisible
  prefix (hidden ATX markers under `markdown-ts-hide-markup', for
  example) still reserved its character count on line 1 via a
  `min-width' display property, shifting the visible heading right.

* With variable-pitch fonts, rounding the prefix width up to whole
  columns added visible padding whenever the natural width did not
  fall on an exact column boundary.

Return the prefix's natural pixel width via `string-pixel-width'
instead, which accounts for any display transformation applied to
the prefix (invisibility, `display' replacements, text scaling,
proportional fonts).  Drop the `min-width' property from
`visual-wrap--apply-to-line' so line 1 renders at its natural width.
Switch the continuation `wrap-prefix' to a mixed-unit `:align-to'
sum form:

    (space :align-to (+ (PIX) (EXTRA-INDENT . width)))

where PIX is the prefix's pixel width and EXTRA-INDENT is
`visual-wrap-extra-indent' in canonical character widths.  The
display engine resolves each term per the active frame and sums
them, so no Lisp-level unit conversion is needed.

Since `min-width' is no longer installed, the accumulation cycle
that commit 81a5beb8af (bug#73882) worked around cannot recur.
Drop the `min-width' strip from `visual-wrap--content-prefix' and
the `min-width' removal from `visual-wrap--remove-properties'.
Keep `min-width' in `visual-wrap--safe-display-specs' so that
lines where other modes install it are not skipped.

* lisp/visual-wrap.el (visual-wrap--content-prefix): Return pixel
width instead of column count; drop the `min-width' strip.
(visual-wrap--apply-to-line): Drop `min-width' on line 1; use
mixed-unit `:align-to' sum form for the continuation wrap-prefix.
(visual-wrap--adjust-prefix): Handle only string prefixes; the
numeric (pixel) case is now handled inline in `--apply-to-line'
via the mixed-unit `:align-to' sum form.
(visual-wrap--remove-properties): Drop `min-width' removal.
(visual-wrap--safe-display-specs): Add note about `min-width'.
* test/lisp/visual-wrap-tests.el: Update expected `wrap-prefix'
values to the new sum form.
(visual-wrap-tests/invisible-prefix): New test motivated by bug#81039.
(visual-wrap-tests/negative-extra-indent): New test; verify that a
large negative `visual-wrap-extra-indent' produces a valid
wrap-prefix (the display engine clamps the stretch to zero).
* test/manual/visual-wrap-test.el: New file.  Manual test suite
for visual-eyeball verification of prefix alignment behavior.

Reported-by: Andrea Alberti <a.alberti82@gmail.com>
Co-authored-by: Stefan Monnier <monnier@iro.umontreal.ca>
2026-05-26 16:56:32 -04:00
Stefan Monnier 02fb01166e Gnus: Prefer passing functions to message-add-action
Building code with code is tricky.  E.g. the code in gnus-draft-setup
suffered from a security issue because it forgot to quote
some arguments (see commit 142b1e0d4c).

* lisp/gnus/gnus-salt.el (gnus-pick-setup-message):
* lisp/gnus/gnus-msg.el (gnus-inews-add-send-actions):
* lisp/gnus/gnus-draft.el (gnus-draft-setup): Prefer passing functions
to message-add-action over passing it ELisp expressions.

* lisp/gnus/message.el (message-do-actions): Drop errors but not silently.
2026-05-26 15:54:48 -04:00
Pip Cet 25fb3f9b46 Fix self-insert-command in multibyte buffers (bug#81129)
* src/cmds.c (internal_self_insert): Pass PT_BYTE to FETCH_BYTE, not
PT.
2026-05-26 14:10:16 +00:00
Stefan Monnier 72b50901ef lisp/emacs-lisp/package.el (package-quickstart-refresh): Delete stale elc 2026-05-25 17:01:07 -04:00
Eli Zaretskii ea2110b6e5 ; * src/sfntfont-android.c (GET_SCANLINE_BUFFER): Fix a typo. 2026-05-25 18:39:26 +03:00
Harald Jörg 217064e9dc ;cperl-mode.el: Fix fontification edge cases
These were reported by happy-barney on GitHub
https://github.com/HaraldJoerg/cperl-mode/issues

* lisp/progmodes/cperl-mode.el (cperl-init-faces): Don't mistake
$method as a method declaration.
Move matcher for "use require" higher to prevent "require" being
fontified as keyword.

* test/lisp/progmodes/cperl-mode-resources/sub-names.pl: Add a
test case for $method

* test/lisp/progmodes/cperl-mode-tests.el
(cperl-test-fontify-declarations): Add a test case for a module
name looking like a keyword
(cperl-test-fontify-sub-names): Verify that $method does not
declare a method
2026-05-25 11:23:34 +02:00
Po Lu 6d15d68e1f ; * src/sfntfont-android.c (GET_SCANLINE_BUFFER): Correct commentary. 2026-05-25 11:50:03 +08:00
Po Lu d6215451fa Fix parsing of font metadata tables on Android
* src/sfnt.c (sfnt_read_meta_table): Allocate
`directory->length' bytes after the map rather than in place of
it.
2026-05-25 11:29:32 +08:00
Po Lu 7cef362581 Fix the Android build
* src/sfnt.c (sfnt_fill_span) [NDEBUG]: Don't access `row_end'
when not defined.
2026-05-25 11:23:30 +08:00
Po Lu 44013f6be7 Revert "Don’t silently truncate file names in exec.c"
This reverts commit 3461b450c5.

Gnulib and intprops.h are not available from within the exec helper.
2026-05-25 11:21:00 +08:00
Pip Cet b72dcebdab Avoid crash in self-insert-command with non-ASCII auto-fill
* src/cmds.c (internal_self_insert): If the autofill function changed
the newline character we inserted, don't attempt to restore point.
* test/src/cmds-tests.el (self-insert-nonascii-autofill): New.
2026-05-24 12:32:28 +00:00
Pip Cet 7f8ac8bf6f Avoid crash in self-insert-command for peculiar arguments
* src/cmds.c (internal_self_insert): Don't call auto-fill-function
after inserting zero newlines.
* test/src/cmds-tests.el (self-insert-zero-newlines): New.
2026-05-24 11:51:38 +00:00
Pip Cet 94dbab2fe4 Fix 'do_casify_natnum' for events with all flags set
* src/casefiddle.c (do_casify_natnum): Extend range a little, to cover
character events with all modifier flags set.
* test/src/casefiddle-tests.el (casefiddle-allflags): New test.
2026-05-24 10:11:33 +00:00
Pip Cet c146e3643c Fix off-by-one error in 'styled_format'
This would (rarely) result in composition properties being shared
across the concatenation of two copies of a string.

* src/editfns.c (styled_format): Include the first argument in the
range.
* test/src/editfns-tests.el (editfns-tests--format-composition-property):
New.
2026-05-24 09:23:05 +00:00
Yuan Fu 6932c940fd
Fold calls to fix_position into treesit_check_position (bug#80830)
* src/treesit.c (treesit_check_position): Return the validated
value.
(Ftreesit_node_first_child_for_pos):
(Ftreesit_node_descendant_for_range):
(Ftreesit_query_capture):
(Ftreesit__linecol_at): Fold calls to fix_position into
treesit_check_position in treesit.c.
2026-05-23 22:55:31 -07:00
Paul Eggert e7a333f18e EVENT_INIT via a compound literal
This pacifies GCC 16.1.1 x86-64 -Warray-bounds when compiling with
-fsanitize=address.  It’s also cleaner on more-typical platforms.
* src/termhooks.h (EVENT_INIT): Define via a compound literal
rather than via a memset plus an assignment.  This evaluates the
argument lvalue only once, and is more likely to catch type errors.
2026-05-23 19:18:54 -07:00
Paul Eggert 7bfde4d50b sfnt.c eassert vs assert
Use eassert uniformly, instead of assert.
* src/sfnt.c [!TEST]: Do not include <assert.h> or use assert.
(eassert) [TEST]: New macro.
2026-05-23 19:18:54 -07:00
Paul Eggert c4e20777c2 Better size overflow checking for sfnt.c
* src/sfnt.c (memory_full_up) [TEST]: New static function.
(xmalloc, xcalloc, xrealloc): Use it instead of aborting.
(eassert) [TEST]: Remove; no longer needed.
(xaddmalloc, xaddrealloc): New static convenience functions.
(sfnt_read_cmap_format_12, sfnt_read_loca_table_short)
(sfnt_read_loca_table_long, sfnt_read_glyf_table)
(sfnt_read_simple_glyph, sfnt_read_compound_glyph)
(sfnt_read_glyph, sfnt_build_append, sfnt_build_outline_edges)
(sfnt_raster_glyph_outline, sfnt_build_outline_fedges)
(sfnt_raster_glyph_outline_exact, sfnt_read_hmtx_table)
(sfnt_read_name_table, sfnt_read_meta_table)
(sfnt_read_ttc_header, sfnt_read_fpgm_table)
(sfnt_read_prep_table, sfnt_create_uvs_context)
(sfnt_read_gvar_table, sfnt_read_packed_deltas)
(sfnt_vary_simple_glyph, sfnt_vary_compound_glyph):
Use the new functions to test for size overflow more reliably.
Use a cleaner way to decide whether a pointer addresses
the heap not the stack and thus needs freeing.
Fix a few more unlikely overflows.
(sfnt_read_cmap_format_12): The recently-added eassert is no
longer needed, so remove it.
(sfnt_read_simple_glyph): Initialize glyph->simple early
to simplify later code, as is done in similar functions.
Complicate size test to avoid potential unsigned overflow.
2026-05-23 19:18:54 -07:00
Paul Eggert 7e0d4fae01 Simplify sfnt.c by using long long
Even the earliest Android had plain ‘long long’,
so use that instead of doing it by hand.
* src/sfnt.c (struct sfnt_large_integer, sfnt_multiply_divide_1)
(sfnt_multiply_divide_2, sfnt_large_integer_add)
(sfnt_multiply_divide_round) [!INT64_MAX]: Remove.
(sfnt_multiply_divide, sfnt_multiply_divide_rounded)
(sfnt_mul_fixed, sfnt_mul_fixed_round, sfnt_div_fixed)
(sfnt_div_f26dot6, sfnt_mul_f26dot6, sfnt_mul_f26dot6_round)
(sfnt_mul_f2dot14, sfnt_dot_fix_14): Simplify by using long long.
2026-05-23 19:18:54 -07:00
Paul Eggert 2e91ed5f12 Prefer ptrdiff_t to size_t when either will do
Signed types are a bit safer, as they avoid some comparison confusion
and -fsanitize=undefined can check more misuses of them.
* src/alloc.c (lisp_malloc, lisp_align_malloc)
(allocate_string_data, allocate_vector_from_block, object_bytes):
* src/coding.c (from_unicode_buffer):
* src/decompress.c (acc_size, accumulate_and_process_md5):
* src/emacs.c (load_seccomp, shut_down_emacs):
* src/fns.c (sxhash_bignum):
* src/ftfont.c (get_adstyle_property):
* src/image.c (lookup_image, xpm_init_color_cache)
(xpm_cache_color):
* src/json.c (json_out_str, struct json_parser)
(json_make_object_workspace_for_slow_path)
(json_make_object_workspace_for, json_parse_array)
(json_parse_object):
* src/sysdep.c (get_current_dir_name_or_unreachable)
(init_sys_modes, convert_speed):
* src/termchar.h (struct tty_display_info):
* src/textconv.h (struct textconv_conversion_text):
* src/xfns.c (struct x_xim_text_conversion_data)
(x_encode_xim_text):
* src/xselect.c (struct transfer, c_size_for_format)
(x_size_for_format, selection_data_for_offset)
(selection_data_size, x_start_selection_transfer)
(x_continue_selection_transfer):
Prefer ptrdiff_t to size_t when either will do.
* src/term.c (Ftty__set_output_buffer_size):
Limit output buffer size to PTRDIFF_MAX as well as to SIZE_MAX.
2026-05-23 19:18:53 -07:00
Paul Eggert 82ad01b631 Fix format typos in never-executed textconv.c
* src/textconv.c (really_commit_text, really_replace_text):
Use %td not %zd.
2026-05-23 19:18:53 -07:00
Paul Eggert fbd2f781b2 Be more careful about X selection sizes
* src/xselect.c (selection_data_for_offset):
Offset is size_t, not long, since that’s what caller passes.
(selection_data_size): Truncate large selection sizes to a value
that is more likely to work without involving undefined behavior.
Do not exceed X_ULONG_MAX which is all X can handle, or
PTRDIFF_MAX which can confuse underlying code.
(x_start_selection_transfer): Invoke selection_data_size just once.
2026-05-23 19:18:53 -07:00
Paul Eggert 1bee33c1c8 sfnt_parse_languages does not need USE_SAFE_ALLOCA
* src/sfntfont.c (sfnt_parse_languages):
Simplify so that no local array is needed.
2026-05-23 19:18:53 -07:00
Paul Eggert ece22174e5 Omit useless android_get_image casts
* src/android.c (android_get_image):
Omit useless and confusing casts.
2026-05-23 19:18:53 -07:00
Paul Eggert 4e5103a980 Document PTRDIFF_MAX <= SIZE_MAX assumption
* src/alloc.c: New static_assert.
2026-05-23 19:18:53 -07:00
Paul Eggert d12e8a94f7 Update src/alloc.c comments 2026-05-23 19:18:53 -07:00
Paul Eggert 19264b6912 adjust_glyph_matrix reallocation improvement
* src/dispnew.c (adjust_glyph_matrix):
Use xfree + xcalloc instead of xnrealloc + memset,
as there is no need to preserve the old contents.
2026-05-23 19:18:53 -07:00
Paul Eggert 64eb869b68 Be more careful about size multiplication
* src/alloc.c (xcalloc): New function.
* src/dispnew.c (save_current_matrix):
* src/fns.c (Finternal__hash_table_histogram):
* src/nsfns.m (Fns_display_monitor_attributes_list):
* src/pgtkfns.c (Fpgtk_display_monitor_attributes_list):
* src/pgtkselect.c (pgtk_own_selection):
* src/profiler.c (make_log):
* src/sfnt.c (sfnt_poly_edges_exact):
* src/xfns.c (x_get_monitor_attributes_xinerama)
(x_get_monitor_attributes_xrandr, Fx_display_monitor_attributes_list):
Use it instead of multiplying by hand, conceivably with overflow.
* src/profiler.c (make_log):
Check for overflow in internal size calculations.
Use xnmalloc instead of multiply + xmalloc.
* src/sfnt.c (xzalloc) [TEST]: Remove, replacing with ...
(xicalloc) [TEST]: ... this new function.  All callers changed.
(eassert) [TEST]: New macro.
* src/treesit.c (treesit_calloc_wrapper): Remove, replacing its
use with xcalloc.
2026-05-23 19:18:53 -07:00
Paul Eggert c72e6cdc46 Avoid memsets in coding.c
* src/coding.c (detect_coding_utf_16, Fset_coding_system_priority):
Rewrite memset to initializers.
2026-05-23 19:18:53 -07:00
Paul Eggert ced12fa114 Avoid memsets in charset.c
* src/charset.c (load_charset_map_from_file)
(load_charset_map_from_vector, Fdefine_charset_internal):
Rewrite memset to xzalloc or initializers.
2026-05-23 19:18:53 -07:00
Paul Eggert 42a8e12088 Avoid memsets in atimer.c
* src/atimer.c (start_atimer, turn_on_atimers):
Rewrite memset+assignments to xzalloc or initializers.
2026-05-23 19:18:53 -07:00
Paul Eggert 52ccc1b8d3 Avoid memsets in pop.c
* lib-src/pop.c (socket_connection):
Rewrite memset+assignments to designated initializers.
2026-05-23 19:18:53 -07:00
Paul Eggert 17215532dc Avoid a memset in emacsclient get_server_config
* lib-src/emacsclient.c (get_server_config):
Rewrite memset+assignments to compound literal.
2026-05-23 19:18:53 -07:00
Paul Eggert ad8af430e6 Avoid a memset in alloc-colors.c
* admin/alloc-colors.c (main): Simplify.
2026-05-23 19:18:53 -07:00
Paul Eggert 8c69ba718e Fix emit_static_object comment (no bzero call) 2026-05-23 19:18:53 -07:00
Paul Eggert 1e0b0bed28 Avoid a memset in allocate_widget_instance
* lwlib/lwlib.c (allocate_widget_instance):
Simplify via xzalloc.
2026-05-23 19:18:53 -07:00
Paul Eggert 3461b450c5 Don’t silently truncate file names in exec.c
* exec/exec.c (format_pid): Simplify.  No need for a local array.
(exec_0): Shrink local buffer.
If names are too long, fail instead of silently truncating them.
Be cautious in case symlink is zero length (shouldn’t be possible
in Android, but it’s easy to be safe).
2026-05-23 19:18:53 -07:00
Paul Eggert 25a07c30e5 Don’t use VLA in etags.c mercury_decl
* lib-src/etags.c (mercury_decl): Don’t use a VLA,
as C11+ says VLAs are optional.  Instead, redo to
omit the need for an array at all.
2026-05-23 19:18:53 -07:00
Paul Eggert b1d338d89a Fix misleading x_dnd_begin_drag_and_drop API
* src/xterm.c (x_dnd_begin_drag_and_drop): The n_ask_actions arg
is an int, not a size_t, as XChangeProperty supports only int and
our caller passes an int.
2026-05-23 19:18:53 -07:00
Paul Eggert 4d85084509 Fix unlikely json.c size overflow calculations
* src/json.c (json_out_grow_buf)
(json_make_object_workspace_for_slow_path)
(json_byte_workspace_put_slow_path):
Use xpalloc rather than doing it by hand.
* src/json.c (json_out_grow_buf):
Change arg from needed bytes to minimum increment of bytes.
Caller changed.
2026-05-23 19:18:52 -07:00
Paul Eggert 5fd1e0bbef Coalesce load_seccomp comparisons
* src/emacs.c (load_seccomp): One comparison, not two.
2026-05-23 19:18:52 -07:00
Paul Eggert 9851c5ea34 Shrink STRING_BYTES_MAX slightly
* src/alloc.c (STRING_BYTES_MAX): Also don’t allow sizes to exceed
PTRDIFF_MAX in internal calculations when calling malloc, as those
are problematic even if the final number of bytes does not exceed
PTRDIFF_MAX.
2026-05-23 19:18:52 -07:00
Paul Eggert 59b2f8f1dc Plug default_PATH memory leak
* src/emacs.c (default_PATH): Fix very-unlikely memory leak.
2026-05-23 19:18:52 -07:00
Paul Eggert 1eb2e052bb New function memory_full_up
* src/alloc.c (memory_full_up): New function.  Replace all callers
of memory_full (SIZE_MAX) with callers to this function.
This simplifies callers and should make future changes easier.
It also saves a whopping 296 bytes in executable size
with gcc 16.1.1 20260515 (Red Hat 16.1.1-2) x86-64.
2026-05-23 19:18:52 -07:00
Sean Whitton a96fc7d546 Merge from origin/emacs-31
4f13f52a3a * build-aux/git-hooks/commit-msg: Replace Markdown-style ...
dd42133315 vc-test--rename-file: Disable part of test for SCCS
eb653865c3 markdown-ts-mode: Don't enable unconditionally by default

# Conflicts:
#	etc/NEWS
2026-05-23 17:30:21 +01:00
Sean Whitton 7fe595465b vc-refresh-state: Use cond*
This is okay with regard to bootstrapping because vc-hooks.el is
loaded after loaddefs.el in loadup.el.

* lisp/emacs-lisp/cond-star.el (cl-lib): Don't require, so we
can use cond* in preloaded files.
(cond*-convert-condition): Replace calls to cl-assert.
* lisp/vc/vc-hooks.el (vc-refresh-state): Use cond*.
2026-05-23 12:47:24 +01:00
Eli Zaretskii ccc94458fb Merge from origin/emacs-31
7a17f97baa Prettify special glyphs
f13287fde0 Revert "sh-script: Mark + and * as punctuation rather tha...
70b79b3ed8 Rename `icalendar-recur' type and related functions
3d2bb233f2 ; Minor Tramp changes
f6281d757d ; * etc/NEWS: Tell how to disable 'markdown-ts-mode'.
142b1e0d4c Fix Lisp injection via X-Draft-From in Gnus
d6f7b2d99b Save/restore old_buffer slot via window configurations (B...
e0fbecaf65 Adapt ert-remote-temporary-file-directory settings
3de7f0ce5e Fix warning message in 'markdown-ts-mode--initialize'
7df8604ea6 ; Improve documentation of lazy-highlight in search and r...
2936b36164 Fix "assertion 'GTK_IS_WINDOW (window)' failed"
98348a0bdc [Xt] Fix child frame resizing glitch
13b29eebc1 Eglot: use standard face for completion annotations (bug#...

# Conflicts:
#	etc/NEWS
2026-05-23 07:23:33 -04:00
Elias Gabriel Perez 741feca497 New tool bar icons for artist-mode
* etc/images/artist-mode/README:
* etc/images/artist-mode/char-for-spray.xpm:
* etc/images/artist-mode/char-to-fill.xpm:
* etc/images/artist-mode/ellipse.xpm:
* etc/images/artist-mode/eraser.xpm:
* etc/images/artist-mode/fill.xpm:
* etc/images/artist-mode/line.xpm:
* etc/images/artist-mode/pen.xpm:
* etc/images/artist-mode/poly-line.xpm:
* etc/images/artist-mode/rectangle.xpm:
* etc/images/artist-mode/spray.xpm:
* etc/images/artist-mode/square.xpm:
* etc/images/artist-mode/text.xpm:
* etc/images/artist-mode/char-for-spray.pbm:
* etc/images/artist-mode/char-to-fill.pbm:
* etc/images/artist-mode/ellipse.pbm:
* etc/images/artist-mode/eraser.pbm:
* etc/images/artist-mode/fill.pbm:
* etc/images/artist-mode/line.pbm:
* etc/images/artist-mode/pen.pbm:
* etc/images/artist-mode/poly-line.pbm:
* etc/images/artist-mode/rectangle.pbm:
* etc/images/artist-mode/spray.pbm:
* etc/images/artist-mode/square.pbm:
* etc/images/artist-mode/text.pbm: New files.
* lisp/textmodes/artist.el (artist-tool-bar-map): New variable.
(artist-mode, artist-mode-exit): Use it (bug#80644).
2026-05-23 11:50:10 +01:00
Augusto Stoffel 646702f70b let-alist.el: Use 'elt' instead of 'nth'
The advantage is that this works also for mixtures of alists and
vectors, as one obtains, e.g., from 'json-parse-buffer' and
'json-parse-string'.
* lisp/emacs-lisp/let-alist.el (let-alist--list-to-sexp): Use
'elt' instead of 'nth'.
(let-alist): Adapt doc string.  (Bug#80992)
2026-05-23 12:37:34 +03:00
Eli Zaretskii cda03bebfc Improve w32 implementations of 'signal' and 'raise'
* src/w32proc.c (w32_raise): A more complete, Posix-compliant
implementation.
(sys_signal): Support SIGBREAK.
* src/syssignal.h (raise): Redirect to 'w32_raise'.
* src/atimer.c: Don't redirect 'raise', now done in syssignal.h.
(Bug#80760)
2026-05-22 12:31:04 +03:00
Roland Winkler 0d5680665b Etags handling of fortran files (bug#81086).
* lib-src/etags.c: Tag fortran modules.  Honor file extensions
"f95", "f03", "f08" for fortran files.
* doc/emacs/maintaining.texi: Update accordingly.
2026-05-21 16:45:41 -05:00
João Távora e86825e595 Merge from origin/emacs-31
655302cc21 Fix 'shr-outline-search' (bug#81073)
1754015c60 Improve auth-source-backend-parse
8f31ccbf82 Eglot: announce markdown support for completion docs
aad170d1ed markdown-ts-mode: hide fence lines in view-mode (bug#81081)
133d1d591c markdown-ts-mode: align default face definitions with mar...
e0aeee2dc5 Fix markdown-ts-mode atx_heading face computation (bug#81...
997fc2cef7 Allow markdown-ts--run-command-in-code-block to ignore ou...
7d84e69a34 hideshow: Menu entry for 'hs-toggle-all'
e90cafc288 ; * doc/lispref/display.texi (Displaying Faces): Mention ...
520c5b7c71 ; * doc/lispref/text.texi (Special Properties): Fix last ...
8095fbef77 doc/lispref/text.texi: Add complement to commit f4a1c00656
9436d92c5d Eglot: fix eglot--format-makrup when MARKUP just a string
9ba65aa965 Fix missing margin face on display prop in erc-stamp
2026-05-21 00:24:52 +01:00
Pip Cet 3131d56606 Avoid crash in doprnt
* src/doprnt.c (doprnt): Don't access string[-1].
2026-05-20 14:05:25 +00:00
Pip Cet 0b5ead9923 Detect some API violations in combine-change-calls (bug#80877)
Quickly verify that the number of unchanged characters before and
after the region that changes are supposed to be limited to doesn't
change.

Suggested by Stefan Monnier.

* lisp/subr.el (combine-change-calls-1): Copy BEG into a marker, and
count the characters after the changed region.  After the changes,
ensure the character counts still match.
* test/lisp/subr-tests.el (subr-test-combine-change-calls-error): New.
2026-05-20 11:27:40 +00:00
Paul Eggert a8b9fad897 Make X_ERROR_MESSAGE_SIZE dependency more explicit
This avoids an alloca in x_set_mouse_color.
* src/xfns.c (x_set_mouse_color): Use local array rather than
alloca, since the string is small.
* src/xterm.c (X_ERROR_MESSAGE_SIZE): Move defn from here ...
* src/xterm.h: ... to here, and make it an enum not a macro.
2026-05-19 11:54:26 -07:00
Paul Eggert 2dbfed0532 display_tty_menu_item eassert for absurdly long item texts
* src/xdisp.c (display_tty_menu_item): Add an eassert.
2026-05-19 11:54:26 -07:00
Paul Eggert fe33900747 Simplify serial_open
* src/sysdep.c (serial_open): On failure, simply return -1
and set errno; do not call report_file_error, as the
caller is supposed to do that if needed.
2026-05-19 11:54:25 -07:00
Paul Eggert b3b3e203cc Fix unlikely dump_off overflow in pdumper
* src/pdumper.c (dump_grow_buffer): Remove.
(dump_write): Use xpalloc instead.  Avoid undefined behavior
if (ctx->offset + nbyte) exceeds DUMP_OFF_MAX.
2026-05-19 11:54:25 -07:00
Paul Eggert c80d22dcfc Remove stray inrange_pipe comment 2026-05-19 11:54:25 -07:00
Paul Eggert efb83df331 Don’t trust RLIMIT_NOFILE in src/process.c
Problem discovered on Fedora 44 x86-64 when using GCC 16.1.1 with
-fsanitize=address, with test/src/process-tests.el tests that use
process-tests--with-raised-rlimit.  This function overrides the
default of 1024 for the maximum number of open files, which causes
undefined behavior (subscript errors) in src/process.c.
* src/process.c (inrange_fd, inrange_pipe): New functions.
(allocate_pty, create_process, create_pty, Fmake_pipe_process)
(Fmake_serial_process, connect_network_socket)
(network_interface_info, server_accept_connection)
(Fprocess_send_eof, child_signal_init):
Check that all newly allocated file descriptors are less than
FD_SETSIZE; close them and fail otherwise.
(create_pty, Fmake_pipe_process, Fmake_serial_process)
(connect_network_socket, server_accept_connection)
(child_signal_init): Remove no-longer-needed comparisons
to FD_SETSIZE, now that inrange_fd and inrange_pipe
do the checking for us.
2026-05-18 23:10:42 -07:00
Paul Eggert 71336e837a Pacify GCC 16.1.1 -Wanalyzer-null-dereference
* src/regex-emacs.c (forall_firstchar):
Avoid undefined behavior in the 2nd eassert when !bufp && !pend.
This pacifies GCC 16.1.1 20260501 (Red Hat 16.1.1-1) x86-64
when Emacs is configured with --enable-gcc-warnings.
2026-05-18 23:10:42 -07:00
Paul Eggert 07fe0b297b Fix undefined behavior in maybe_resize_hash_table
Problem discovered with GCC 16.1.1 -fsanitize=undefined.
* src/fns.c (maybe_resize_hash_table): Avoid undefined
behavior when h->key_and_value or h->hash are null pointers,
in which case we call memcpy (destination, NULL, 0)
which has undefined behavior in C89 through C23.
2026-05-18 23:10:42 -07:00
Paul Eggert 7587bb2654 Simplify module_extract_big_integer size calcs
* src/emacs-module.c (module_bignum_count_max):
Now of type ptrdiff_t, instead of likely being of type size_t.
(module_extract_big_integer): Omit now-unnecessary prefix +, a
now-unnecessary eassert against PTRDIFF_MAX, and and an
unnecessary cast to ptrdiff_t.
2026-05-18 23:10:42 -07:00
Paul Eggert b9e20e3995 Avoid malloc/free pairs in emit_static_object
* src/comp.c (emit_static_object): Avoid an malloc/free of
a 1 KiB buffer; just put it on the stack.  Use strnlen+mempcpy
instead of strncpy as there is no need to zero-fill buff.
Use int for values that must fit in int since we are
passing them to gcc_jit_context_new_rvalue_from_int.
2026-05-18 23:10:42 -07:00
Paul Eggert f5c3ddd9ad Prefer singed type to size_t in Fdefine_charset_internal
* src/charset.c (Fdefine_charset_internal):
Prefer int to size_t for a variable that has only int values.
2026-05-18 23:10:42 -07:00
Paul Eggert 56ae704e5b Fix (ash -1 1) undefined behavior
Problem discovered with GCC 16.1.1 -fsanitize=undefined.
* src/data.c (Fash): Don’t left-shift a negative number;
behavior is undefined (ISO C23 § 6.5.8 ¶ 4).
2026-05-18 23:10:42 -07:00
Stefan Monnier 8c71b0d6b8 shr.el: Don't insert image at outdated destination (bug#80945)
When fetching images asynchronously, keep track of the
destination region and refrain from inserting the image if
that region has been modified in the mean time.

* lisp/net/shr.el (shr--image-fetched, shr--async-put-image): New functions.
(shr-insert-image, shr-zoom-image, shr-image-displayer, shr-tag-img):
Use them.

* lisp/mail/rmailmm.el (rmail-mime-render-html-shr): Add FIXME.
2026-05-18 22:26:12 -04:00
Sean Whitton 641754e870 Merge from origin/emacs-31
28a13b01c7 vc-refresh-state: Override default-directory for backend ...
389874c533 Eglot: unbreak for treesit-less builds
10e91e096d Get selected item in newsticker list view
6bd73af241 ; * test/lisp/jsonrpc-tests.el: Adjust timeouts for CI EM...
eb90c528f3 ; * lisp/progmodes/eglot.el (eglot-code-action-indication...
1d7d6ffedb ; * etc/PROBLEMS: Fix entries about display of Emoji on T...
6c1829bf4c Eglot: fix thinko in recent markdown-related commit (bug#...
36036e71c0 Jsonrpc: migrate more tests to Python subprocess fixtures
0977d5915d Eglot: add left-fringe code action indicator (bug#80326)
b7825c3a27 Fix auth-source-backends-parse
d89054627c Fix updates of embedded formulas by 'calc-embedded-update...
1832a93547 ; * src/fns.c (Fequal): Doc fix.
f68e7a0a41 ; Improve documentation of commands that move by compilat...
2026-05-18 22:16:46 +01:00
Jim Porter d4cb550dba ; Improve last change
* test/src/process-tests.el (process-tests/broken-pipe): Use
CONNECTION-TYPE.
(process-tests/broken-pipe/pipe-all)
(process-tests/broken-pipe/pipe-stdin): Skip via 'skip-when'.
(process-tests/broken-pipe/pty)
(process-tests/broken-pipe/pty-stdin): Remove these invalid tests; EPIPE
from a PTY doesn't make sense.
2026-05-18 08:37:42 -07:00
Jim Porter e381cf1fc9 Allow child processes to continue after EPIPE
This ensures that if the child process closed its stdin and Emacs tries
to write to it, the process can still do any remaining work and exit
normally.  In practice, this can occur with commands like "head(1)"
(bug#79079).

* src/fileio.c (file_for_stream): New function, extracted from...
(Fset_binary_mode): ... here.
(Ffile__close_stream): New function.

* src/process.c (send_process): When encountering EPIPE, only close the
fd for the pipe to the child process's stdin.

* lisp/eshell/esh-io.el (eshell-output-object-to-target): Don't check
for process liveness anymore.

* test/src/process-tests.el (process-tests/broken-pipe): New function.
(process-tests/broken-pipe/pipe, process-tests/broken-pipe/pty)
(process-tests/broken-pipe/pipe-stdin)
(process-tests/broken-pipe/pty-stdin): New tests.

* etc/NEWS: Announce this change.
2026-05-17 17:24:10 -07:00
Jim Porter a557bf69b4 Ensure that process-tests clean up test processes
* test/src/process-tests.el (start-process-should-not-modify-arguments):
Clean up test process.
(process-test--check-pipe-process): New macro...
(process-test-make-pipe-process-no-buffer): ... call it.
2026-05-17 17:24:10 -07:00
Paul Eggert 7626993c6f Remove SAFE_ALLOCA_LISP_EXTRA
* src/lisp.h (SAFE_ALLOCA_LISP_EXTRA): Remove.  It is no longer
used, it makes life more difficult in the feature/igc3 branch,
and having it around tempted me to start using it again.
2026-05-17 12:57:18 -07:00
Paul Eggert 24f9e6a693 Make styled_format more compatible with igc
* src/editfns.c (styled_format): Don’t call SAFE_ALLOCA_LISP_EXTRA,
as this makes life more difficult in the feature/igc3 branch.
Also, allocate another byte for the format string trailing '\0',
so that we don’t rely in the str2num trick with trailing '\1'.
Problems reported by Pip Cet (Bug#81057#32).
Also, check alloca size more exactly.  Ameliorate the extra
conditional branches by doing all the internal size calculations
before a conditional branch on overflow.
2026-05-17 12:57:18 -07:00
Paul Eggert f599a92277 Shrink styled_format's frame quite a bit
Problem reported by Helmut Eller (Bug#81057).
On x86-64 this patch shrinks USEFUL_PRECISION_MAX
from 16382 to 1074, SPRINTF_BUFSIZE from 21318 to 1386,
and sizeof initial_buffer from 22318 to 2386.
This also fixes a problem reported privately by Pip Cet:
exactly formatting the smallest positive IEEE double 2**-1074
with %f	needs %.1074f and 1074 is DBL_MANT_DIG - DBL_MIN_EXP,
not merely 1 - DBL_MIN_EXP.
* src/editfns.c (USEFUL_PRECISION_MAX, SPRINTF_BUFSIZE):
Base these on double, not long double, since long double
is not the worst case (it is used only for converted u?intmax_t).
(USEFUL_PRECISION_MAX): Add DBL_MANT_DIG - 1 as per Pip Cet.
2026-05-17 01:26:20 -07:00
Paul Eggert cf693ce059 Grow styled_format's frame somewhat
* src/editfns.c (styled_format): Don’t subtract
sizeof initial_buffer from sa_avail (bug#81057).
2026-05-17 01:26:20 -07:00
Paul Eggert 1fae14a022 Streamline styled_format aux allocation
* src/editfns.c (styled_format): Streamline allocation of
auxiliary tables, by allocating them all in one go
rather than via separate alloca / mallocs.
2026-05-17 01:26:20 -07:00
Eli Zaretskii 84e646f0b3 ; * etc/NEWS: Fix last change. 2026-05-16 18:18:54 +03:00
Philip Kaludercic b13450973a
Copy changes from tarballs when installing VC packages
* etc/NEWS: Document change.
* lisp/emacs-lisp/package-vc.el (package-vc--clone): Implement
logic to find and copy files from a previous installation.
(package-vc-install): Indicate the effect of the prefix argument
in the prompt.
2026-05-16 16:31:48 +02:00
Eli Zaretskii 407b5ce7ab Merge from origin/emacs-31
cf96e9cb5a ; Fix byte-compilation warnings in non-Tree-Sitter builds
23575adc7b ; * doc/lispref/variables.texi (Local Variables): Fix typ...
8b6fb2f646 ; * doc/lispref/variables.texi (Local Variables): Fix 'na...
d3c72b8389 ; * src/xdisp.c (display_line): Fix commentary (bug#80693).
a981517b72 Fill margins with 'margin' face on truncated screen lines
8e37499035 ; * doc/lispref/os.texi (Init File): Fix markup (bug#81049).
f4c326c378 ; * src/sfnt.c (sfnt_read_cmap_format_12): Assert there's...
bf89ee6d07 ; * etc/PROBLEMS: Cursor not shown on Windows with system...
20500d6200 ; htmlfontify: Handle 'reset' face attribute value (bug#8...
d0d657fa90 ; Minor Tramp cleanup
93ea0d7d28 ; Improve documentation of VC commands in Dired
318084829c Eglot: adjust reference to completion frontends in manual
2a166c2dbd Eldoc: display documentation in visual-line-mode
aba60ad0c5 Eglot: prefer markdown-ts-view-mode for markup rendering ...
689c3bd508 Use 'read-multiple-choice' in 'markdown-ts-mode' (bug#81027)
71809ee5df Fix 'markdown-ts-code-span' face (bug#81026)
286833e401 Add read-only 'markdown-ts-view-mode' (bug#81023)
b39c123490 Fix strikethrough in 'markdown-ts-mode' (bug#80991)
0be998d4bc Fix code-span in headings in 'markdown-ts-mode' (bug#80979)
a00beb3a31 Make 'markdown-ts-inline-images' buffer local and test fo...
a0c05029fd * etc/NEWS: Mention new user option tramp-propagate-emacs...
2e71d2c709 Propagate EMACSCLIENT_TRAMP to remote hosts with Tramp
ff96db93f2 keyboard-tests.el: Try and fix the failure on EMBA
ce3098752c doc: Remove long obsolete references to `package-initialize`
9bc04b001a vc-next-action: Call vc-delete-file on FILESET-ONLY-FILES
13039e3442 ; touch-up last commit: copyright and comments
c2a24dcec8 ; update msys2 build helper for Emacs 31 & UCRT
3630baae72 hideshow: Support new 'margin' face for margin indicators...
20d17df3f4 Use the new 'margin' face in Flymake (bug#80693)
07f2bbc905 vc-dir-resynch-file: Pass down non-truename'd FILE
2026-05-16 07:24:17 -04:00
Eli Zaretskii 21cda148c7 ; Merge from origin/emacs-31
The following commit was skipped:

a8f67a1f06 Change ERC version for Emacs 31 to 5.6.2.31.1
2026-05-16 07:17:51 -04:00
Eli Zaretskii 87e4687749 Merge from origin/emacs-31
7eab6ef3ce Fix 'sgml-parse-tag-backward' to handle tags in comments
09dc864b0b Fix eww-submit for forms with no action (bug#80918)
0e7a24d931 * lisp/progmodes/hideshow.el (hs--set-variable): Use 'set...
f12b01582d Fix Completions buffer disappearing with tmm-menubar (bug...
519fd83211 Fix secrets.el when Emacs is a flatpak
9e4ea934f2 Fix 'prepare-user-lisp' to follow symlinks
e613e38021 Update "timeout" to 2.1.6
196fd80689 [GTK3, HiDPI] Fix width/height round-trip through Configu...
acc07f1a03 [GTK3] On Expose, repaint the border before the content
5323eebcff Test read-passwd behavior (bug#80838)
01c5990dd0 Fix nested read-passwd calls (bug#80838)
027043df25 ; * lisp/gnus/message.el (message-server-alist): Doc fix ...
3b608b233e Fix terminal emulation of "ESC [ K" sequence
6a605c65a8 Fix vertical-motion across overlay strings with embedded ...
e4d529c67b ; Fix last change
d54faa0f1b Mark gnus-dbus.el as obsolete
9bf2a19bb2 Move gnus-dbus.el to obsolete/gnus-dbus.el
984024daf3 Gnus: Use new sleep library
d7c130972e ; * lisp/term/pgtk-win.el (icon-map-list): Fix :type.
5579893ed7 ; Don't block/unblock input in text_extents methods
547b1ee7b6 Fix Rmail behavior wrt globalized minor modes
6ba05106f4 Fix display images in the display margins
56f27dd9f0 Eglot: fix eglot--sig-info with non-UTF-32 positionEncoding
543d8a7a9d [NS] Fix deprecated variable (bug#80985)

# Conflicts:
#	etc/NEWS
2026-05-16 07:17:51 -04:00
Philip Kaludercic 025ecf9e7b
* lisp/net/rcirc.el (rcirc-monospace-text): Inherit 'fixed-pitch' 2026-05-14 22:13:33 +02:00
Richard Stallman 0fb9d096e3 The summary scan should include the current msg and run to end.
* lisp/mail/rmailsum.el (rmail-new-summary-1): If we are before,
or close to, msg number rmail-summary-starting-message,
start the search a little before there.
2026-05-14 11:16:35 -04:00
F. Jason Park ec7a5f85c9 Run module setup in ERC query buffers on reconnect
* etc/ERC-NEWS: Mention change.
* lisp/erc/erc.el (erc-connection-established): Apply `erc--open-target'
to all existing query buffers after they've been reassociated by
the erc-networks logic.
2026-05-12 21:11:43 -07:00
F. Jason Park 606c0b22e4 ; Make reconnect detection more readable in erc-open
* lisp/erc/erc.el (erc-open): Bind `erc--server-reconnecting' instead of
relying on a confusing single-use variable.
2026-05-12 21:03:02 -07:00
F. Jason Park 1613f2e652 Preserve order of local ERC modules for activation
* etc/ERC-NEWS: Add new section for ERC 5.7.
* lisp/erc/erc.el (erc--update-modules): Reverse returned list.
* test/lisp/erc/erc-tests.el (erc--update-modules/local): Update.
2026-05-12 21:03:02 -07:00
F. Jason Park 76f5181bc6 Improve source NUH handling in ERC
* lisp/erc/erc.el (erc--user-nuh-message-types): New variable.
(erc--shuffle-nuh-nickward, erc--interpret-nuh): Replace former with
latter, whose behavior is easier to predict.
* test/lisp/erc/erc-tests.el (erc--interpret-nuh): New test.
2026-05-12 21:03:02 -07:00
F. Jason Park aa31628584 Refactor erc--warn-once-before-connect
* lisp/erc/erc-button.el (erc-button--display-error-notice-with-keys):
Ensure tail of let-bound `erc-insert-post-hook' is a list.
* lisp/erc/erc-truncate.el (erc-truncate--warn-about-logging): Use
`erc--warn-once-before-connect' instead of calling
`erc-button--display-error-notice-with-keys-and-warn' directly.
* lisp/erc/erc.el (erc--warn-once-before-connect-function)
(erc--warn-once-before-connect-calls): New variables.
(erc--warn-once-before-connect): Refactor for readability, incorporating
new definitions above for flexibility and to help ensure uniqueness.
2026-05-12 21:03:02 -07:00
F. Jason Park f3da59a8c5 Improve isolation of some ERC test environments
* lisp/erc/erc.el (erc--lwarn): During tests where the variable
`erc--warnings-buffer-name' is non-nil, don't display the Warnings
buffer, and inhibit messages for the benefit of batch runs.
* test/lisp/erc/erc-tests.el (erc--modify-local-map): Protect various
hooks from module-setup code.
* test/lisp/erc/resources/erc-tests-common.el
(erc-tests-common-equal-with-props): Act more like
`equal-including-properties' in accepting arbitrary objects rather than
just strings.
(erc-tests-common-with-global-modules): New macro.
(erc-tests-common-frozen-options): New variable.
(erc-tests-common-with-frozen-options): New macro.
(erc-tests-common-make-server-buf): Accept a buffer for the NAME arg.
(erc-tests-common-assert-get-inserted-msg-readonly-with): Instead of
shadowing, use macro to protect calling environment from effects of
activating global module.
2026-05-12 21:03:02 -07:00
F. Jason Park 88e8b8c073 ; Remove some forward declarations from ERC tests
* lisp/erc/erc.el (erc--insert-before-markers-transplanting-hidden):
Don't deliberately return anything because the return value is
undefined.  The only existing call site, in `erc-insert-line', invokes
the function indirectly via `erc--insert-line-function' and discards the
result.
* test/lisp/erc/erc-scenarios-join-display-context.el: Require
`erc-join'.
* test/lisp/erc/erc-scenarios-log.el: Remove forward declarations and
require `erc-stamp'.
* test/lisp/erc/erc-scenarios-match.el: Require `erc-match'.
* test/lisp/erc/erc-scenarios-misc.el
(erc-scenarios-base-kill-server-track): Suppress unwanted newline in
test output.
* test/lisp/erc/erc-scenarios-sasl.el (erc-scenarios-sasl--plain-fail):
Don't redundantly bind `erc--warnings-buffer-name' or create a buffer
for it.  Use literal value assigned by test fixture instead.
* test/lisp/erc/erc-scenarios-services-misc.el: Require `erc-services'.
* test/lisp/erc/erc-tests.el (erc-handle-irc-url): Remove redundant
`save-excursion'.
(erc-tests--modules): Reflow into single column for easier management of
divergent WIP patch sets.  This should help minimize manual surgery when
applying them atop one another.
* test/lisp/erc/resources/erc-scenarios-common.el: Remove unused
`require's and forward declarations from top of file.
(erc-scenarios-common--make-bindings): Remove the non-existent
`erc-auth-source-parameters-join-function' and add
`erc--warnings-buffer-name'.  The latter's buffer, if created, will be
killed automatically when the test body exits.
(erc-scenarios-common-with-cleanup): Generate locally scoped defvars to
be used in a manner similar to `dlet' for user options yet to be loaded.
(erc-scenarios-common--assert-date-stamps): Don't run when `erc-stamp'
isn't loaded.
2026-05-12 20:27:39 -07:00
F. Jason Park 08dc13ea94 Change ERC version to 5.7-git
* doc/misc/erc.texi: Change ERCVER to 5.7 without a "-git" suffix.
* lisp/erc/erc.el (erc-version): Change working version to 5.7-git.  Do
the same for the package "Version" header.  Bump required Compat version
to 31.  Add new 5.7 to Emacs 32.1 mapping in top-level modification of
`customize-package-emacs-version-alist'.
2026-05-12 20:27:39 -07:00
Andreas Schwab 98c28606d2 ; Fix typo 2026-05-12 17:11:00 +02:00
Andreas Schwab 306f4d1660 url-cookie: use C locale when formatting expiry times
The expiry time needs to be reconizable by parse-time-string,
which is only guaranteed with the C locale.

* lisp/url/url-cookie.el (url-cookie-parse-file-netscape): Use C
locale for formatted expiry time.
(url-cookie-handle-set-cookie): Likewise.
2026-05-12 16:02:29 +02:00
Michael Albinus c68f3237be Fix file-name-non-special implementation of get-file-buffer
* lisp/files.el (file-name-non-special): Fix `get-file-buffer'.
(Bug#80718)

* test/lisp/files-tests.el
(files-tests-file-name-non-special--temp-file-prefixes): Extend list.
(w32-downcase-file-names): Declare.
(files-tests-file-name-non-special-get-file-buffer): Adapt test.
2026-05-12 08:48:43 +02:00
F. Jason Park 6d347d9834 Release ERC 5.6.2
* lisp/erc/erc.el: Change "Version" package header from 5.6.2-git to
5.6.2.  The ERCVER variable in doc/misc/erc.texi is already there.
Retain `customize-package-emacs-version-alist' mapping to Emacs 31.1
even though master has already advanced to 32.0.50.
(erc-version): Change version from 5.6.2-git to 5.6.2.
2026-05-11 20:26:20 -07:00
Eshel Yaron 66729f3e50
New variable 'completion-frontend-properties' (bug#80990)
Allow completion "frontends" to provide extra information
that the backends they call can use to adjust or optimize
their behavior.
See some relevant discussion at
https://yhetil.org/emacs/jwv7bpl28y6.fsf-monnier+emacs@gnu.org/

* lisp/minibuffer.el (completion-frontend-properties):
New variable.
(completion-lazy-hilit-p): New function.
(completion-hilit-commonality, completion-lazy-hilit)
(completion-pcm--hilit-commonality)
(completion-flex-all-completions): Use it instead of
checking the 'completion-lazy-hilit' variable directly.
* lisp/completion-preview.el (completion-preview--capf-wrapper):
Bind 'completion-frontend-properties'.
(completion-preview--try-table): Add comment.
* etc/NEWS: Announce 'completion-frontend-properties'.
2026-05-09 20:06:25 +02:00
Sean Whitton 876a1db6ee Merge from origin/emacs-31
2d496b842d ; Fix Gregor Schmid's attribution for lua-mode.el.
69c50dcb47 ; package-activate-all: Drop requiring package now not pr...
f94637749a vc-switch-working-tree: Use project-current again
060451d6e0 treesit-explore-mode usability improvements (bug#80935)
48b064a2aa Fix 'vc-dir-resynch-file' again (bug#80967)
2026-05-08 13:48:22 +01:00
Michael Albinus 5e0b4b96bc ; Adapt files in admin/notes for emacs-31 branch
* admin/notes/emba: Mention scheduled pipelines.

* admin/notes/git-workflow: Adapt for emacs-31 branch.
2026-05-08 10:47:26 +02:00
Eli Zaretskii 730d3884dc ; Fix the build broken by a typo in configure.ac
* configure.ac (module_env_snippet_32): Fix typo.
2026-05-08 09:51:13 +03:00
Sean Whitton 90f8f27a58 Merge from origin/emacs-31
8d0bf280a6 ; * ChangeLog.5: Some fixes and tidying up.
1ec79b48f3 ; Update exported ChangeLog files and etc/AUTHORS
991f6100eb ; * admin/make-tarball.txt: Suggest load-file, not require.
3c6c3f5a69 ; Fix two file headers misunderstood by authors.el.
2026-05-07 20:15:39 +01:00
Sean Whitton 868fd126ae ; Merge from origin/emacs-31
The following commit was skipped:

311f1fe2ba Cut the emacs-31 release branch
2026-05-07 20:15:39 +01:00
Sean Whitton ddde687b3f ; * admin/admin.el (set-version): Fix punctuation. 2026-05-07 17:46:57 +01:00
Sean Whitton 0d287aa276 Bump master Emacs version to 32.0.50
* README:
* configure.ac:
* etc/refcards/ru-refcard.tex:
* exec/configure.ac:
* java/AndroidManifest.xml.in (Version-code):
* msdos/sed2v2.inp:
* nt/README.W32: Bump Emacs version to 32.0.50.
* etc/NEWS: Empty for Emacs 32.
* lisp/cus-edit.el (customize-changed-options-previous-release):
Set last version to 31.1.
* src/emacs-module.in.h (struct emacs_env_32): Add.
* src/module-env-31.h: Remove header comment.
* src/module-env-32.h: New file.
2026-05-07 17:46:43 +01:00
Sean Whitton edd345c33f ; Move etc/NEWS to etc/NEWS.31. 2026-05-07 17:40:24 +01:00
753 changed files with 30709 additions and 13883 deletions

View file

@ -7,7 +7,6 @@
(emacs-lisp-docstring-fill-column . 72)
(vc-git-annotate-switches . "-w")
(bug-reference-url-format . "https://debbugs.gnu.org/%s")
(diff-add-log-use-relative-names . t)
(etags-regen-regexp-alist
.
((("c" "objc") .
@ -57,7 +56,8 @@
(change-log-mode . ((add-log-time-zone-rule . t)
(fill-column . 74)
(mode . bug-reference)))
(diff-mode . ((mode . whitespace)))
(diff-mode . ((mode . whitespace)
(diff-add-log-use-relative-names . t)))
(emacs-lisp-mode . ((indent-tabs-mode . nil)
(electric-quote-comment . nil)
(electric-quote-string . nil)

View file

@ -15670,7 +15670,7 @@
* lisp/progmodes/cc-mode.el (c-depropertize-CPP): Test for general ml strings
rather than C++ raw strings.
(c-unescaped-nls-in-string-p): Handle languages with ml strings.
(c-clear-string-fences): Fix bug with wrong parenthesisation.
(c-clear-string-fences): Fix bug with wrong parenthesization.
(c-before-change-check-unbalanced-strings)
(c-after-change-mark-abnormal-strings, c-after-change-escape-NL-in-string):
Adapt for multi-line strings.
@ -17441,7 +17441,7 @@
2021-07-30 Mattias Engdegård <mattiase@acm.org>
Simplify lexical let-optimisations
Simplify lexical let-optimizations
Ensure in cconv that let-bindings have the normal form (VAR EXPR)
where VAR is a valid variable name, so that we don't need to keep
@ -57196,7 +57196,7 @@
* lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
'javac': Column numbers are 1-based by default; remove subtraction and
η-reduce. Translate regexp to rx (mechanised).
η-reduce. Translate regexp to rx (mechanized).
* test/lisp/progmodes/compile-tests.el (compile-tests--test-regexps-data):
Adapt 'javac' test cases to the change.

View file

@ -672,7 +672,7 @@
format.
This patch fixes various problems preventing this script from
working. The job of this script is to collect Emacs' dependanicies
working. The job of this script is to collect Emacs' dependencies
and the (MSYS2/MinGW64) source archives for dependencies
(including 2nd etc. order dependencies) into zip archives. GPL
requires distributing such archives (along with Emacs' own
@ -99218,7 +99218,7 @@
granular.
* lisp/progmodes/java-ts-mode.el (java-ts-mode): Use regexp-opt to
distinguish more granularly.
distinguish in more detail.
2022-12-09 Randy Taylor <dev@rjt.dev>
@ -114450,7 +114450,7 @@
Make Gnus respect mode-line-buffer-identification-keymap
* lisp/gnus/gnus-group.el (gnus-group-set-mode-line): Use
'propertized-buffer-identification' to buttonise and fontify the
'propertized-buffer-identification' to buttonize and fontify the
buffer name.
* lisp/gnus/gnus-sum.el (gnus-set-mode-line):
* lisp/gnus/gnus.el (gnus-mode-line-buffer-identification): Adjust

View file

@ -2,6 +2,121 @@
* Version 31.1 released.
2026-08-24 Sean Whitton <spwhitton@spwhitton.name>
Delete test that hangs
* test/lisp/tab-bar-tests.el
(tab-bar-tests-quit-restore-window): Delete test that hangs, for
the Emacs 31.1 release. Do not merge to master.
2026-08-23 Ulrich Müller <ulm@gentoo.org>
em-script-tests: don't load the site file
* test/lisp/eshell/em-script-tests.el (em-script-test/batch-file)
(em-script-test/batch-file/shebang): Invoke Emacs with -Q to
suppress site file loading. (Bug#81679)
2026-08-23 Ulrich Müller <ulm@gentoo.org>
emacsclient-tests: don't load the site file
* test/lib-src/emacsclient-tests.el
(emacsclient-test-alternate-editor-allows-arguments)
(emacsclient-test-alternate-editor-allows-quotes): Invoke the
alternate editor with -Q to suppress site file loading. (Bug#81676)
2026-08-23 Stephen Berman <stephen.berman@gmx.net>
Fix navigating vertical completions with annotations (bug#81645)
* lisp/simple.el (last-completion): When finding the last column
in the completions list, account for annotations on the candidate.
2026-08-23 Philip Kaludercic <philipk@posteo.net>
Fix 'describe-package' for the Emacs pseudo package
* lisp/emacs-lisp/package.el (describe-package-1): Manually
construct a package-desc object if the package being described
in 'emacs', otherwise fall back to 'package-get-descriptor'.
This is necessary since 'package-get-descriptor' doesn't handle
pseudo packages. (Bug#81671)
2026-08-23 Eli Zaretskii <eliz@gnu.org>
Avoid errors in text-only client frames of PGTK build
* lisp/net/browse-url.el (browse-url): Don't call
pgtk-backend-display-class on TTY frame, as it will signal an
error. (Bug#81666)
2026-08-21 Michael Albinus <michael.albinus@gmx.de>
Backport: Restrict Tramp user name
* doc/misc/tramp.texi (File name syntax): The user name can also
be an environment variable.
* lisp/net/tramp.el (tramp-build-prefix-regexp):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-expand-file-name)
(tramp-gvfs-get-file-attributes, tramp-gvfs-file-name)
(tramp-gvfs-url-host, tramp-gvfs-handler-mounted-unmounted)
(tramp-gvfs-connection-mounted-p, tramp-gvfs-mount-spec-entry)
(tramp-gvfs-mount-spec):
* lisp/net/tramp-rclone.el (tramp-rclone-parse-device-names)
(tramp-rclone-remote-file-name):
* lisp/net/tramp-smb.el (tramp-smb-get-share, tramp-smb-get-localname):
Use string-anchored regexp, not line-anchored.
* lisp/net/tramp.el (tramp-prefix-regexp): Adapt docstring.
(tramp-user-regexp): Exclude shell meta characters.
(tramp-dissect-file-name, tramp-file-name-handler):
Expand environment variable.
(tramp-convert-file-attributes):
* lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-attributes):
Quote symbolic link target with remote file name syntax.
* test/lisp/net/tramp-tests.el (tramp-test01-file-name-syntax)
(tramp-test01-file-name-syntax-simplified)
(tramp-test01-file-name-syntax-separate)
(tramp-test02-file-name-dissect)
(tramp-test02-file-name-dissect-simplified)
(tramp-test02-file-name-dissect-separate)
(tramp-test21-file-links): Extend test.
(cherry picked from commit f3e7104d05bdb8e32ba13bf75604108ad88536dc)
2026-08-21 Spencer Baugh <sbaugh@janestreet.com>
Fix TAB to wrap with completion-auto-select t
* lisp/minibuffer.el (completions--clear-selection): New
function.
(minibuffer-hide-completions): Call it.
* lisp/simple.el (next-column-completion): Call it (bug#81635).
* test/lisp/minibuffer-tests.el
(completion-auto-select-test-bug81635): New test.
2026-08-21 Juri Linkov <juri@linkov.net>
* lisp/progmodes/c-ts-mode.el (c-ts-mode--thing-settings): Remove 'comment'.
Comment out the 'comment' thing since 'treesit-forward-comment'
is not ready to handle block comments (bug#80837).
Do not merge to master.
2026-08-20 Yuan Fu <casouri@gmail.com>
Fix prev-adaptive-prefix anchor (bug#61314)
* lisp/treesit.el (treesit-simple-indent-presets):
Replace (match-beginning 1) with (skip-syntax-forward "-"), both
returns the position of the beginning of the prefix, but
skip-syntax-forward always works regardless whether
adaptive-fill-regexp has a match group for the prefix.
2026-08-17 Sean Whitton <spwhitton@spwhitton.name>
* doc/misc/efaq.texi (New in Emacs 31): New node.
@ -1637,7 +1752,7 @@
* lisp/treesit.el:
(treesit--embed-languages-need-full-parse): New variable.
(treesit--set-embed-ranges): Reparse full range if the langauge
(treesit--set-embed-ranges): Reparse full range if the language
needs it.
2026-06-19 Stephen Berman <stephen.berman@gmx.net>
@ -1976,7 +2091,7 @@
* src/xselect.c (x_display_selection_waiting_message):
(x_cancel_atimer):
(x_get_foreign_selection): Use a pointer to a timer variable, which is
cleared when the timer runs or is otherwise cancelled. Don't cancel
cleared when the timer runs or is otherwise canceled. Don't cancel
the timer twice.
2026-06-06 Pip Cet <pipcet@protonmail.com>
@ -3426,7 +3541,7 @@
call into the backend to gather the VC state. Since this function is
also called from another context, where the requirements are less clear,
keeping current smenatics in that situation seemed prudent, so the new
behaviour is activate with a new optional parameter.
behavior is activate with a new optional parameter.
* lisp/vc/vc-dir.el (vc-dir-resynch-file): Call
vc-dir-recompute-file-state with truename=t.
@ -4610,7 +4725,7 @@
2026-04-30 Vladimir Kazanov <vekazanov@gmail.com>
Add ERT coverage for read_key_sequence behaviour
Add ERT coverage for read_key_sequence behavior
* test/src/keyboard-tests.el
(keyboard-tests--rks-fake-posn)
@ -7093,7 +7208,7 @@
Implement new Dired handling of errors from 'ls'
The error messages are now displayed in a popped up buffer instead
of being output in the Dired buffer and signalling an error. The
of being output in the Dired buffer and signaling an error. The
file name bounds in Dired entries are now determined solely by the
offsets calculated by 'ls' with the --dired option and
consequently Dired now reliably recognizes file names that contain
@ -8665,10 +8780,10 @@
2026-03-03 Mattias Engdegård <mattias.engdegard@gmail.com>
Faster JSON string serialisation (bug#80529)
Faster JSON string serialization (bug#80529)
* src/json.c (json_out_string):
Optimise for runs of non-special ASCII chars.
Optimize for runs of non-special ASCII chars.
This seems to be a a substantial performance gain for long strings but a
smaller regression for short strings (up to 6 chars or thereabouts,
@ -8943,7 +9058,7 @@
2026-02-28 Mattias Engdegård <mattias.engdegard@gmail.com>
Implement string> as a compiler macro instead of an optimisation
Implement string> as a compiler macro instead of an optimization
This doesn't affect the generated code.
@ -9167,10 +9282,10 @@
2026-02-26 Mattias Engdegård <mattias.engdegard@gmail.com>
Simplify peephole optimisation rule
Simplify peephole optimization rule
* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Remove some obsolete dynamic variable optimisations that no longer
Remove some obsolete dynamic variable optimizations that no longer
improve any code. Fix broken logging (thanks Pip).
2026-02-26 Yuan Fu <casouri@gmail.com>
@ -9254,7 +9369,7 @@
Fix eglot-tests on MacOS (bug#80479)
* test/lisp/progmodes/eglot-tests.el (eglot--call-with-fixture):
Normalise 'temporary-file-directory' to stave off problems that
Normalize 'temporary-file-directory' to stave off problems that
occur when it contains symlinks, which is common on MacOS.
2026-02-24 Mattias Engdegård <mattias.engdegard@gmail.com>
@ -9904,7 +10019,7 @@
2026-02-20 Mattias Engdegård <mattias.engdegard@gmail.com>
Optimise closed-over variables earlier
Optimize closed-over variables earlier
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
Treat 'internal-get-closed-var' as a special form and delete it in
@ -9912,7 +10027,7 @@
2026-02-20 Mattias Engdegård <mattias.engdegard@gmail.com>
Remove two obsolete peephole optimisation rules
Remove two obsolete peephole optimization rules
* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Remove two rules: the first could sometimes skip a varref in a loop;
@ -9921,7 +10036,7 @@
from the top to the bottom of a loop but depended on the first to work.
Both were quite slow, easily measurable when compiling big files, and
arguably O(n³) which isn't very good for a peephole optimisation.
arguably O(n³) which isn't very good for a peephole optimization.
2026-02-20 Sean Whitton <spwhitton@spwhitton.name>
@ -11049,7 +11164,7 @@
2026-02-11 Mattias Engdegård <mattias.engdegard@gmail.com>
Better 'prog1' optimisation
Better 'prog1' optimization
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
Always evaporate 'prog1' when the tail is effect-free, even
@ -11518,7 +11633,7 @@
(package--autosuggest-find-candidates)
(package--autosugest-line-format, package-autosuggest-face)
(package--autosuggest-after-change-mode, package-autosuggest):
Remove definitions needed to recognise suggestions from here.
Remove definitions needed to recognize suggestions from here.
* lisp/emacs-lisp/package-activate.el (package-autosuggest-style)
(package--autosuggest-database, package--autosuggest-suggested)
@ -11566,7 +11681,7 @@
Eglot: fix thinko in eglot--async-request
Just because a specific request of a specific "hint" is
cancelled doesn't mean we can cancel the other's too. Also
canceled doesn't mean we can cancel the other's too. Also
eglot-advertise-cancellation = nil was subtly broken.
This manifested itself mostly in Eglot semantic tokens.
@ -12005,7 +12120,7 @@
* lisp/progmodes/eglot.el (eglot-server-programs): Use "elp" for erlang-mode.
erlang_ls has been archived in favour of erlang-language-platform.
erlang_ls has been archived in favor of erlang-language-platform.
Suggested by Alan & Kim Zimmerman <alan.zimm@gmail.com> (bug#79943).
2026-01-30 Juri Linkov <juri@linkov.net>
@ -12665,11 +12780,11 @@
2026-01-23 Mattias Engdegård <mattias.engdegard@gmail.com>
* lisp/emacs-lisp/pcase.el (pcase--macroexpand): Normalise atom etc.
* lisp/emacs-lisp/pcase.el (pcase--macroexpand): Normalize atom etc.
Transform (pred P) for P in {atom, nlistp, identity, not} into
predicates that pcase already understands in type terms.
This doesn't affect the behaviour but generates better code.
This doesn't affect the behavior but generates better code.
2026-01-23 Mattias Engdegård <mattias.engdegard@gmail.com>
@ -12911,7 +13026,7 @@
It was completely broken, with a cancel being set for every sent (and
probably already received) async request, and no actual discarding
of the response of a cancelled request.
of the response of a canceled request.
* lisp/progmodes/eglot.el (eglot--async-request): Fix cancellation
of async requests.
@ -14728,7 +14843,7 @@
associated alist entries `tab-name' and `tab-group'.
* lisp/tab-bar.el (display-buffer-in-tab): Restructure docstring for
clarity. Describe the `reusable-frames' behaviour first (as if it finds
clarity. Describe the `reusable-frames' behavior first (as if it finds
a frame with a suitable tab then the `tab-name' entry is not used).
(display-buffer-in-new-tab): Use consistent wording.
@ -14831,7 +14946,7 @@
2026-01-01 Mattias Engdegård <mattias.engdegard@gmail.com>
Clean up a lapcode peephole optimisation rule
Clean up a lapcode peephole optimization rule
* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Clean up and simplify an old jump-to-conditional-jump rule that was
@ -15292,7 +15407,7 @@
* lisp/subr.el (split-string):
Make it clear that the SEPARATORS argument should not match the empty
string, since the behaviour was entirely an artefact of the original
string, since the behavior was entirely an artefact of the original
implementation in this case; it makes little sense otherwise.
Clean up the examples for conciseness and do not waste space on
@ -15303,8 +15418,8 @@
Various split-string improvements
* lisp/subr.el (split-string):
Fix quadratic behaviour in (split-string "x:x:x..." ":" nil " +").
General code reorganisation for speed and reduced allocation.
Fix quadratic behavior in (split-string "x:x:x..." ":" nil " +").
General code reorganization for speed and reduced allocation.
Fix a regexp bug; eg, (split-string "A;B" "," nil ";\\|:")
* test/lisp/subr-tests.el (subr-test-split-string):
@ -15571,7 +15686,7 @@
2025-12-22 Mattias Engdegård <mattias.engdegard@gmail.com>
Recognise %b and %B in compile-time format string checker
Recognize %b and %B in compile-time format string checker
* lisp/emacs-lisp/bytecomp.el (byte-compile-format-warn): Add b and B.
@ -16811,7 +16926,7 @@
(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
(package-vc-tests-add): Ensure suffix capitalization remains as
original when calling `replace-regexp-in-string'.
(package-vc-tests-create-repository): Fix typo in temporary
email and use a reserved TLD.
@ -17216,7 +17331,7 @@
* lisp/progmodes/antlr-mode.el: Correct indentation of rule headers.
(antlr-indent-line): When looking for the end of a rule header, do
not stop at colon if that is followed by another one, because this
the scope name of a preceeding grammar action.
the scope name of a preceding grammar action.
* lisp/progmodes/antlr-mode.el: Support more action languages.
(antlr-language-alist): Add entries for C, Delphi, JavaScript,
@ -18567,7 +18682,7 @@
Therefore it's better for the ergonomics of this commonly used command
to leave the code as it was and simply rely on C-n to bring in the
default value (which is the current symbol name), instead of forcing
users accustomed to the previous behaviour remember to press sth like
users accustomed to the previous behavior remember to press sth like
M-DEL to clean the input.
* lisp/progmodes/eglot.el (eglot-rename): Tweak.
@ -19105,7 +19220,7 @@
* 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.
This mirrors the behavior of `if-let*' and family.
2025-11-24 Juri Linkov <juri@linkov.net>
@ -21311,9 +21426,9 @@
(rcirc-markup-attributes): Delete markup codes straight after
processing it, to correctly handle toggling codes. E.g. when
processing the message "one ^Btwo^B three", we previously
recognised the first interval "^Btwo^B" and moved over the ^B.
recognized the first interval "^Btwo^B" and moved over the ^B.
Searching for the next range to markup, we would now falsely
recognise "^B three" to be another markup range, instead of it
recognize "^B three" to be another markup range, instead of it
being the negative toggle. By removing the processed codes, we
avoid this issue. This reverts the functionality removed in
946ceca2, and therefore also re-adds the check to make an
@ -21571,7 +21686,7 @@
Define compiler macros for /=, atom and nlistp
Calls to these functions were previously rewritten in terms of other
functions both in the optimiser and during codegen, for no good reason.
functions both in the optimizer and during codegen, for no good reason.
This also resulted in poor diagnostics: wrong-arity calls to 'atom' and
'nlistp' produced doubled but slightly-different warnings, and no
@ -21585,11 +21700,11 @@
2025-10-30 Mattias Engdegård <mattias.engdegard@gmail.com>
Fix numeric comparison bug when optimisation is disabled
Fix numeric comparison bug when optimization is disabled
* lisp/emacs-lisp/bytecomp.el (byte-compile-cmp):
Don't assume that N-ary comparisons have been normalised, which is done
in the optimiser. Reported by Pip Cet.
Don't assume that N-ary comparisons have been normalized, which is done
in the optimizer. Reported by Pip Cet.
2025-10-30 Mattias Engdegård <mattias.engdegard@gmail.com>
@ -21611,7 +21726,7 @@
* lisp/textmodes/markdown-ts-mode.el:
(markdown-ts--convert-code-block-language): Return nil if the
langauge doesn't have a corresponding major mode in
language doesn't have a corresponding major mode in
markdown-ts-code-block-source-mode-map.
2025-10-30 Yuan Fu <casouri@gmail.com>
@ -21815,14 +21930,14 @@
2025-10-24 Mattias Engdegård <mattias.engdegard@gmail.com>
Fix peephole optimiser bug for symbolp
Fix peephole optimizer bug for symbolp
* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Don't sink 'symbolp' past 'unbind'; it's unsafe.
2025-10-24 Mattias Engdegård <mattias.engdegard@gmail.com>
Move some constants into the peephole optimiser
Move some constants into the peephole optimizer
* lisp/emacs-lisp/byte-opt.el (byte-tagref-ops, byte-conditional-ops)
(byte-after-unbind-ops, byte-compile-side-effect-and-error-free-ops)
@ -22852,7 +22967,7 @@
Fix Tramp customization
Do not use the ;;;###tramp-autoload cookie for defcustoms. This
damages the customisation when Tramp is autoloaded. Reported by
damages the customization when Tramp is autoloaded. Reported by
Joel Reicher <joel.reicher@gmail.com>.
* lisp/net/tramp-cache.el (tramp-verbose): Declare.
@ -25253,7 +25368,7 @@
2025-09-07 Mattias Engdegård <mattias.engdegard@gmail.com>
Harmonise doc strings for {re-,posix-,}search-{forward,backward}
Harmonize doc strings for {re-,posix-,}search-{forward,backward}
The doc strings for re-search-forward and re-search-backward have been
improved (bug#25193, bug#31584) but the corresponding posix- and
@ -26772,7 +26887,7 @@
The previous fix for this bug is an acceptable approach, but
more care must be taken when clearing a flymake--state object's
diagnostics. Refactor this behaviour into a helper.
diagnostics. Refactor this behavior into a helper.
* lisp/progmodes/flymake.el (flymake--clear-state): New helper.
(flymake--publish-diagnostics, flymake-start): Use it.
@ -35235,7 +35350,7 @@
* lisp/emacs-lisp/package.el (package-unpack, package-dir-info):
Check the marked files if in a Dired buffer, and otherwise
fallback on the previous behaviour or if there was no selection.
fallback on the previous behavior or if there was no selection.
(package-install-from-buffer): Document the feature.
* etc/NEWS: Mention the change.
@ -39694,7 +39809,7 @@
2025-03-25 Philipp Stephani <p.stephani2@gmail.com>
Mimic behavior of 'aref' when signalling out-of-range errors.
Mimic behavior of 'aref' when signaling out-of-range errors.
The convention used by 'aref' and friends is that for
'args-out-of-range', the error data is a list (SEQ INDEX). Use the same
@ -39710,7 +39825,7 @@
'args-out-of-range' means that some index argument isn't valid for a
given sequence/range, which isn't the case here. Instead, define a new
error symbol to mean "user-supplied buffer is too small." Since we
never specified nor tested which error symbol was signalled in this
never specified nor tested which error symbol was signaled in this
case, changing it shouldn't cause severe breakages.
* src/emacs-module.c (module_buffer_too_small): New helper function.
@ -44720,7 +44835,7 @@
type by default.
* doc/emacs/killing.texi (Clipboard):
* doc/lispref/frames.texi (Yanking Media): Document the new
behaviour, and the new variables.
behavior, and the new variables.
* etc/NEWS: Announce the change. (Bug#75116)
2025-02-22 Mauro Aranda <maurooaranda@gmail.com>
@ -50861,7 +50976,7 @@
* lisp/progmodes/go-ts-mode.el (go-ts-mode-test-flags):
(go-ts-mode--get-test-flags): New custom variable and function
for controlling test behaviour.
for controlling test behavior.
(go-ts-mode--compile-test): Updated to use new test flags
variable for passing extra information to the go test command
line.
@ -52178,13 +52293,13 @@
usability problem. It is relatively too easy to mistakenly
launch the function and, if a region of text is selected, have
potentially sensitive data sent out to a third-party service.
This commit changes the search function's default behaviour so
This commit changes the search function's default behavior so
that explicit confirmation is required before a region is sent
to a search engine. The behaviour can be adjusted via the
to a search engine. The behavior can be adjusted via the
newly-introduced 'eww-search-confirm-send-region' variable,
which is set to true by default.
* lisp/net/eww.el (eww-search-confirm-send-region): Add.
(eww-search-words): Update default 'eww-search-words' behaviour
(eww-search-words): Update default 'eww-search-words' behavior
so as to ask confirmation before sending the region to a search
engine. (Bug#74218)
@ -59564,7 +59679,7 @@
* lisp/vc/diff-mode.el (diff-vc-deduce-fileset): Signal
user-error when the buffer is narrowed.
* lisp/vc/vc.el (vc-next-action): Remove code signalling a
* lisp/vc/vc.el (vc-next-action): Remove code signaling a
user-error when the buffer is narrowed.
2024-10-02 Stefan Kangas <stefankangas@gmail.com>
@ -59998,7 +60113,7 @@
(Finternal_set_lisp_face_attribute_from_resource)
(Finternal_get_lisp_face_attribute)
(Finternal_lisp_face_attribute_values, syms_of_xfaces):
Stop recognising :reverse-video.
Stop recognizing :reverse-video.
* etc/NEWS: Announce.
2024-09-29 Mattias Engdegård <mattiase@acm.org>
@ -60461,7 +60576,7 @@
when the mode is activated.
(midnight-delay-set): Only start the timer if the mode is turned
on. (Bug#73291)
* etc/NEWS: Document the change in behaviour.
* etc/NEWS: Document the change in behavior.
2024-09-21 Stefan Kangas <stefankangas@gmail.com>
@ -61293,7 +61408,7 @@
2024-09-09 Mattias Engdegård <mattiase@acm.org>
* etc/emacs_lldb.py (Lisp_Object): Recognise Lisp_Sub_Char_Table
* etc/emacs_lldb.py (Lisp_Object): Recognize Lisp_Sub_Char_Table
2024-09-09 Mattias Engdegård <mattiase@acm.org>
@ -64233,7 +64348,7 @@
Improve implementation of built-in Eshell "kill" command
* lisp/eshell/esh-proc.el (eshell/kill): Fix handling of commands like
"kill 123". Use REMOTE when signalling PIDs in remote directories.
"kill 123". Use REMOTE when signaling PIDs in remote directories.
Signal using process objects when possible. Report errors when failing
to signal.
@ -67874,7 +67989,7 @@
This file records repository revisions from
commit 1cda0967b4d3c815fc610794ad6a8fc2b913a3c5 (exclusive) to
commit 0968d7e5e268a8b698730addb22bc84fe88782d5 (inclusive).
commit 76846eede34ea7bc7b8bbe4183ed070783e11d6b (inclusive).
See ChangeLog.4 for earlier changes.
;; Local Variables:

View file

@ -115,6 +115,8 @@ HAVE_GSETTINGS = @HAVE_GSETTINGS@
ANDROID = @ANDROID@
DOCLANGS?=@DOCLANGS@
# ==================== Where To Install Things ====================
# Location to install Emacs.app under GNUstep / macOS.
@ -174,6 +176,7 @@ man1dir=$(mandir)/man1
# Where to install and expect the info files describing Emacs.
infodir=@infodir@
# Info files not in the doc/misc directory (we get those via make echo-info).
# These are not gated by DOCLANGS: see MANDATORY_DOC_DIRS below.
INFO_NONMISC=emacs.info eintr.info elisp.info
# Directory for local state files for all programs.
@ -794,7 +797,7 @@ install-info: info
[ -f "$(DESTDIR)${infodir}/dir" ] || \
[ ! -f ${srcdir}/info/dir ] || \
${INSTALL_DATA} ${srcdir}/info/dir "$(DESTDIR)${infodir}/dir"; \
info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
info_misc="$(foreach lang,$(DOCLANGS),`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc DOCLANG=$(lang) echo-info`)"; \
cd ${srcdir}/info ; \
for elt in ${INFO_NONMISC} $${info_misc}; do \
for f in `ls $$elt $$elt-[1-9] $$elt-[1-9][0-9] 2>/dev/null`; do \
@ -944,7 +947,7 @@ uninstall: uninstall-$(NTDIR) uninstall-doc uninstall-gsettings-schemas
done
-rm -rf "$(DESTDIR)${libexecdir}/emacs/${version}"
thisdir=`pwd -P`; \
(info_misc=`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc echo-info`; \
(info_misc="$(foreach lang,$(DOCLANGS),`MAKEFLAGS= $(MAKE) --no-print-directory -s -C doc/misc DOCLANG=$(lang) echo-info`)"; \
if cd "$(DESTDIR)${infodir}"; then \
for elt in ${INFO_NONMISC} $${info_misc}; do \
(cd "$${thisdir}"; \
@ -1122,7 +1125,7 @@ TAGS tags: lib lib-src # src
$(MAKE) -C doc/emacs tags
$(MAKE) -C doc/lispintro tags
$(MAKE) -C doc/lispref tags
$(MAKE) -C doc/misc tags
$(foreach DOCLANG,$(DOCLANGS),$(MAKE) -C doc/misc DOCLANG=$(DOCLANG) tags;)
CHECK_TARGETS = check check-maybe check-expensive check-all check-byte-compile
.PHONY: $(CHECK_TARGETS)
@ -1143,8 +1146,38 @@ PDFS = lispref-pdf lispintro-pdf emacs-pdf misc-pdf
PSS = lispref-ps lispintro-ps emacs-ps misc-ps
DOCS = $(DVIS) $(HTMLS) $(INFOS) $(PDFS) $(PSS)
$(DOCS):
$(MAKE) -C doc/$(subst -, ,$@)
define MAKE_DOC_FOR_DOCLANG
$(1)-DOCLANG-$(2): $(1)-common
$$(MAKE) -C doc/$$(subst -, DOCLANG=$(2) ,$(1))
endef
## Directories whose manuals are always built in the default language,
## whatever DOCLANGS says: the Emacs and Emacs Lisp manuals are
## referenced from doc strings, and the Emacs Lisp Intro is an
## important enough part of Emacs to be available regardless of the
## language preferences of the user who builds the manuals.
MANDATORY_DOC_DIRS = emacs lispintro lispref
## Languages from DOCLANGS to build the manuals in doc/$(1) for: the
## default language (when in DOCLANGS, or always for the directories
## above), plus every other language in DOCLANGS that has translations
## for this directory (doc/translations/<lang>/$(1)). Directories
## without translations for a language must not run a sub-make for it:
## the doc Makefiles of untranslated directories ignore DOCLANG, so
## such a sub-make would just repeat the default-language build, and
## two sub-makes producing the same outputs race under "make -j" (e.g.
## "cp: cannot create regular file ...: File exists").
FILTER_DOCLANGS = $(if $(filter $(1),$(MANDATORY_DOC_DIRS)),default,$(filter $(DOCLANGS),default)) $(foreach lang,$(filter-out default,$(DOCLANGS)),$(if $(wildcard ${srcdir}/doc/translations/$(lang)/$(1)),$(lang)))
# $(1) = doc target (e.g. lispintro-info), $(2) = languages to build
define MAKE_DOC
# Define a target to which dependencies common to all of the doc files
# in this directory may be assigned.
$(1)-common:
$(1): $$(addprefix $(1)-DOCLANG-,$(2))
$$(foreach lang,$(2),$$(eval $$(call MAKE_DOC_FOR_DOCLANG,$(1),$$(lang))))
endef
$(foreach doc,$(DOCS),$(eval $(call MAKE_DOC,$(doc),$(call FILTER_DOCLANGS,$(word 1,$(subst -, ,$(doc)))))))
.PHONY: $(DOCS) docs pdf ps
.PHONY: info dvi dist html info-dir check-info
@ -1161,20 +1194,43 @@ ps: $(PSS)
# Depending on src is sufficient, but ends up being slow, since the
# uncompiled lisp/org/*.el files are used to build the .texi files
# (which can be slow even with the elc files).
misc-info: lisp
misc-info-common: lisp
# Using src rather than lisp because one is less likely to get unnecessary
# rebuilds of stuff that is not strictly necessary for generating manuals.
misc-dvi misc-html misc-pdf misc-ps: src
misc-dvi-common misc-html-common misc-pdf-common misc-ps-common: src
info-dir: ${srcdir}/info/dir
texi_misc = $(shell MAKEFLAGS= ${MAKE} --no-print-directory -s -C doc/misc echo-sources)
define set_texi_misc
texi_misc_$(1) = $$(shell MAKEFLAGS= $${MAKE} --no-print-directory -s -C doc/misc DOCLANG=$(1) echo-sources)
srcdir_doc_info_dir_inputs = \
endef
$(foreach lang,$(DOCLANGS),$(eval $(call set_texi_misc,$(lang))))
## For the default language, depend on the actual sources reported by
## doc/misc (echo-sources): .org files for the org-based manuals and
## .texi files for the rest. Deriving foo.texi names from INFO_COMMON
## would break in a fresh checkout, because the .texi files of the
## org-based manuals (e.g. modus-themes.texi) are generated and there
## is no rule to build them at this level. make-info-dir extracts dir
## entries from both formats. The first three are not gated by
## DOCLANGS, because MANDATORY_DOC_DIRS always builds them.
srcdir_doc_info_dir_inputs := \
${srcdir}/doc/emacs/emacs.texi \
${srcdir}/doc/lispintro/emacs-lisp-intro.texi \
${srcdir}/doc/lispref/elisp.texi \
$(addprefix ${srcdir}/doc/misc/,${texi_misc})
$(addprefix ${srcdir}/doc/misc/,${texi_misc_default})
TRANSLATED_DIRS:=misc
# $(1) = dir
# $(2) = lang
define GET_DOC_SRC
-include ${srcdir}/doc/translations/$(2)/$(1)/info_common.mk
INFO_COMMON:=$$(subst ccmode,cc-mode,$$(INFO_COMMON))
srcdir_doc_info_dir_inputs:=$$(srcdir_doc_info_dir_inputs) $$(patsubst %,${srcdir}/doc/translations/$(2)/$(1)/%-$(2).texi,$$(INFO_COMMON))
endef
$(foreach dir,$(TRANSLATED_DIRS),$(foreach lang,$(filter-out default,$(DOCLANGS)),$(eval $(call GET_DOC_SRC,$(dir),$(lang)))))
info_dir_inputs = \
../build-aux/dir_top \
$(subst ${srcdir}/doc/,,${srcdir_doc_info_dir_inputs})

2
README
View file

@ -2,7 +2,7 @@ Copyright (C) 2001-2026 Free Software Foundation, Inc.
See the end of the file for license conditions.
This directory tree holds version 31.1 of GNU Emacs, the extensible,
This directory tree holds version 32.0.50 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU

View file

@ -35,6 +35,7 @@
(defun admin--read-version ()
(read-string "Version number: " emacs-version))
;;;###autoload
(defun add-release-logs (root version &optional date)
"Add \"Version VERSION released.\" change log entries in ROOT.
Also update the etc/HISTORY file.
@ -102,6 +103,7 @@ Optional argument DATE is the release date, default today."
"\\bAuto-incrementing version code\\(?:.\\|\n\\)*\\([[:digit:]]\\{9\\}\\)$"
"Regexp with which to detect the version code in AndroidManifest.xml.")
;;;###autoload
(defun set-version (root version)
"Set Emacs version to VERSION in relevant files under ROOT.
Root must be the root of an Emacs source tree."
@ -192,7 +194,7 @@ Documentation changes might not have been completed!"))))
"mv" newsfile oldnewsfile)
(when (y-or-n-p "Commit move of NEWS file?")
(call-process admin-git-command nil nil nil
"commit" "-m" (format "; Move etc/%s to etc/%s"
"commit" "-m" (format "; Move etc/%s to etc/%s."
(file-name-nondirectory newsfile)
(file-name-nondirectory oldnewsfile))))
(find-file oldnewsfile) ; to prompt you to commit it
@ -246,6 +248,7 @@ Non-Free Operating Systems\n" newshort)))
(message "Setting version numbers...done"))
;; Note this makes some assumptions about form of short copyright.
;;;###autoload
(defun set-copyright (root copyright)
"Set Emacs short copyright to COPYRIGHT in relevant files under ROOT.
Root must be the root of an Emacs source tree."
@ -300,6 +303,7 @@ ROOT should be the root of an Emacs source tree."
'("efaq-w32")))))
;; TODO report the progress
;;;###autoload
(defun make-manuals (root &optional type)
"Generate the web manuals for the Emacs webpage.
ROOT should be the root of an Emacs source tree.
@ -322,8 +326,8 @@ Optional argument TYPE is type of output (nil means all)."
(push (concat i j) res))))
(manual-misc-manuals root)))))))
(let* ((dest (expand-file-name "manual" root))
(html-node-dir (expand-file-name "html_node" dest))
(html-mono-dir (expand-file-name "html_mono" dest))
(html-node-dir (expand-file-name "html_node/" dest))
(html-mono-dir (expand-file-name "html_mono/" dest))
(ps-dir (expand-file-name "ps" dest))
(pdf-dir (expand-file-name "pdf" dest))
(emacs (expand-file-name "doc/emacs/emacs.texi" root))
@ -369,6 +373,13 @@ Optional argument TYPE is type of output (nil means all)."
(dolist (manual misc)
(if (member type `(nil ,manual "misc"))
(manual-misc-html manual root html-node-dir html-mono-dir)))
;; Auxiliary files
(when (member type '(nil "elisp" "elisp-mono" "elisp-node"))
(dolist (file '("doc/lispref/elisp_type_hierarchy.txt"
"doc/lispref/elisp_type_hierarchy.jpg"))
(let ((file (expand-file-name file root)))
(copy-file file html-mono-dir t)
(copy-file file (expand-file-name "elisp/" html-node-dir) t))))
(message "Manuals created in %s" dest)))
(defconst manual-doctype-string
@ -761,6 +772,9 @@ style=\"text-align:left\">")
(and (equal type "lispintro")
(string-match-p "\\.\\(eps\\|pdf\\)\\'" file)))
(copy-file file stem)))
(when (equal type "lispref")
(copy-file "../doc/lispref/elisp_type_hierarchy.txt" stem)
(copy-file "../doc/lispref/elisp_type_hierarchy.jpg" stem))
(with-temp-buffer
(let ((outvars make-manuals-dist-output-variables)
(case-fold-search nil))
@ -782,6 +796,7 @@ style=\"text-align:left\">")
(message "...created %s" tarfile)))
;; Does anyone actually use these tarfiles?
;;;###autoload
(defun make-manuals-dist (root &optional type)
"Make the standalone manual source tarfiles for the Emacs webpage.
ROOT should be the root of an Emacs source tree.
@ -873,6 +888,7 @@ $Date: %s $
(defvar org-html-mathjax-template)
(defvar htmlize-output-type)
;;;###autoload
(defun make-news-html-file (root version)
"Convert the NEWS file into an HTML file."
(interactive (let ((root
@ -886,7 +902,10 @@ $Date: %s $
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(user-error "%s doesn't seem to be the root of an Emacs source tree" root))
(admin--require-external-package 'htmlize)
(let* ((newsfile (expand-file-name "etc/NEWS" root))
(let* ((oldnewsfile (expand-file-name (format "etc/NEWS.%s" version) root))
(newsfile (if (file-exists-p oldnewsfile)
oldnewsfile
(expand-file-name "etc/NEWS" root)))
(orgfile (expand-file-name (format "etc/NEWS.%s.org" version) root))
(html (format "%s.html" (file-name-base orgfile)))
(copyright-years (format-time-string "%Y")))
@ -896,7 +915,7 @@ $Date: %s $
;; Find the copyright range.
(goto-char (point-min))
(re-search-forward "^Copyright (C) \\([0-9-]+\\) Free Software Foundation, Inc.")
(re-search-forward "^Copyright (C) \\([0-9, -]+\\) Free Software Foundation, Inc.")
(setq copyright-years (match-string 1))
;; Delete some unnecessary stuff.
@ -915,6 +934,7 @@ $Date: %s $
;; Escape some characters.
(replace-regexp-in-region (rx "$") "@@html:&dollar;@@" (point-min) (point-max))
(replace-regexp-in-region (rx "[[") "[\u200B[" (point-min) (point-max))
;; Use Org-mode markers for 'symbols', 'C-x k', etc.
(replace-regexp-in-region
@ -933,18 +953,22 @@ $Date: %s $
;; Format code blocks.
(while (re-search-forward "^ " nil t)
(let ((elisp-block (looking-at "(")))
(backward-paragraph)
(let ((paragraph-start "^ "))
(backward-paragraph))
(unless (looking-at paragraph-separate)
(save-excursion (insert "\n")))
(insert (if elisp-block
"\n#+BEGIN_SRC emacs-lisp"
"\n#+BEGIN_EXAMPLE"))
(forward-paragraph)
(let ((paragraph-start "^[^ ]"))
(forward-paragraph))
(insert (if elisp-block
"#+END_SRC\n"
"#+END_EXAMPLE\n"))))
;; Delete buffer local variables.
(goto-char (point-max))
(when (re-search-backward "Local variables:")
(when (re-search-backward "Local variables:" nil t)
(forward-line -1)
(delete-region (point) (point-max)))
@ -1099,6 +1123,7 @@ If optional argument OLD is non-nil, also scan for `defvar's."
;; to check the results of this look sensible.
;; TODO Check cus-start if something moved from C to Lisp.
;; TODO Handle renamed things with aliases to the old names.
;;;###autoload
(defun cusver-check (newdir olddir version)
"Check that `defcustom's have :version tags where needed.
NEWDIR is the current lisp/ directory, OLDDIR is that from the
@ -1172,6 +1197,7 @@ changes (in a non-trivial way). This function does not check for that."
;; Reminder message for open release-blocking bugs. This requires the
;; GNU ELPA package `debbugs'.
;;;###autoload
(defun reminder-for-release-blocking-bugs (version)
"Submit a reminder message for release-blocking bugs of Emacs VERSION."
(interactive

View file

@ -52,7 +52,7 @@ main (int argc, char **argv)
int opt, ncolors = 0, i;
XColor *allocated;
int nallocated;
XColor color;
XColor color = {0};
Colormap cmap;
while ((opt = getopt (argc, argv, "n:")) != EOF)
@ -76,7 +76,6 @@ main (int argc, char **argv)
allocated = malloc (ncolors * sizeof *allocated);
nallocated = 0;
memset (&color, 0, sizeof color);
while (nallocated < ncolors
&& color.red < 65536)

View file

@ -309,7 +309,9 @@ files.")
("William M. Perry" "Bill Perry")
("William O'Brien" "will\\.08rien@gmail.com")
("Włodzimierz Bzyl" "W.*dek Bzyl")
("Wu fa yang" "zhaodaniu1@gmail\\.com")
(nil "xyblor")
("Yifei Yao" "donplat@barrensea\\.org")
("Yilkal Argaw" "yilkalargaw" "yilkalargawworkneh@gmail\\.com")
("Yoni Rabkin" "Yoni Rabkin Katzenell")
("Yoshinori Koseki" "KOSEKI Yoshinori" "小関 吉則")
@ -2234,6 +2236,7 @@ and changed by AUTHOR."
(cons (list author wrote-list cowrote-list changed-list)
authors-author-list)))))
;;;###autoload
(defun authors (root &optional nologupdate)
"Extract author information from change logs and Lisp source files.
ROOT is the root directory under which to find the files.

View file

@ -1,21 +1,21 @@
// Use the ARRAYELTS macro where possible.
// Use the countof macro where possible.
@@
type T;
T[] E;
@@
- (sizeof (E) / sizeof (E[...]))
+ ARRAYELTS (E)
+ countof (E)
@@
type T;
T[] E;
@@
- (sizeof (E) / sizeof (T))
+ ARRAYELTS (E)
+ countof (E)
@@
type T;
T[] E;
@@
- (sizeof (E) / sizeof (*E))
+ ARRAYELTS (E)
+ countof (E)

View file

@ -597,6 +597,7 @@ Branch FROM will be prepended to the list."
(setq-local truncate-lines t)
(setq-local font-lock-defaults '(gitmerge-mode-font-lock-keywords)))
;;;###autoload
(defun gitmerge (from)
"Merge from branch FROM into `default-directory'."
(interactive

View file

@ -102,9 +102,7 @@ General steps (for each step, check for possible errors):
easiest way of creating the new ChangeLog.N is to rename the file
ChangeLog (without the .N suffix) left over from the last release
(it is usually unversioned) and commit it, together with the
modified Makefile.in. If you don't have the unversioned ChangeLog
file from the last release, you can take it from the release
tarball.
modified Makefile.in.
Now:
@ -133,6 +131,7 @@ General steps (for each step, check for possible errors):
Save the "*Authors*" buffer as etc/AUTHORS.
Check the diff looks reasonable. Maybe add more entries to
authors-ambiguous-files or authors-aliases, and repeat.
If making a release, move the "Version NN.N released." back to the top.
Commit and push any fixes to authors.el with a message like this:
; Update exported ChangeLog files and etc/AUTHORS
@ -161,30 +160,17 @@ General steps (for each step, check for possible errors):
one, as described above). Pick a date about a week from now when
you intend to make the release. Use M-x add-release-logs from
admin/admin.el to add entries to etc/HISTORY and the ChangeLog
file. It's best not to commit these files until the release is
actually made. Merge the entries from (unversioned) ChangeLog
into the top of the current versioned ChangeLog.N and commit that
along with etc/HISTORY. Then you can tag that commit as the
release.
file. Merge the entries from the unversioned ChangeLog into the
top of the current versioned ChangeLog.N and commit that along
with etc/HISTORY. Name the tar file as emacs-XX.Y-rc1.tar.
Alternatively, you can commit and tag with the RC tag right away,
and delay the final tagging until you actually decide to make a
release and announce it. The "git tag" command can tag a specific
commit if you give it the SHA1 of that commit, even if additional
commits have been pushed in the meantime.
If you need another release candidate, remember to adjust the
ChangeLog and etc/HISTORY entries. Never replace an existing
tarfile! If you need to fix something, always upload it with a
different name.
Name the tar file as emacs-XX.Y-rc1.tar. If all goes well in the
following week, you can simply rename the file and use it for the
actual release. If you need another release candidate, remember
to adjust the ChangeLog and etc/HISTORY entries.
If you need to change only a file(s) that cannot possibly affect
the build (README, ChangeLog, NEWS, etc.) then rather than doing
an entirely new build, it is better to unpack the existing
tarfile, modify the file(s), and tar it back up again.
Never replace an existing tarfile! If you need to fix something,
always upload it with a different name.
If this is the release itself, copy the unversioned ChangeLog from
the previous release candidate tarball into your worktree.
4. autoreconf -i -I m4 --force && make bootstrap
@ -231,8 +217,8 @@ General steps (for each step, check for possible errors):
Alternatively, if you want to do this manually using the compressed
tarballs:
tar tJf emacs-OLD.tar.xz | sed -e 's,^[^/]*,,' | sort > old_tmp
tar tJf emacs-NEW.tar.xz | sed -e 's,^[^/]*,,' | sort > new_tmp
tar tJf emacs-OLD.tar.xz | sed -e 's,^[^/]*,,' | sort >old_tmp
tar tJf emacs-NEW.tar.xz | sed -e 's,^[^/]*,,' | sort >new_tmp
diff -u old_tmp new_tmp
If this is the first pretest of a major release, just comparing
@ -289,8 +275,8 @@ General steps (for each step, check for possible errors):
11. Decide what compression schemes to offer.
For a release, at least gz and xz:
gzip --best --no-name -c emacs-NEW.tar > emacs-NEW.tar.gz
xz -c emacs-NEW.tar > emacs-NEW.tar.xz
gzip --best --no-name -c emacs-NEW.tar >emacs-NEW.tar.gz
xz -c emacs-NEW.tar >emacs-NEW.tar.xz
For pretests, just xz is probably fine (saves bandwidth).
Now we will upload the files to the GNU FTP server. In the case of
@ -304,6 +290,8 @@ General steps (for each step, check for possible errors):
-- NEW_FILE.gz NEW_FILE.xz ...
For a release:
gnupload [--user your@gpg.key.email] --to alpha.gnu.org:emacs/pretest \
--delete NEW-rc1_FILE.xz
gnupload [--user your@gpg.key.email] --to ftp.gnu.org:emacs \
NEW_FILE.gz NEW_FILE.xz ...
@ -321,8 +309,8 @@ General steps (for each step, check for possible errors):
clearsigned directive file like this:
gpg -b FILE
echo directory: emacs/pretest > FILE.directive (for a pretest)
echo directory: emacs > FILE.directive (for a release)
echo directory: emacs/pretest >FILE.directive (for a pretest)
echo directory: emacs >FILE.directive (for a release)
gpg --clearsign FILE.directive
Upload by anonymous ftp to ftp://ftp-upload.gnu.org/ the files FILE,
FILE.sig, FILE.directive.asc.
@ -333,8 +321,8 @@ General steps (for each step, check for possible errors):
12. After five minutes, verify that the files are visible at
<https://alpha.gnu.org/gnu/emacs/pretest/> for a pretest, or
<https://ftp.gnu.org/gnu/emacs/> for a release. If uploading a
pretest, the delete of the previous pretest a few minutes before the
creation of the new file.
pretest, the deletion of the previous pretest happens a few minutes
before the creation of the new file.
Download them and check the signatures and SHA1/SHA256 checksums.
@ -361,9 +349,17 @@ General steps (for each step, check for possible errors):
(Use e.g. `M-x mml-secure-message-sign' in `message-mode' to sign
an email.)
14. After a release, update the Emacs pages as described below.
14. Generate an HTML-formatted version of the NEWS file: M-x load-file
RET admin/admin.el RET, then M-x make-news-html-file RET.
15. After a release, bump the Emacs version on the release branch.
15. After a release, update the Emacs pages as described below.
Note: it is important to add the new NEWS file _before_ bumping the
Emacs version on the release branch, because doing the latter will
add (empty) sections to NEWS for the next version, and you don't
want those sections in the NEWS file reachable from the GNU Emacs
page.
16. After a release, bump the Emacs version on the release branch.
There is no need to bump the version after a pretest; the version
is bumped before the next pretest or release instead.
@ -383,6 +379,7 @@ The pages and files to update are:
update is needed)
. history.html (add a line for the new release)
. add the new NEWS file as news/NEWS.xx.y
. add the new NEWS.xx.html file as news/NEWS.xx.html
. copy new etc/MACHINES to MACHINES and CONTRIBUTE to CONTRIBUTE
. possibly/rarely also download.html (see below)

View file

@ -50,7 +50,7 @@ GNULIB_MODULES='
qcopy-acl readlink readlinkat realloc-posix regex
sig2str sigdescr_np socklen stat-time std-gnu23
stdc_bit_width stdc_count_ones stdc_trailing_zeros
stdckdint-h stddef-h stdio-h stdio-windows
stdckdint-h stdcountof-h stddef-h stdio-h stdio-windows
stpcpy streq strnlen strtoimax symlink sys_stat-h sys_time-h
tempname time-h time_r time_rz timegm timer-time timespec-add timespec-sub
unlocked-io update-copyright utimensat
@ -58,14 +58,18 @@ GNULIB_MODULES='
'
AVOIDED_MODULES='
access btowc chmod close crypto/af_alg dup fchdir fstat gnulib-i18n
iswblank iswctype iswdigit iswxdigit langinfo-h libgmp-mpq
localcharset locale-h localename-unsafe-limited lock
mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
openat-die opendir pthread-h raise
save-cwd select setenv sigprocmask stat std-gnu11 stdarg-h strncpy
access btoc32
c32_apply_type_test c32_get_type_test
c32isalnum c32rtomb c32tolower c32toupper
chmod close dup fchdir fstat gnulib-i18n
langinfo-h libgmp-mpq
localcharset localeinfo localename-unsafe-limited lock
mbrtoc32-regular mbsinit memchr mkdir
msvc-inval msvc-nothrow nl_langinfo
openat-die opendir pthread-h
save-cwd select setenv sigprocmask stat std-gnu11 strncpy
threadlib tzset unsetenv utime utime-h
wchar-h wcrtomb wctype wctype-h
wchar-h uchar-h
'
GNULIB_TOOL_FLAGS='
@ -160,8 +164,7 @@ cp -- "$gnulib_srcdir"/build-aux/config.guess \
"$gnulib_srcdir"/build-aux/install-sh \
"$gnulib_srcdir"/build-aux/move-if-change \
"$src"build-aux &&
cp -- "$gnulib_srcdir"/lib/af_alg.h \
"$gnulib_srcdir"/lib/save-cwd.h \
cp -- "$gnulib_srcdir"/lib/save-cwd.h \
"$src"lib &&
cp -- "$gnulib_srcdir"/m4/codeset.m4 \
"$src"m4 &&

View file

@ -76,6 +76,10 @@ Every pipeline generates a JUnit test report for the respective test
jobs, which can be inspected on the pipeline web page. This test
report counts completed ERT tests, aborted tests are not counted.
Twice a day, a pipeline for branch 'master', and another pipeline for
branch 'emacs-31' are started automatically, running all stages for
normal and expensive tests.
* Emba configuration
The emba configuration files are hosted on

View file

@ -16,14 +16,14 @@ Initial setup
Then we want to clone the repository. We normally want to have both
the current master and (if there is one) the active release branch
(eg emacs-30).
(eg emacs-31).
mkdir ~/emacs
cd ~/emacs
git clone <membername>@git.sv.gnu.org:/srv/git/emacs.git master
cd master
git config push.default current
git worktree add ../emacs-30 emacs-30
git worktree add ../emacs-31 emacs-31
You now have both branches conveniently accessible, and you can do
"git pull" in them once in a while to keep updated.
@ -67,7 +67,7 @@ which will look like
commit 958b768a6534ae6e77a8547a56fc31b46b63710b
cd ~/emacs/emacs-30
cd ~/emacs/emacs-31
git cherry-pick -xe 958b768a6534ae6e77a8547a56fc31b46b63710b
and add "Backport:" to the commit string. Then
@ -109,7 +109,7 @@ up-to-date by doing a pull. Then start Emacs with
emacs -l admin/gitmerge.el -f gitmerge
You'll be asked for the branch to merge, which will default to
(eg) 'origin/emacs-30', which you should accept. Merging a local tracking
(eg) 'origin/emacs-31', which you should accept. Merging a local tracking
branch is discouraged, since it might not be up-to-date, or worse,
contain commits from you which are not yet pushed upstream.

View file

@ -48,7 +48,7 @@ DTRT - do the right thing
DWIM - do what I mean
ENOPATCH - no patch is attached
FTR - for the record
FUD - fear, uncertainty and doubt
FUD - fear, uncertainty and doubt
FWIW - for what it's worth
FYI - for your information
GNU - GNU is not Unix

View file

@ -79,8 +79,8 @@ people who want to report bugs against the current master, to help in
"pretesting" new release versions, and so on.
The files follow the same naming convention, but also include a date
(and sometimes information about their branch) or they may releate to a
sepecific pretest or release candidate for an "uncut" Emacs. Emacs
(and sometimes information about their branch) or they may relate to a
specific pretest or release candidate for an "uncut" Emacs. Emacs
sources are distributed along with each dated snapshot. Sources are
provided for the pretest and release candidate Emacs versions here, as
for release builds, are found in the directory (or directories) above.

View file

@ -30,7 +30,7 @@
# Base URI for the package sources mapped in PKG_REQ
SRC_REPO="https://repo.msys2.org/mingw/sources"
# Map items in `dynamic-library-alist' to source pakages
# Map items in `dynamic-library-alist' to source packages.
PKG_REQ='''mingw-w64-x86_64-giflib
mingw-w64-x86_64-gnutls
mingw-w64-x86_64-harfbuzz
@ -47,7 +47,7 @@
mingw-w64-x86_64-tree-sitter
mingw-w64-x86_64-sqlite3'''.split()
# Emacs style path to dependancy DLLs on build system
# Emacs style path to dependency DLLs on build system
DLL_SRC="mingw64"
OUT_TAG=""
@ -95,7 +95,7 @@ def gather_deps():
print("Deps updated in", os.getcwd(), "as", zipfile)
os.chdir("../")
# Return dependancies listed in Emacs
# Return dependencies listed in Emacs.
def init_deps():
return '''libXpm-nox4.dll
libpng16-16.dll
@ -315,7 +315,7 @@ def clean():
parser.add_argument("-l", help="list dependencies",
action="store_true")
parser.add_argument("-e", help="extract direct dependancies",
parser.add_argument("-e", help="extract direct dependencies",
action="store_true")
args = parser.parse_args()

View file

@ -116,7 +116,7 @@ ${unidir}/charscript.el: ${blocks_sources}
emoji-zwj.el: ${unidir}/emoji-zwj.el
zwj = ${srcdir}/emoji-zwj.awk
zwj_sources = ${srcdir}/emoji-zwj-sequences.txt $(srcdir)/emoji-sequences.txt
zwj_sources = ${srcdir}/emoji-zwj-sequences.txt $(srcdir)/emoji-sequences.txt $(srcdir)/emoji-variation-sequences.txt $(srcdir)/emoji-test.txt
${unidir}/emoji-zwj.el: ${zwj}
# Don't use $^, since that includes the awk script.

View file

@ -64,6 +64,8 @@ BEGIN {
alias["halfwidth and fullwidth forms"] = "cjk-misc"
alias["yijing hexagram symbols"] = "cjk-misc"
alias["common indic number forms"] = "north-indic-number"
alias["kanbun"] = "han"
alias["vertical forms"] = "cjk-misc"
tohex["a"] = 10
tohex["b"] = 11
@ -160,6 +162,17 @@ FILENAME ~ "Blocks.txt" && /^[0-9A-F]/ {
end[i] = "33FF"
name[i] = "CJK Compatibility"
}
else if (start[i] == "FFF0")
{
start[i] = "FFFC"
end[i] = "FFFD"
name[i] = "Replacement Symbols"
alt[i] = "symbol"
i++
start[i] = "FFFE"
end[i] = "FFFF"
name[i] = "Specials"
}
alt[i] = name2alias(name[i])

45
admin/unidata/emoji-zwj.awk Normal file → Executable file
View file

@ -39,7 +39,9 @@
### Code:
/^[0-9A-F].*; RGI_Emoji_(ZWJ|Modifier)_Sequence/ {
(/^[0-9A-F].*; RGI_Emoji_(ZWJ|Modifier)_Sequence/)||
(/^[0-9A-F].*; (un|minimally-)qualified/ && /.+200D.+;/) {
is_unqualified = $0 ~ /; unqualified/
sub(/ *;.*/, "", $0)
num = split($0, elts)
if (ch[elts[1]] == "")
@ -58,6 +60,15 @@
vec[elts[1]] = vec[elts[1]] c
}
vec[elts[1]] = vec[elts[1]] "\""
if (is_unqualified && elts[2] == "200D") {
unqualified_tail_initials[++n_unqualified_tail_initials] = elts[3]
}
}
/^[0-9A-F]+ FE0F *; *emoji style;/ {
tty_trigger_codepoints[++n_tty_triggers] = $1
ch[$1] = $1
}
END {
@ -86,13 +97,37 @@ END {
print "(setq auto-composition-emoji-eligible-codepoints"
print "'("
for (trig in trigger_codepoints)
{
print "?\\N{U+" trigger_codepoints[trig] "}"
}
print "))"
# On tty terminals, emoji sequences are simply composed and the
# rendering is delegated to the terminal emulators. All codepoints
# in the variation sequence is considered a valid beginning.
print "(setq auto-composition-emoji-tty-eligible-codepoints"
print "'("
for (trig in tty_trigger_codepoints)
{
print "?\\N{U+" tty_trigger_codepoints[trig] "}"
}
print "))"
# Exclude keycap sequence initials
delete ch["0023"]
delete ch["002A"]
for (i = 0; i <= 9; i ++)
delete ch[sprintf("003%d", i)]
# Generate unqualified tail initials.
print "(setq auto-composition-emoji-unqualified-tail-initials"
print "'("
for (trig in unqualified_tail_initials)
{
print "?\\N{U+" unqualified_tail_initials[trig] "}"
}
print "))"
# We add entries for 'codepoint U+FE0F' here to ensure that the
# code in font_range is triggered.
@ -114,7 +149,7 @@ END {
print " (nconc (char-table-range composition-function-table (car elt))"
print " (list (vector (cdr elt)"
print " 0"
print " #'compose-gstring-for-graphic)))))"
print " #'compose-gstring-and-emoji)))))"
print ";; The following two blocks are derived by hand from emoji-sequences.txt"
print ";; FIXME: add support for Emoji_Keycap_Sequence once we learn how to respect FE0F/VS-16"
@ -126,7 +161,7 @@ END {
print " (nconc (char-table-range composition-function-table '(#x1F1E6 . #x1F1FF))"
print " (list (vector \"[\\U0001F1E6-\\U0001F1FF][\\U0001F1E6-\\U0001F1FF]\""
print " 0"
print " #'compose-gstring-for-graphic))))"
print " #'compose-gstring-and-emoji))))"
print ";; UK Flags"
print "(set-char-table-range composition-function-table"
@ -134,7 +169,7 @@ END {
print " (nconc (char-table-range composition-function-table #x1F3F4)"
print " (list (vector \"\\U0001F3F4\\U000E0067\\U000E0062\\\\(?:\\U000E0065\\U000E006E\\U000E0067\\\\|\\U000E0073\\U000E0063\\U000E0074\\\\|\\U000E0077\\U000E006C\\U000E0073\\\\)\\U000E007F\""
print " 0"
print " #'compose-gstring-for-graphic))))"
print " #'compose-gstring-and-emoji))))"
printf "\n(provide 'emoji-zwj)"
}

View file

@ -1037,10 +1037,10 @@ Property value is a symbol `o' (Open), `c' (Close), or `n' (None)."
(cdr (assq elt word-list))))
(setcar tail (string code))
(setq tail (cdr tail)))
(aset vec i (mapconcat #'identity (aref vec i) "")))))
(aset vec i (mapconcat #'identity (aref vec i))))))
(set-char-table-range
table (cons idx (+ idx 127))
(mapconcat #'identity vec "")))))
(mapconcat #'identity vec)))))
(setq block-word-table (make-vector (length block-list) nil))
(setq idx 0)

View file

@ -1,10 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright 1992-2025 Free Software Foundation, Inc.
# Copyright 1992-2026 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268 # see below for rationale
timestamp='2025-07-10'
timestamp='2026-05-17'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -60,7 +60,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright 1992-2025 Free Software Foundation, Inc.
Copyright 1992-2026 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -150,7 +150,7 @@ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
case $UNAME_SYSTEM in
Linux|GNU|GNU/*)
Ironclad|Linux|GNU|GNU/*)
LIBC=unknown
set_cc_for_build
@ -167,6 +167,8 @@ Linux|GNU|GNU/*)
LIBC=gnu
#elif defined(__LLVM_LIBC__)
LIBC=llvm
#elif defined(__mlibc__)
LIBC=mlibc
#else
#include <stdarg.h>
/* First heuristic to detect musl libc. */
@ -1186,6 +1188,9 @@ EOF
sparc:Linux:*:* | sparc64:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
sw_64:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
tile*:Linux:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
;;
@ -1598,10 +1603,10 @@ EOF
GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
;;
x86_64:[Ii]ronclad:*:*|i?86:[Ii]ronclad:*:*)
GUESS=$UNAME_MACHINE-pc-ironclad-mlibc
GUESS=$UNAME_MACHINE-pc-ironclad-$LIBC
;;
*:[Ii]ronclad:*:*)
GUESS=$UNAME_MACHINE-unknown-ironclad-mlibc
GUESS=$UNAME_MACHINE-unknown-ironclad-$LIBC
;;
esac

11
build-aux/config.sub vendored
View file

@ -1,10 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright 1992-2025 Free Software Foundation, Inc.
# Copyright 1992-2026 Free Software Foundation, Inc.
# shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale
timestamp='2025-07-10'
timestamp='2026-05-17'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -76,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
Copyright 1992-2025 Free Software Foundation, Inc.
Copyright 1992-2026 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@ -1432,6 +1432,7 @@ case $cpu-$vendor in
| sparcv9v \
| spu \
| sv1 \
| sw_64 \
| sx* \
| tahoe \
| thumbv7* \
@ -1525,7 +1526,7 @@ EOF
;;
ironclad*)
kernel=ironclad
os=`echo "$basic_os" | sed -e 's|ironclad|mlibc|'`
os=`echo "$basic_os" | sed -e 's|ironclad|gnu|'`
;;
linux*)
kernel=linux
@ -2220,7 +2221,7 @@ case $kernel-$os-$obj in
;;
uclinux-uclibc*- | uclinux-gnu*- )
;;
ironclad-mlibc*-)
ironclad-gnu*- | ironclad-mlibc*- )
;;
managarm-mlibc*- | managarm-kernel*- )
;;

View file

@ -292,6 +292,7 @@ If Exist limits.in.h update limits.in.h limits.in-h
If Exist signal.in.h update signal.in.h signal.in-h
If Exist signal.in.h update signal.in.h signal.in-h
If Exist stdalign.in.h update stdalign.in.h stdalign.in-h
If Exist stdcountof.in.h update stdcountof.in.h stdcountof.in-h
If Exist stddef.in.h update stddef.in.h stddef.in-h
If Exist stdint.in.h update stdint.in.h stdint.in-h
If Exist stdio.in.h update stdio.in.h stdio.in-h

View file

@ -23,7 +23,7 @@ dnl along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
AC_PREREQ([2.65])
dnl Note this is parsed by (at least) make-dist and lisp/cedet/ede/emacs.el.
AC_INIT([GNU Emacs], [31.1], [bug-gnu-emacs@gnu.org], [],
AC_INIT([GNU Emacs], [32.0.50], [bug-gnu-emacs@gnu.org], [],
[https://www.gnu.org/software/emacs/])
if test "$XCONFIGURE" = "android"; then
@ -966,7 +966,7 @@ a valid path to android.jar. See config.log for more details.])
fi
AC_CACHE_CHECK([whether android.jar is new enough],
[emacs_cv_android_w_or_later],
[emacs_cv_android_x_or_later],
AS_IF([rm -f conftest.class
cat << EOF > conftest.java
@ -974,7 +974,7 @@ import android.os.Build;
class conftest
{
private static int test = Build.VERSION_CODES.BAKLAVA;
private static int test = Build.VERSION_CODES.CINNAMON_BUN;
}
EOF
@ -985,7 +985,7 @@ EOF
if test "$emacs_cv_android_w_or_later" = "no"; then
AC_MSG_ERROR([Emacs must be built with an android.jar file produced for \
Android 16 (BAKLAVA) or later.])
Android 17 (CINNAMON_BUN) or later.])
fi
dnl See if the Java compiler supports the `--release' option which
@ -1615,6 +1615,10 @@ AC_DEFUN([gt_TYPE_WINT_T],
AC_DEFUN([gl_TYPE_OFF64_T],
[HAVE_OFF64_T=1
AC_SUBST([HAVE_OFF64_T])])
# Emacs does not want Gnulib's fixes for glibc bug 20381 or for
# Unicode-compatible case matching, as that brings in too many Gnulib files.
AC_DEFINE([_REGEX_AVOID_UCHAR_H], [1],
[Define to 1 so that the Gnulib regex module does not use Gnulib uchar-h.])
# Initialize gnulib right after choosing the compiler.
dnl Amongst other things, this sets AR and ARFLAGS.
@ -2103,44 +2107,7 @@ if test $opsys = darwin; then
AC_PATH_PROG([HAVE_MACPORTS], [port])
fi
## Require makeinfo >= 4.13 (last of the 4.x series) to build the manuals.
: ${MAKEINFO:=makeinfo}
case `($MAKEINFO --version) 2>/dev/null` in
*' (GNU texinfo) '4.1[[3-9]]* | \
*' (GNU texinfo) '[[5-9]]* | \
*' (GNU texinfo) '[[1-9][0-9]]* ) ;;
*) MAKEINFO=no;;
esac
## Makeinfo is unusual. For a released Emacs, the manuals are
## pre-built, and not deleted by the normal clean rules. makeinfo is
## therefore in the category of "special tools" not normally required, which
## configure does not have to check for (eg autoconf itself).
## In a repository checkout on the other hand, the manuals are not included.
## So makeinfo is a requirement to build from the repository, and configure
## should test for it as it does for any other build requirement.
## We use the presence of $srcdir/info/emacs to distinguish a release,
## with pre-built manuals, from a repository checkout.
if test "$MAKEINFO" = "no"; then
MAKEINFO=makeinfo
if test ! -e "$srcdir/info/emacs" && test ! -e "$srcdir/info/emacs.info"; then
AC_MSG_ERROR( [You do not seem to have makeinfo >= 4.13, and your
source tree does not seem to have pre-built manuals in the 'info' directory.
Please install a suitable version of makeinfo.] )
else
AC_MSG_WARN( [You do not seem to have makeinfo >= 4.13.
You will not be able to rebuild the manuals if you delete them or change
their sources.] )
fi
fi
AC_SUBST([MAKEINFO])
if test $opsys = mingw32; then
DOCMISC_W32=efaq-w32
else
DOCMISC_W32=
fi
AC_SUBST([DOCMISC_W32])
gl_TEXINFO
dnl Add our options to ac_link now, after it is set up.
@ -5100,6 +5067,7 @@ AC_SUBST_FILE([module_env_snippet_28])
AC_SUBST_FILE([module_env_snippet_29])
AC_SUBST_FILE([module_env_snippet_30])
AC_SUBST_FILE([module_env_snippet_31])
AC_SUBST_FILE([module_env_snippet_32])
module_env_snippet_25="$srcdir/src/module-env-25.h"
module_env_snippet_26="$srcdir/src/module-env-26.h"
module_env_snippet_27="$srcdir/src/module-env-27.h"
@ -5107,6 +5075,7 @@ module_env_snippet_28="$srcdir/src/module-env-28.h"
module_env_snippet_29="$srcdir/src/module-env-29.h"
module_env_snippet_30="$srcdir/src/module-env-30.h"
module_env_snippet_31="$srcdir/src/module-env-31.h"
module_env_snippet_32="$srcdir/src/module-env-32.h"
emacs_major_version=`AS_ECHO([$PACKAGE_VERSION]) | sed 's/[[.]].*//'`
AC_SUBST([emacs_major_version])
@ -7308,6 +7277,8 @@ AC_SUBST([LIBXT_OTHER])
if test "${HAVE_X11}" = "yes" ; then
AC_DEFINE([HAVE_X11], [1],
[Define to 1 if you want to use version 11 of X windows.])
AC_DEFINE([_CONST_X_STRING], [1],
[Define to 1 for X11 headers to use the 'const' keyword of C89 or later.])
LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
else
LIBX_OTHER=
@ -7913,10 +7884,10 @@ if test "$XCONFIGURE" != "android"; then
AS_MKDIR_P([cross/etc])
AS_IF([test "x$with_android" != "xno"], [
dnl Link gnulib files to cross/lib as well. af_alg.h and
dnl lib/save-cwd.h are copied manually from gnulib, and as such
dnl aren't specified in gl_FILE_LIST.
emacs_files='gl_FILE_LIST lib/af_alg.h lib/save-cwd.h'
dnl Link gnulib files to cross/lib as well.
dnl lib/save-cwd.h is copied manually from gnulib,
dnl and as such isn't specified in gl_FILE_LIST.
emacs_files='gl_FILE_LIST lib/save-cwd.h'
dnl These files are specific to Emacs.
emacs_files="$emacs_files lib/fingerprint.c lib/fingerprint.h \
lib/save-cwd.c lib/openat-die.c lib/save-cwd.c \

View file

@ -529,6 +529,8 @@ version of Android installed:
@item
@code{android.permission.ACCESS_LOCATION_EXTRA_COMMANDS}
@item
@code{android.permission.ACCESS_LOCAL_NETWORK}
@item
@code{android.permission.ACCESS_NETWORK_STATE}
@item
@code{android.permission.ACCESS_NOTIFICATION_POLICY}

View file

@ -4,133 +4,123 @@
@c See file emacs.texi for copying conditions.
@node Antinews
@appendix Emacs 29 Antinews
@appendix Emacs 30 Antinews
@c Update the emacs.texi Antinews menu entry with the above version number.
For those users who live backwards in time, here is information
about downgrading to Emacs version 29.4. We hope you will enjoy the
about downgrading to Emacs version 30.2. We hope you will enjoy the
greater simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@itemize @bullet
@item
Emacs can no longer be built for Android mobile devices. We have
removed the Android support because it was deemed unnecessary, what with
the screens of the mobile devices becoming smaller and smaller as you
move back in time. We expect Android users to enjoy the much simpler
text editors available on their devices. As a nice bonus, removing
Android support allowed us to get rid of gobs of related files, thus
making the release tarballs much leaner.
The venerable @code{unexec} dumper is back! It is still deprecated, but
we plan on un-deprecating it in Emacs 26, in preparation for the
@file{glibc} developers' reinstating the various hooks which Emacs needs
to reliably be built using @code{unexec}.
@item
We have deleted much of the enhanced support for touchscreen devices,
for the same reason we dropped Android: there will be no need for that
as you move back in time.
@command{ctags} is once again a separate program. We decided that the
need to remember the @option{--ctags} option to @command{etags} is not
friendly enough to our users, and switched back to a time-proven Unix
philosophy of ``programs that do one thing and do it well''.
@item
We also dropped support for sophisticated input methods that include
text conversions, again because those are mostly needed on mobile and
hand-held devices, which we gradually remove from Emacs in each past
version.
We dropped the annoying feature of scraping at startup files and
directories in @file{user-lisp} subdirectory of your Emacs configuration
directory. It slows down startup, especially as computers and hard
disks become slower and slower as you move back in time.
@item
Like its newer releases, Emacs 29 can still be built with support of
native compilation of Lisp programs. However, in preparation for
removal of this feature in some previous version, we've made the native
compiler support off by default; you will now have to request it
explicitly at configure time. This makes the default Emacs build
process much faster.
As part of our continuous struggle to make Emacs simpler, we've removed
the @code{margin} face, so text shown in display margins will now use
the same @code{default} face as the rest of buffer text. Our long-term
goal is to remove faces completely, thus leaving the Emacs with just two
colors, so we gradually remove more and more faces as we go.
@item
JSON interfaces slowly move into oblivion as past years come closer, so
we have removed our internal implementation of JSON; you will now need
to build Emacs with the libjansson library, if you need JSON.
Eventually, we plan on removing JSON support from Emacs altogether; this
move will make the removal much simpler.
Yet another complication which we got rid of is child frames on
text-only terminals. They are still supported on GUI frames, but one
improvement at a time.
@item
Tree-sitter based modes are now completely independent of their
non-Tree-Sitter counterparts. We decided that keeping the settings
separate and independent goes a long way toward simplicity, which is one
of our main motivations for removing stuff from Emacs.
Fancy completion bells and whistles, such as eager display of completion
candidates, updating the @file{*Completions*} buffer as you type,
control of point motion in @file{*Completions*} via
@code{completions-format}, etc.@: will no longer confuse you because we
deleted all of that stuff. No one should need completion features
beyond what typing @key{TAB} produces!
@item
Various Help commands no longer turn on Outline minor mode. With less
material to display in the *Help* buffers, due to removing of excess
documentation from Emacs, we think using outlining is an unnecessary
complication, as scrolling through plain text is so much simpler.
Commands that modify the window layout of a frame are gone. You can no
longer be seduced to transpose or rotate windows on their frame. Once
again, only Emacs decides how to arrange and re-arrange windows.
For the same reasons, Emacs no longer shows Unicode names of characters
in *Help* buffers shown by @code{describe-bindings}.
For the same reason, we nuked @code{split-frame} and @code{merge-frames}
commands. @kbd{C-x 2} and @kbd{C-x 0} should be enough for everyone!
@item
To make Emacs configuration simpler and easier to control, the tool bar
can now be displayed only in its natural and logical position: on the
top of the frame; no more of that @code{tool-bar-position} nonsense with
tool bars on the bottom. For the same reasons @code{modifier-bar-mode}
is now gone.
We removed quite a few complications due to Unicode Standard version
17.0 and related features. This includes quite a few characters which
will never be needed in the past, the language environments for Syriac
and Tifinagh, and several input methods which no one should miss, and
which will fall in disuse soon enough anyway. As memory becomes more
and more at premium, we must make Emacs leaner and meaner to follow
suit.
@item
The command @code{recover-file} no longer lets you display the diffs
between a file and its auto-save file. You either want to recover a
file or you don't; confusing users with a third alternative when they
are anxious already by the possibility of losing precious edits is
considered a bad idea, certainly so as we move further towards smaller,
simpler Emacs.
User option @code{treesit-enabled-modes} is no longer part of Emacs.
Customize @code{major-mode-remap-alist} to activate Tree-sitter based
modes instead of the traditional modes; this is much simpler and easier
to remember and manage.
@item
Several languages and input methods, which will fall in disuse as you
move back in time, were removed. This includes Urdu, Pashto, and Sindhi
languages, and the input method for the Colemak keyboard layout. Many
@kbd{C-x 8} key sequences, including those which insert various
quotation characters and guillemets, were deleted for the same reason.
Sendmail and Rmail no longer try to detect suspicious email addresses
and warn you about them. As you move back in time, people become nicer
and nicer, and all those malevolent souls who constantly look for
opportunities to cause you damage become more and more vague memories
from the distant future. Eventually, we will once again have just the
small Arpanet where everyone were your friends, and who needs these
paranoid features then?
@item
The support for @code{lzip}-compressed Info manuals was removed from the
Info mode. We anticipate that @command{lzip} will disappear from the
face of the Earth in the near past, and are preparing Emacs for that in
advance.
You can no longer edit Grep results and have the edits reflected in the
original files. We've removed that because we believe one should only
edit the original files directly, with the full benefit of the
surrounding context.
@item
Support for LLDB in Grand Unified Debugger mode was dropped. We decided
that given LLDB's diminishing popularity, its support is just code
bloat.
Commands for handling VCS repositories with multiple working trees were
deleted from VC. We concluded that multiple working tree in a single
project are a clear sign of design bloat, and we refuse to admit such
bloatware into Emacs. So this is gone---good riddance!
Numerous other VC features, which we considered too fancy and not
useful enough, were removed for the same reason.
@item
Several fancy Project and VC commands were deleted, as part of our
consistent effort of making Emacs simpler to use.
To review an Emacs Lisp package before installing it from ELPA, you will
now need to actually read its code and documentation, because the user
option @code{package-review-policy}, and the associated functionalities
to show the diffs from the previous version, are gone. ``Use the
source, Luke!''
We also deleted @code{package-autosuggest} and
@code{package-autosuggest-mode}, since we want to trust our users to
know better.
@item
The user option @code{shell-command-guess-functions} and the context
menu @samp{Open With} in Dired are gone. We trust Emacs users to always
know themselves which shell command is the appropriate one for a given
file, so no guessing by Dired is needed, or welcome. The
@code{dired-do-open} command was deleted for the same reasons.
In preparation for removal of the @code{customize-dirlocals} command in
the previous Emacs version, we nuked @code{Custom-dirlocals-mode}.
@item
We went back to the original lean-and-mean interface for specifying
registers for register-related commands. The fancy preview and the
options to go with it were deemed gratuitous and were removed.
@item
Eshell is now much smaller and easier to use, due to dropping quite a
few of the new commands and fancy new options.
@item
The command @code{customize-dirlocals} was removed. Editing the
@file{.dir-locals.el} files as plain text is so much simpler, and quite
enough.
@item
We have removed several packages that we consider unnecessary for the
past of Emacs. This includes EditorConfig support, @samp{which-key},
PEG, and Window-Tool-Bar.
@item
The @code{etags-regen-mode} was deleted. Regeneration of @file{TAGS}
tables manually is all Emacs users will need in the past.
We have removed several packages and modes that we consider unnecessary
for the past of Emacs. This includes @code{icalendar-mode} and
@code{lua-mode} modes, and the @code{timeout} and
@code{system-taskbar-mode} libraries. the @code{system-sleep} package
is gone for the same reasons.
@item
To keep up with decreasing computer memory capacity and disk space, many
other functions and files have been eliminated in Emacs 29.4.
other functions and files have been eliminated in Emacs 30.2.
@end itemize

View file

@ -424,13 +424,37 @@ Kill back to the beginning of the previous word
(@code{backward-kill-word}).
@end table
The @kbd{@key{DEL}} (@code{delete-backward-char}) command removes
the character before point, moving the cursor and the characters after
it backwards. If point was at the beginning of a line, this deletes
the preceding newline, joining this line to the previous one.
@cindex grapheme cluster
@cindex delete part of composed sequence of characters
The @kbd{@key{DEL}} (@code{delete-backward-char}) command removes the
character before point, moving the cursor and the characters after it
backwards. If point was at the beginning of a line, this deletes the
preceding newline, joining this line to the previous one. If the
character before point is composed with one or more of the preceding
characters, and is displayed together with them as a single display
unit, a so-called @dfn{grapheme cluster} representing the entire
sequence, @kbd{@key{DEL}} deletes only a single character from the
composed sequence, which in some cases can significantly change the
appearance of the text on display. (The command
@code{backward-delete-char-untabify}, usually bound to @key{DEL} in
programming modes, does the same, @pxref{Program Modes}.) This is in
contrast with commands like @code{delete-char-forward}, which delete the
entire composed sequence of characters after point, see below.
If, however, the region is active, @kbd{@key{DEL}} instead deletes
the text in the region. @xref{Mark}, for a description of the region.
@vindex composition-break-at-point
For long enough sequences of composed characters, using
@kbd{@key{DEL}} to delete them one by one might be inconvenient. In
those cases, you can customize the option
@code{composition-break-at-point} to a non-@code{nil} value, to have
Emacs show characters around point separately, instead of showing the
result of their composition. This allows editing the composed sequence
of characters more conveniently, because you can move point inside the
composed sequence and delete characters there without having to delete
(and later re-insert) the following ones.
If the region is active, @kbd{@key{DEL}} deletes the text in the
region instead of deleting a single character. @xref{Mark}, for a
description of the region.
On most keyboards, @key{DEL} is labeled @key{BACKSPACE}, but we
refer to it as @key{DEL} in this manual. (Do not confuse @key{DEL}
@ -438,18 +462,20 @@ with the @key{Delete} key; we will discuss @key{Delete} momentarily.)
On some text terminals, Emacs may not recognize the @key{DEL} key
properly. @xref{DEL Does Not Delete}, if you encounter this problem.
@cindex grapheme cluster, deletion
@cindex composed sequence of characters, deletion
@cindex delete entire grapheme cluster
The @key{Delete} (@code{delete-forward-char}) command deletes in the
opposite direction: it deletes the character after point, i.e., the
character under the cursor. If point was at the end of a line, this
joins the following line onto this one. Like @kbd{@key{DEL}}, it
deletes the text in the region if the region is active (@pxref{Mark}).
If the character after point is composed with following characters and
displayed as a single display unit, a so-called @dfn{grapheme cluster}
representing the entire sequence, @key{Delete} deletes the entire
sequence in one go. This is in contrast to @key{DEL} which always
deletes a single character, even if the character is composed.
If the character after point is composed with following characters,
@key{Delete} deletes the entire composed sequence in one go. This is in
contrast to @key{DEL} which always deletes a single character, even if
the character is composed. If @code{composition-break-at-point} is
non-@code{nil}, @key{Delete} deletes all of the composed characters from
point to the end of the composed sequence, which could be only a part of
the sequence if you moved point into the sequence.
@kbd{C-d} (@code{delete-char}) deletes the character after point,
similar to @key{Delete}, but regardless of whether the region is

View file

@ -746,13 +746,13 @@ for special commands that can be used in the GUD interaction buffer.
As you debug a program, Emacs displays the relevant source files by
visiting them in Emacs buffers, with an arrow in the left fringe
indicating the current execution line. (On a text terminal, the arrow
appears as @samp{=>}, overlaid on the first two text columns.) Moving
point in such a buffer does not move the arrow. You are free to edit
these source files, but note that inserting or deleting lines will
throw off the arrow's positioning, as Emacs has no way to figure out
which edited source line corresponds to the line reported by the
debugger subprocess. To update this information, you typically have
to recompile and restart the program.
appears as @samp{=>}, in the left margin.) Moving point in such a
buffer does not move the arrow. You are free to edit these source
files, but note that inserting or deleting lines will throw off the
arrow's positioning, as Emacs has no way to figure out which edited
source line corresponds to the line reported by the debugger subprocess.
To update this information, you typically have to recompile and restart
the program.
@cindex GUD and hl-line-mode
@cindex highlighting execution lines in GUD

View file

@ -660,9 +660,9 @@ if these values are not what you want (or if the operating system does
not supply them), you must set them yourself. Here is an example:
@example
(setq calendar-time-zone -360)
(setq calendar-standard-time-zone-name "CST")
(setq calendar-daylight-time-zone-name "CDT")
(setq calendar-time-zone (* 12 60))
(setq calendar-standard-time-zone-name "NZST")
(setq calendar-daylight-time-zone-name "NZDT")
@end example
@noindent

View file

@ -221,7 +221,7 @@ Appendices
* GNU Free Documentation License:: The license for this documentation.
* Emacs Invocation:: Hairy startup options.
* X Resources:: X resources for customizing Emacs.
* Antinews:: Information about Emacs version 29.
* Antinews:: Information about Emacs version 30.
* Mac OS / GNUstep:: Using Emacs under macOS and GNUstep.
* Haiku:: Using Emacs on Haiku.
* Android:: Using Emacs on Android.

View file

@ -562,10 +562,12 @@ v}. Note that registering the files doesn't commit them; you must
invoke @w{@kbd{C-x v v}} again to commit; see the next point.
@item
If every file in the VC fileset has been either newly-added or
modified, commit the changed files. To do this, Emacs pops up a
@file{*vc-log*} buffer; type the desired log entry for the changes,
followed by @kbd{C-c C-c} to commit. @xref{Log Buffer}.
If every file in the VC fileset has been either newly-added or modified,
commit the changed files. To do this, Emacs pops up a @file{*vc-log*}
buffer, in which you can type the log entry for the changes (or, if the
entry has been automatically inserted from a ChangeLog file or buffer,
further edit it). When you are satisfied with the log entry, type
@kbd{C-c C-c} to commit the changes. See @ref{Log Buffer} for details.
If @kbd{C-x v v} is invoked from a buffer under Diff mode, the command
treats the buffer as holding a set of patches for one or more files. It
@ -715,49 +717,83 @@ out individual files.
When you tell VC to commit a change, it pops up a buffer named
@file{*vc-log*}. In this buffer, you should write a @dfn{log entry}
describing the changes you have made (@pxref{Why Version Control?}).
After you are done, type @kbd{C-c C-c} (@code{log-edit-done}) to exit
the buffer and commit the change, together with your log entry.
Alternatively, you can have the entry automatically inserted from a
ChangeLog file or buffer (see below), which you can further edit in the
@file{*vc-log*} buffer if necessary. After you are done, type @kbd{C-c
C-c} (@code{log-edit-done}) to exit the buffer and commit the change,
together with your log entry.
@cindex Log Edit mode
@cindex mode, Log Edit
@vindex vc-log-mode-hook
@c FIXME: Mention log-edit-mode-hook here? --xfq
The major mode for the @file{*vc-log*} buffer is Log Edit mode, a
variant of Text mode (@pxref{Text Mode}). On entering Log Edit mode,
Emacs runs the hooks @code{text-mode-hook} and @code{vc-log-mode-hook}
(@pxref{Hooks}).
In the @file{*vc-log*} buffer, you can write one or more @dfn{header
lines}, specifying additional information to be supplied to the
version control system. Each header line must occupy a single line at
the top of the buffer; the first line that is not a header line is
treated as the start of the log entry. For example, the following
header line states that the present change was not written by you, but
by another developer:
In the @file{*vc-log*} buffer, you can also write one or more
@dfn{header lines} specifying additional information to be supplied to
the version control system. For example, the following header line
states that the present change was not written by you, but by another
developer:
@smallexample
Author: J. R. Hacker <jrh@@example.com>
@end smallexample
@noindent
Apart from the @samp{Author} header, Emacs recognizes the headers
@samp{Summary} (a one-line summary of the changeset), @samp{Date} (a
manually-specified commit time), and @samp{Fixes} (a reference to a
bug fixed by the change). Not all version control systems recognize
all headers. If you specify a header for a system that does not
support it, the header is treated as part of the log entry.
Each header line must occupy a single line at the top of the buffer; the
first line that is not a header line is treated as the start of the log
entry. In addition to the @samp{Author} header, most version control
systems also support the headers @samp{Summary} (a one-line summary of
the changeset) and @samp{Date} (a manually specified commit time).
Emacs recognizes these as well as several VCS-specific headers. If you
specify a header for a VCS that does not support it, the header is
treated as part of the log entry.
@cindex Log Edit mode
@cindex mode, Log Edit
@vindex vc-log-mode-hook
@c FIXME: Mention log-edit-mode-hook here? --xfq
@vindex log-edit-hook
The major mode for the @file{*vc-log*} buffer is Log Edit mode, a
variant of Text mode (@pxref{Text Mode}). On entering Log Edit mode,
Emacs runs the hooks @code{text-mode-hook} and @code{vc-log-mode-hook}
(@pxref{Hooks}). In addition, to set up the @file{*vc-log*} buffer,
Emacs runs the hook @code{log-edit-hook}, which optionally makes several
useful features available. The following paragraphs describe several of
these features, including three that are generally useful and enabled by
default. (To see a complete list of the features and enable or disable
any of them, type @w{@kbd{M-x customize-option RET log-edit-hook RET}};
@pxref{Specific Customization}.)
@findex log-edit-insert-message-template
The function @code{log-edit-insert-message-template} produces the
default @file{*vc-log*} buffer setup, containing @samp{Author} and
@samp{Summary} headers, and displays a thick line separating the header
part of the buffer from the log entry part. If you remove
@code{log-edit-insert-message-template} from @code{log-edit-hook}, then
the initial @file{*vc-log*} buffer is simply empty. The two header
lines are initially empty. If you are the author of the change and you
have configured the VCS to use your name and email address in commit
messages, you can leave the @samp{Author} header empty. If you leave
the @samp{Summary} header empty, most systems will use the first line of
the log entry as the summary line (see below for a way to have the
@samp{Summary} header automatically filled).
@kindex C-c C-f @r{(Log Edit mode)}
@findex log-edit-show-files
When VC pops up the @file{*vc-log*} buffer, a buffer named
@file{*log-edit-files*} listing the current VC fileset, that is, the
files that will be committed if you type @w{@kbd{C-c C-c}}, also pops up
by default. If you have removed the command @code{log-edit-show-files}
from @code{log-edit-hook}, the @file{*log-edit-files*} buffer does not
automatically pop up, but you can invoke the command by typing
@w{@kbd{C-c C-f}}. Likewise, if you kill or bury the
@file{*log-edit-files*} buffer, typing @w{@kbd{C-c C-f}} will pop it up
again.
@kindex C-c C-d @r{(Log Edit mode)}
@findex log-edit-show-diff
While in the @file{*vc-log*} buffer, the current VC fileset is
considered to be the fileset that will be committed if you type
@w{@kbd{C-c C-c}}. To view a list of the files in the VC fileset,
type @w{@kbd{C-c C-f}} (@code{log-edit-show-files}). To view a diff
of changes between the VC fileset and the version from which you
started editing (@pxref{Old Revisions}), type @kbd{C-c C-d}
(@code{log-edit-show-diff}).
To view a diff of changes between the VC fileset and the version from
which you started editing (@pxref{Old Revisions}), type @kbd{C-c C-d}
(@code{log-edit-show-diff}). This command also selects the window
displaying the diff. To have VC automatically display the diff when it
pops up the @file{*vc-log*} buffer, add @code{log-edit-maybe-show-diff}
to @code{log-edit-hook}; unlike @kbd{C-c C-d}, this function does not
select the window displaying the diff.
@kindex C-c C-w @r{(Log Edit mode)}
@findex log-edit-generate-changelog-from-diff
@ -773,15 +809,37 @@ VC root, customize @code{diff-add-log-use-relative-names}.
@kindex C-c C-a @r{(Log Edit mode)}
@findex log-edit-insert-changelog
If the VC fileset includes one or more @file{ChangeLog} files
(@pxref{Change Log}), type @kbd{C-c C-a}
(@code{log-edit-insert-changelog}) to pull the relevant entries into
the @file{*vc-log*} buffer. If the topmost item in each
@file{ChangeLog} was made under your user name on the current date,
this command searches that item for entries matching the file(s) to be
committed, and inserts them.
If you have added log entries for the current VC fileset to one or
more @file{ChangeLog} files or to a temporary ChangeLog buffer
(@pxref{Change Log}), by default VC automatically inserts these entries
into the @file{*vc-log*} buffer on popping it up. If you have removed
the command @code{log-edit-insert-changelog} from @code{log-edit-hook},
VC does not automatically insert the log entries, but you can invoke the
command by typing @kbd{C-c C-a}. Likewise, if you delete or otherwise
change the content of this buffer and then decide you want to use the
ChangeLog entries after all, type @kbd{C-c C-a} to repopulate the buffer
with these entries.
If the relevant log entries are in one or more @file{ChangeLog} files
and the topmost item in each file was made under your user name on the
current date, this command searches that item (or those items) for
entries matching the file(s) to be committed, and inserts them. If you
invoke the command with a prefix argument (@kbd{C-u C-c C-a}) or repeat
it immediately (@kbd{C-c C-a C-c C-a}), it searches the topmost item
regardless of the user name and date of the item.
If VC detects that all log entries come from the same ChangeLog file
or buffer, then the command simply inserts the entire body of the entry
into the @file{*vc-log*} buffer. In addition, if the first line of the
entry does not begin with @samp{* } (an asterisk followed by a space),
VC considers it to be a summary line and moves it to the @samp{Summary}
header. Finally, if VC detects that the set of changed files listed in
the ChangeLog entry differs from the current VC fileset, it displays a
warning urging you to fix this discrepancy before committing the
changes.
@ifnottex
If you are using CVS or RCS, see @ref{Change Logs and VC}, for the
If you are using CVS or RCS, see @ref{Change Logs and VC}, for the
opposite way of working---generating ChangeLog entries from the Log
Edit buffer.
@end ifnottex
@ -1599,17 +1657,6 @@ unpushed revisions"} where @var{N} is a number. You can click on this
text to execute the @code{vc-root-log-outgoing} command (@pxref{VC
Change Log}).
@vindex vc-dir-show-outgoing-count
Emacs tries to use cached information to determine the number of
unpushed revisions, but for some backends this isn't possible. In these
cases Emacs must occasionally fetch from the remote repository in order
to determine the count. If your connection to the remote repository is
slow then this may cause unacceptable slowdowns in refreshing the VC
Directory buffer. If this affects you, you can customize
@code{vc-dir-show-outgoing-count} to @code{nil} to disable the unpushed
revisions count altogether. You can also set this on a per-repository
basis using directory local variables (@pxref{Directory Variables}).
@node VC Directory Commands
@subsubsection VC Directory Commands
@ -1652,9 +1699,10 @@ cannot be marked with this command if any file in its tree is marked.
@item M
If point is on a file entry, mark all files with the same status; if
point is on a directory entry, mark all files in that directory tree
(@code{vc-dir-mark-all-files}). With a prefix argument, mark all
listed files and directories.
point is on a directory entry, mark all and only the files that are
immediate descendents (i.e., children) of that directory
(@code{vc-dir-mark-all-files}). With a prefix argument, mark all listed
files.
@findex vc-dir-mark-by-regexp
@item % m
@ -1691,9 +1739,10 @@ active, unmark all the files in the region (@code{vc-dir-unmark}).
@item U
If point is on a file entry, unmark all files with the same status; if
point is on a directory entry, unmark all files in that directory tree
point is on a directory entry, unmark all and only the files that are
immediate descendents (i.e., children) of that directory
(@code{vc-dir-unmark-all-files}). With a prefix argument, unmark all
files and directories.
listed files and directories.
@item x
Hide files with @samp{up-to-date} or @samp{ignored} status
@ -1712,13 +1761,22 @@ Quit the VC Directory buffer, and bury it (@code{quit-window}).
While in the VC Directory buffer, all the files that you mark with
@kbd{m} (@code{vc-dir-mark}) or @kbd{M} (@code{vc-dir-mark-all-files})
are in the current VC fileset. If you mark a directory entry with
@kbd{m}, all the listed files in that directory tree are in the
current VC fileset. The files and directories that belong to the
current VC fileset are indicated with a @samp{*} character in the VC
Directory buffer, next to their VC status. In this way, you can set
up a multi-file VC fileset to be acted on by VC commands like
@w{@kbd{C-x v v}} (@pxref{Basic VC Editing}), @w{@kbd{C-x v =}}
(@pxref{Old Revisions}), and @w{@kbd{C-x v u}} (@pxref{VC Undo}).
@kbd{m}, all the listed files in that directory tree (i.e., not only the
listed files of the directory but also the listed files of its
subdirectories) are in the current VC fileset. The files and
directories that belong to the current VC fileset are indicated with a
@samp{*} character in the VC Directory buffer, next to their VC status.
In this way, you can set up a multi-file VC fileset to be acted on by VC
commands like @w{@kbd{C-x v v}} (@pxref{Basic VC Editing}), @w{@kbd{C-x
v =}} (@pxref{Old Revisions}), and @w{@kbd{C-x v u}} (@pxref{VC Undo}).
In a VC Directory buffer containing no marked file or directory
entries, the current VC fileset is determined as follows. If point is
on a file entry, the fileset consists of just that file. If point is on
a directory entry, the fileset consists of all files in that directory
tree. Consequently, if point in on (or above) the entry @samp{./}
(representing the working directory), the fileset consists of all listed
files.
The VC Directory buffer also defines some single-key shortcuts for
VC commands with the @kbd{C-x v} prefix: @kbd{=}, @kbd{+}, @kbd{l},
@ -2540,13 +2598,36 @@ dated in May 1993, with two items and one item respectively.
@end smallexample
One entry can describe several changes; each change should have its
own item, or its own line in an item. Normally there should be a
blank line between items. When items are related (parts of the same
change, in different places), group them by leaving no blank line
between them.
own item, or its own line in an item. Normally there should be a blank
line between items. When items are related (parts of the same change,
in different places), group them by leaving no blank line between them.
Such a multi-item entry often begins with a single line of text that
succintly summarizes the whole changeset. The entry may also contain
additional explanatory text between the summary line and the first
change item; the explanatory text should also be bounded by blank lines.
Here is an example:
You should put a copyright notice and permission notice at the
end of the change log file. Here is an example:
@iftex
@medbreak
@end iftex
@smallexample
2026-02-27 Sean Whitton <spwhitton@@spwhitton.name>
New 'log-outstanding' value for vc-log-view-type
This fixes vc-hg-print-log's choice of -r arguments to 'hg log'.
* lisp/vc/vc.el (vc-log-view-type): New 'log-outstanding' value.
(vc-log-outstanding): Pass it.
* lisp/vc/vc-git.el (vc-git-log-view-mode):
* lisp/vc/vc-hg.el (vc-hg-print-log, vc-hg-log-view-mode): Treat
'log-outstanding' the same as 'log-outgoing'.
@end smallexample
If you include one or more change log files in a software package that
is distributed to others, you should put a copyright notice and
permission notice at the end of each change log file. Here is an
example:
@smallexample
Copyright 1997--1998, 2025--2026 Free Software Foundation, Inc.
@ -2718,6 +2799,22 @@ new frame for it. The former is @w{@kbd{C-x 4 .}}
around the place of a mouse event. The @code{xref-mouse-mode} minor
mode binds the command to @kbd{C-mouse-1}.
@kindex M-g .
@kindex M-g M-.
@findex xref-find-by-kind
@kbd{M-g .} (or @kbd{M-g M-.}) finds all definitions of a certain kind
for the identifier at point. First it prompts to choose the kind using
a key character, from the available set that is returned by the current
backend (@pxref{Xref}). Then it either uses the identifier at point or
prompts for it if none found or the command was invoked with a prefix
argument. (If you want it to always prompt, customize
@code{xref-prompt-for-identifier}.) The list of supported kinds depends
on the backend, which are advised to use mnemonic keys and common sense.
For example, the Emacs Lisp mode has ``variable'', ``function alias'',
``face'', and ``feature'' (a symbol that is @code{provide}d by some
package) among its kinds, whereas Eglot (our built-in LSP Client) uses
``declaration'', ``implementation'' and ``type definition''.
@kindex C-M-.
@findex xref-find-apropos
@vindex tags-apropos-additional-actions
@ -3267,7 +3364,8 @@ In Erlang code, the tags are the functions, records and macros defined
in the file.
@item
In Fortran code, functions, subroutines and block data are tags.
In Fortran code, modules, subroutines, functions, entries and block data
are tags.
@item
In Go code, packages, functions, and types are tags.

View file

@ -1385,6 +1385,12 @@ comments also. (Note that @samp{\\} is needed in Lisp syntax to
include a @samp{\} in the string, which is needed to deny the first
star its special meaning in regexp syntax. @xref{Regexp Backslash}.)
@vindex comment-start-line-regexp
Modes that support both line and block comments should also set
@code{comment-start-line-regexp} to a regexp that matches only line
comment starters. This lets Emacs distinguish between the two kinds of
comments.
@vindex comment-start
@vindex comment-end
When a comment command makes a new comment, it inserts the value of
@ -1761,9 +1767,9 @@ If non-@code{nil}, @code{hs-hide-all}, @code{hs-cycle} and
@item hs-hide-block-behavior
This variable controls how @code{hs-hide-block}, @code{hs-cycle},
@code{hs-hide-level}, and @code{hs-toggle-hiding} should hide a block.
The possible values can be @code{after-bol} to hide the innermost block
to which the current line belongs, or @code{after-point} to hide the
block after point.
The possible values can be 'after-bol', hide the innermost block to
which the current line belongs; or 'after-cursor', hide the block after
cursor position.
@item hs-display-lines-hidden
If non-@code{nil}, display the number of hidden lines next to the

View file

@ -451,6 +451,10 @@ in Rmail mode. You can use @kbd{M-x rmail-input} even when not in
Rmail, but it is easier to type @kbd{C-u M-x rmail}, which does the
same thing.
Files named @file{RMAIL} or ending in @file{.rmail} are visited in
Rmail mode automatically by ordinary file-visiting commands, such as
@kbd{C-x C-f}.
The file you read with @kbd{i} should normally be a valid mbox file.
If it is not, Rmail tries to convert its text to mbox format, and
visits the converted text in the buffer. If you save the buffer, that

View file

@ -1564,6 +1564,43 @@ instead (@pxref{Mark}). The basic replace commands replace one
is possible to perform several replacements in parallel, using the
command @code{expand-region-abbrevs} (@pxref{Expanding Abbrevs}).
@cindex preview of replacement text
@vindex query-replace-show-preview
@findex replace-preview-replacement-only
@findex replace-preview-both
If you set @code{query-replace-show-preview} to a non-@code{nil}
value, the replace commands show a preview of the replacement while you
type it: the matches visible in the window are displayed as they would
look after the replacement. This tells you what back-references like
@samp{\1} (@pxref{Regexp Replace}) expand to before you commit to the
replacement. The preview also appears at the prompt that reads the text
to replace, as soon as its input holds both halves separated by an
arrow, which is what @kbd{M-p} recalls from the history. However,
replacements that use @samp{\,} or @samp{\#} are not previewed.
Only the matches that the command will replace are previewed: those
after point, or those before it when replacing backward
(@pxref{Query Replace}). The other ones are still highlighted, to show
that the buffer has more of them. When the region is active, the
preview covers all of it, as the replacement does.
Possible values for @code{query-replace-show-preview} are
@code{replacement-only} to display the replacement alone and @code{both}
to display the match next to its replacement separated by an arrow. In
the case of @code{replacement-only}, then if the replacement is empty,
instead of showing nothing at all, displays a thin bar to mark the place
of the match. You can also use a custom function that takes the match
and the replacement and should return a string to display in place of
the match, or @code{nil} to leave that match alone. It may be helpful
to reference the functions @code{replace-preview-replacement-only} and
@code{replace-preview-both} when writing a custom function value for
this option.
@vindex query-replace-preview@r{ face}
@vindex query-replace-preview-match@r{ face}
The preview uses the faces @code{query-replace-preview} and
@code{query-replace-preview-match}.
@menu
* Unconditional Replace:: Replacing all matches for a string.
* Regexp Replace:: Replacing all matches for a regexp.

View file

@ -1197,8 +1197,8 @@ header line.
Make the current heading line's body invisible
(@code{outline-hide-entry}).
@item C-c C-e
Make the current heading line's body visible
(@code{outline-show-entry}).
Reveal the current entry and its parent hierarchy
(@code{outline-show-entry-and-parents}).
@item C-c C-d
Make everything under the current heading invisible, not including the
heading itself (@code{outline-hide-subtree}).
@ -1235,14 +1235,14 @@ Show bodies of headings that match @var{regexp}
@end table
@findex outline-hide-entry
@findex outline-show-entry
@findex outline-show-entry-and-parents
@kindex C-c C-c @r{(Outline mode)}
@kindex C-c C-e @r{(Outline mode)}
The simplest of these commands are @kbd{C-c C-c}
(@code{outline-hide-entry}), which hides the body lines directly
following the current heading line, and @kbd{C-c C-e}
(@code{outline-show-entry}), which reveals them. Subheadings and
their bodies are not affected.
(@code{outline-show-entry-and-parents}), which reveals the current entry,
all of its ancestor headings, and their immediate sibling headings.
@findex outline-hide-subtree
@findex outline-show-subtree
@ -1372,9 +1372,9 @@ levels.
Consider an Outline mode buffer with all the text and subheadings under
level-1 headings hidden. To look at what is hidden under one of these
headings, you could use @kbd{C-c C-e} (@kbd{M-x outline-show-entry})
to expose the body, or @kbd{C-c C-i} to expose the child (level-2)
headings.
headings, you could use @kbd{C-c C-e} (@kbd{M-x outline-show-entry-and-parents})
to expose the body and its parent hierarchy, or @kbd{C-c C-i} to expose
the child (level-2) headings.
@kindex C-c C-z
@findex foldout-zoom-subtree

View file

@ -15206,12 +15206,13 @@ nil
100
@end group
@group
(20615 27034 579989 697000)
(17905 55681 0 0)
(20615 26327 734791 805000)@footnote{If @code{current-time-list} is
@code{nil} the three timestamps are @code{(1351051674579989697
. 1000000000)}, @code{(1173477761000000000 . 1000000000)}, and
@code{(1351050967734791805 . 1000000000)}, respectively.}
(1351051674579989697 . 1000000000)
(1173477761000000000 . 1000000000)
(1351050967734791805 . 1000000000)@footnote{If @code{current-time-list} is
@code{t} the three timestamps are
@code{(20615 27034 579989 697000)},
@code{(17905 55681 0 0)}, and
@code{(20615 26327 734791 805000)}, respectively.}
13188
"-rw-r--r--"
@end group

View file

@ -6,117 +6,133 @@
@c This node must have no pointers.
@node Antinews
@appendix Emacs 29 Antinews
@appendix Emacs 30 Antinews
@c Update the elisp.texi Antinews menu entry with the above version number.
For those users who live backwards in time, here is information about
downgrading to Emacs version 29.4. We hope you will enjoy the greater
downgrading to Emacs version 30.2. We hope you will enjoy the greater
simplicity that results from the absence of many @w{Emacs
@value{EMACSVER}} features.
@itemize @bullet
@item
Mouse wheel events once again follow the platform and window-system
conventions: sometimes they are @code{wheel-up/down} and sometimes
@code{mouse-4/5/6/7}. Lisp programs which use these should once again
be aware of the conventions in effect and behave accordingly.
Lisp strings are now mutable. You can use @code{aset} on unibyte
strings to replace single bytes by multibyte characters, and @code{aset}
on multibyte strings can replace any character by any other character,
regardless if they are ASCII or multibyte non-ASCII@. We feel those
restrictions are un-Emacsy and get in the way of doing all kinds of
exciting things with strings.
@item
The command @code{describe-function} no longer distracts you by showing
unnecessary details like the type of the function's object. Emacs
hackers always know whether a function is a primitive, a native-compiled
Lisp function, or any other kind. Stating the obvious simply wastes the
precious screen estate; as you move into the past, and the typical
dimensions of the screen become smaller, that waste is less and less
justified. So we made the waste smaller.
Buffers that are current to a non-main thread cannot be killed by other
threads. We decided to get rid of the numerous complications which were
needed to allow killing such buffers. If your program needs to kill
such buffers, you will need to use a disciplined approach of first
making some other buffer current to the thread.
@item
The support for styled underline in face attribute was dropped. The
simple underline should be enough; anything else is just code bloat and
creeping featurism. Colorful underlines on TTY frames are no longer
supported for the same reason.
We removed the early detection of faces that inherit from themselves.
As you move back in time, Emacs Lisp programmers become more and more
proficient, so disallowing such tricks feels wrong. Those who don't
know well enough what they are doing will be amply punished by having
their Lisp programs barf at display time or even wedge Emacs cold.
@item
IELM stopped recording its input history. You will no longer be annoyed
by inputs from your past sessions; each session starts with a clean
slate. What can be simpler and easier to remember?
Calling @code{debug} in batch mode now kills Emacs. We decided that
there's no sense in continuing a batch session that entered the
debugger: who and how will debug it, anyway?
For the same reason, @kbd{C-c} in batch mode now always kills Emacs, it
never quits.
@item
You can no longer disable JavaScript in xwidget Webkit sessions. Since
xwidgets are going away in one of the previous Emacs versions, we
decided to make this one step in that direction and get rid of this
complication.
The functions that access and manipulate error descriptors were deleted.
Functions like @code{error-type}, @code{error-slot-value} and others are
useless bloat, since Lisp programs can simply access the data structure
directly, as God intended!
@item
The @code{minibuffer-regexp-mode} was removed. Regular expressions are
just strings, so no fancy mode should be needed for editing them.
We removed @code{frame-initial-p}, as its job can easily be done by
testing several obscure variables and frame parameters.
@item
We removed the Compat package. Forward compatibility for ELPA packages
becomes less and less important as you move back through time, and soon
enough ELPA will disappear entirely. We decided it was prudent to start
preparing for that now.
We've added the @code{redisplay-dont-pause} variable, so we could allow
interrupting a runaway redisplay cycle in one of the past versions of
Emacs.
@item
We are back to interpreting @code{\x} without any following hex digits
as character code zero (@acronym{NUL}), as it always was in Emacs. The
savings in typing due to this alone are enough to justify this
simplification.
There's no longer a guarantee that all the digit characters will have
the @code{digit} (@code{?6}) category. We feel that such silly
consistency robs Lisp programmers of too much fun, whereby they should
discover which digits have this category by trial-and-error.
For the same reason, not all characters belonging to the @code{symbol}
script will have the @code{symbol} (@code{?5}) category.
@item
To keep Emacs clean and elegant, we've removed the ability to show
tooltips for fringe bitmaps. What important information cam be shown on
the fringes, and why would it require tooltips to explain its purpose?
We decided it isn't justified to keep this in past versions of Emacs.
Lisp programs can now easily delete that daemon frame by calling
@code{delete-frame}, as with any other frame. We decided there's no
reason to make a special case for the daemon frames, especially as some
past Emacs version will remove the daemon feature entirely.
@item
Fancy sorting-related facilities, like the @code{value<} function and
keyword arguments for @code{sort}, were deleted as too complex. The
basic @code{sort} function should all that's needed in the years to go.
Lisp files found on @code{load-path} are no longer cached. We intend to
make the @code{load-path} list shorter and shorter as we move to
previous versions of Emacs, so caching files is an unnecessary
complication and bloat of precious memory.
@item
Features related to the inheritance graph of major modes were deemed
unnecessary and thus were dropped. This includes
@code{provided-mode-derived-p}, @code{derived-mode-add-parents}, and
others. We decided that untangling the mode inheritance relationships
by hand facilitates more clear code and makes the intent evident.
The annoying warning about the missing @code{lexical-binding} cookie
when loading Lisp files was removed. This is one more step towards
eventual elimination of lexical binding from Emacs in one of the past
versions.
For the same reason, Lisp files loaded via the @option{-x} and
@option{--script} command-line options no longer use lexical binding by
default.
@item
We removed unnecessary functionality for handling touch screen events,
as touch screens gradually disappear from view as you move back in time.
There's no need to keep obsolete these new inventions in the past.
To keep Emacs clean and elegant, we deleted the @code{setopt-local}
macro. This was one more useless bloat, since it is easy to do the same
using @code{setq-local}, and avoids the annoying warnings about mismatch
between the value and expected type defined by @code{defcustom}.
@item
Various new functions and variables for moving and transposing sexps and
for moving by program statements were dropped as unnecessary. The
original commands that move by balanced expressions are more than
enough.
Pure storage is now part of Emacs, and is here to stay. The function
@code{purecopy} really copies its argument to pure storage. This is a
significant step towards making Emacs more memory-efficient on
yesterday's computers, and more generally towards using @code{unexec} as
the only way of dumping Emacs.
@item
We deleted some fancy @code{declare} forms for functions, such as
@code{ftype}. Emacs Lisp is not a string-typed language, which makes
these declarations anathema. The types @code{closure} and
@code{interpreted-function} are gone for the same reason: no need to
distinguish types of Lisp functions.
The @code{cond*} macro was removed. You can still use @code{pcase}
instead, but better start using the venerable @code{cond} exclusively,
as @code{pcase} and its ilk will disappear from Emacs in the near past.
No one should need these fancy and hard-to-read constructs with their
obscure semantics and myriads of backticks! The original control-flow
special forms of the pristine Emacs Lisp are more than enough.
@item
The byte compiler stopped issuing warnings about practices some purists
consider questionable. This includes warnings about missing
@code{lexical-binding} cookies, empty bodies of special forms and
macros, comparison with literals, @code{condition-case} without
handlers, mutation of constants, and some others. As time moves into
the past, the typical Emacs hacker knows best what's correct code and
what isn't, and thus these warnings become useless annoyances. Good
riddance!
Xref commands automatically suggest visiting a tags table. This is to
enable symbol completion,and generally move towards removing all
backends except the @code{etags} one in some past Emacs version.
@item
The @code{obarray} type is gone. Obarrays are back to their original
representation as vectors. Each removed Lisp data type makes Emacs
simpler and easier to use, so this is a welcome deletion.
Support for SHA-3 message digests was removed from the function
@code{secure-hash}. We plan to continue removing algorithms from this
function, so as to keep Emacs as lean as possible. Eventually, just one
kind of digest should be enough for everyone!
@item
We deleted unnecessary functions like @code{incf}, @code{decf},
@code{plusp}, @code{minusp}, @code{oddp}, and @code{evenp}. Use the
corresponding functions from @file{cl-lib} or just write these trivial
functions when you need them. For the same reason, @code{all},
@code{any}, @code{drop-while}, and @code{take-while} are also gone.
@item
As part of the ongoing quest for simplicity, many other functions and
variables have been eliminated. Other functions and variables, that
were declared obsolete since Emacs 24, have been added back, in
preparation for releasing Emacs 24 in some distant past.
were declared obsolete since Emacs 25, have been added back, in
preparation for releasing Emacs 25 in some distant past.
@end itemize

View file

@ -52,15 +52,15 @@ Here is an example:
@group
(defun silly-loop (n)
"Return the time, in seconds, to run N iterations of a loop."
(let ((t1 (float-time)))
(let ((t1 (current-time)))
(while (> (setq n (1- n)) 0))
(- (float-time) t1)))
(float-time (time-since t1))))
@result{} silly-loop
@end group
@group
(silly-loop 50000000)
@result{} 5.200886011123657
(silly-loop 100000000)
@result{} 2.236908583
@end group
@group
@ -69,13 +69,13 @@ Here is an example:
@end group
@group
(silly-loop 50000000)
@result{} 0.6239290237426758
(silly-loop 100000000)
@result{} 0.374873305
@end group
@end example
In this example, the interpreted code required more than 5 seconds to run,
whereas the byte-compiled code required less than 1 second. These
In this example, the interpreted code was about six times slower
than the byte-compiled code. These
results are representative, but actual results may vary.
@node Compilation Functions

View file

@ -1489,6 +1489,13 @@ introduced in each one of the @var{bindings} are available in the
being available in @var{body}.
@end defmac
@defmac pcase-let*-strict bindings body@dots{}
Like @code{pcase-let*}, but signals an error if a @var{pattern} does
not match its corresponding @var{exp}. For example, this can alert
you when a value that you would like to destructure is not as
expected.
@end defmac
@defmac pcase-dolist (pattern list) body@dots{}
Execute @var{body} once for each element of @var{list}, on each
iteration performing a destructuring binding of variables in

View file

@ -5068,11 +5068,12 @@ to the left of the display area.
@defvar overlay-arrow-position
This variable holds a marker that indicates where to display the overlay
arrow. It should point at the beginning of a line. On a non-graphical
display, or when the left fringe is not shown, the arrow text
appears at the beginning of that line, overlaying any text that would
otherwise appear. Since the arrow is usually short, and the line
usually begins with indentation, normally nothing significant is
overwritten.
display, or when the left fringe is not shown, the arrow text appears at
the beginning of that line, overlaying any text that would otherwise
appear. Since the arrow is usually short, and the line usually begins
with indentation, normally nothing significant is overwritten. If the
window has a left margin with enough space, Emacs displays the arrow
there instead and the text area is not overwritten.
The overlay-arrow string is displayed in any given buffer if the value
of @code{overlay-arrow-position} in that buffer points into that
@ -5703,7 +5704,9 @@ edge, center, or right edge of the text area. When the window
displays line numbers, and @code{:align-to} is used in display
properties of buffer text (as opposed to header line, see below), the
@code{left} and the @code{center} positions are offset to account for
the screen space taken by the line-number display.
the screen space taken by the line-number display. In particular,
@code{center} then denotes the center of the editable text area, i.e.@:
the text area excluding the line-number display.
Any of the above window elements (except @code{text}) can also be
used with @code{:align-to} to specify that the position is relative to
@ -5945,7 +5948,7 @@ property, and put the margin display specification on the contents of
the before-string.
Note that if the string to be displayed in the margin doesn't fully
specify its face, the nonspecified attributes are inherited from the
specify its face, the unspecified attributes are inherited from the
@code{margin} face (@pxref{Basic Faces}). If you want a margin string
to have a specific appearance independent of the @code{margin} face,
make sure the string has a face specifying all required attributes.
@ -6023,6 +6026,7 @@ displayed (@pxref{Display Feature Testing}).
* Defining Images:: Convenient ways to define an image for later use.
* Showing Images:: Convenient ways to display an image once it is defined.
* Multi-Frame Images:: Some images contain more than one frame.
* Canvas Images:: Easily modifiable image with a pixel buffer.
* Image Cache:: Internal mechanisms of image display.
@end menu
@ -7474,6 +7478,113 @@ This function returns the timer responsible for animating @var{image},
if there is one.
@end defun
@node Canvas Images
@subsection Canvas Images
@cindex canvas image
Canvas images can be updated and displayed efficiently with high frame
rates, for example by document viewers, visualization tools, dynamically
computed animations or games. Canvas images have an associated
writeable pixel buffer in ARGB32 format. For portability the format is
the same on all platforms. Unlike other image types supported in Emacs,
canvas images do not require creating a new Emacs Lisp object every time
they get updated.
An image specifier with @code{:type canvas} creates a canvas, for instance
as follows:
@lisp
(defvar my-canvas
'(image :type canvas
:id my-canvas
:data-width 800
:data-height 600))
@end lisp
The image specification object uniquely (with respect to @code{eq})
identifies a canvas image object. The properties @code{:data-width},
@code{:data-height} and @code{:id} are mandatory. The width and height
must both be positive integers and the id must be a symbol.
Canvases can be created by either providing ARGB32 data as a vector of
fixnums or as an unibyte string in @code{:data}. Path to a file
containing the ARGB32 data in @code{:file} can also be provided.
Furthermore @code{create-image} can create canvas images as follows,
where the data is initially loaded from a file, or from a vector:
@lisp
(setq my-file-canvas (create-image "/path/to/file"
'canvas nil
:data-width 800
:data-height 600))
(setq my-vec (make-vector (* 800 600) #xFFFF0000))
(setq my-vec-canvas (create-image my-vec
'canvas t
:data-width 800
:data-height 600))
@end lisp
If the values for dimensions change (i.e., @code{:data-height} or
@code{:data-width}), then Emacs will automatically adjust the underlying
pixel buffer and resize the canvas.
Other image properties like @code{:scale}, @code{:margin}, @code{:relief},
@code{:transform-smoothing} and @code{:map} are supported.
@xref{Image Descriptors}, for further details on these properties.
In order to display the canvas, specify it as the display property of a
string or overlay:
@lisp
(insert (propertize "#" 'display my-canvas))
(overlay-put some-overlay 'display my-canvas)
@end lisp
Once a canvas image object has been created and displayed, it can be
``refreshed'' via @code{canvas-refresh}.
@defun canvas-refresh image &optional reload-data
Refresh canvas @var{image} and update it on screen. If the optional
argument @var{reload-data} is non-nil, reload the @code{:data} or
@code{file} from the image specification before redrawing the canvas.
@end defun
The following code refreshes the canvas by reloading the data or file:
@lisp
;; Draw pixels
(aset my-vec <index> <color>)
;; Reload and refresh canvas images
(canvas-refresh my-vec-canvas 'reload-data)
@end lisp
When refreshing the canvas in a loop, we must explicitly call @code{redisplay}:
@example
(setq canvas (create-image (make-vector (* 100 100) 0) 'canvas t
:data-width 100 :data-height 100))
(insert (propertize "#" 'display canvas))
(dotimes (i (* 100 100))
(aset (plist-get (cdr canvas) :data) i #xFF)
(canvas-refresh canvas 'reload-data)
(redisplay))
@end example
But, if we are refreshing the canvas via a timer or a command, @code{redisplay}
is implicitly called after the timer or command. The following example updates
the above canvas in a timer ~30 times per second:
@example
(let ((i 0))
(run-at-time nil 0.033 (lambda ()
(when (< i (* 100 100))
(aset (plist-get (cdr canvas) :data) i #xFF)
(incf i)
(canvas-refresh canvas 'reload-data)))))
@end example
Canvas images can be manipulated and refreshed via dynamic modules.
@xref{Module Canvas API}, for further details.
@node Image Cache
@subsection Image Cache

View file

@ -105,8 +105,10 @@ the Lisp code you are debugging. This is referred to as the @dfn{source
code buffer}, and it is temporarily read-only.
An arrow in the left fringe indicates the line where the function is
executing. Point initially shows where within the line the function is
executing, but this ceases to be true if you move point yourself.
executing. On a non-graphical display (or when the left fringe is not
shown), this arrow is displayed in the left margin instead. Point
initially shows where within the line the function is executing, but
this ceases to be true if you move point yourself.
If you instrument the definition of @code{fac} (shown below) and then
execute @code{(fac 3)}, here is what you would normally see. Point is

View file

@ -237,7 +237,7 @@ To view this manual in other formats, click
Appendices
* Antinews:: Info for users downgrading to Emacs 29.
* Antinews:: Info for users downgrading to Emacs 30.
* GNU Free Documentation License:: The license for this documentation.
* GPL:: Conditions for copying and changing GNU Emacs.
* Tips:: Advice and coding conventions for Emacs Lisp.
@ -1454,6 +1454,7 @@ Processes
* Misc Network:: Additional relevant functions for net connections.
* Serial Ports:: Communicating with serial ports.
* Byte Packing:: Using bindat to pack and unpack binary data.
* UUIDs:: Generating and converting UUIDs.
Receiving Output from Processes
@ -1576,6 +1577,7 @@ Images
* Showing Images:: Convenient ways to display an image once
it is defined.
* Multi-Frame Images:: Some images contain more than one frame.
* Canvas Images:: Easily modifiable image with a pixel buffer.
* Image Cache:: Internal mechanisms of image display.
Buttons

View file

@ -1467,20 +1467,20 @@ is owned by the user with name @samp{lh}.
@item "users"
is in the group with name @samp{users}.
@item (20614 64019 50040 152000)
@item (1351023123050040152 . 1000000000)
was last accessed on October 23, 2012, at 20:12:03.050040152 UTC@.
(This timestamp is @code{(1351023123050040152 . 1000000000)}
if @code{current-time-list} is @code{nil}.)
(This timestamp is @code{(20614 64019 50040 152000)}
if @code{current-time-list} is @code{t}.)
@item (20000 23 0 0)
@item (1310720023000000000 . 1000000000)
was last modified on July 15, 2001, at 08:53:43.000000000 UTC@.
(This timestamp is @code{(1310720023000000000 . 1000000000)}
if @code{current-time-list} is @code{nil}.)
(This timestamp is @code{(20000 23 0 0)}
if @code{current-time-list} is @code{t}.)
@item (20614 64555 902289 872000)
@item (1351023659902289872 . 1000000000)
last had its status changed on October 23, 2012, at 20:20:59.902289872 UTC@.
(This timestamp is @code{(1351023659902289872 . 1000000000)}
if @code{current-time-list} is @code{nil}.)
(This timestamp is @code{(20614 64555 902289 872000)}
if @code{current-time-list} is @code{t}.)
@item 122295
is 122295 bytes long. (It may not contain 122295 characters, though,

View file

@ -1131,6 +1131,8 @@ This function returns @var{argument} and has no side effects.
@defun ignore &rest arguments
This function ignores any @var{arguments} and returns @code{nil}.
When used as a place (@pxref{Generalized Variables}), the assignment has
simply no effect.
@end defun
@defun always &rest arguments
@ -2922,6 +2924,11 @@ original signature to avoid these issues.
This is valid for macros only. Macros with this declaration are
highlighted by font-lock (@pxref{Font Lock Mode}) as normal functions,
not specially as macros.
@item font-lock-keyword
Normal functions with this declaration are highlighted by font-lock
(@pxref{Font Lock Mode}) like macros.
@end table
@end defmac

View file

@ -1117,6 +1117,7 @@ option. @xref{Initial Options,,,emacs, The GNU Emacs Manual}.
* Module Functions::
* Module Values::
* Module Misc::
* Module Canvas API::
* Module Nonlocal::
@end menu
@ -2020,6 +2021,53 @@ done, close the file descriptor using @code{close}. @ref{Low-Level
I/O,,,libc}.
@end deftypefun
@node Module Canvas API
@subsection Using Canvas API With Modules
Emacs supports creating image objects called ``canvas'' which have a
pixel buffer associated with them. These image objects can be accessed
and updated natively via dynamic modules. @xref{Canvas Images}, for what
they are.
The following functions allow you to operate on canvas image objects
with dynamic modules:
@anchor{canvas_data}
@deftypefn Function uint32_t *canvas_data (emacs_env *@var{env}, emacs_value @var{canvas})
The function gives access to the pixel buffer of @var{canvas}. The
pixel buffer is in row-major order with a size @code{@var{width}x@var{height}}.
The pixel format is ARGB32 on all platforms. Return @code{NULL} in case
of error.
@end deftypefn
Note that the pixel buffer is only valid as long as the canvas object is
alive and its dimensions have not been changed. If it has changed, Emacs
will create a new pixel buffer and automatically resize the canvas.
Once we update the canvas pixel buffer via dynamic modules, we also have
to call @code{canvas-refresh} for Emacs to redisplay the canvas. This
can be done from the module via an Elisp funcall.
@example
/* Access the pixel buffer */
uint32_t *pixel = env->canvas_data (env, canvas);
/* Write to the pixel buffer */
...
/* Redraw the canvas */
env->funcall(env, env->intern(env, "canvas-refresh"), 2,
(emacs_value[])@{canvas, Qnil@});
@end example
Note that @code{canvas-refresh} has an optional boolean argument to
reload the @code{:data} vector or string from the canvas image
specification. When called from dynamic modules, the argument should
usually be @code{Qnil}.
Thus, one can simply define a module function that takes as an argument
a canvas image object, following the specification as laid down in
@ref{Canvas Images}, and then use the above code to manipulate the pixel
buffer of the canvas and redraw it.
@node Module Nonlocal
@subsection Nonlocal Exits in Modules
@cindex nonlocal exits, in modules

View file

@ -504,11 +504,11 @@ if the information is not available.
@example
@group
emacs-build-time
@result{} (25194 55894 8547 617000)
@result{} (1651169878008547617 . 1000000000)
@end group
@end example
(This timestamp is @code{(1651169878008547617 . 1000000000)}
if @code{current-time-list} was @code{nil} when Emacs was built.)
(This timestamp is @code{(25194 55894 8547 617000)}
if @code{current-time-list} was @code{t} when Emacs was built.)
@end defvar
@defvar emacs-version

View file

@ -1459,15 +1459,13 @@ The operating system limits the range of time and zone values.
@end defun
@defvar current-time-list
This boolean variable is a transition aid. If @code{t},
@code{current-time} and related functions return timestamps in list
form, typically @code{(@var{high} @var{low} @var{micro} @var{pico})};
otherwise, they use @code{(@var{ticks} . @var{hz})} form. Currently
this variable defaults to @code{t}, for behavior compatible with
previous Emacs versions. Developers are encouraged to test
timestamp-related code with this variable set to @code{nil}, as it
will default to @code{nil} in a future Emacs version, and will be
removed in some version after that.
This boolean variable is a transition aid. If @code{nil} (the default),
@code{current-time} and related functions return timestamps in
@code{(@var{ticks} . @var{hz})} form. If @code{t}, these functions
return in list form, typically @code{(@var{high} @var{low} @var{micro}
@var{pico})}, for behavior compatible with previous Emacs versions.
As it is merely a transition aid, this variable is planned to be removed
in some future Emacs version.
@end defvar
@defun current-time
@ -1543,12 +1541,19 @@ MS-Windows.
This function returns a list describing the time zone that the user is
in.
@cindex Univeral Time
The value has the form @code{(@var{offset} @var{abbr})}. Here
@var{offset} is an integer giving the number of seconds ahead of Universal Time
(east of Greenwich). A negative value means west of Greenwich. The
second element, @var{abbr}, is a string giving an abbreviation for the
time zone, e.g., @samp{"CST"} for China Standard Time or for
U.S. Central Standard Time. Both elements can change when daylight
@var{offset} is an integer number of seconds of time ahead of
Universal Time, the time scale originally based on Greenwich Mean Time (GMT),
the local mean time at the Royal Observatory, Greenwich.
A positive value is suitable for time zones east of Greenwich,
and negative for west of Greenwich. The
second element, @var{abbr}, is a string giving a possibly-ambiguous
abbreviation for the time zone, e.g., @samp{"IST"} for India Standard
Time, Irish Standard Time, or Israel Standard Time.
POSIX-compatible time zone abbreviations are three to six characters
that are each an ASCII alphanumeric, @samp{+}, or @samp{-}.
Both elements can change when daylight
saving time begins or ends; if the user has specified a time zone that
does not use a seasonal time adjustment, then the value is constant
through time.
@ -1993,7 +1998,7 @@ This stands for the year without century (00--99).
@item %Y
This stands for the year with century.
@item %Z
This stands for the time zone abbreviation (e.g., @samp{EST}).
This stands for the time zone abbreviation (e.g., @samp{IST}).
@item %z
This stands for the time zone numerical offset. The @samp{z} can be
preceded by one, two, or three colons; if plain @samp{%z} stands for
@ -2052,6 +2057,7 @@ system.
@defun format-seconds format-string seconds
This function converts its argument @var{seconds} into a string of
years, days, hours, etc., according to @var{format-string}. The
argument @var{seconds} is a time value (@pxref{Time of Day}). The
argument @var{format-string} may contain @samp{%}-sequences which
control the conversion. Here is a table of what the
@samp{%}-sequences mean:

View file

@ -2171,7 +2171,7 @@ underscore are ignored, and the @code{@@language} capture name is
reserved.
If the embedded language is dynamic, then @code{:embed} can specify a
function rathar than a static language. The function takes the node
function rather than a static language. The function takes the node
captured with @code{@@language} capture name. Care have to be taken that
the @code{@@language} capture and the range capture are in the same
match group. The function should return either a language symbol, or nil

View file

@ -68,6 +68,7 @@ Processes}.
* Misc Network:: Additional relevant functions for net connections.
* Serial Ports:: Communicating with serial ports.
* Byte Packing:: Using bindat to pack and unpack binary data.
* UUIDs:: Generating and converting UUIDs.
@end menu
@node Subprocess Creation
@ -3883,3 +3884,154 @@ arguments @var{args}. Its behavior follows that of @code{defmacro},
which the important difference that the new forms can only be used
within Bindat type expressions.
@end defmac
@node UUIDs
@section UUIDs
@cindex uuids
Emacs Lisp can generate and parse the most popular UUID variants to
and from strings and binary. It can generate UUIDv4, UUIDv5 and UUIDv7
according to RFC 9562. UUIDv4 is a randomly generated identifier,
UUIDv5 is an identifier generated from a standard namespace and a name,
and UUIDv7 is a combination of a timestamp and random identifier, with
the advantage of having good index performance in databases.
All UUIDs are 16 byte identifiers with a common string representation,
consisting of hex digits and dashes of a predetermined length, such as
@samp{919108f7-52d1-4320-9bac-f847db4148a8}.
@menu
* UUID Generation::
* UUID Conversion::
* Special UUID values::
@end menu
@node UUID Generation
@subsection UUID Generation
@cindex uuid generation
To generate UUIDs, call @code{uuid-v4}, @code{uuid-v5} or
@code{uuid-v7}. UUID v4 and v7 will by default use the normal elisp
@dfn{random} for random numbers, but a different random number generator
can be passed in, as long as it can be called with an arg of the end of
the range of acceptable integers to generate (exclusive), and returns an
integer.
@defun uuid-v4 &key rng
Return a @code{uuid-v4} Lisp object representing a new UUIDv4.
@var{rng}, if provided, is a function that will, when called with a
numeric argument, return a random number between 0 and that number
(exclusive).
@end defun
@defun uuid-v7 &key rng
Similar to @code{uuid-v4} but returns a @code{uuid-v7}, which is
generated with a timestamp in addition to random numbers (generated from
@var{rng} in a similar manner as @code{uuid-v4}).
@end defun
These use random numbers, which should be cryptographically secure.
@xref{Random Numbers}, but generally these random numbers are not
sufficient to generate sufficiently random UUIDs. For private uses, the
default behavior should be sufficient, but for professional uses,
@var{rng} should be used, and provide cryptographically secure random
numbers.
@noindent
UUIDv5s must be created with a namespace and a name. The namespaces are
defined in @code{uuid-namespace-alist} and are by default @code{dns},
@code{url}, @code{oid}, and @code{x500}.
@defun uuid-v5 namespace name
This function returns a new @code{uuid-v5} Lisp object based on
@var{namespace}, which is a symbol in the key of the
@code{uuid-namespace-alist}: @code{dns}, @code{url}, @code{oid},
@code{x500}, or any symbol added. This is combined with @var{name} to
construct a new UUIDv5.
@end defun
An example is:
@cindex uuidv5
@example
(uuid-v5 'dns "www.example.com")
@end example
@defvar uuid-namespace-alist
A list of namespace symbols and their corresponding UUIDs. Each alist
entry is a cons of the symbol and a UUID Lisp object representing the
namespace. This is used in @code{uuid-v5}, see above for more info on
how this is used.
@end defvar
@node UUID Conversion
@subsection UUID Conversion
@cindex uuid conversion
To use a UUID, typically it is converted to a string, and sometimes to a
binary representation. This is done using @code{uuid-to-string} function.
@defun uuid-to-string uuid
Return the standard string value, with hex values and dashes, of Lisp
object @code{uuid}.
@end defun
@example
(uuid-to-string (uuid-v4)) ; @r{"230156d4-488a-45d1-93c9-507ec8be37ca"}
@end example
@noindent
Binary can also be generated, which generates a unibyte string, using
@code{uuid-to-bytes}, and a numeric representation of a UUID can be
generated with @code{uuid-to-number}.
@defun uuid-to-bytes uuid
Return a unibyte string representing the binary value of @code{uuid}.
@end defun
@defun uuid-to-number uuid
Return a numeric representation of the value of @code{uuid}.
@end defun
@noindent
String UUIDs can also be converted to a UUID Lisp object, with
@code{uuid-from-string}, and bytes can be converted with
@code{uuid-from-bytes}. These work with all UUIDs, not just the ones
this module can generate.
@defun uuid-from-string uuid-str
Return a UUID Lisp object that represents @var{uuid-str}.
@end defun
@defun uuid-from-bytes uuid-bytes
Return a UUID Lisp object that represents @var{uuid-bytes}, which is
expected to be a unibyte string.
@end defun
Valid UUIDs have types, which can be used with @code{cl-typep},
@code{cl-check-type} and @code{cl-typecase}. The type is specified with
the type specifier @code{(uuid-v <version>)}. @var{version} can be any
version of UUID, but we make sure the UUID variant is correctly
@code{2}; any other value is not a valid version.
@example
(when (cl-typep my-uuid '(uuid-v 4))
(process-v4-uuid my-uuid))
(defun process-v4-uuid (uuid)
;; Error if not the correct type
(cl-check-type uuid (uuid-v 4))
;; Proceed to process the UUIDv4.
(more-processing uuid))
@end example
@node Special UUID values
@subsection Special UUID values
@cindex special uuid values
@cindex uuid nil and uuid max
@cindex nil uuid
@cindex max uuid
@code{uuid-nil} and @code{uuid-max} are constant values representing the
UUID equivalents of @code{nil} and a max sentinel value, as defined in
RFC 9562.

View file

@ -653,8 +653,9 @@ functions. @xref{Documentation Basics}.
@cindex symbolic shorthands
@cindex namespacing
@cindex namespaces
@cindex renamed symbols
The symbol @dfn{shorthands}, sometimes known as ``renamed symbols'', are
The symbol @dfn{shorthands}, sometimes known as @dfn{renamed symbols}, are
symbolic forms found in Lisp source. They're just like regular
symbolic forms, except that when the Lisp reader encounters them, it
produces symbols which have a different and usually longer @dfn{print
@ -781,6 +782,47 @@ those names.
Symbol forms whose names start with @samp{#_} are not transformed.
@end itemize
@subsection Converting to/from shorthands
Shorthands are automatically expanded by the Lisp reader.
If you want to apply @code{read-symbol-shorthands} to a symbol
name without going through the reader, for example because the symbol
comes from another buffer (e.g., the minibuffer), you can use
@code{shorthands-to-longhand}. Similarly, if you are looking for
a symbol in a buffer, you can consider all its possible
shorthand forms with the use of @code{shorthands-of-symbol}.
@cindex longhand form of symbol name
@defun shorthands-to-longhand string
Return the full name (so called @dfn{longhand} form) of the symbol whose
shorthand name is @var{string}. It always returns a string;
if there is no use of any shorthand notation in @var{string}, it just
returns @var{string} unchanged.
@end defun
@defun shorthands-of-symbol string-or-symbol
Return the list of all the alternative ways to write the name of the
specified symbol.
The argument @var{string-or-symbol} can be a symbol or its name, and
the return value is a list of strings. Note that the return value
includes only the shorthand forms of the argument, not its longhand
form, so it is common and normal for the return value to be @code{nil}.
@end defun
@defun shorthands-intern string &optional obarray
Interns the string @var{string} in the obarray @var{obarray},
just like @code{intern}, except that it obeys
@code{read-symbol-shorthands} and thus expands any shorthand in
@var{string} if applicable before interning it.
Returns the interned symbol.
@end defun
@defun shorthands-intern-soft string &optional obarray
Same as @code{shorthands-intern}, except that it returns @code{nil}
if there is no symbol by that name in the obarray instead of
interning a new symbol.
@end defun
@node Symbols with Position
@section Symbols with Position
@cindex symbol with position

View file

@ -1449,6 +1449,19 @@ arguments @var{args}.
This kind of element enables undo limited to a region to determine
whether the element pertains to that region.
@item (apply @var{delta} (@var{beg} . @var{end}) @var{funname} . @var{args})
This kind of element is similar to the previous form. The difference is
that, to undo it, @var{funname} is invoked like this:
@lisp
(apply @var{funname} @var{beg2} @var{end2} @var{args})
@end lisp
@noindent
where @var{beg2} and @var{end2} are the adjusted values of @var{beg} and
@var{end}. The function can use those arguments to compute positions
relative to the adjusted region.
@item nil
This element is a boundary. The elements between two boundaries are
called a @dfn{change group}; normally, each change group corresponds to
@ -4869,7 +4882,7 @@ faster but suboptimal solution. The default value is 1000000.
@code{replace-region-contents} returns @code{t} if a non-destructive
replacement could be performed. Otherwise, i.e., if @var{max-secs}
was exceeded, it returns @code{nil}.
was exceeded or too much memory would have been needed, it returns @code{nil}.
Note: When using the refined replacement algorithm, if the replacement
is a string, it will be internally copied to a temporary buffer.
@ -4877,6 +4890,24 @@ Therefore, all else being equal, it is preferable to pass a buffer than
a string as @var{source} argument.
@end defun
Sometimes @code{replace-region-contents} is unable to understand the
nature of the change in which case information such as overlays and
markers will not be preserved as well as we would like. If this is
important and you have enough knowledge about the change, you can
preserve this information manually. For example, when sorting the lines
of a region, you can start by collecting all the overlays and markers in
the affected region using @code{overlays-in} and @code{markers-in} as
well as recording a description of the line on which they were found.
After inserting the sorted lines, you can then move the objects back to
their rightful position.
@defun markers-in &optional beg end
Return a list of all the markers found between @var{beg} and @var{end}
in the current buffer. @var{beg} defaults the @code{point-min} and
@var{end} defaults to @code{point-max}. Do not rely on the order of the
markers in the list, because it is unspecified.
@end defun
@node Decompression
@section Dealing With Compressed Data

View file

@ -1311,6 +1311,7 @@ other such variables, this one must be set in the first line of a
file.
@end defvar
@cindex lexical-binding cookie
@noindent
In practice, dialect selection means that the first line in an Emacs
Lisp file looks like:
@ -1327,9 +1328,10 @@ for the modern lexical-binding dialect, and
@end example
@noindent
for the old dynamic-only dialect. When no declaration is present the
old dialect is used, but this may change in a future release.
The compiler will warn if no declaration is present.
for the old dynamic-only dialect. (This is known as the
@dfn{lexical-binding cookie}.) When no declaration is present the old
dialect is used, but this may change in a future release. The compiler
will warn if no declaration is present.
When evaluating Emacs Lisp code directly using an @code{eval} call,
lexical binding is enabled if the @var{lexical} argument to
@ -1748,6 +1750,14 @@ local hook functions that have a non-@code{nil}
killed, but if the optional @var{kill-permanent} argument is
non-@code{nil}, even those variables will be killed.
If @var{kill-permanent} is the symbol @code{permanent-local}, this
function kills local variables and ignores any variable watchers. If it
is the symbol @code{reset}, the function ignores variable watchers and
resets the buffer as if the buffer was newly created. Use these values
with caution: for example, @code{reset} sets buffer variables such as
@code{default-directory} to @code{nil} and thus may result in unexpected
behavior.
This function also resets certain other information pertaining to the
buffer: it sets the local keymap to @code{nil}, the syntax table to the
value of @code{(standard-syntax-table)}, the case table to

View file

@ -3136,6 +3136,9 @@ The variable @code{display-buffer-overriding-action}.
@item
The user option @code{display-buffer-alist}.
@item
The variable @code{display-buffer-default-alist}.
@item
The @var{action} argument.
@ -3198,6 +3201,18 @@ treated with the highest priority by @code{display-buffer}. The
default value is an empty display action, i.e., @w{@code{(nil . nil)}}.
@end defvar
@defvar display-buffer-default-alist
The value of this variable is an alist mapping conditions to display
actions (@pxref{display-buffer-alist}).
Lisp programs may let-bind this variable to specify conditional actions
for wrapped @code{display-buffer} calls. Users are not supposed to set
this variable. They should customize @code{display-buffer-alist}
instead which has higher priority and, as a rule, is left alone by Lisp
programs.
@end defvar
@anchor{display-buffer-alist}
@defopt display-buffer-alist
The value of this option is an alist mapping conditions to display
actions. Each condition is passed to @code{buffer-match-p}
@ -3210,10 +3225,10 @@ use @code{derived-mode} or @code{major-mode} as condition,
@code{display-buffer} is called before the major mode of the buffer is
set.
If the caller of @code{display-buffer} passes a category as a symbol
in its @var{action} argument, then you can use the same category in
@code{display-buffer-alist} to match buffers with different names,
for example:
If the caller of @code{display-buffer} passes a category as a symbol in
its @var{action} argument, then you can use the same category in
@code{display-buffer-alist} and @code{display-buffer-default-alist} to
match buffers with different names, for example:
@example
@group
@ -3231,10 +3246,10 @@ for example:
@xref{Buffer List, @code{buffer-match-p}}.
Regardless of the displayed buffer's name the caller defines a category
as a symbol @code{comint}. Then @code{display-buffer-alist} matches
this category for all buffers displayed with the same category.
This avoids the need to construct a complex regular expression
that matches a buffer name.
as a symbol @code{comint}. Then @code{display-buffer-alist} and
@code{display-buffer-default-alist} match this category for all buffers
displayed with the same category. This avoids the need to construct a
complex regular expression that matches a buffer name.
You can also match on the command now being executed. This is useful
when different commands display buffers with the same name, but you want
@ -4084,13 +4099,15 @@ windows were selected afterwards within this command.
@vindex category@r{, a buffer display action alist entry}
@item category
If the caller of @code{display-buffer} passes an alist entry
@w{@code{(category . @var{symbol})}} in its @var{action} argument, then you
can match the displayed buffer by using the same category symbol in the
condition part of @code{display-buffer-alist} entries. @xref{Buffer
List, @code{buffer-match-p}}. Thus, if a Lisp program uses a particular
@w{@code{(category . @var{symbol})}} in its @var{action} argument, then
you can match the displayed buffer by using the same category symbol in
the condition part of @code{display-buffer-alist} and
@code{display-buffer-default-alist} entries. @xref{Buffer List,
@code{buffer-match-p}}. Thus, if a Lisp program uses a particular
@var{symbol} as the category when calling @code{display-buffer}, users
can customize how these buffers will be displayed by including such an
entry in @code{display-buffer-alist}.
entry in @code{display-buffer-alist}. Programs can let-bind
@code{display-buffer-default-alist} to achieve the same effect.
@vindex tab-name@r{, a buffer display action alist entry}
@item tab-name
@ -4492,10 +4509,42 @@ displaying @file{*foo*} at the bottom of the frame.
the window already showing @file{*foo*} since both functions supplied
by the @var{action} argument try to reuse such a window first.
By setting the @var{action} argument, an application effectively
There are cases, however, where Lisp programs want to modify the
default behavior of a @code{display-buffer} call hidden behind another
function. In those cases, setting the @var{action} argument is not an
option. Fortunately, the @code{display-buffer-default-alist} variable
can be used to specify a list of conditional default actions. Consider
the following example:
@example
@group
(defun foo (buffer)
(display-buffer
buffer
'((display-buffer-below-selected display-buffer-at-bottom))))
(defun bar ()
(let ((display-buffer-default-alist
'(("\\*bar\\*" (display-buffer-pop-up-frame)))))
(foo (get-buffer-create "*bar*"))))
(defun baz ()
(let ((display-buffer-default-alist
'(("\\*baz\\*" (display-buffer-same-window)))))
(foo (get-buffer-create "*baz*"))))
@end group
@end example
Here, @code{foo} calls @code{display-buffer} with a specific
@var{action}. Let-binding @code{display-buffer-default-alist} allows
the functions @code{bar} and @code{baz} to specify their own action
functions.
By setting the @var{action} argument and/or the
@code{display-buffer-default-alist} variable, an application effectively
overrules any customization of @code{display-buffer-base-action}. Our
user can now either accept the choice of the application, or redouble
by customizing the option @code{display-buffer-alist} as follows:
user can now either accept the choice of the application, or redouble by
customizing the option @code{display-buffer-alist} as follows:
@example
@group

View file

@ -8562,7 +8562,7 @@
* doclicense.texi: Remove node heading, so that it can be included by
other files.
* dired-x.texi: Relicence under GFDL. Remove date from title page.
* dired-x.texi: Relicense under GFDL. Remove date from title page.
* calc.texi (Algebraic Tutorial): Emphasize that / binds less strongly
than *.

View file

@ -63,18 +63,22 @@ INSTALL_DATA = @INSTALL_DATA@
MAKEINFO = @MAKEINFO@
MAKEINFO_OPTS = --force -I$(emacsdir)
ifeq ($(DOCLANG),)
DOCLANG:=default
else ifeq ($(wildcard $(srcdir)/../translations/$(DOCLANG)/misc/info_common.mk),)
$(error No manual language $(DOCLANG) found)
DOCLANG:=default
endif
lang_suffix:=$(filter-out -default,-$(DOCLANG))
lang_subdir:=$(filter-out ../translations/default/misc/,../translations/$(DOCLANG)/misc/)
## On MS Windows, efaq-w32; otherwise blank.
DOCMISC_W32 = @DOCMISC_W32@
DOCMISC_W32_TARGET = efaq-w32
## Info files to build and install on all platforms.
INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \
ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \
emacs-mime epa erc ert eshell eudc eww flymake forms gnus \
htmlfontify idlwave ido info.info mairix-el message mh-e \
modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \
rcirc reftex remember sasl sc semantic ses sieve smtpmail \
speedbar srecode todo-mode tramp transient url use-package \
vhdl-mode viper vtable widget wisent woman
include $(srcdir)/../translations/$(DOCLANG)/misc/info_common.mk
## Info files to install on current platform.
INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32)
@ -82,29 +86,31 @@ INFO_INSTALL = $(INFO_COMMON) $(DOCMISC_W32)
## Info files to build on current platform.
## This is all of them, even though they might not all get installed,
## because the info files are pre-built in release tarfiles.
INFO_TARGETS = $(INFO_COMMON) efaq-w32
INFO_TARGETS = $(INFO_COMMON) $(DOCMISC_W32_TARGET)
## Some manuals have their source in .org format.
## This is discouraged because the .texi files it generates
## are not as well formatted as handwritten ones.
ORG_SETUP = $(wildcard ${srcdir}/*-setup.org)
ORG_SRC = $(filter-out ${ORG_SETUP},$(wildcard ${srcdir}/*.org))
ORG_SETUP = $(wildcard ${srcdir}/$(lang_subdir)*-setup.org)
ORG_SRC = $(filter-out ${ORG_SETUP},$(wildcard ${srcdir}/$(lang_subdir)*.org))
TEXI_FROM_ORG = ${ORG_SRC:.org=.texi}
# There are some naming differences between the info targets and the other
# targets, so let's resolve them here.
TARGETS_1 = $(INFO_INSTALL:ccmode=cc-mode)
TARGETS = $(TARGETS_1:info.info=info)
TARGETS = $(INFO_INSTALL:ccmode=cc-mode)
texi_sources = $(addsuffix .texi,${TARGETS})
# Sources are also suffixed, this is useless as they are in different
# directories, but some people argued that there should not be
# different files with same name in the repo.
texi_sources = $(addsuffix $(lang_suffix).texi,${TARGETS})
texi_notgen = $(filter-out $(notdir ${TEXI_FROM_ORG}),${texi_sources})
texi_and_org = $(notdir ${ORG_SRC}) ${texi_notgen}
SOURCES = $(sort ${texi_and_org})
DVI_TARGETS = $(TARGETS:=.dvi)
HTML_TARGETS = $(TARGETS:=.html)
PDF_TARGETS = $(TARGETS:=.pdf)
PS_TARGETS = $(TARGETS:=.ps)
DVI_TARGETS = $(TARGETS:=$(lang_suffix).dvi)
HTML_TARGETS = $(TARGETS:=$(lang_suffix).html)
PDF_TARGETS = $(TARGETS:=$(lang_suffix).pdf)
PS_TARGETS = $(TARGETS:=$(lang_suffix).ps)
TEXI2DVI = texi2dvi
TEXI2PDF = texi2pdf
@ -118,21 +124,21 @@ ENVADD = $(AM_V_GEN)TEXINPUTS="$(srcdir):$(emacsdir):$(TEXINPUTS)" \
gfdl = ${srcdir}/doclicense.texi
style = ${emacsdir}/docstyle.texi
.PHONY: info dvi html pdf ps echo-info echo-sources $(INFO_TARGETS)
.PHONY: info dvi html pdf ps echo-info echo-sources $(patsubst info, info-doc, $(INFO_TARGETS))
## Prevent implicit rule triggering for foo.info.
.SUFFIXES:
## Disable implicit rules.
%.texi: ;
# Default.
info: $(INFO_TARGETS)
# Default. patsubst as "info" is already taken.
info: $(patsubst info, info-doc,$(INFO_TARGETS))
## Used by top-level Makefile.
## Base file names of output info files.
INFO_BASES = $(patsubst %.info,%,$(notdir $(INFO_INSTALL)))
echo-info:
@: $(info $(addsuffix .info,$(INFO_BASES)))
@: $(info $(addsuffix $(lang_suffix).info,$(INFO_BASES)))
echo-sources:
@: $(info $(SOURCES))
@ -152,32 +158,30 @@ ${buildinfodir}:
EXTRA_OPTS =
${buildinfodir}/%.info: ${srcdir}/%.texi ${gfdl} ${style} | ${buildinfodir}
${buildinfodir}/%$(lang_suffix).info: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style} | ${buildinfodir}
$(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) $(EXTRA_OPTS) \
-o $@ $<
## The short aliases, eg efaq = $(buildinfodir)/efaq.info.
define info_template
$(1): $$(buildinfodir)/$(1).info
## patsubst as "info" is already taken.
$$(patsubst info, info-doc, $(1)): $$(buildinfodir)/$(1)$$(lang_suffix).info
endef
## "info" is already taken.
info.info: $(buildinfodir)/info.info
$(foreach ifile,$(filter-out info.info,$(INFO_TARGETS)),$(eval $(call info_template,$(ifile))))
$(foreach ifile,$(INFO_TARGETS),$(eval $(call info_template,$(ifile))))
%.dvi: ${srcdir}/%.texi ${gfdl} ${style}
%$(lang_suffix).dvi: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style}
$(ENVADD) $(TEXI2DVI) $<
%.pdf: ${srcdir}/%.texi ${gfdl} ${style}
%$(lang_suffix).pdf: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style}
$(ENVADD) $(TEXI2PDF) $<
%.html: ${srcdir}/%.texi ${gfdl} ${style}
%$(lang_suffix).html: ${srcdir}/$(lang_subdir)%$(lang_suffix).texi ${gfdl} ${style}
$(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) $(EXTRA_OPTS) \
-o $@ $<
%.ps: %.dvi
%$(lang_suffix).ps: %$(lang_suffix).dvi
$(DVIPS) -o $@ $<
@ -204,16 +208,16 @@ ${buildinfodir}/ccmode.info: \
## efaq, efaq_w32 do not depend on gfdl.
## Maybe we can use .SECONDEXPANSION for this.
${buildinfodir}/efaq%.info: ${srcdir}/efaq%.texi ${style} | ${buildinfodir}
${buildinfodir}/efaq%$(lang_suffix).info: ${srcdir}/efaq%$(lang_suffix).texi ${style} | ${buildinfodir}
$(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ $<
efaq%.dvi: ${srcdir}/efaq%.texi
efaq%$(lang_suffix).dvi: ${srcdir}/efaq%$(lang_suffix).texi
$(ENVADD) $(TEXI2DVI) $<
efaq%.pdf: ${srcdir}/efaq%.texi
efaq%$(lang_suffix).pdf: ${srcdir}/efaq%$(lang_suffix).texi
$(ENVADD) $(TEXI2PDF) $<
efaq%.html: ${srcdir}/efaq%.texi
efaq%$(lang_suffix).html: ${srcdir}/efaq%$(lang_suffix).texi
$(AM_V_GEN)$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ $<
${buildinfodir}/emacs-mime.info emacs-mime.html: EXTRA_OPTS = --enable-encoding
@ -248,7 +252,10 @@ emacs = "${EMACS}" -batch --no-site-file --no-site-lisp --eval '(setq load-prefe
# things like org-setup's "version" macro work. Sigh.
define org_template
$(1:.org=.texi): $(1) ${top_srcdir}/lisp/org/ox-texinfo.el
$${AM_V_GEN}cd "$${srcdir}" && $${emacs} -l ox-texinfo \
$${AM_V_GEN}cd "$${srcdir}" && $${emacs} \
--eval '(add-to-list (quote load-path) "$(abspath ${top_srcdir}/lisp/org)")' \
--eval '(setq org--inhibit-version-check t)' \
-l ox-texinfo \
--eval '(setq gc-cons-threshold 50000000)' \
--eval '(setq org-confirm-babel-evaluate nil)' \
--eval '(setq org-id-track-globally nil)' \

View file

@ -17367,12 +17367,14 @@ and @kbd{t U}, the normal argument is then taken from the second-to-top
stack position.) This allows you to give a non-integer time zone
adjustment. The time-zone argument can also be an HMS form, or
it can be a variable which is a time zone name in upper- or lower-case.
For example @samp{tzone(PST) = tzone(8)} and @samp{tzone(pdt) = tzone(7)}
(for Pacific standard and daylight saving times, respectively).
For example @samp{tzone(JST) = tzone(-9)} and @samp{tzone(gmt) = tzone(0)}
(for Japan standard and Greenwich mean time, respectively).
North American and European time zone names are defined as follows.
These names are obsolescent and new code should not rely on them:
These names are obsolete and new code should not rely on them:
the @samp{YST}-related names have disagreed with time in Yukon since 1973,
the @samp{PST}- and @samp{MST-}related names have disagreed with
time in western Canada since 2026,
and other names could well become confusing or wrong in the future
as countries change their time zone rules.
For each time zone there is one name for standard time,
@ -17392,21 +17394,6 @@ YGT PGT MGT CGT EGT AGT NGT BGT WEGT MEGT MEGZ
@end group
@end smallexample
@vindex math-tzone-names
To define time zone names that do not appear in the above table,
you must modify the Lisp variable @code{math-tzone-names}. This
is a list of lists describing the different time zone names; its
structure is best explained by an example. The three entries for
circa-2022 US Pacific Time look like this:
@smallexample
@group
( ( "PST" 8 0 ) ; Name as an upper-case string, then standard
( "PDT" 8 -1 ) ; adjustment, then daylight saving adjustment.
( "PGT" 8 "PST" "PDT" ) ) ; Generalized time zone.
@end group
@end smallexample
@cindex @code{TimeZone} variable
@vindex TimeZone
With no arguments, @code{calc-time-zone} or @samp{tzone()} will by

View file

@ -1340,9 +1340,20 @@ keyword @code{:session}.
D-Bus object path, @var{service} is registered at. @var{interface} is
an interface offered by @var{service}. It must provide @var{method}.
@var{handler} is a Lisp function, which is called when the
corresponding return message arrives. If @var{handler} is @code{nil},
no return message will be expected.
@var{handler} is a Lisp function, which is called when the corresponding
return message has arrived. It uses the returned values from the
@var{method} call as arguments. These are the same arguments which are
returned when @code{dbus-call-method} is invoked instead,
@pxref{Synchronous Methods}. If @var{handler} is @code{nil}, no return
message will be expected.
@var{handler} can also be the cons cell @code{(@var{handler}
. @var{error-handler})}. In this case, @var{error-handler} will be
called in case an error is returned from D-Bus. It uses the returned
D-Bus error as argument.
Neither the return value of @var{handler} nor the return value of
@var{error-handler} is used.
If the parameter @code{:timeout} is given, the following integer
@var{timeout} specifies the maximum number of milliseconds before a
@ -1366,19 +1377,40 @@ arguments. They are converted into D-Bus types as described in
If @var{handler} is a Lisp function, the function returns a key into
the hash table @code{dbus-registered-objects-table}. The
corresponding entry in the hash table is removed, when the return
message arrives, and @var{handler} is called. Example:
message arrives, and @var{handler} is called. Examples:
The return value of @samp{org.freedesktop.portal.Settings.ReadOne} is a variant.
@lisp
(dbus-call-method-asynchronously
:system "org.freedesktop.Hal"
"/org/freedesktop/Hal/devices/computer"
"org.freedesktop.Hal.Device" "GetPropertyString"
(lambda (msg) (message "%s" msg))
"system.kernel.machine")
:session "org.freedesktop.portal.Desktop"
"/org/freedesktop/portal/desktop"
"org.freedesktop.portal.Settings" "ReadOne"
'((lambda (msg) (message "Method handler %s" msg)) .
(lambda (err) (message "Error handler %s" err)))
"org.freedesktop.appearance" "color-scheme")
@print{} i686
@print{} Method handler (0)
@result{} (:serial :system 2)
@result{} (:serial :session 4)
@end lisp
There does not exist a method @samp{org.freedesktop.portal.Settings.ReadTwo}.
@lisp
(dbus-call-method-asynchronously
:session "org.freedesktop.portal.Desktop"
"/org/freedesktop/portal/desktop"
"org.freedesktop.portal.Settings" "ReadTwo"
'((lambda (msg) (message "Method handler %s" msg)) .
(lambda (err) (message "Error handler %s" err)))
"org.freedesktop.appearance" "color-scheme")
@print{} Error handler
(dbus-error "org.freedesktop.DBus.Error.UnknownMethod
No such method "ReadTwo")
@result{} (:serial :session 5)
@end lisp
@end defun

View file

@ -513,8 +513,7 @@ Finally, it's worth noting that, by default, Eglot generally turns on
all features that it @emph{can} turn on. It's possible to opt out of
features via the @code{eglot-ignored-server-capabilities} user option
(@pxref{Customizing Eglot}) and the @code{eglot-managed-mode-hook} hook
that runs after Eglot starts managing a buffer (@pxref{Eglot and
Buffers}).
that runs after Eglot starts managing a buffer (@pxref{Other Variables}).
@node Eglot and Buffers
@section Buffers, Projects, and Eglot
@ -625,34 +624,14 @@ starting an Eglot session for the buffer. When Eglot stops managing the
buffer, the minor mode is turned off, and all the settings that Eglot
changed are restored to their original values.
@vindex eglot-managed-mode-hook
@vindex eglot-managed-p
@item
The minor mode's main job is to ``hook up'' Eglot to other Emacs
functionality, i.e. arrange for these features to receive information
from the language server, by changing special variables controlling
these features. @xref{Eglot Features}.
@item
To customize this, Eglot's special minor mode provides a hook variable
@code{eglot-managed-mode-hook} specifically to alter Eglot's interaction
with these variables in each buffer. This hook is run both when the
minor mode is turned on and when it's turned off; use the function
@code{eglot-managed-p} to tell if current buffer is still being managed
or not.
these features. @xref{Eglot Features} and @xref{Other Variables} for
how to exercise finer control over this minor mode's activation.
@end itemize
For example, to turn off @dfn{inlay hints} and @dfn{semantic tokens} by
default but still retain the ability to turn them on again
interactively use this:
@lisp
(add-hook 'eglot-managed-mode-hook
(lambda ()
(eglot-inlay-hints-mode -1)
(eglot-semantic-tokens-mode -1)))
@end lisp
@node Eglot Commands
@section Eglot Commands
@cindex commands, Eglot
@ -1116,9 +1095,25 @@ A hook run after the LSP connection to the server is successfully
established. Each function receives a @code{eglot-lsp-server} instance
as argument. @xref{Starting Eglot}.
@vindex eglot-managed-mode-hook
@vindex eglot-managed-p
@item eglot-managed-mode-hook
A hook run after Eglot started or stopped managing a buffer.
@xref{Eglot and Buffers}, for details of its usage.
You may use it to alter Eglot's setting of other Eglot and Emacs
variables in each buffer. This hook is run both when the minor mode is
turned on and when it's turned off; use the function
@code{eglot-managed-p} to tell if current buffer is still being managed
or not. For example, to turn off @dfn{inlay hints} and @dfn{semantic
tokens} by default but still retain the ability to turn them on again
interactively use this:
@lisp
(add-hook 'eglot-managed-mode-hook
(lambda ()
(eglot-inlay-hints-mode -1)
(eglot-semantic-tokens-mode -1)))
@end lisp
@vindex eglot-stay-out-of
@item eglot-stay-out-of
@ -1876,9 +1871,17 @@ slowly, try to customize the variable @code{eglot-events-buffer-config}
0. This will disable recording any events and may speed things up.
In other situations, the cause of poor performance lies in the language
server itself. Some servers use aggressive caching and other techniques
to improve their performance. Often, this can be tweaked by changing
the server configuration (@pxref{Advanced server configuration}).
server itself. Some servers may have poor implementations of some LSP
features that Eglot turns on by default. Some servers use aggressive
caching and other techniques to improve their performance. Often, this
can be tweaked by changing the server configuration (@pxref{Advanced
server configuration}).
Depending on the specific nature of the performance bottleneck,
sometimes a workaround is to turn off these features on the Eglot side
using the @code{eglot-ignored-server-capabilities} and
@code{eglot-managed-mode-hook} variables (@pxref{Other Variables} and
@pxref{More Customization}).
Another aspect that may cause performance degradation is the amount of
JSONRPC information exchanged with Emacs. Using an LSP program like

File diff suppressed because it is too large Load diff

View file

@ -336,7 +336,9 @@ failing test.
Each entry consists of the name of the test followed by the code that
performs the transform being tested. The buffer also contains buttons
that allow jumping to the test definitions.
that allow jumping to the test definitions. If a test fails, the diff
button displays a Diff Mode buffer comparing the actual and expected
output.
@xref{erts files} for more information.

View file

@ -650,6 +650,12 @@ passing any @var{arguments} to the script (@pxref{Scripts}). This is
not to be confused with the command @command{source}, which sources a
file in a subshell environment.
@cmindex accumulate
@item accumulate @var{function}
When used as a pipe target (@pxref{Lisp Pipelines}), this accumulates
all the output from the left side of the pipe and passes it to
@var{function} as a single argument.
@cmindex addpath
@item addpath
@itemx addpath [-b] @var{directory}@dots{}
@ -670,6 +676,12 @@ adding it to the aliases file (@pxref{Aliases}). If @var{command} is
omitted, delete the alias named @var{name}. With no arguments at all,
list all the currently-defined aliases.
@cmindex apply-lines
@item apply-lines @var{function}
When used as a pipe target (@pxref{Lisp Pipelines}), this passes each
line of output from the left side of the pipe as a list of arguments to
@var{function}.
@cmindex basename
@item basename @var{filename}
Return @var{filename} without its directory.
@ -1175,6 +1187,12 @@ Manual}. Otherwise call the external @command{make} command.
Display Man pages using the Emacs @code{man} command.
@xref{Man Page, , , emacs, The GNU Emacs Manual}.
@cmindex map-lines
@item map-lines @var{function}
When used as a pipe target (@pxref{Lisp Pipelines}), this calls
@var{function} once for each line of output from the left side of the
pipe with that line as a single argument.
@cmindex mkdir
@item mkdir [-p] @var{directory}@dots{}
Make new directories. With @code{-p} or @code{--parents},
@ -2503,6 +2521,71 @@ olleh
To send both the standard output and standard error of a command to
another command's input, you can use the @code{|&} operator.
@menu
* Lisp Pipelines::
* Running Shell Pipelines Natively::
@end menu
@node Lisp Pipelines
@subsection Lisp Pipelines
In addition to piping data to external programs on your system, Eshell
supports piping to ordinary Lisp functions. This lets you mix and match
external commands and Lisp functions in your pipelines to manipulate
output however works best. Normally in Eshell, entering the bare name
of a function in a command calls that function, so e.g.@: @samp{ding}
will beep or flash the screen. To avoid this, pass the quoted name of
the function:
@example
~ $ echo hello | #'upcase
HELLO
@end example
You can also use forms that return a function, such as @code{lambda}:
@example
~ $ echo hello | (lambda (i) (format ">> %s" i))
>> hello
@end example
For simple cases, the above is likely all you need. When passed
directly as a pipe target like this, Eshell collects all the output from
the left side of the pipe and passes it as a single argument to the
right side. However, Lisp functions have many other ways they could be
called, so Eshell supports these with some higher-order commands:
@table @code
@cmindex accumulate
@item accumulate @var{function}
This is equivalent to passing @var{function} directly as a pipe target,
accumulating all the output from the left side of the pipe and passing
it as a single argument to @var{function}.
@cmindex map-lines
@item map-lines @var{function}
For each line of output from the left side of the pipe, call
@var{function} with that line as a single argument. For example, you
could "quote" some output for pasting into an email like this:
@example
cat some-file.txt | map-lines (lambda (i) (format "> %s" i))
@end example
@cmindex apply-lines
@item apply-lines @var{function}
Pass each line of output from the left side of the pipe as a list of
arguments to @var{function}. For example, to sum up a list of numbers
written one per line:
@example
cat numbers.txt | apply-lines #'+
@end example
@end table
@node Running Shell Pipelines Natively
@subsection Running Shell Pipelines Natively
When constructing shell pipelines that will move a lot of data, it is
a good idea to bypass Eshell's own pipelining support and use the
@ -3016,15 +3099,11 @@ scrolls back.
@item Use a timer instead of @code{sleep-for} when killing child processes
@item Piping to a Lisp function is not supported
Make it so that the Lisp command on the right of the pipe is repeatedly
called with the input strings as arguments. This will require changing
@code{eshell-do-pipelines} to handle non-process targets.
@item Input redirection is not supported
See the above entry.
With support for piping to Lisp functions, this should mostly be a
matter of parsing the redirection operator and generating a Lisp form
roughly equivalent to what @code{cat file.txt | some-command} produces.
@item Problem running @command{less} without arguments on Windows
@ -3222,13 +3301,6 @@ from @samp{!:1*}.
@item Specifying a frame as a redirection target should imply the currently active window's buffer
@item Implement @samp{>@var{func-or-func-list}}
This would allow for an ``output translators'', that take a function to
modify output with, and a target. Devise a syntax that works well with
pipes, and can accommodate multiple functions (i.e., @samp{>'(upcase
regexp-quote)} or @samp{>'upcase}).
@item Allow Eshell to read/write to/from standard input and output
This would be optional, rather than always using the Eshell buffer.

View file

@ -146,10 +146,9 @@ is. Alternatively, place point on the highlighted regions and use the
commands @code{eldoc} or @code{display-local-help}.
Another easy way to get instant access to the diagnostic text is to
set @code{flymake-show-diagnostics-at-end-of-line} to a non-@code{nil}
value. This makes the diagnostic messages appear at the end of the
line where the regular annotation is located (@pxref{Customizable
variables})
set @code{flymake-inline-diagnostics} to a non-@code{nil} value. This
makes the diagnostic messages appear directly in the buffer, in the
vicinity of the affected line (@pxref{Customizable variables})
@cindex next and previous diagnostic
If the diagnostics are outside the visible region of the buffer,
@ -347,26 +346,39 @@ Only relevant if @code{flymake-indicator-type} is set to @code{margins}.
If non-@code{nil}, moving to errors with @code{flymake-goto-next-error} and
@code{flymake-goto-prev-error} wraps around buffer boundaries.
@item flymake-show-diagnostics-at-end-of-line
If non-@code{nil}, show summarized descriptions of diagnostics at the
end of the line. Depending on your preference, this can either be
distracting and easily confused with actual code, or a significant early
aid that relieves you from moving around or reaching for the mouse to
consult an error message. This value may also be set to @code{fancy},
which will attempt to layout diagnostics below the affected line using
unicode graphics to point to diagnostic locus.
@item flymake-inline-diagnostics
If non-@code{nil}, annotate lines with diagnostics directly in the
buffer. Depending on your preference, this can either be distracting
and easily confused with actual code, or a significant early aid that
relieves you from moving around or reaching for the mouse to consult an
error message. A number of styles can be used: the value @code{eol}
shows all diagnostics at the end of the line, @code{short} shows only
the most severe one, and @code{fancy} lays out the diagnostics below the
affected line using Unicode graphics to point to the diagnostic locus.
The value can also be an alist, which allows you to have the position of
point dictate the style used for nearby annotation of nearby
diagnostics. The alist keys @code{current} and @code{current-line}
designate the style affect the appearance of nearby diagnostics, while a
value keyed by @code{t} is style used for every other diagnostic. For
example, to keep a discreet @code{short} annotation on most lines while
expanding to @code{fancy} only for the diagnostic point in currently on:
@lisp
(setopt flymake-inline-diagnostics '((current . fancy) (t . short)))
@end lisp
@item flymake-diagnostic-format-alist
Control which parts of a diagnostic to show in various situations.
@item flymake-error-eol
A custom face for summarizing diagnostic error messages.
@item flymake-error-inline
A custom face for inline diagnostic error messages.
@item flymake-warning-eol
A custom face for summarizing diagnostic warning messages.
@item flymake-warning-inline
A custom face for inline diagnostic warning messages.
@item flymake-note-eol
A custom face for summarizing diagnostic notes.
@item flymake-note-inline
A custom face for inline diagnostic notes.
@end vtable
@node Flymake API, The legacy Proc backend, Using Flymake, Top

View file

@ -18335,12 +18335,12 @@ As a special case, a star in either @code{Dom} or @code{Dow} doesn't
mean ``all possible values'', but ``use only the other field''. Note
that if both are star'ed, the use of either one gives the same result.
@item
The @code{Time-Zone} header is special in that it can only have one
The @code{Time-Zone} header is special in that it can have only one
value (@code{GMT}, for instance). A star doesn't mean ``all possible
values'' (because it makes no sense), but ``the current local time
zone''. Most of the time, you'll be using a star here. However, for a
list of available time zone values, see the variable
@code{nndiary-headers}.
Universal Time entry, you can use @code{GMT}, @code{UT}, @code{UTC} or
@code{Z}.
@end itemize
As a concrete example, here are the diary headers to add to your message

File diff suppressed because it is too large Load diff

View file

@ -14990,7 +14990,7 @@ set it to =toc=:
#+cindex: LaTeX ToC export a la ~org~
#+cindex: @samp{org-latex-toc-include-unnumbered}
If you want the LaTeX exporter to behave like other exporters,
customise the variable ~org-latex-toc-include-unnumbered~ and
customize the variable ~org-latex-toc-include-unnumbered~ and
set it to ~t~:
#+begin_example

View file

@ -9,6 +9,13 @@
@syncodeindex vr cp
@syncodeindex ky cp
@c %**end of header
@c compile info with
@c make -C doc/misc ../../info/ses.info
@c or just
@c make -C doc/misc ses
@c compile pdf with
@c make -C doc/misc ses.pdf
@copying
This file documents @acronym{SES}: the Simple Emacs Spreadsheet.

View file

@ -3,9 +3,9 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
\def\texinfoversion{2025-12-23.13}
\def\texinfoversion{2026-08-13.21}
%
% Copyright 1985, 1986, 1988, 1990-2025 Free Software Foundation, Inc.
% Copyright 1985, 1986, 1988, 1990-2026 Free Software Foundation, Inc.
%
% This texinfo.tex file is free software: you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
@ -153,6 +153,9 @@
\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
% scratch count register
\newcount\countA
% Give the space character the catcode for a space.
\def\spaceisspace{\catcode`\ =10\relax}
@ -348,7 +351,6 @@
% before the \shipout runs.
%
\atdummies % don't expand commands in the output.
\turnoffactive
\shipout\vbox{%
% Do this early so pdf references go to the beginning of the page.
\ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
@ -770,18 +772,20 @@
\def\includezzz#1{%
\pushthisfilestack
\def\thisfile{#1}%
\includecheckspace\thisfile
{%
\makevalueexpandable % we want to expand any @value in FILE.
\turnoffactive % and allow special characters in the expansion
\indexnofonts % Allow `@@' and other weird things in file names.
\wlog{texinfo.tex: doing @include of #1^^J}%
\edef\temp{\noexpand\input #1 }%
\edef\temp{\noexpand\input \thisfile }%
%
% This trickery is to read FILE outside of a group, in case it makes
% definitions, etc.
\expandafter
}\temp
\popthisfilestack
\def\thisfile{#1}% for @thisfile command
}
\def\filenamecatcodes{%
\catcode`\\=\other
@ -797,6 +801,21 @@
\catcode`\'=\other
}
% \includecheckspace\FILENAME - if there is a space in the expansion of
% \FILENAME, wrap the expansion in braces
\def\includecheckspace#1{%
\expandafter\includecheckspacezz\expandafter#1#1 \includecheckspacezz}
\def\includecheckspacezz#1#2 #3\includecheckspacezz{%
\def\tmp{#3}%
\ifx\tmp\empty
% no space in the file name
\else
% there is a space in the file name
\edef#1{{#1}}%
\fi
}
\def\pushthisfilestack{%
\expandafter\pushthisfilestackX\popthisfilestack\StackTerm
}
@ -981,7 +1000,6 @@
\newtoks\toksD
\newbox\boxA
\newbox\boxB
\newcount\countA
\newif\ifpdf
\newif\ifpdfmakepagedest
@ -5321,14 +5339,13 @@
\def\indexisfl{fl}
% Definition for writing index entry sort key.
{
\catcode`\-=13
\gdef\indexwritesortas{%
\def\indexwritesortas{%
\begingroup
\indexnonalnumreappear
\indexwritesortasxxx}
\gdef\indexwritesortasxxx#1{%
\xdef\indexsortkey{#1}\endgroup}
\indexwritesortasxxx
}
\def\indexwritesortasxxx#1{%
\xdef\indexsortkey{#1}\endgroup
}
\def\indexwriteseealso#1{
@ -5359,6 +5376,51 @@
\expandafter\doindexsegment#1\subentry\finish\subentry
}
% \checksortas\segment
% Call \indexwritesortas if a @sortas command appears in the segment
\def\checksortas#1{%
\let\sortas\relax
\expandafter\checksortasx#1\relax\sortas{}\sortas
}
\def\checksortasx#1\sortas#2#3\sortas{%
\def\tmp{#3}%
\ifx\tmp\empty\else
\indexwritesortas{#2}%
\fi
}
% \checkseealso\segment
% Call \indexwriteseealso if a @seealso command appears in the segment
\def\checkseealso#1{%
\let\seealso\relax
\expandafter\checkseealsox#1\relax\seealso{}\seealso
}
\def\checkseealsox#1\seealso#2#3\seealso{%
\def\tmp{#3}%
\ifx\tmp\empty\else
\indexwriteseealso{#2}%
\fi
}
% \checkseeentry\segment
% Call \indexwriteseeentry if a @seeentry command appears in the segment
\def\checkseeentry#1{%
\let\seeentry\relax
\expandafter\checkseeentryx#1\relax\seeentry{}\seeentry
}
\def\checkseeentryx#1\seeentry#2#3\seeentry{%
\def\tmp{#3}%
\ifx\tmp\empty\else
\indexwriteseeentry{#2}%
\fi
}
\def\extractindexcommands#1{%
\checksortas#1%
\checkseealso#1%
\checkseeentry#1%
}
% append the results from the next segment
\def\doindexsegment#1\subentry{%
\def\segment{#1}%
@ -5378,9 +5440,6 @@
% Get the string to sort by. Process the segment with all
% font commands turned off.
\bgroup
\let\sortas\indexwritesortas
\let\seealso\indexwriteseealso
\let\seeentry\indexwriteseeentry
\indexnofonts
% The braces around the commands are recognized by texindex.
\def\lbracechar{{\string\indexlbrace}}%
@ -5394,11 +5453,10 @@
%
\let\indexsortkey\empty
\global\let\pagenumbertext\empty
% Execute the segment and throw away the typeset output. This executes
% any @sortas or @seealso commands in this segment.
\setbox\dummybox = \hbox{\segment}%
\extractindexcommands\segment
\ifx\indexsortkey\empty{%
\indexnonalnumdisappear
\inindexsortkeytrue
\xdef\trimmed{\segment}%
\xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
\xdef\indexsortkey{\trimmed}%
@ -5419,7 +5477,6 @@
\fi
}
\def\isfinish{\finish}%
\newbox\dummybox % used above
\let\subentry\relax
@ -5760,9 +5817,9 @@
% The glue before the bonus allows a little bit of space at the
% bottom of a column to reduce an increase in inter-line spacing.
\nobreak
\vskip 0pt plus 5\baselineskip
\vskip 0pt plus 4\baselineskip
\penalty -300
\vskip 0pt plus -5\baselineskip
\vskip 0pt plus -4\baselineskip
%
% Typeset the initial. Making this add up to a whole number of
% baselineskips increases the chance of the dots lining up from column
@ -7007,6 +7064,7 @@
\newdimen\curchapmax
\newdimen\cursecmax
\newdimen\curssecmax
\newbox\dummybox % used above
% set #1 to the maximum section width for #2
@ -9106,7 +9164,9 @@
% type (Ynumbered, Yappendix, Ynothing). #2 is the section title.
%
\def\donoderef#1#2{%
\ifx\lastnode\empty\else
\ifx\lastnode\empty
\setrefshadow{#1}{#2}%
\else
\setref{\lastnode}{#1}{#2}%
\global\let\lastnode=\empty
\setnodeseenonce
@ -9151,6 +9211,9 @@
%
\def\setref#1#2#3{%
\pdfmkdest{#1}%
\dosetref{#1}{#2}{#3}{xrdef}%
}
\def\dosetref#1#2#3#4{%
\iflinks
{%
\requireauxfile
@ -9158,17 +9221,28 @@
% match definition in \xrdef, \refx, \xrefX.
\def\value##1{##1}%
\edef\writexrdef##1##2{%
\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
\write\auxfile{@#4{#1-% #1 of \setref, expanded by the \edef
##1}{##2}}% these are parameters of \writexrdef
}%
\toks0 = {#3}%
\immediate \writexrdef{title}{\the\toks0 }%
\immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
\safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
\immediate \writexrdef{snt}{\csname #2\endcsname}%
\safewhatsit{\writexrdef{pg}{\folio}}%
}%
\fi
}
% Similar to \setref, but used for targets created by sectioning commands.
% Write information about this target using @xrshad instead of @xrdef.
\def\setrefshadow#1#2{%
% For PDF, output the target with \pdfdest. Note pdfTeX issues a warning
% if we output two targets with the same name.
\pdfmkdest{\pdfshadowprefix#2}%
\dosetref{#2}{#1}{#2}{xrshad}%
}
\def\pdfshadowprefix{XXSHADOW-}
% @xrefautosectiontitle on|off says whether @section(ing) names are used
% automatically in xrefs, if the third arg is not explicitly specified.
% This was provided as a "secret" @set xref-automatic-section-title
@ -9214,7 +9288,17 @@
\def\infofilename{\ignorespaces #4}%
\setbox\infofilenamebox = \hbox{\infofilename\unskip}%
%
\startxreflink{#1}{#4}%
\ifdim \wd\printedmanualbox = 0pt
\checkshadowactive{#1}\countA
\expandafter\ifnum\countA = 1
\startxreflink{\pdfshadowprefix#1}{}%
\else
\startxreflink{#1}{}%
\fi
\else
\startxreflink{#1}{#4}%
\fi
%
\getrefx{#1-title}\Xthisreftitle
%
% Float references are printed completely differently: "Figure 1.2"
@ -9480,31 +9564,62 @@
\fi
}
\def\xrdefctxt{%
% Context for expanding the node or anchor name to remove control sequences.
% \turnoffactive stops 8-bit characters being changed to commands
% like @'e.
\indexnofonts
\turnoffactive
\def\value##1{##1}%
}
% Set #2 to xref string #1
\def\getrefx#1#2{%
\requireauxfile
{%
\indexnofonts
\turnoffactive
\def\value##1{##1}%
\xrdefctxt
\expandafter\global\expandafter\let\expandafter#2\csname XR#1\endcsname
\ifx#2\relax
% try a shadow definition
\expandafter\global\expandafter\let\expandafter#2\csname SXR#1\endcsname
\ifx#2\empty
\let#2\relax
\fi
\fi
}%
}
% Check if shadow definitions are active for target name #1, setting the
% count register sequence in #2 to 1 if so.
\def\checkshadowactive#1#2{%
\requireauxfile
{%
\xrdefctxt
\expandafter\global\expandafter\let\expandafter\tmp\csname SXR#1-title\endcsname
}%
\ifx\tmp\relax
#2=0 % no definitions made
\else
\ifx\tmp\empty
#2=0 % shadow definitions were disabled
\else
\expandafter\let\expandafter\tmp\csname XR#1-title\endcsname
\ifx\tmp\relax
#2=1 % yes, shadow definitions are active
\else
#2=0 % no, a real definition was made.
\fi
\fi
\fi
}%
% This is the macro invoked by entries in the aux file. Define a control
% sequence for a cross-reference target (we prepend XR to the control sequence
% name to avoid collisions). The value is the page number. If this is a float
% type, we have more work to do.
%
\def\xrdef#1#2{%
{% Expand the node or anchor name to remove control sequences.
% \turnoffactive stops 8-bit characters being changed to commands
% like @'e. \refx does the same to retrieve the value in the definition.
\indexnofonts
\turnoffactive
\def\value##1{##1}%
\xdef\safexrefname{#1}%
}%
{\xrdefctxt \xdef\safexrefname{#1}}%
%
\bgroup
\expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
@ -9536,6 +9651,24 @@
\ignorespaces % ignore ends of line in aux file
}
% Like \xrdef, but used for "shadow" definitions.
\def\xrshad#1#2{%
{\xrdefctxt \xdef\safexrefname{#1}}%
\bgroup
\expandafter\ifx\csname XR\safexrefname\endcsname\relax
\expandafter\ifx\csname SXR\safexrefname\endcsname\relax
% safe to make shadow definition.
\expandafter\gdef\csname SXR\safexrefname\endcsname{#2}%
\else
% earlier shadow definition. disable.
\expandafter\gdef\csname SXR\safexrefname\endcsname{}%
\fi
\else
% blocked by node or anchor definition
\fi
\egroup
}
% If working on a large document in chapters, it is convenient to
% be able to disable indexing, cross-referencing, and contents, for test runs.
% This is done with @novalidate at the beginning of the file.
@ -9932,6 +10065,14 @@
% We can't be used inside a paragraph.
\par
%
% Allow a page break with a ragged page bottom. This could help to reduce
% interparagraph spacing if a large float doesn't fit on the current page.
%
\penalty 0
\vskip 0pt plus 5\baselineskip
\penalty 1000
\vskip 0pt plus -5\baselineskip
%
\vtop\bgroup
\def\floattype{#1}%
\def\floatlabel{#2}%
@ -10231,6 +10372,15 @@
\global\righthyphenmin = #3\relax
}
% @documentlanguagevariant - do nothing
\parseargdef\documentlanguagevariant{}
% @documentscript - do nothing
% This command would only become relevant if we had translations in
% multiple "scripts", e.g. Sebian in both Latin and Cyrillic alphabets.
% However, we do not even support loading Cyrillic fonts.
\parseargdef\documentscript{}
% XeTeX and LuaTeX can handle Unicode natively.
% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
@ -10673,6 +10823,38 @@
\newif\ifutfviiidefinedwarning
\utfviiidefinedwarningtrue
% Macros to output a string to sort a multibyte UTF-8 sequence by.
% Check if there is a special definition to be used in the index
% sort key for a character.
% Output the sequence as-is, surrounded by curly braces. The braces are
% to help texindex find the first character regardless of locale character
% encoding or version of awk used to run texindex.
\gdef\UTFviiiSortkeyTwo#1#2{%
\expandafter\ifx\csname sort:#1#2\endcsname\relax
{\string #1\string #2}%
\else
\csname sort:#1#2\endcsname
\fi
}
\gdef\UTFviiiSortkeyThree#1#2#3{%
\expandafter\ifx\csname sort:#1#2#3\endcsname\relax
{\string #1\string #2\string #3}%
\else
\csname sort:#1#2#3\endcsname
\fi
}
\gdef\UTFviiiSortkeyFour#1#2#3#4{%
\expandafter\ifx\csname sort:#1#2#3#4\endcsname\relax
{\string #1\string #2\string #3\string #4}%
\else
\csname sort:#1#2#3#4\endcsname
\fi
}
% We use this with the \ifindexsortkey condition to expand and discard
% an \else block in the containing conditional.
\def\swapnestedfi#1\fi{\fi\expandafter#1\expandafter}
% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
\begingroup
\catcode`\~13
@ -10691,8 +10873,8 @@
\expandafter\UTFviiiLoop
\fi}
%
% For bytes other than the first in a UTF-8 sequence. Not expected to
% be expanded except when writing to auxiliary files.
% UTF-8 continuation bytes (10XX XXXX) or unused (hex C1, C2).
% Not expected to be expanded except when writing to auxiliary files.
\countUTFx = "80
\countUTFy = "C2
\def\UTFviiiTmp{%
@ -10704,7 +10886,9 @@
\countUTFy = "E0
\def\UTFviiiTmp{%
\gdef~{%
\ifpassthroughchars $%
\ifpassthroughchars
\ifinindexsortkey\swapnestedfi\UTFviiiSortkeyTwo\fi
$%
\else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
\UTFviiiLoop
@ -10712,7 +10896,9 @@
\countUTFy = "F0
\def\UTFviiiTmp{%
\gdef~{%
\ifpassthroughchars $%
\ifpassthroughchars
\ifinindexsortkey\swapnestedfi\UTFviiiSortkeyThree\fi
$%
\else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
\UTFviiiLoop
@ -10720,7 +10906,9 @@
\countUTFy = "F4
\def\UTFviiiTmp{%
\gdef~{%
\ifpassthroughchars $%
\ifpassthroughchars
\ifinindexsortkey\swapnestedfi\UTFviiiSortkeyFour\fi
$%
\else\expandafter\UTFviiiFourOctets\expandafter$\fi
}}%
\UTFviiiLoop
@ -10814,7 +11002,7 @@
\parseXMLCharref
%
% Completely expand \UTFviiiTmp, which looks like:
% 1. \UTFviiTwoOctetsName B1 B2
% 1. \UTFviiiTwoOctetsName B1 B2
% 2. \csname u8:B1 \string B2 \endcsname
% 3. \u8: B1 B2 (a single control sequence token)
\xdef\UTFviiiTmp{\UTFviiiTmp}%
@ -10891,6 +11079,61 @@
\uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
\endgroup
% Used in \DefineSortKey as temporary definitions of \UTFviiiTwoOctetsName etc.
% Use \expandafter\noexpand to prevent excessive expansion if \DefineSortKey is
% called more than once for the same codepoint.
\def\UTFviiiSortTwoOctetsName#1#2{%
\expandafter\noexpand\csname sort:#1\string #2\endcsname}%
\def\UTFviiiSortThreeOctetsName#1#2#3{%
\expandafter\noexpand\csname sort:#1\string #2\string #3\endcsname}%
\def\UTFviiiSortFourOctetsName#1#2#3#4{%
\expandafter\noexpand\csname sort:#1\string #2\string #3\string #4\endcsname}%
% To be used in translation files to provide strings to be output
% in the index sort key where a character occurs.
\def\DefineSortKey#1#2{%
\countUTFz = "#1\relax
\parseXMLCharref
\def\tmp{#2}%
\expandafter\let\csname usort:#1\endcsname\tmp
\bgroup
\let\UTFviiiTwoOctetsName\UTFviiiSortTwoOctetsName
\let\UTFviiiThreeOctetsName\UTFviiiSortThreeOctetsName
\let\UTFviiiFourOctetsName\UTFviiiSortFourOctetsName
%
% Expand \UTFviiiTmp fully, which looks like:
% 1. \UTFviiiTwoOctetsName B1 B2
% 2. \expandafter\noexpand\csname sort:B1 \string B2 \endcsname
% 3. \noexpand\sort: B1 B2
% 4. \sort: B1 B2 (a single control sequence token)
%
\xdef\UTFviiiTmp{\UTFviiiTmp}%
\egroup
\expandafter\gdef\UTFviiiTmp{#2}%
}
% Used in translation files, e.g. in txi-is.tex:
% \DefineSortKey{00DE}{{\string\idxsort{1}{\string\TH{}}}} % Þ
% We provide a definition here in case the sequence shows up in sorted
% index files.
\def\idxsort#1#2{#2}
% this could be used as follows
%\DefineSortKey{00F1}{nzzz} % n tilde - sort between n and o
%\DefineSortKey{00D1}{Nzzz} % N tilde - sort between n and o
% Can be used in place of \DeclareUnicodeCharacter where the value for
% the character is completely expandable when writing to indices:
% Good: \DeclareUnicodeCharacterSK{00C9}{\'E}
% (\' expands to empty string)
% Bad: \DeclareUnicodeCharacterSK{03BB}{\ensuremath\lambda}%
% (\ensuremath expands to junk)
\def\DeclareUnicodeCharacterSK#1#2{%
\DeclareUnicodeCharacter{#1}{#2}%
\DefineSortKey{#1}{#2}%
}
% For native Unicode handling (XeTeX and LuaTeX),
% provide a definition macro that sets a catcode to `other' non-globally
%
@ -11054,73 +11297,73 @@
\DeclareUnicodeCharacter{00BE}{$3\over4$}%
\DeclareUnicodeCharacter{00BF}{\questiondown}%
%
\DeclareUnicodeCharacter{00C0}{\`A}%
\DeclareUnicodeCharacter{00C1}{\'A}%
\DeclareUnicodeCharacter{00C2}{\^A}%
\DeclareUnicodeCharacter{00C3}{\~A}%
\DeclareUnicodeCharacter{00C4}{\"A}%
\DeclareUnicodeCharacter{00C5}{\AA}%
\DeclareUnicodeCharacter{00C6}{\AE}%
\DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
\DeclareUnicodeCharacter{00C8}{\`E}%
\DeclareUnicodeCharacter{00C9}{\'E}%
\DeclareUnicodeCharacter{00CA}{\^E}%
\DeclareUnicodeCharacter{00CB}{\"E}%
\DeclareUnicodeCharacter{00CC}{\`I}%
\DeclareUnicodeCharacter{00CD}{\'I}%
\DeclareUnicodeCharacter{00CE}{\^I}%
\DeclareUnicodeCharacter{00CF}{\"I}%
\DeclareUnicodeCharacterSK{00C0}{\`A}%
\DeclareUnicodeCharacterSK{00C1}{\'A}%
\DeclareUnicodeCharacterSK{00C2}{\^A}%
\DeclareUnicodeCharacterSK{00C3}{\~A}%
\DeclareUnicodeCharacterSK{00C4}{\"A}%
\DeclareUnicodeCharacterSK{00C5}{\AA}%
\DeclareUnicodeCharacterSK{00C6}{\AE}%
\DeclareUnicodeCharacterSK{00C7}{\cedilla{C}}%
\DeclareUnicodeCharacterSK{00C8}{\`E}%
\DeclareUnicodeCharacterSK{00C9}{\'E}%
\DeclareUnicodeCharacterSK{00CA}{\^E}%
\DeclareUnicodeCharacterSK{00CB}{\"E}%
\DeclareUnicodeCharacterSK{00CC}{\`I}%
\DeclareUnicodeCharacterSK{00CD}{\'I}%
\DeclareUnicodeCharacterSK{00CE}{\^I}%
\DeclareUnicodeCharacterSK{00CF}{\"I}%
%
\DeclareUnicodeCharacter{00D0}{\DH}%
\DeclareUnicodeCharacter{00D1}{\~N}%
\DeclareUnicodeCharacter{00D2}{\`O}%
\DeclareUnicodeCharacter{00D3}{\'O}%
\DeclareUnicodeCharacter{00D4}{\^O}%
\DeclareUnicodeCharacter{00D5}{\~O}%
\DeclareUnicodeCharacter{00D6}{\"O}%
\DeclareUnicodeCharacterSK{00D0}{\DH}%
\DeclareUnicodeCharacterSK{00D1}{\~N}%
\DeclareUnicodeCharacterSK{00D2}{\`O}%
\DeclareUnicodeCharacterSK{00D3}{\'O}%
\DeclareUnicodeCharacterSK{00D4}{\^O}%
\DeclareUnicodeCharacterSK{00D5}{\~O}%
\DeclareUnicodeCharacterSK{00D6}{\"O}%
\DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
\DeclareUnicodeCharacter{00D8}{\O}%
\DeclareUnicodeCharacter{00D9}{\`U}%
\DeclareUnicodeCharacter{00DA}{\'U}%
\DeclareUnicodeCharacter{00DB}{\^U}%
\DeclareUnicodeCharacter{00DC}{\"U}%
\DeclareUnicodeCharacter{00DD}{\'Y}%
\DeclareUnicodeCharacterSK{00D8}{\O}%
\DeclareUnicodeCharacterSK{00D9}{\`U}%
\DeclareUnicodeCharacterSK{00DA}{\'U}%
\DeclareUnicodeCharacterSK{00DB}{\^U}%
\DeclareUnicodeCharacterSK{00DC}{\"U}%
\DeclareUnicodeCharacterSK{00DD}{\'Y}%
\DeclareUnicodeCharacter{00DE}{\TH}%
\DeclareUnicodeCharacter{00DF}{\ss}%
\DeclareUnicodeCharacterSK{00DF}{\ss}%
%
\DeclareUnicodeCharacter{00E0}{\`a}%
\DeclareUnicodeCharacter{00E1}{\'a}%
\DeclareUnicodeCharacter{00E2}{\^a}%
\DeclareUnicodeCharacter{00E3}{\~a}%
\DeclareUnicodeCharacter{00E4}{\"a}%
\DeclareUnicodeCharacter{00E5}{\aa}%
\DeclareUnicodeCharacter{00E6}{\ae}%
\DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
\DeclareUnicodeCharacter{00E8}{\`e}%
\DeclareUnicodeCharacter{00E9}{\'e}%
\DeclareUnicodeCharacter{00EA}{\^e}%
\DeclareUnicodeCharacter{00EB}{\"e}%
\DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
\DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
\DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
\DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
\DeclareUnicodeCharacterSK{00E0}{\`a}%
\DeclareUnicodeCharacterSK{00E1}{\'a}%
\DeclareUnicodeCharacterSK{00E2}{\^a}%
\DeclareUnicodeCharacterSK{00E3}{\~a}%
\DeclareUnicodeCharacterSK{00E4}{\"a}%
\DeclareUnicodeCharacterSK{00E5}{\aa}%
\DeclareUnicodeCharacterSK{00E6}{\ae}%
\DeclareUnicodeCharacterSK{00E7}{\cedilla{c}}%
\DeclareUnicodeCharacterSK{00E8}{\`e}%
\DeclareUnicodeCharacterSK{00E9}{\'e}%
\DeclareUnicodeCharacterSK{00EA}{\^e}%
\DeclareUnicodeCharacterSK{00EB}{\"e}%
\DeclareUnicodeCharacterSK{00EC}{\`{\dotless{i}}}%
\DeclareUnicodeCharacterSK{00ED}{\'{\dotless{i}}}%
\DeclareUnicodeCharacterSK{00EE}{\^{\dotless{i}}}%
\DeclareUnicodeCharacterSK{00EF}{\"{\dotless{i}}}%
%
\DeclareUnicodeCharacter{00F0}{\dh}%
\DeclareUnicodeCharacter{00F1}{\~n}%
\DeclareUnicodeCharacter{00F2}{\`o}%
\DeclareUnicodeCharacter{00F3}{\'o}%
\DeclareUnicodeCharacter{00F4}{\^o}%
\DeclareUnicodeCharacter{00F5}{\~o}%
\DeclareUnicodeCharacter{00F6}{\"o}%
\DeclareUnicodeCharacterSK{00F0}{\dh}%
\DeclareUnicodeCharacterSK{00F1}{\~n}%
\DeclareUnicodeCharacterSK{00F2}{\`o}%
\DeclareUnicodeCharacterSK{00F3}{\'o}%
\DeclareUnicodeCharacterSK{00F4}{\^o}%
\DeclareUnicodeCharacterSK{00F5}{\~o}%
\DeclareUnicodeCharacterSK{00F6}{\"o}%
\DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
\DeclareUnicodeCharacter{00F8}{\o}%
\DeclareUnicodeCharacter{00F9}{\`u}%
\DeclareUnicodeCharacter{00FA}{\'u}%
\DeclareUnicodeCharacter{00FB}{\^u}%
\DeclareUnicodeCharacter{00FC}{\"u}%
\DeclareUnicodeCharacter{00FD}{\'y}%
\DeclareUnicodeCharacterSK{00F8}{\o}%
\DeclareUnicodeCharacterSK{00F9}{\`u}%
\DeclareUnicodeCharacterSK{00FA}{\'u}%
\DeclareUnicodeCharacterSK{00FB}{\^u}%
\DeclareUnicodeCharacterSK{00FC}{\"u}%
\DeclareUnicodeCharacterSK{00FD}{\'y}%
\DeclareUnicodeCharacter{00FE}{\th}%
\DeclareUnicodeCharacter{00FF}{\"y}%
\DeclareUnicodeCharacterSK{00FF}{\"y}%
%
\DeclareUnicodeCharacter{0100}{\=A}%
\DeclareUnicodeCharacter{0101}{\=a}%
@ -11719,6 +11962,9 @@
\newif\ifpassthroughchars
\passthroughcharsfalse
\newif\ifinindexsortkey
\inindexsortkeyfalse
% For native Unicode handling (XeTeX and LuaTeX),
% provide a definition macro to replace/pass-through a Unicode character
%
@ -11730,7 +11976,15 @@
\uccode`\~="##2\relax
\uppercase{\gdef~}{%
\ifpassthroughchars
##1%
\ifinindexsortkey
\expandafter\ifx\csname usort:#1\endcsname\relax
{##1}%
\else
\csname usort:#1\endcsname
\fi
\else
##1%
\fi
\else
##3%
\fi

View file

@ -1833,7 +1833,7 @@ and the target host matching @var{user}@@@var{host}. @var{host} and
@var{user} are regular expressions or @code{nil}, interpreted as a
regular expression which always matches.
@var{proxy} is a literal @value{tramp} file name whose local name part
@var{proxy} is a literal @value{tramp} file name whose localname part
is ignored, and the method and user name parts are optional.
The method must be an inline method (@pxref{Inline methods}). If
@ -3380,13 +3380,23 @@ of the secretfile is now owned by the user logged in from
When @code{backup-directory-alist} is @code{nil} (the default), such
problems do not occur.
To ``turn off'' the backup feature for remote files and stop
@value{tramp} from saving to the backup directory, use this:
@vindex make-backup-files
In case you do not want to use backup files for remote files, use
connection-local variable @code{make-backup-files}
@ifinfo
(@pxref{Connection Variables, , , emacs})
@end ifinfo
like this:
@lisp
@group
(add-to-list 'backup-directory-alist
(cons tramp-file-name-regexp nil))
(connection-local-set-profile-variables
'no-remote-backup-files '((make-backup-files . nil)))
@end group
@group
(connection-local-set-profiles
'(:application tramp) 'no-remote-backup-files)
@end group
@end lisp
@ -3396,13 +3406,13 @@ Disabling backups can be targeted to just the @option{su} and
@lisp
@group
(setq backup-enable-predicate
(lambda (name)
(and (normal-backup-enable-predicate name)
(not
(let ((method (file-remote-p name 'method)))
(when (stringp method)
(member method '("su" "sudo"))))))))
(connection-local-set-profiles
'(:application tramp :protocol "su") 'no-remote-backup-files)
@end group
@group
(connection-local-set-profiles
'(:application tramp :protocol "sudo") 'no-remote-backup-files)
@end group
@end lisp
@ -3689,7 +3699,9 @@ brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
By default, @value{tramp} will use the current local user name as the
remote user name for log in to the remote host. Specifying a
different name using the proper syntax will override this default
behavior: @file{@trampfn{method,user@@host,path/to/file}}.
behavior: @file{@trampfn{method,user@@host,path/to/file}}. The user
name can also be taken from an environment variable, like
@file{@trampfn{method,@env{$MY_REMOTE_USER}@@host,path/to/file}}.
@file{@trampfn{ssh,daniel@@melancholia,.emacs}} is for file
@file{.emacs} in @samp{daniel}'s home directory on the host,
@ -3700,7 +3712,7 @@ name. For example: @file{@trampfn{ssh,daniel@@melancholia#42,.emacs}}.
If the host is an IPv6 address, the port is appended like this:
@file{@trampfn{ssh,@value{ipv6prefix}::1@value{ipv6postfix}#42,.emacs}}.
All method, user name, host name, port number and local name parts are
All method, user name, host name, port number and localname parts are
optional, @xref{Default Method}, @xref{Default User}, @xref{Default Host}.
@ifset unified
For syntactical reasons, the default method must be indicated by the
@ -4091,6 +4103,24 @@ configured to expand a home directory via a connection property,
When your remote file name does not contain a @samp{user} part, the
connection property @t{"~"} must be used instead.
In case there is no remote home directory and you haven't specified a
respective connection property, you should avoid using @file{~} in
file names. This means for example
@itemize
@item
Don't use a remote file name like @file{@trampfn{ssh,user@@host,}} or
@file{@trampfn{ssh,user@@host,~/}}. Use an absolute localname part
instead, like @file{@trampfn{ssh,user@@host,/path/to/file}}.
@item
Disable @code{tramp-histfile-override}, @ref{Managing remote shell history}:
@lisp
(setopt tramp-histfile-override nil)
@end lisp
@end itemize
@node Remote processes
@section Integration with other Emacs packages

View file

@ -7,7 +7,7 @@
@c In the Tramp GIT, the version number and the bug report address
@c are auto-frobbed from configure.ac.
@set trampver 2.8.2.31.1
@set trampver 2.8.3-pre
@set trampurl https://www.gnu.org/software/tramp/
@set tramp-bug-report-address tramp-devel@@gnu.org
@set emacsver 28.1

View file

@ -25,13 +25,13 @@ General Public License for more details.
@dircategory Emacs misc features
@direntry
* Transient: (transient). Transient Commands.
* Transient: (transient). Transient Commands.
@end direntry
@finalout
@titlepage
@title Transient User and Developer Manual
@subtitle for version 0.13.3
@subtitle for version 0.13.8
@author Jonas Bernoulli
@page
@vskip 0pt plus 1filll
@ -53,7 +53,7 @@ resource to get over that hurdle is Psionic K's interactive tutorial,
available at @uref{https://github.com/positron-solutions/transient-showcase}.
@noindent
This manual is for Transient version 0.13.3.
This manual is for Transient version 0.13.8.
@insertcopying
@end ifnottex
@ -385,7 +385,7 @@ than outlined above and even customizable.}
If the user does not save the value and just exits using a regular
suffix command, then the value is merely saved to the transient's
history. That value won't be used when the transient is next invoked,
but it is easily accessible (see @ref{Using History}).
but it is easily accessible (@pxref{Using History}).
Option @code{transient-common-command-prefix} controls the prefix key used
in the following bindings. For simplicity's sake the default, @kbd{C-x},
@ -454,8 +454,8 @@ previously used values. Usually the same keys as those mentioned
above are bound to those commands.
Authors of transients should arrange for different infix commands that
read the same kind of value to also use the same history key (see
@ref{Suffix Slots}).
read the same kind of value to also use the same history key
(@pxref{Suffix Slots}).
Both kinds of history are saved to a file when Emacs is exited.
@ -795,7 +795,7 @@ menu buffer. The menu buffer is displayed in a window using
The value of this option has the form @code{(@var{FUNCTION} . @var{ALIST})},
where @var{FUNCTION} is a function or a list of functions. Each such
function should accept two arguments: a buffer to display and an
alist of the same form as @var{ALIST}. See @ref{Choosing Window,,,elisp,},
alist of the same form as @var{ALIST}. @xref{Choosing Window,,,elisp,},
for details.
The default is:
@ -862,7 +862,7 @@ text at point, to be run when a transient menu is active, for example:
@end lisp
@defopt transient-enable-menu-navigation
This option is documented in the previous node (@ref{Essential Options}). You might want to change the value from @code{verbose} to
This option is documented in the previous node (@pxref{Essential Options}). You might want to change the value from @code{verbose} to
@code{force-verbose}, which causes information to be shown in the echo
area, even if it is identical to information already displayed in
the menu buffer. Whether that is useful to you depends on whether
@ -1007,7 +1007,7 @@ used to draw the line.
This user option may be overridden if @code{:mode-line-format} is passed
when creating a new prefix with @code{transient-define-prefix}.
Otherwise this can be any mode-line format. See @ref{Mode Line Format,,,elisp,}, for details.
Otherwise this can be any mode-line format. @xref{Mode Line Format,,,elisp,}, for details.
@end defopt
@defopt transient-semantic-coloring
@ -1175,10 +1175,10 @@ which can be included in multiple prefixes. See TODO@.
as expected by @code{transient-define-prefix}. Note that an infix is a
special kind of suffix. Depending on context ``suffixes'' means
``suffixes (including infixes)'' or ``non-infix suffixes''. Here it
means the former. See @ref{Suffix Specifications}.
means the former. @xref{Suffix Specifications}.
@var{SUFFIX} may also be a group in the same form as expected by
@code{transient-define-prefix}. See @ref{Group Specifications}.
@code{transient-define-prefix}. @xref{Group Specifications}.
@item
@var{LOC} is a key description (a string as returned by @code{key-description}
@ -1351,14 +1351,14 @@ enabled. One benefit of the Transient interface is that it remembers
history not only on a global level (``this command was invoked using
these arguments, and previously it was invoked using those other
arguments''), but also remembers the values of individual arguments
independently. See @ref{Using History}.
independently. @xref{Using History}.
After a transient prefix command is invoked, @kbd{C-h @var{KEY}} can be used to
show the documentation for the infix or suffix command that @kbd{@var{KEY}} is
bound to (see @ref{Getting Help for Suffix Commands}), and infixes and
bound to (@pxref{Getting Help for Suffix Commands}), and infixes and
suffixes can be removed from the transient using @kbd{C-x l @var{KEY}}. Infixes
and suffixes that are disabled by default can be enabled the same way.
See @ref{Enabling and Disabling Suffixes}.
@xref{Enabling and Disabling Suffixes}.
Transient ships with support for a few different types of specialized
infix commands. A command that sets a command line option, for example,
@ -1409,7 +1409,7 @@ explicitly.
@var{GROUP}s add key bindings for infix and suffix commands and specify
how these bindings are presented in the menu buffer. At least one
@var{GROUP} has to be specified. See @ref{Binding Suffix and Infix Commands}.
@var{GROUP} has to be specified. @xref{Binding Suffix and Infix Commands}.
The @var{BODY} is optional. If it is omitted, then @var{ARGLIST} is ignored and
the function definition becomes:
@ -1460,11 +1460,11 @@ GROUPs have the same form as for @code{transient-define-prefix}.
@section Binding Suffix and Infix Commands
The macro @code{transient-define-prefix} is used to define a transient.
This defines the actual transient prefix command (see @ref{Defining Transients}) and adds the transient's infix and suffix bindings, as
This defines the actual transient prefix command (@pxref{Defining Transients}) and adds the transient's infix and suffix bindings, as
described below.
Users and third-party packages can add additional bindings using
functions such as @code{transient-insert-suffix} (see @ref{Modifying Existing Transients}). These functions take a ``suffix specification'' as one of
functions such as @code{transient-insert-suffix} (@pxref{Modifying Existing Transients}). These functions take a ``suffix specification'' as one of
their arguments, which has the same form as the specifications used in
@code{transient-define-prefix}.
@ -1490,10 +1490,10 @@ brackets to do the latter.
Group specifications then have this form:
@lisp
[@{LEVEL@} @{DESCRIPTION@} @{KEYWORD VALUE@}... ELEMENT...]
[@{@var{LEVEL}@} @{@var{DESCRIPTION}@} @{@var{KEYWORD} @var{VALUE}@}... @var{ELEMENT}...]
@end lisp
The @var{LEVEL} is optional and defaults to 4. See @ref{Enabling and Disabling Suffixes}.
The @var{LEVEL} is optional and defaults to 4. @xref{Enabling and Disabling Suffixes}.
The @var{DESCRIPTION} is optional. If present, it is used as the heading of
the group.
@ -1567,6 +1567,8 @@ is used and a warning is displayed. This warning will eventually
be replaced with an error.
@lisp
;; -*- lexical-binding:t -*-
;; Before evaluating this example, make sure `lexical-binding' is t.
(transient-define-prefix my-finder-by-keyword ()
"Select a keyword and list matching packages."
;; The real `finder-by-keyword' is more convenient
@ -1644,7 +1646,7 @@ suffixes''. Here it means the former.
Suffix specifications have this form:
@lisp
([LEVEL] [KEY [DESCRIPTION]] COMMAND|ARGUMENT [KEYWORD VALUE]...)
([@var{LEVEL}] [@var{KEY} [@var{DESCRIPTION}]] @var{COMMAND}|@var{ARGUMENT} [@var{KEYWORD} @var{VALUE}]...)
@end lisp
@var{LEVEL}, @var{KEY} and @var{DESCRIPTION} can also be specified using the @var{KEYWORD}s
@ -1655,8 +1657,8 @@ the object's values just for the binding inside this transient.
@itemize
@item
@var{LEVEL} is the suffix level, an integer between 1 and 7. See
@ref{Enabling and Disabling Suffixes}.
@var{LEVEL} is the suffix level, an integer between 1 and 7.
@xref{Enabling and Disabling Suffixes}.
@item
KEY is the key binding, a string in the format returned by
@ -1730,7 +1732,7 @@ guessed based on the long argument. If the argument ends with @samp{=}
Finally, details can be specified using optional @var{KEYWORD}-@var{VALUE} pairs.
Each keyword has to be a keyword symbol, either @code{:class} or a keyword
argument supported by the constructor of that class. See @ref{Suffix Slots}.
argument supported by the constructor of that class. @xref{Suffix Slots}.
If a keyword argument accepts a function as value, you an use a @code{lambda}
expression. As a special case, the @code{##} macro (which returns a @code{lambda}
@ -2080,8 +2082,8 @@ means that all outer prefixes are exited at once.
@item
The behavior for non-suffixes can be set for a particular prefix,
by the prefix's @code{transient-non-suffix} slot to a boolean, a suitable
pre-command function, or a shorthand for such a function. See
@ref{Pre-commands for Non-Suffixes}.
pre-command function, or a shorthand for such a function.
@xref{Pre-commands for Non-Suffixes}.
@item
The common behavior for the suffixes of a particular prefix can be
@ -2406,7 +2408,7 @@ Transient itself provides a single class for prefix commands,
@code{transient-prefix}, but package authors may wish to define specialized
classes. Doing so makes it possible to change the behavior of the set
of prefix commands that use that class, by implementing specialized
methods for certain generic functions (see @ref{Prefix Methods}).
methods for certain generic functions (@pxref{Prefix Methods}).
A transient prefix command's object is stored in the @code{transient--prefix}
property of the command symbol. While a transient is active, a clone
@ -2421,7 +2423,7 @@ object should not affect later invocations.
@item
All suffix and infix classes derive from @code{transient-suffix}, which in
turn derives from @code{transient-child}, from which @code{transient-group} also
derives (see @ref{Group Classes}).
derives (@pxref{Group Classes}).
@item
All infix classes derive from the abstract @code{transient-infix} class,
@ -2429,13 +2431,13 @@ which in turn derives from the @code{transient-suffix} class.
Infixes are a special type of suffixes. The primary difference is
that infixes always use the @code{transient--do-stay} pre-command, while
non-infix suffixes use a variety of pre-commands (see @ref{Transient State}). Doing that is most easily achieved by using this class,
non-infix suffixes use a variety of pre-commands (@pxref{Transient State}). Doing that is most easily achieved by using this class,
though theoretically it would be possible to define an infix class
that does not do so. If you do that then you get to implement many
methods.
Also, infixes and non-infix suffixes are usually defined using
different macros (see @ref{Defining Suffix and Infix Commands}).
different macros (@pxref{Defining Suffix and Infix Commands}).
@item
Classes used for infix commands that represent arguments should
@ -2845,7 +2847,7 @@ secondary value, called a ``scope''. See @code{transient-define-prefix}.
@code{transient-suffix}, @code{transient-non-suffix} and @code{transient-switch-frame}
play a part when determining whether the currently active transient
prefix command remains active/transient when a suffix or arbitrary
non-suffix command is invoked. See @ref{Transient State}.
non-suffix command is invoked. @xref{Transient State}.
@item
@code{refresh-suffixes} Normally suffix objects and keymaps are only setup
@ -2933,7 +2935,7 @@ of the same symbol.
@item
@code{level} The level of the prefix commands. The suffix commands whose
layer is equal or lower are displayed. See @ref{Enabling and Disabling Suffixes}.
layer is equal or lower are displayed. @xref{Enabling and Disabling Suffixes}.
@item
@code{value} The likely outdated value of the prefix. Instead of accessing
@ -2957,15 +2959,15 @@ Here we document most of the slots that are only available for suffix
objects. Some slots are shared by suffix and group objects, they are
documented in @ref{Predicate Slots}.
Also see @ref{Suffix Classes}.
See also @ref{Suffix Classes}.
@anchor{Slots of @code{transient-child}}
@subheading Slots of @code{transient-child}
This is the abstract superclass of @code{transient-suffix} and
@code{transient-group}. In addition to the slots listed below, this class
is also where the @code{if*} and @code{inapt-if*} slots (see @ref{Predicate Slots}) and
the @code{level} slot (see @ref{Enabling and Disabling Suffixes}) are defined.
is also where the @code{if*} and @code{inapt-if*} slots (@pxref{Predicate Slots}) and
the @code{level} slot (@pxref{Enabling and Disabling Suffixes}) are defined.
@itemize
@item
@ -3018,7 +3020,7 @@ which is useful for alignment purposes.
@code{command} The command, a symbol.
@item
@code{transient} Whether to stay transient. See @ref{Transient State}.
@code{transient} Whether to stay transient. @xref{Transient State}.
@item
@code{format} The format used to display the suffix in the menu buffer.
@ -3079,6 +3081,15 @@ They are defined here anyway to allow sharing certain methods.
@item
@code{shortarg} The short argument, e.g., @code{-v}.
@item
@code{claim-argument} Whether to claim matched arguments exclusively, i.e.,
whether to prevent other "overlapping" infixes from also matching.
For example, consider the suffix arguments @code{--push-option=known=<val>}
and @code{--push-option=<arbitrary>}. Unless the former claims any matched
value exclusively (and appears before the latter in the menu), the
latter also matches, which would lead to undesirable behavior.
@item
@code{value} The value. Should not be accessed directly.
@ -3231,14 +3242,14 @@ currently cannot be invoked.
By default these predicates run when the prefix command is invoked,
but this can be changes, using the @code{refresh-suffixes} prefix slot.
See @ref{Prefix Slots}.
@xref{Prefix Slots}.
One more slot is shared between group and suffix classes, @code{level}. Like
the slots documented above, it is a predicate, but it is used for a
different purpose. The value has to be an integer between 1
and 7. @code{level} controls whether a suffix or a group should be
available depending on user preference.
See @ref{Enabling and Disabling Suffixes}.
@xref{Enabling and Disabling Suffixes}.
@node FAQ
@appendix FAQ

View file

@ -127,20 +127,21 @@ standard-compliant URI parser, as well as function
@code{url-recreate-url}, which converts a parsed URI back into a URI
string.
@defun url-generic-parse-url uri-string
This function returns a parsed version of the string @var{uri-string}.
@defun url-generic-parse-url url
This function returns a parsed version of the string @var{url}.
@end defun
@defun url-recreate-url uri-obj
@defun url-recreate-url urlobj
@cindex unparsing URLs
Given a parsed URI, this function returns the corresponding URI string.
Given a parsed URI in @var{urlobj}, this function returns the
corresponding URI string.
@end defun
@cindex parsed URI
The return value of @code{url-generic-parse-url}, and the argument
expected by @code{url-recreate-url}, is a @dfn{parsed URI}: a CL
structure whose slots hold the various components of the URI@.
@xref{Top,the CL Manual,,cl,GNU Emacs Common Lisp Emulation}, for
@xref{Structures,the CL Manual,,cl,GNU Emacs Common Lisp Emulation}, for
details about CL structures. Most of the other functions in the
@code{url} library act on parsed URIs.
@ -240,15 +241,15 @@ appear in URI components.)
string containing arbitrary characters to one that is properly
percent-encoded in accordance with RFC 3986.
@defun url-encode-url url-string
@cindex URI normalization
@defun url-encode-url url
This function return a properly URI-encoded version of
@var{url-string}. It also performs @dfn{URI normalization},
@var{url}. It also performs @dfn{URI normalization},
e.g., converting the scheme component to lowercase if it was
previously uppercase.
@end defun
@findex url-hexify-string
@findex url-unhex-string
@cindex percent-encoding of URL
To convert between a string containing arbitrary characters and a
percent-encoded all-@acronym{ASCII} string, use the functions
@code{url-hexify-string} and @code{url-unhex-string}:
@ -272,8 +273,8 @@ be either a list of allowed chars, or a vector whose Nth element is
non-@code{nil} if character N is allowed.
@end defun
@defun url-unhex-string string &optional allow-newlines
This function replaces percent-encoding sequences in @var{string} with
@defun url-unhex-string str &optional allow-newlines
This function replaces percent-encoding sequences in @var{str} with
their character equivalents, and returns the resulting string.
If @var{allow-newlines} is non-@code{nil}, it allows the decoding of
@ -294,20 +295,20 @@ string or a parsed URL structure. If it is a string, that string is
passed through @code{url-encode-url} before using it, to ensure that
it is properly URI-encoded (@pxref{URI Encoding}).
@defun url-retrieve-synchronously url &optional silent no-cookies timeout
@defun url-retrieve-synchronously url &optional silent inhibit-cookies timeout
This function synchronously retrieves the data specified by @var{url},
and returns a buffer containing the data. The return value is
@code{nil} if there is no data associated with the URL (as is the case
for @code{dired}, @code{info}, and @code{mailto} URLs).
If the optional argument @var{silent} is non-@code{nil}, progress
messages are suppressed. If the optional argument @var{no-cookies} is
messages are suppressed. If the optional argument @var{inhibit-cookies} is
non-@code{nil}, cookies are not stored or sent. If the optional
argument @var{timeout} is non-@code{nil}, it should be a number that
says (in seconds) how long to wait for a response before giving up.
@end defun
@defun url-retrieve url callback &optional cbargs silent no-cookies
@defun url-retrieve url callback &optional cbargs silent inhibit-cookies
This function retrieves @var{url} asynchronously, calling the function
@var{callback} when the object has been completely retrieved. The
return value is the buffer into which the data will be inserted, or
@ -336,7 +337,7 @@ signaled with @code{(signal @var{error-symbol} @var{data})}.
@cindex status of GnuTLS connection, as provided by @code{url-retrieve}
@findex gnutls-peer-status-warning-describe
@findex gnutls-peer-status
@item (:peer @var{gnutls-information})
@item (:peer @var{gnutls-information})
This means that GnuTLS was used for a TLS connection to the peer. The
@var{gnutls-information} has the following form:
@ -362,11 +363,11 @@ containing the retrieved data (if any). The buffer also contains any
MIME headers associated with the data retrieval.
If the optional argument @var{silent} is non-@code{nil}, progress
messages are suppressed. If the optional argument @var{no-cookies} is
messages are suppressed. If the optional argument @var{inhibit-cookies} is
non-@code{nil}, cookies are not stored or sent.
@end defun
@defun url-queue-retrieve url callback &optional cbargs silent no-cookies
@defun url-queue-retrieve url callback &optional cbargs silent inhibit-cookies
This function acts like @code{url-retrieve}, but with limits on the
number of concurrently-running network processes. The option
@code{url-queue-parallel-processes} controls the number of concurrent
@ -376,7 +377,6 @@ seconds.
To use this function, you must @code{(require 'url-queue)}.
@end defun
@vindex url-queue-parallel-processes
@defopt url-queue-parallel-processes
The value of this option is an integer specifying the maximum number
of concurrent @code{url-queue-retrieve} network processes. If the
@ -451,10 +451,11 @@ cookies, if there are any. You can remove a cookie using the
@kbd{C-k} (@code{url-cookie-delete}) command.
@end defun
@defun url-cookie-delete-cookies &optional regexp
@defun url-cookie-delete-cookies &optional regexp keep
This function takes a regular expression as its parameters and deletes
all cookies from that domain. If @var{regexp} is @code{nil}, delete
all cookies.
all cookies. If @var{keep} is non-@code{nil}, instead delete all cookies
that do not match @var{regexp}.
@end defun
@defopt url-cookie-file
@ -533,7 +534,7 @@ HTTP supports an @samp{OPTIONS} method describing things supported by
the URL@.
@defun url-http-options url
Returns a property list describing options available for URL@. The
Returns a property list describing options available for @var{url}. The
property list members are:
@table @code
@ -935,10 +936,13 @@ more likely to conflict with other files.
@end smallexample
@end defun
@defun url-cache-expired
This function returns non-@code{nil} if a cache entry has expired (or is absent).
The arguments are a URL and optional expiration delay in seconds
(default @var{url-cache-expire-time}).
@defun url-cache-expired url &optional expire-time
This function returns non-@code{nil} if a cache entry for @var{url} has
expired (or is absent). The expiration time is given by the option
@code{url-cache-expire-time}, but if the optional argument
@var{expire-time} is non-@code{nil}, its value overrides that option.
However, if the value of the @code{url-standalone-mode} option is
non-@code{nil}, cached URLs never expire.
@end defun
@defopt url-cache-expire-time
@ -946,7 +950,7 @@ This variable is the default number of seconds to use for the
expire-time argument of the function @code{url-cache-expired}.
@end defopt
@defun url-fetch-from-cache
@defun url-fetch-from-cache url
This function takes a URL as its argument and returns a buffer
containing the data cached for that URL.
@end defun
@ -1037,12 +1041,14 @@ others.@footnote{Proxies (which only operate over HTTP) are
implemented using this.} The library's basic function responsible for
making connections is @code{url-open-stream}.
@defun url-open-stream name buffer host service
@cindex opening a stream
@cindex stream, opening
@defun url-open-stream name buffer host service &optional gateway-method
Open a stream to @var{host}, possibly via a gateway. The other
arguments are as for @code{open-network-stream}. This will not make a
connection if @code{url-gateway-unplugged} is non-@code{nil}.
connection if @code{url-gateway-unplugged} is non-@code{nil}. Optional
argument @var{gateway-method} specifies the gateway to be used, and
defaults to the value of @code{url-gateway-method}, described below.
@end defun
@defvar url-gateway-local-host-regexp

View file

@ -1,3 +1,79 @@
* Translated Emacs manuals
** Translations available
Translations for language DOCLANG can be found under directory
doc/translations/DOCLANG. DOCLANG is for instance fr for French.
** Compiling all manual translations
Manual Texinfo sources are grouped into four subdirectories DIR with DIR
in { lispref, lispintro, emacs, misc}, and can be compiled to five
output formats FORMAT with FORMAT in { dvi, html, info, pdf, ps}. Texinfo
source code is under doc/DIR for the default language, and under
doc/translations/DOCLANG/DIR for language DOCLANG, for instance replace
DOCLANG by fr for French.
You can build all the manuals including their translations for any
combination of DIR and FORMAT by making the target DIR-FORMAT with the
top level Makefile. For instance:
make misc-info
to make all manuals from the misc subdirectory into the info format and
for all the language listed in the DOCLANGS list resulting from the
./configure step or superseded by setting DOCLANGS in the
environment. Outputs are made into the info directory for info format
and into the doc/DIR subdirectory for other formats (the output is in
doc/DIR, not doc/translations/DOCLANG/DIR, even when the DOCLANG is not
default).
You can select only some translations by means of the DOCLANGS
environment variable. DOCLANGS is otherwise set by the ./configure step
to all language supported by the Texinfo compiler and for which at least
one manual translation is available. DOCLANGS is a space separated list
of languages. ./configure --help for values supported. For instance:
make misc-info DOCLANGS=fr
to make all manuals from the misc subdirectory into the info format and
for language French only.
Note that the Emacs manual, the Emacs Lisp Reference manual and the
Introduction to Emacs Lisp Programming are always built in the default
language, whatever DOCLANGS says: the first two are referenced from doc
strings, and all three are expected to be part of any Emacs build.
Their translations, if any, are selected by DOCLANGS as usual.
Alternatively, you can use:
make -C doc/DIR FORMAT
to build manuals from DIR subdirectory, output format FORMAT and for the
default language only.
Use:
make -C doc/DIR FORMAT DOCLANG=fr
to build manuals from DIR subdirectory and output format FORMAT for the
French language only (replace fr by any language supported for DOCLANGS
as listed in ./configure --help).
** Compiling one manual translation
For the info output, and, say, SES manual in French:
make -C doc/misc ses DOCLANG=fr
ses-fr.info will go into the info directory.
For the pdf output:
make -C doc/misc ses-fr.pdf DOCLANG=fr
ses-fr.pdf will go into the doc/misc directory.
* Translating the Emacs manuals
** Copyright assignment
@ -69,7 +145,7 @@ few rules to follow:
- Most Emacs manuals are set to include the docstyle.Texi file. This
file adds the "@documentencoding UTF-8" directive to the targeted
manual. There is no need to add this directive in a manual that
manual. There is no need to add this directive in a manual that
includes docstyle.texi.
- Add a @documentlanguage directive that includes your language.
@ -96,7 +172,7 @@ See the 'Bugs' section in the Emacs manual.
** Sending your contributions
Send your contributions (files or revisions) for review to the Emacs
development list at emacs-devel@gnu.org. Subscribing to the list is not
development list at emacs-devel@gnu.org. Subscribing to the list is not
obligatory.
Always send contributions in the format of the original document. Most

View file

@ -0,0 +1,9 @@
## Info files to build and install on all platforms.
INFO_COMMON = auth autotype bovine calc ccmode cl dbus dired-x \
ebrowse ede ediff edt efaq eglot eieio emacs-gnutls \
emacs-mime epa erc ert eshell eudc eww flymake forms gnus \
htmlfontify idlwave ido info mairix-el message mh-e \
modus-themes newsticker nxml-mode octave-mode org pcl-cvs pgg \
rcirc reftex remember sasl sc semantic ses sieve smtpmail \
speedbar srecode todo-mode tramp transient url use-package \
vhdl-mode viper vtable widget wisent woman

View file

@ -0,0 +1,8 @@
## Info files to build and install on all platforms (only ses has been
## translated to French)
INFO_COMMON = ses
## efaq-w32 has not been translated to French
DOCMISC_W32:=#
DOCMISC_W32_TARGET:=#

View file

@ -10,6 +10,12 @@
@syncodeindex vr cp
@syncodeindex ky cp
@c %**end of header
@c compiler info avec
@c make -C doc/misc ../../info/ses-fr.info DOCLANG=fr
@c ou juste
@c make -C doc/misc ses DOCLANG=fr
@c compiler pdf avec
@c make -C doc/misc ses-fr.pdf DOCLANG=fr
@copying
Ce fichier documente @acronym{SES} : le tableur simple dEmacs (Simple

View file

@ -5787,7 +5787,7 @@ and co-wrote vc-tests-helpers.el vc-tests.el
and changed vc.el vc-git.el vc-dispatcher.el vc-hg.el vc-dir.el
vc-hooks.el diff-mode.el vc1-xtra.texi log-view.el maintaining.texi
subr.el project.el log-edit.el files.texi server.el simple.el window.el
cond-star.el configure.ac dired-aux.el keyboard.c and 347 other files
cond-star.el configure.ac dired-aux.el keyboard.c and 348 other files
Sebastian Fieber: changed gnus-art.el mm-decode.el mm-view.el
@ -6076,9 +6076,9 @@ Stephen Berman: wrote todo-mode-tests.el
and co-wrote todo-mode.el visual-wrap.el
and changed dired.el wid-edit.el dired-tests.el wdired.el files.el
todo-mode.texi dabbrev-tests.el wdired-tests.el diary-lib.el
menu-bar.el minibuffer.el dabbrev.el dired-aux.el doc-view.el info.el
outline.el simple.el todo-test-1.todo widget.texi INSTALL_BEGIN
allout.el and 89 other files
menu-bar.el minibuffer.el simple.el dabbrev.el dired-aux.el doc-view.el
info.el outline.el todo-test-1.todo widget.texi INSTALL_BEGIN allout.el
and 89 other files
Stephen C. Gilardi: changed configure.ac
@ -6616,7 +6616,7 @@ Ulrich Müller: changed configure.ac calc-units.el Makefile.in
emacsclient-mail.desktop lib-src/Makefile.in src/Makefile.in version.el
bindings.el calc-ext.el doctor.el emacs.1 files.el gamegrid.el gud.el
language/cyrillic.el server.el strings.texi ChgPane.c ChgSel.c HELLO
INSTALL and 61 other files
INSTALL and 63 other files
Ulrich Neumerkel: changed xterm.c

View file

@ -18,7 +18,7 @@ to look up issue github#1234, go to
https://github.com/joaotavora/eglot/issues/1234.
* Changes in Eglot 1.24.31 (Eglot bundled with Emacs 31.1)
* Changes to upcoming Eglot
** Changes to 'eglot-server-programs'

View file

@ -11,6 +11,67 @@ This file is about changes in ERC, the powerful, modular, and
extensible IRC (Internet Relay Chat) client distributed with
GNU Emacs since Emacs version 22.1.
* Changes in ERC 5.7
** A flexible 'match' API.
To the frustration many, ERC has long lacked of a flexible API for
reacting to a message's contents and envelope info, like its sender and
associated IRC command. While the long-term plan is to transition to an
object-based formatting model that should offer more useful access to
the various parts of a message before they're assembled, it's become
obvious that users need something practical in the interim. This
'match' API is based on a simple hook-like handler system that offers
more opportunities for things like filtering and styling. See Info node
'Match API' to find out more.
** Exercise more control in skipping certain desktop notifications.
Skip select notifications that ERC would otherwise emit with new hook
option 'erc-desktop-notifications-skip-predicates'. Its default members
skip messages from "fools" and those in untracked buffers.
** Opt out of desktop notifications from the active buffer.
Option 'erc-desktop-notifications-ignored-when-focused' can spare users
from being notified when interacting with the initiating buffer.
** Apply options locally to specific connections or buffers.
Based on an idea drafted nearly a quarter century ago by ERC's earliest
contributors, the 'settings' module offers a ready-made method for
binding arbitrary user options to various "scopes" of interest. It
leverages buffer-local variables and match conditions reminiscent of
'buffer-match-p'.
** Changes in the library API.
*** Module setup runs in query buffers on reconnect.
A module's setup would always run in channel buffers on reconnect, due
to channels being rejoined, but query buffers lacked a similar
opportunity to reinitialize their state for the new session. This is no
longer the case.
*** Local modules activate in preferred order instead of in reverse.
In recent versions, ERC has enabled local modules in the reverse order
of that produced by the "set" function used by 'setopt' and the Custom
UI for the option 'erc-modules'. Specifically, Built-in locals were
activated in reverse lexicographic order after third-party ones, which
were simply reversed as given. Now, just like with global modules, ERC
preserves the preferred order when activating local modules for new
sessions.
*** Major-mode setup runs before global-module setup in 'erc-open'.
The "enable" body of a global module's minor-mode command will now see
'erc-mode' as the 'major-mode'. Although ERC still delays its
major-mode hook until after it has initialized its main session
variables, a module can also now set any of its own variables that don't
depend on such initialization immediately and without fear of their
being killed. For modules still needing to run delayed, session-aware
code, a new convenience macro called 'erc-with-initialized-session' is
now available to automate any 'erc-mode-hook' wrangling for you.
*** A predicate to detect if the current buffer is a channel.
New function 'erc-channel-buffer-p' is a channel-detecting complement to
'erc-query-buffer-p' and a light wrapper around 'erc-channel-p'.
* Changes in ERC 5.6.2

4527
etc/NEWS

File diff suppressed because it is too large Load diff

4274
etc/NEWS.31 Normal file

File diff suppressed because it is too large Load diff

View file

@ -3763,6 +3763,13 @@ This is because the SECONDARY selection is not implemented by the
Wayland compositor being used. A workaround is to use other kinds of
selections.
** Pasting non-ASCII text from Emacs into Chromium or Brave inserts mojibake.
These are bugs in these browsers: they chose incorrect format of the
copied text amongst those which Emacs provides. Emacs provides UTF-8 as
one of the formats, but these browsers use Latin-1 instead. So please
report these bugs to the developers of the respective browsers.
** Giant tool bar icons are displayed in some cases
This is because some icon themes (such as the KDE Breeze icon theme)

View file

@ -41,6 +41,24 @@ symbol: aix
****** Error number 140 in line 8 of file errors.c ******
* Ansible
symbols: ansible-error ansible-fatal ansible-warning
ansible-included ansible-origin
[ERROR]: couldn't resolve module/action 'shelll'. This often indicates a misspelling, missing collection, or incorrect module path.
Origin: /home/albinus/src/tramp-tests/roles/test/tasks/adb.yml:19:3
[WARNING]: Deprecation warnings can be disabled by setting `deprecation_warnings=False` in ansible.cfg.
[DEPRECATION WARNING]: Importing 'to_bytes' from 'ansible.module_utils._text' is deprecated. This feature will be removed from ansible-core version 2.24. Use ansible.module_utils.common.text.converters instead.
included: /home/albinus/src/tramp-tests/roles/test/tasks/adb.yml for localhost => (item={'name': 'adb', 'start': '04157df41d46b840'})
fatal: [localhost]: FAILED! => {
"assertion": "message == []",
"changed": false,
"evaluated_to": false,
"msg": "Assertion failed"
}
* Ant Java: works at least for jikes and javac
symbol: ant
@ -161,7 +179,7 @@ cucumber foo/cucumber.feature:15 # Scenario: deep backtrace in step definition
* EDG C/C++
symbol: edg-1 edg-2
symbols: edg-1 edg-2
build/intel/debug/../../../struct.cpp(42): error: identifier "foo" is undefined
build/intel/debug/../../../struct.cpp(44): warning #1011: missing return statement at end of ...
@ -178,7 +196,7 @@ Error 24 at (2:progran.f90) : syntax error
* Fortran checker
symbols: ftnchek
symbol: ftnchek
Dummy arg W in module SUBA line 8 file arrayclash.f is array
L4 used at line 55 file test/assign.f; never set
@ -304,6 +322,251 @@ In file included from /usr/include/c++/3.3/backward/warn.h:4,
from /usr/include/c++/3.3/backward/iostream.h:31:0,
from test_clt.cc:1:
* GCC nested notes
symbol: gcc-nested-notes
Example from https://developers.redhat.com/articles/2026/04/28/gcc-16-improved-error-messages-sarif-output#new_c___error_improvements with and without Unicode
test.cc:8:6: error: no declaration matches 'void foo::test(int, int, const void*, int)'
8 | void foo::test(int i, int j, const void *ptr, int k)
| ^~~
* there is 1 candidate
* candidate is: 'void foo::test(int, int, void*, int)'
test.cc:4:10:
4 | void test(int i, int j, void *ptr, int k);
| ^~~~
* parameter 3 of candidate has type 'void*'...
test.cc:4:35:
4 | void test(int i, int j, void *ptr, int k);
| ~~~~~~^~~
* ...which does not match type 'const void*'
test.cc:8:42:
8 | void foo::test(int i, int j, const void *ptr, int k)
| ~~~~~~~~~~~~^~~
test.cc:1:7: note: 'class foo' defined here
1 | class foo
| ^~~
test.cc:8:6: error: no declaration matches void foo::test(int, int, const void*, int)
8 | void foo::test(int i, int j, const void *ptr, int k)
| ^~~
• there is 1 candidate
• candidate is: void foo::test(int, int, void*, int)
test.cc:4:10:
4 | void test(int i, int j, void *ptr, int k);
| ^~~~
• parameter 3 of candidate has type void*...
test.cc:4:35:
4 | void test(int i, int j, void *ptr, int k);
| ~~~~~~^~~
• ...which does not match type const void*
test.cc:8:42:
8 | void foo::test(int i, int j, const void *ptr, int k)
| ~~~~~~~~~~~~^~~
test.cc:1:7: note: class foo defined here
1 | class foo
| ^~~
../../gcc/gcc/cp/module.cc: In member function void {anonymous}::trees_out::type_node(tree):
../../gcc/gcc/cp/module.cc:9628:40: error: cannot convert qualifier_set to int in initialization
9628 | int quals = type_memfn_quals (type);
| ~~~~~~~~~~~~~~~~~^~~~~~
| |
| qualifier_set
../../gcc/gcc/cp/module.cc:9635:24: error: no match for operator!= (operand types are int and qualifier_set)
9635 | || quals != type_memfn_quals (root)
| ~~~~~ ^~ ~~~~~~~~~~~~~~~~~~~~~~~
| | |
| int qualifier_set
• there are 3 candidates
../../gcc/gcc/cp/module.cc:9635:24:
9635 | || quals != type_memfn_quals (root)
| ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../gcc/gcc/cp/module.cc:215:
• candidate 1: bool operator==(const cp_expr&, tree) (reversed)
../../gcc/gcc/cp/cp-tree.h:126:1:
126 | operator == (const cp_expr &lhs, tree rhs)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to const cp_expr&
../../gcc/gcc/cp/cp-tree.h:126:29:
126 | operator == (const cp_expr &lhs, tree rhs)
| ~~~~~~~~~~~~~~~^~~
In file included from ../../gcc/gcc/coretypes.h:479,
from ../../gcc/gcc/cp/module.cc:214:
• candidate 2: template<class T1, class T2> typename wi::binary_traits<T1, T2>::predicate_result operator!=(const T1&, const T2&)
../../gcc/gcc/wide-int.h:3853:19:
3853 | BINARY_PREDICATE (operator !=, ne_p)
| ^~~~~~~~
• in definition of macro BINARY_PREDICATE
3829 | OP (const T1 &x, const T2 &y) \
| ^~
• template argument deduction/substitution failed:
• in definition of macro BINARY_PREDICATE
3829 | OP (const T1 &x, const T2 &y) \
| ^~
• ../../gcc/gcc/wide-int.h: In substitution of template<class T1, class T2> typename wi::binary_traits<T1, T2>::predicate_result operator!=(const T1&, const T2&) [with T1 = int; T2 = qualifier_set]:
• required from here
../../gcc/gcc/cp/module.cc:9635:42:
9635 | || quals != type_memfn_quals (root)
| ^
• error: incomplete type wi::int_traits<qualifier_set> used in nested name specifier
../../gcc/gcc/wide-int.h:3853:19:
3853 | BINARY_PREDICATE (operator !=, ne_p)
| ^~~~~~~~
• in definition of macro BINARY_PREDICATE
3829 | OP (const T1 &x, const T2 &y) \
| ^~
In file included from ../../gcc/gcc/input.h:24,
from ../../gcc/gcc/coretypes.h:507:
• candidate 3: bool operator!=(const expanded_location&, const expanded_location&)
../../gcc/gcc/../libcpp/include/line-map.h:1313:1:
1313 | operator!= (const expanded_location &a,
| ^~~~~~~~
• no known conversion for argument 1 from int to const expanded_location&
../../gcc/gcc/../libcpp/include/line-map.h:1313:38:
1313 | operator!= (const expanded_location &a,
| ~~~~~~~~~~~~~~~~~~~~~~~~~^
../../gcc/gcc/c/c-typeck.cc:8719:38: error: no match for operator| (operand types are qualifier_set and qualifier_set)
8719 | : ((lquals | rquals) == lquals)))
| ~~~~~~ ^ ~~~~~~
| | |
| | qualifier_set
| qualifier_set
• there are 6 candidates
../../gcc/gcc/c/c-typeck.cc:8719:38:
8719 | : ((lquals | rquals) == lquals)))
| ~~~~~~~^~~~~~~~
• candidate 1: template<class T1, class T2> typename wi::binary_traits<T1, T2>::operator_result operator|(const T1&, const T2&)
../../gcc/gcc/wide-int.h:3855:18:
3855 | BINARY_OPERATOR (operator |, bit_or)
| ^~~~~~~~
• in definition of macro BINARY_OPERATOR
3837 | OP (const T1 &x, const T2 &y) \
| ^~
• template argument deduction/substitution failed:
• in definition of macro BINARY_OPERATOR
3837 | OP (const T1 &x, const T2 &y) \
| ^~
• ../../gcc/gcc/wide-int.h: In substitution of template<class T1, class T2> typename wi::binary_traits<T1, T2>::operator_result operator|(const T1&, const T2&) [with T1 = qualifier_set; T2 = qualifier_set]:
• required from here
../../gcc/gcc/c/c-typeck.cc:8719:19:
8719 | : ((lquals | rquals) == lquals)))
| ^~~~~~
• error: incomplete type wi::int_traits<qualifier_set> used in nested name specifier
../../gcc/gcc/wide-int.h:3855:18:
3855 | BINARY_OPERATOR (operator |, bit_or)
| ^~~~~~~~
• in definition of macro BINARY_OPERATOR
3837 | OP (const T1 &x, const T2 &y) \
| ^~
• candidate 2: dump_flags_t operator|(dump_flags_t, dump_flags_t)
../../gcc/gcc/dumpfile.h:212:1:
212 | operator| (dump_flags_t lhs, dump_flags_t rhs)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to dump_flags_t {aka dump_flag}
../../gcc/gcc/dumpfile.h:212:25:
212 | operator| (dump_flags_t lhs, dump_flags_t rhs)
| ~~~~~~~~~~~~~^~~
• candidate 3: optgroup_flags_t operator|(optgroup_flags_t, optgroup_flags_t)
../../gcc/gcc/dumpfile.h:280:1:
280 | operator| (optgroup_flags_t lhs, optgroup_flags_t rhs)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to optgroup_flags_t {aka optgroup_flag}
../../gcc/gcc/dumpfile.h:280:29:
280 | operator| (optgroup_flags_t lhs, optgroup_flags_t rhs)
| ~~~~~~~~~~~~~~~~~^~~
• candidate 4: constexpr cv_qualifier operator|(cv_qualifier, cv_qualifier)
../../gcc/gcc/tree-core.h:716:1:
716 | operator| (cv_qualifier l, cv_qualifier r)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to cv_qualifier
../../gcc/gcc/tree-core.h:716:25:
716 | operator| (cv_qualifier l, cv_qualifier r)
| ~~~~~~~~~~~~~^
• candidate 5: constexpr qualifier_set operator|(qualifier_set, cv_qualifier)
../../gcc/gcc/tree.h:2816:1:
2816 | operator| (qualifier_set qs, cv_qualifier cvs)
| ^~~~~~~~
• no known conversion for argument 2 from qualifier_set to cv_qualifier
../../gcc/gcc/tree.h:2816:43:
2816 | operator| (qualifier_set qs, cv_qualifier cvs)
| ~~~~~~~~~~~~~^~~
• candidate 6: constexpr qualifier_set operator|(cv_qualifier, qualifier_set)
../../gcc/gcc/tree.h:2822:1:
2822 | operator| (cv_qualifier cvs, qualifier_set qs)
| ^~~~~~~~
• no known conversion for argument 1 from qualifier_set to cv_qualifier
../../gcc/gcc/tree.h:2822:25:
2822 | operator| (cv_qualifier cvs, qualifier_set qs)
| ~~~~~~~~~~~~~^~~
The g++.dg/diagnostic/pr100716.C example has some more complex cases:
pr100716.C: In function int main():
pr100716.C:34:13: error: no matching function for call to A<int>::f(int)
34 | A<int>().f(0); // { dg-error "no matching function for call to 'A<int>::f\\(int\\)'" }
| ~~~~~~~~~~^~~
• there is 1 candidate
• candidate 1: template<class U> void A<T>::f() [with T = int]
pr100716.C:7:12:
7 | void f() {} // { dg-line Af }
| ^
• candidate expects 0 arguments, 1 provided
pr100716.C:37:13: error: no matching function for call to A<int>::g()
37 | A<int>().g(); // { dg-error "no matching function for call to 'A<int>::g\\(\\)'" }
| ~~~~~~~~~~^~
• there is 1 candidate
• candidate 1: template<class U> void A<T>::g(U) [with T = int]
pr100716.C:10:12:
10 | void g(U) {} // { dg-line Ag }
| ^
• candidate expects 1 argument, 0 provided
pr100716.C:40:13: error: no matching function for call to B<int>::f()
40 | B<int>().f(); // { dg-error "no matching function for call to 'B<int>::f\\(\\)'" }
| ~~~~~~~~~~^~
• there is 1 candidate
• candidate 1: template<class U> void B<T>::f(U) [with T = int]
pr100716.C:17:12:
17 | void f(U) {} // { dg-line Bf }
| ^
• candidate expects 1 argument, 0 provided
pr100716.C:43:13: error: no matching function for call to B<int>::g()
43 | B<int>().g(); // { dg-error "no matching function for call to 'B<int>::g\\(\\)'" }
| ~~~~~~~~~~^~
• there is 1 candidate
• candidate 1: template<class U> void B<T>::g(U, T) [with T = int]
pr100716.C:20:12:
20 | void g(U, T) {} // { dg-line Bg }
| ^
• candidate expects 2 arguments, 0 provided
pr100716.C:46:15: error: no matching function for call to B<float>::g(int)
46 | B<float>().g(0); // { dg-error "no matching function for call to 'B<float>::g\\(int\\)'" }
| ~~~~~~~~~~~~^~~
• there is 1 candidate
• candidate 1: template<class U> void B<T>::g(U, T) [with T = float]
pr100716.C:20:12:
20 | void g(U, T) {} // { dg-line Bg }
| ^
• candidate expects 2 arguments, 1 provided
pr100716.C:49:8: error: no matching function for call to C::f()
49 | C().f(); // { dg-error "no matching function for call to 'C::f\\(\\)'" }
| ~~~~~^~
• there is 1 candidate
• candidate 1: template<class U> void C::f(U)
pr100716.C:26:10:
26 | void f(U) {} // { dg-line Cf }
| ^
• candidate expects 1 argument, 0 provided
pr100716.C:52:8: error: no matching function for call to C::g(int)
52 | C().g(0); // { dg-error "no matching function for call to 'C::g\\(int\\)'" }
| ~~~~~^~~
• there is 1 candidate
• candidate 1: template<class U> void C::g()
pr100716.C:29:10:
29 | void g() {} // { dg-line Cg }
| ^
• candidate expects 0 arguments, 1 provided
* GNU style
@ -336,7 +599,7 @@ boost/container/detail/flat_tree.hpp:589:25: [ skipping 5 instantiation contex
* Guile backtrace, 2.0.11
symbols: guile-file, guile-line
symbols: guile-file guile-line
Backtrace:
In ice-9/boot-9.scm:
@ -356,6 +619,8 @@ In /home/janneke/vc/guile/examples/gud-break.scm:
* Lua 5.1, 5.2, 5.3, 5.4, and LuaJIT 2.1
symbols: lua lua-stack
/usr/bin/lua: database.lua:31: assertion failed!
stack traceback:
[C]: in function 'assert'
@ -490,7 +755,7 @@ Fatal error: Call to undefined function: mysql_pconnect() in db.inc on line 66
* Rust
symbol: rust rust-panic
symbols: rust rust-panic
error[E0277]: `Foo` is not an iterator
--> src/main.rs:4:16
@ -612,7 +877,7 @@ bloofle defined( /users/wolfgang/foo.c(4) ), but never used
* GCOV (test coverage program)
symbol: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line
symbols: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line
-: 0:Source:foo.c
-: 0:Object:foo.bb

View file

@ -265,7 +265,11 @@ document ysave-buffer
end
define ybuffer-contents
ydump-buffer $arg0 /dev/stdout
if defined_WINDOWSNT
ydump-buffer $arg0 CONOUT$
else
ydump-buffer $arg0 /dev/stdout
end
if $yverbose && $buf->z_byte <= 1
yget-current-buffer-name
printf "[Buffer \"%s\" is empty.]\n", $ycurrent_buffer_name

View file

@ -0,0 +1,19 @@
COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES -*- coding: utf-8 -*-
The following icons were derived from GIMP 3.2.X icons, modified for
Emacs by Elías Gabriel Pérez <eg642616@gmail.com>.
Copyright (C) 2026 Free Software Foundation, Inc.
License: GNU General Public License version 3 or later (see COPYING)
char-for-spray.xpm char-for-spray.pbm
char-to-fill.xpm char-to-fill.pbm
ellipse.xpm ellipse.pbm
eraser.xpm eraser.pbm
fill.xpm fill.pbm
line.xpm line.pbm
pen.xpm pen.pbm
poly-line.xpm poly-line.pbm
rectangle.xpm rectangle.pbm
spray.xpm spray.pbm
square.xpm square.pbm
text.xpm text.pbm

Binary file not shown.

View file

@ -0,0 +1,281 @@
/* XPM */
static char * char_for_spray_xpm[] = {
"26 24 254 2",
" c None",
". c #A1A39E",
"+ c #CDCECC",
"@ c #CFD0CD",
"# c #CDCDCB",
"$ c #A1A29F",
"% c #E1E1DF",
"& c #CCCEC8",
"* c #C8CAC4",
"= c #E0E1DF",
"- c #959691",
"; c #E4E5E3",
"> c #CACCC7",
", c #BDBEBA",
"' c #ABADA9",
") c #BDBFBB",
"! c #939792",
"~ c #E6E7E4",
"{ c #CCCEC9",
"] c #575856",
"^ c #333432",
"/ c #444543",
"( c #212120",
"_ c #4E4E4C",
": c #CBCDC8",
"< c #959792",
"[ c #E7E8E5",
"} c #CED0CB",
"| c #282827",
"1 c #959793",
"2 c #E8E9E6",
"3 c #D0D2CD",
"4 c #9A9C98",
"5 c #3B3B3A",
"6 c #2F302F",
"7 c #373837",
"8 c #141413",
"9 c #767775",
"0 c #CDCFCA",
"a c #000000",
"b c #C9CBC6",
"c c #E9EAE7",
"d c #C7C9C4",
"e c #090909",
"f c #AAACA8",
"g c #D2D4CF",
"h c #3C3D3B",
"i c #737472",
"j c #CFD1CC",
"k c #959893",
"l c #EAEBE9",
"m c #C0C1BD",
"n c #050505",
"o c #BEBEBB",
"p c #D5D6D2",
"q c #A5A6A3",
"r c #060606",
"s c #757573",
"t c #D2D3CF",
"u c #8B8B89",
"v c #2E2E2D",
"w c #393938",
"x c #B4B4B1",
"y c #DDDEDC",
"z c #494D4C",
"A c #2F3235",
"B c #979893",
"C c #EBECEA",
"D c #D7D8D4",
"E c #767774",
"F c #1E1E1E",
"G c #313130",
"H c #50504F",
"I c #5E5E5C",
"J c #898A88",
"K c #D4D5D1",
"L c #5D5D5B",
"M c #030303",
"N c #232322",
"O c #C4C5C2",
"P c #686B6B",
"Q c #4A4D4D",
"R c #303537",
"S c #979895",
"T c #ECEDEB",
"U c #D9DAD6",
"V c #D6D7D3",
"W c #BBBCB9",
"X c #414140",
"Y c #0D1012",
"Z c #5C605F",
"` c #575A58",
" . c #323939",
".. c #EDEEEC",
"+. c #DBDCD8",
"@. c #D8D9D5",
"#. c #010101",
"$. c #C4C4C1",
"%. c #4D4D4C",
"&. c #333839",
"*. c #555957",
"=. c #454948",
"-. c #3B4040",
";. c #2F3536",
">. c #979A95",
",. c #EEEFED",
"'. c #DDDEDA",
"). c #AFB0AD",
"!. c #474746",
"~. c #424241",
"{. c #373736",
"]. c #A8A9A6",
"^. c #DADBD7",
"/. c #171A1C",
"(. c #303538",
"_. c #7A7C7A",
":. c #34393A",
"<. c #525654",
"[. c #3E4343",
"}. c #6D716E",
"|. c #989A95",
"1. c #EFF0EE",
"2. c #DFE0DD",
"3. c #A4A4A2",
"4. c #111110",
"5. c #BCBDBA",
"6. c #40403F",
"7. c #939492",
"8. c #DBDCDA",
"9. c #000101",
"0. c #293030",
"a. c #3D4242",
"b. c #434848",
"c. c #484C4B",
"d. c #353B3B",
"e. c #B3B4B3",
"f. c #989A97",
"g. c #F0F1EF",
"h. c #E1E2DF",
"i. c #DEDFDC",
"j. c #181818",
"k. c #737372",
"l. c #B5B6B3",
"m. c #D2D3D0",
"n. c #BABBB8",
"o. c #696B68",
"p. c #6B6D6D",
"q. c #3B4141",
"r. c #A8A9A7",
"s. c #F1F2F0",
"t. c #E3E4E1",
"u. c #A9AAA8",
"v. c #B9BAB8",
"w. c #D3D5D2",
"x. c #818380",
"y. c #C1C1C1",
"z. c #DEDEDE",
"A. c #A4A4A3",
"B. c #878988",
"C. c #9A9B97",
"D. c #F3F3F1",
"E. c #E6E6E3",
"F. c #939391",
"G. c #DDDDDA",
"H. c #E3E3E0",
"I. c #D9D9D7",
"J. c #D5D5D2",
"K. c #888986",
"L. c #CCCCCC",
"M. c #E4E4E4",
"N. c #BFBFBE",
"O. c #B5B5B5",
"P. c #7C7C7B",
"Q. c #CBCBC9",
"R. c #232323",
"S. c #F4F4F2",
"T. c #E8E8E5",
"U. c #AEAEAC",
"V. c #CACAC7",
"W. c #747473",
"X. c #737371",
"Y. c #E7E7E4",
"Z. c #C3C3C0",
"`. c #A3A5A3",
" + c #E6E6E5",
".+ c #A3A4A2",
"++ c #7A7B79",
"@+ c #ADAEAD",
"#+ c #8F8F8F",
"$+ c #AFAFAD",
"%+ c #8B8B88",
"&+ c #5D5D5D",
"*+ c #585858",
"=+ c #9A9B98",
"-+ c #F5F5F4",
";+ c #EAEAE8",
">+ c #666665",
",+ c #2D2D2D",
"'+ c #767675",
")+ c #575756",
"!+ c #6C6C6B",
"~+ c #E7E7E5",
"{+ c #757774",
"]+ c #B0B3AD",
"^+ c #A0A19E",
"/+ c #B0B0AE",
"(+ c #BBBBB9",
"_+ c #6A6B68",
":+ c #626262",
"<+ c #C3C3C2",
"[+ c #595959",
"}+ c #7F7F7F",
"|+ c #9B9D99",
"1+ c #ECECEA",
"2+ c #E5E5E3",
"3+ c #C9C9C7",
"4+ c #E3E3E1",
"5+ c #777775",
"6+ c #939591",
"7+ c #B9BAB7",
"8+ c #4D4E4D",
"9+ c #767676",
"0+ c #747474",
"a+ c #777777",
"b+ c #545454",
"c+ c #EBEBEA",
"d+ c #EFEFED",
"e+ c #EEEEEC",
"f+ c #E8E9E8",
"g+ c #9AA2B5",
"h+ c #BDBDBB",
"i+ c #B7B8B5",
"j+ c #EBEBE9",
"k+ c #EDEDEB",
"l+ c #C0C0BE",
"m+ c #4B4B4A",
"n+ c #595958",
"o+ c #3F3F3F",
"p+ c #969894",
"q+ c #D0D1D0",
"r+ c #D9D9D8",
"s+ c #DADAD9",
"t+ c #C6C8CB",
"u+ c #A5ABB8",
"v+ c #466293",
"w+ c #818DA6",
"x+ c #D7D7D6",
"y+ c #D8D8D7",
"z+ c #939390",
"A+ c #375A8F",
"B+ c #38598F",
"C+ c #37578C",
"D+ c #37588E",
"E+ c #355887",
" ",
" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # $ ",
" % & * * * * * * * * * * * * * * * * & = ",
" - ; > > , ' ) > > > > > > > > > > > > > ; - ",
" ! ~ { ] ^ / ( _ : { { { { { { { { { { { ~ ! ",
" < [ } > } } { | 1 } } } } } } } } } } } [ < ",
" < 2 3 4 5 6 7 8 9 3 3 3 0 a a b 3 3 3 3 2 < ",
" 1 c d e f g g h i g g g j a a : g g g g c 1 ",
" k l m n o p q r s p p p t a a u v w x p y z A ",
" B C D E F G H I J D D D K a a G L M N O P Q R ",
" S T U U U U U U U U U U V a a W U X Y Z ` z . ",
" S ..+.+.+.+.+.+.+.+.+.+.@.a #.$.D %.&.*.=.-.;. ",
" >.,.'.'.'.'.).!.H ~.{.].^.a /.(._.:.<.z [.}. ",
" |.1.2.2.2.3.4.5.2.2.6.7.8.9.0.:.a.b.c.d.e.|. ",
" f.g.h.h.i.j.k.h.h.h.l.m.h.m.n.o.e.p.q.r...f. ",
" f.s.t.t.u.a v.t.t.t.t.t.t.w.x.y.z.A.B.t.s.f. ",
" C.D.E.E.F.a G.E.E.H.I.E.J.K.L.M.N.O.P.Q.D.C. R.",
" C.S.T.T.U.a V.T.T.W.X.Y.Z.`. +.+++@+#+$+D.%+&+*+",
" =+-+;+;+;+>+,+'+)+!+~+% {+]+^+/+(+_+#+:+<+[+}+ ",
" |+-+1+1+1+1+2+3+4+1+1+4+5+6+7+1+1+(+8+9+0+a+b+ ",
" c+d+e+e+e+e+e+e+T f+g+h+i+j+e+e+k+l+m+n+o+ ",
" p+q+r+s+r+r+r+t+u+v+w+x+y+r+r+r+s+y+# z+ ",
" A+B+C+ ",
" D+E+ "};

Binary file not shown.

View file

@ -0,0 +1,301 @@
/* XPM */
static char * char_to_fill_xpm[] = {
"26 24 274 2",
" c None",
". c #A1A39E",
"+ c #CDCECC",
"@ c #CFD0CD",
"# c #CDCDCB",
"$ c #A1A29F",
"% c #E1E1DF",
"& c #CCCEC8",
"* c #C8CAC4",
"= c #E0E1DF",
"- c #959691",
"; c #E4E5E3",
"> c #CACCC7",
", c #BDBEBA",
"' c #ABADA9",
") c #BDBFBB",
"! c #939792",
"~ c #E6E7E4",
"{ c #CCCEC9",
"] c #575856",
"^ c #333432",
"/ c #444543",
"( c #212120",
"_ c #4E4E4C",
": c #CBCDC8",
"< c #959792",
"[ c #E7E8E5",
"} c #CED0CB",
"| c #282827",
"1 c #959793",
"2 c #E8E9E6",
"3 c #D0D2CD",
"4 c #9A9C98",
"5 c #3B3B3A",
"6 c #2F302F",
"7 c #373837",
"8 c #141413",
"9 c #767775",
"0 c #CDCFCA",
"a c #000000",
"b c #C9CBC6",
"c c #E9EAE7",
"d c #C7C9C4",
"e c #090909",
"f c #AAACA8",
"g c #D2D4CF",
"h c #3C3D3B",
"i c #737472",
"j c #CFD1CC",
"k c #959893",
"l c #EAEBE9",
"m c #C0C1BD",
"n c #050505",
"o c #BEBEBB",
"p c #D5D6D2",
"q c #A5A6A3",
"r c #060606",
"s c #757573",
"t c #D2D3CF",
"u c #8B8B89",
"v c #2E2E2D",
"w c #393938",
"x c #B4B4B1",
"y c #979893",
"z c #EBECEA",
"A c #D7D8D4",
"B c #767774",
"C c #1E1E1E",
"D c #313130",
"E c #50504F",
"F c #5E5E5C",
"G c #898A88",
"H c #D4D5D1",
"I c #5D5D5B",
"J c #30312E",
"K c #454744",
"L c #979995",
"M c #C7C8C6",
"N c #979895",
"O c #ECEDEB",
"P c #D9DAD6",
"Q c #D6D7D3",
"R c #BBBCB9",
"S c #BEBFBB",
"T c #4D4E4C",
"U c #353533",
"V c #A2A3A0",
"W c #B2B4B1",
"X c #80817E",
"Y c #EDEEEC",
"Z c #DBDCD8",
"` c #D8D9D5",
" . c #CCCCC9",
".. c #ADAEAB",
"+. c #5D5E5C",
"@. c #858684",
"#. c #969795",
"$. c #DDDEDC",
"%. c #747673",
"&. c #979A95",
"*. c #EEEFED",
"=. c #DDDEDA",
"-. c #AFB0AD",
";. c #474746",
">. c #424241",
",. c #373736",
"'. c #A8A9A6",
"). c #DADBD7",
"!. c #0A0A09",
"~. c #70706E",
"{. c #787A77",
"]. c #C5C5C4",
"^. c #E8E8E8",
"/. c #BABBB9",
"(. c #747773",
"_. c #989A95",
":. c #EFF0EE",
"<. c #DFE0DD",
"[. c #A4A4A2",
"}. c #111110",
"|. c #BCBDBA",
"1. c #C8CBCE",
"2. c #4A5269",
"3. c #808592",
"4. c #B7BAC2",
"5. c #363C4A",
"6. c #6B6D6C",
"7. c #BABAB9",
"8. c #ADAEAD",
"9. c #D1D1D1",
"0. c #DBDBDB",
"a. c #9EA09E",
"b. c #737571",
"c. c #989A97",
"d. c #F0F1EF",
"e. c #E1E2DF",
"f. c #DEDFDC",
"g. c #181818",
"h. c #737372",
"i. c #C4C7CC",
"j. c #91A1C0",
"k. c #8AA6D0",
"l. c #7190BF",
"m. c #667289",
"n. c #A6A9AD",
"o. c #E7E7E7",
"p. c #F2F3F3",
"q. c #B5B6B5",
"r. c #C0C0C0",
"s. c #D0D0D0",
"t. c #D8D8D8",
"u. c #C5C6C5",
"v. c #757774",
"w. c #F1F2F0",
"x. c #E3E4E1",
"y. c #A9AAA8",
"z. c #B9BAB8",
"A. c #B1B5C1",
"B. c #AABFDE",
"C. c #95AED0",
"D. c #7F868F",
"E. c #D2D3D3",
"F. c #F2F2F2",
"G. c #F9F9F9",
"H. c #797A78",
"I. c #C7C7C6",
"J. c #CDCDCD",
"K. c #E0E0E0",
"L. c #949593",
"M. c #9A9B97",
"N. c #F3F3F1",
"O. c #E6E6E3",
"P. c #939391",
"Q. c #DDDDDA",
"R. c #B0B4C0",
"S. c #AFC5E3",
"T. c #93AACC",
"U. c #A4A5A8",
"V. c #EAEAEA",
"W. c #F0F0F0",
"X. c #8B8C8A",
"Y. c #8F908F",
"Z. c #8E8F8E",
"`. c #959795",
" + c #D2D2D2",
".+ c #D0D1D0",
"++ c #F4F4F2",
"@+ c #E8E8E5",
"#+ c #AEAEAC",
"$+ c #CACAC7",
"%+ c #B0C5E3",
"&+ c #94AED6",
"*+ c #787D8A",
"=+ c #D9DAD9",
"-+ c #DFDFDF",
";+ c #E6E6E6",
">+ c #959594",
",+ c #8D8E8C",
"'+ c #A4A5A4",
")+ c #CECECE",
"!+ c #DBDBDA",
"~+ c #A5A6A4",
"{+ c #9A9B98",
"]+ c #F5F5F4",
"^+ c #EAEAE8",
"/+ c #666665",
"(+ c #2D2D2D",
"_+ c #767675",
":+ c #58617C",
"<+ c #B0B4BC",
"[+ c #A4A5A3",
"}+ c #DEDEDE",
"|+ c #AFB0AF",
"1+ c #B1B2B1",
"2+ c #E1E1E0",
"3+ c #DDDDDD",
"4+ c #D3D3D3",
"5+ c #757673",
"6+ c #9B9D99",
"7+ c #ECECEA",
"8+ c #E5E5E3",
"9+ c #C9C9C7",
"0+ c #AEB2BF",
"a+ c #93ADD5",
"b+ c #C4C6CE",
"c+ c #C3C3C1",
"d+ c #C8C8C7",
"e+ c #F8F8F8",
"f+ c #F7F7F7",
"g+ c #EDEDED",
"h+ c #E3E3E3",
"i+ c #D9D9D9",
"j+ c #D7D7D7",
"k+ c #777875",
"l+ c #EBEBEA",
"m+ c #EFEFED",
"n+ c #EEEEEC",
"o+ c #BEC2CC",
"p+ c #9AADCF",
"q+ c #8AA0C8",
"r+ c #CCCED4",
"s+ c #B4B4B2",
"t+ c #EFEFEF",
"u+ c #FAFAFA",
"v+ c #F3F3F3",
"w+ c #E1E2E1",
"x+ c #9C9D9B",
"y+ c #656764",
"z+ c #969894",
"A+ c #D9D9D8",
"B+ c #DADAD9",
"C+ c #CECFD2",
"D+ c #A6ABBA",
"E+ c #AAAEBD",
"F+ c #D1D2D3",
"G+ c #BBBBBA",
"H+ c #CFCFCF",
"I+ c #DCDCDC",
"J+ c #EAEBEA",
"K+ c #C6C7C6",
"L+ c #7A7A78",
"M+ c #838583",
"N+ c #E6E6E5",
"O+ c #E1E1E1",
"P+ c #D6D6D5",
"Q+ c #979896",
"R+ c #636561",
"S+ c #50534B",
"T+ c #595C57",
"U+ c #A1A3A1",
"V+ c #DDDEDD",
"W+ c #6D6E6B",
"X+ c #50534C",
"Y+ c #4F524A",
" ",
" . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # $ ",
" % & * * * * * * * * * * * * * * * * & = ",
" - ; > > , ' ) > > > > > > > > > > > > > ; - ",
" ! ~ { ] ^ / ( _ : { { { { { { { { { { { ~ ! ",
" < [ } > } } { | 1 } } } } } } } } } } } [ < ",
" < 2 3 4 5 6 7 8 9 3 3 3 0 a a b 3 3 3 3 2 < ",
" 1 c d e f g g h i g g g j a a : g g g g c 1 ",
" k l m n o p q r s p p p t a a u v w x p l k ",
" y z A B C D E F G A A A H a a D I J K L M - ",
" N O P P P P P P P P P P Q a a R S T U V W X ",
" N Y Z Z Z Z Z Z Z Z Z Z ` a a ...+.@.#.$.%. ",
" &.*.=.=.=.=.-.;.E >.,.'.).a !.~.{.].^./.+ (. ",
" _.:.<.<.<.[.}.|.$.1.2.3.4.5.6.7.8.].9.0.a.b. ",
" c.d.e.e.f.g.h.e.i.j.k.l.m.n.o.p.q.r.s.t.u.v. ",
" c.w.x.x.y.a z.x.A.B.C.D.E.F.G.t.H.@.I.J.K.L. ",
" M.N.O.O.P.a Q.O.R.S.T.U.V.K.W.X.Y.Z.`. +9..+H. ",
" M.++@+@+#+a $+@+A.%+&+*+=+-+;+>+,+G '+t.)+!+~+ ",
" {+]+^+^+^+/+(+_+:+%+&+<+[+;+}+K.|+1+2+3+4+ + +5+",
" 6+]+7+7+7+7+8+9+0+S.a+b+c+d+-+;+e+f+g+h+i+j+h+k+",
" l+m+n+n+n+n+n+o+p+q+r+8+s+3+3+t+u+v+V.o.w+x+y+",
" z+.+A+B+A+A+A+C+D+E+F+A+G+H+I+h+f+G.J+K+L+ ",
" M+N+O+F.P+Q+R+ ",
" S+S+T+U+V+x+W+X+Y+S+ "};

Binary file not shown.

View file

@ -0,0 +1,29 @@
/* XPM */
static char * ellipse_xpm[] = {
"24 24 2 1",
" c None",
". c #204A88",
" ",
" ....... ",
" ........... ",
" ... ... ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" .. .. ",
" ... ... ",
" ........... ",
" ....... ",
" ",
" "};

Binary file not shown.

View file

@ -0,0 +1,138 @@
/* XPM */
static char * eraser_xpm[] = {
"24 24 111 2",
" c None",
". c #ED2F2F",
"+ c #EF2929",
"@ c #EF2C2B",
"# c #ED3030",
"$ c #EE2C2C",
"% c #EF6968",
"& c #EDD0CC",
"* c #EDD6D1",
"= c #EDCFCB",
"- c #EE5252",
"; c #EF3535",
"> c #EDCEC8",
", c #E4B6AE",
"' c #E1ABA2",
") c #E1ACA2",
"! c #EDCFCA",
"~ c #F28D8B",
"{ c #EF2D2D",
"] c #EF2E2E",
"^ c #EEA29F",
"/ c #EAC5BE",
"( c #E2ABA2",
"_ c #E6BBB3",
": c #EEC5C2",
"< c #F49491",
"[ c #F03F3E",
"} c #EE5857",
"| c #EDD1CC",
"1 c #E3AEA5",
"2 c #E2AAA1",
"3 c #E2ABA1",
"4 c #ECCEC9",
"5 c #F3A2A0",
"6 c #F59290",
"7 c #F05453",
"8 c #F02F2E",
"9 c #EFC3BF",
"0 c #E6BAB3",
"a c #E3A9A1",
"b c #EEC5C1",
"c c #F5908D",
"d c #F48C8A",
"e c #ED2E2E",
"f c #ED2C2C",
"g c #EF8B89",
"h c #EBC9C3",
"i c #E3A9A0",
"j c #E3AAA0",
"k c #EDCDC8",
"l c #F49F9D",
"m c #F58F8C",
"n c #F15F5E",
"o c #DB2B2B",
"p c #EF4242",
"q c #EDD1CB",
"r c #E5B0A8",
"s c #E4A8A0",
"t c #E7B9B2",
"u c #EFC4C0",
"v c #F68C8A",
"w c #F68A88",
"x c #EC302F",
"y c #F02E2E",
"z c #F0B3B0",
"A c #E9BEB6",
"B c #E5A89F",
"C c #E5A99F",
"D c #EDCEC9",
"E c #F49D9A",
"F c #F68B89",
"G c #F26463",
"H c #DC2B2B",
"I c #EE2A2A",
"J c #EDD5D1",
"K c #E6A8A1",
"L c #E5A79F",
"M c #E8B8B1",
"N c #F78886",
"O c #F68886",
"P c #EC3131",
"Q c #EDD2CD",
"R c #F59794",
"S c #F78785",
"T c #F46766",
"U c #E32C2C",
"V c #FB7575",
"W c #FA7776",
"X c #FA7877",
"Y c #FA7979",
"Z c #FA7A7A",
"` c #F97C7B",
" . c #F97D7C",
".. c #F97E7D",
"+. c #F97F7E",
"@. c #F88180",
"#. c #F88281",
"$. c #F88382",
"%. c #F88583",
"&. c #F78684",
"*. c #EC3636",
"=. c #FB7474",
"-. c #F56A68",
";. c #E52B2B",
">. c #EE2B2B",
",. c #F86363",
"'. c #F77D7C",
"). c #ED3636",
"!. c #A01B1B",
"~. c #ED2B2B",
"{. c #C82727",
" ",
" ",
" ",
" ",
" . + + + + + + + + + + @ # ",
" $ % & * * * * * * * * * = - ",
" ; > , ' ' ' ' ' ' ' ' ) ! ~ { ",
" ] ^ / ( ( ( ( ( ( ( ( ( _ : < [ ",
" } | 1 2 2 2 2 2 2 2 2 3 4 5 6 7 ",
" 8 9 0 a a a a a a a a a 0 b c d e ",
" f g h i i i i i i i i i j k l m n o ",
" p q r s s s s s s s s s t u v w x ",
" y z A B B B B B B B B B C D E F G H ",
" I J K L L L L L L L L L M 9 N O P ",
" + * * * * * * * * * * * Q R S T U ",
" + V W X Y Z ` ...+.@.#.$.%.&.*. ",
" + =.V W X Y Z ` ...+.@.#.$.-.;. ",
" >.,.=.V W X Y Z ` ...+.@.'.).!. ",
" ~.+ + + + + + + + + + + ~.{. ",
" ",
" ",
" ",
" ",
" "};

Binary file not shown.

View file

@ -0,0 +1,186 @@
/* XPM */
static char * fill_xpm[] = {
"24 24 159 2",
" c None",
". c #555753",
"+ c #585A56",
"@ c #595A57",
"# c #555653",
"$ c #5A5C59",
"% c #9FA09F",
"& c #A8A9A8",
"* c #595B57",
"= c #5C5F5B",
"- c #565854",
"; c #E3E3E2",
"> c #F2F2F2",
", c #F6F6F6",
"' c #676965",
") c #595B58",
"! c #626460",
"~ c #D2D3D2",
"{ c #DDDDDD",
"] c #CBCBCB",
"^ c #DFDFDF",
"/ c #CDCECD",
"( c #5A5C57",
"_ c #5F719F",
": c #596C9B",
"< c #586A9A",
"[ c #566485",
"} c #5C5F61",
"| c #B0B2B1",
"1 c #FAFAFA",
"2 c #F3F3F3",
"3 c #D1D2D1",
"4 c #CFCFCF",
"5 c #C9C9C9",
"6 c #F5F5F5",
"7 c #777976",
"8 c #5E709F",
"9 c #8B9FC4",
"0 c #A0BCE3",
"a c #8DB2E2",
"b c #6E92C2",
"c c #5C636E",
"d c #838684",
"e c #F4F4F4",
"f c #FDFDFD",
"g c #E9E9E9",
"h c #D6D6D6",
"i c #D3D3D3",
"j c #CCCCCC",
"k c #D7D7D7",
"l c #E0E0E0",
"m c #5B6D9C",
"n c #BACFEB",
"o c #A4C0E5",
"p c #677589",
"q c #666866",
"r c #D6D7D6",
"s c #FBFBFB",
"t c #F7F7F7",
"u c #FCFCFC",
"v c #EEEEEE",
"w c #858683",
"x c #575855",
"y c #838582",
"z c #D1D1D1",
"A c #D0D0D0",
"B c #C8C8C8",
"C c #F0F0F0",
"D c #838481",
"E c #C0D5F0",
"F c #A3BEE2",
"G c #585B5B",
"H c #E5E5E5",
"I c #ECECEC",
"J c #8D8E8B",
"K c #666865",
"L c #8A8B8A",
"M c #6E6F6D",
"N c #7E807D",
"O c #D4D4D4",
"P c #CDCDCD",
"Q c #EDEEED",
"R c #5D5F5B",
"S c #A6C3E9",
"T c #57637D",
"U c #90918E",
"V c #E4E4E4",
"W c #6D6E6B",
"X c #8B8C8B",
"Y c #BBBBBB",
"Z c #A3A4A3",
"` c #666864",
" . c #D8D8D8",
".. c #A8AAA7",
"+. c #A6C2E9",
"@. c #576999",
"#. c #5A5B58",
"$. c #E2E2E2",
"%. c #DCDCDC",
"&. c #EBEBEB",
"*. c #8D8E8C",
"=. c #6B6C6A",
"-. c #9FA09E",
";. c #747673",
">. c #898B88",
",. c #D5D5D5",
"'. c #A5C2E8",
"). c #7B7D7A",
"!. c #969895",
"~. c #727470",
"{. c #8C8D8B",
"]. c #E1E1E1",
"^. c #D9D9D9",
"/. c #D2D2D2",
"(. c #CACACA",
"_. c #BFC0BF",
":. c #5B5C58",
"<. c #DADADA",
"[. c #CECECE",
"}. c #5B5D58",
"|. c #A4C1E7",
"1. c #6D6F6C",
"2. c #F8F8F8",
"3. c #EFEFEF",
"4. c #FEFEFE",
"5. c #EAEAEA",
"6. c #E3E3E3",
"7. c #5A5C58",
"8. c #5D6F9E",
"9. c #A2B6D7",
"0. c #92ACD4",
"a. c #5A6D9D",
"b. c #595B56",
"c. c #C7C7C6",
"d. c #E7E7E7",
"e. c #EDEDED",
"f. c #C9CAC9",
"g. c #5F605C",
"h. c #5C6E9D",
"i. c #5B6D9D",
"j. c #646662",
"k. c #F9F9F9",
"l. c #797A77",
"m. c #5B5C59",
"n. c #B6B7B6",
"o. c #E8E8E8",
"p. c #A3A5A3",
"q. c #5D5F5C",
"r. c #F4F4F3",
"s. c #DBDBDB",
"t. c #CFCFCE",
"u. c #666763",
"v. c #535650",
"w. c #535652",
"x. c #838683",
"y. c #F6F7F6",
"z. c #E0E0DF",
"A. c #797A76",
"B. c #50554D",
" ",
" . . . . ",
" . . . . ",
" . + @ . ",
" # $ % & * . ",
" = - ; > , ' . ",
" ) ! ~ * { ] ^ / ( . ",
" _ : < < < [ } | 1 2 + 3 4 5 6 7 # ",
" 8 9 0 a b c d e f 2 g + h i j k l . ",
" m n o p q r s t u v w x y z A B C D ",
" < E F G H v ^ I s J K L M N O P z Q R ",
" < E S T U 6 h V > W X Y Z ` .z 5 g .. ",
" < E +.@.#.$.l %.&.*.=.-.;.>.%.,.P j e ! ",
" < E '.< ).t ,.$.I !.~.{.$.].^./.(.$._.* ",
" < E '.< :.,.$.<.g t s 2 I H { h [.P > }. ",
" < E |.< 1.2.O ].3.4.2.C g ].<.,.5.6.7. ",
" 8.9.0.a. b.c.H ^.d.6 u e e.H g 2.f.g. ",
" h.i. j.t O ^ e.u k.2 k.5.l.m. ",
" + n.o.k H e 4.k.p.R ",
" q.r.s.o.1 t.u.v. ",
" w.x.y.z.A.* ",
" - ( #.B. ",
" ",
" "};

Binary file not shown.

View file

@ -0,0 +1,29 @@
/* XPM */
static char * line_xpm[] = {
"24 24 2 1",
" c None",
". c #204A88",
" ",
" . ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" ... ",
" . ",
" "};

Binary file not shown.

View file

@ -0,0 +1,130 @@
/* XPM */
static char * pen_xpm[] = {
"24 24 103 2",
" c None",
". c #683907",
"+ c #764108",
"@ c #6B3B07",
"# c #673907",
"$ c #985B1B",
"% c #854A0A",
"& c #9C652C",
"* c #D48E45",
"= c #6B3D0D",
"- c #673908",
"; c #95632D",
"> c #E49745",
", c #996731",
"' c #885C2D",
") c #E79137",
"! c #B67836",
"~ c #71471B",
"{ c #7B5226",
"] c #D48839",
"^ c #BB6C19",
"/ c #8C653A",
"( c #693A09",
"_ c #764D1F",
": c #C1803B",
"< c #C97113",
"[ c #956430",
"} c #7C5021",
"| c #734719",
"1 c #AF763C",
"2 c #DB7C18",
"3 c #985916",
"4 c #876239",
"5 c #6A3B09",
"6 c #6E4213",
"7 c #9B6D3C",
"8 c #E8851D",
"9 c #A45B0D",
"0 c #785631",
"a c #86541E",
"b c #837868",
"c c #897862",
"d c #CB7B27",
"e c #B6640E",
"f c #7D5223",
"g c #976632",
"h c #8A8C88",
"i c #B2B3B1",
"j c #AEAFAC",
"k c #8A8A83",
"l c #845B2E",
"m c #966A3B",
"n c #70400D",
"o c #92948F",
"p c #F4F4F4",
"q c #E7E7E7",
"r c #ADADAC",
"s c #898982",
"t c #845A2B",
"u c #6D3C07",
"v c #8B8E89",
"w c #C8C8C7",
"x c #F9F9F9",
"y c #C6C6C6",
"z c #A3A3A3",
"A c #9FA19D",
"B c #868073",
"C c #8B8D88",
"D c #F6F6F6",
"E c #E0E0E0",
"F c #AFAFAF",
"G c #A6A7A5",
"H c #8C8E89",
"I c #898D88",
"J c #C1C2C0",
"K c #F8F8F8",
"L c #BBBBBB",
"M c #9E9F9D",
"N c #8B8C88",
"O c #1E1E1E",
"P c #3E3E3D",
"Q c #595958",
"R c #A2A2A2",
"S c #999A98",
"T c #161616",
"U c #757575",
"V c #848484",
"W c #3F3F3F",
"X c #202020",
"Y c #6E706B",
"Z c #000000",
"` c #1A1A1A",
" . c #929292",
".. c #484848",
"+. c #242424",
"@. c #101010",
"#. c #0D0D0D",
"$. c #2B2B2B",
"%. c #3B3B3B",
"&. c #303030",
"*. c #0A0A0A",
"=. c #141414",
"-. c #0E0E0E",
" ",
" . ",
" . + @ ",
" # $ % ",
" # & * = ",
" - ; > , # ",
" # ' ) ! ~ ",
" # { ] ^ / ( ",
" # _ : < [ } ",
" # | 1 2 3 4 5 ",
" 6 7 8 9 0 a @ ",
" b c d e f g @ ",
" h i j k l m n ",
" o p q r s t u ",
" v w x y z A B ",
" C D E F G H ",
" I J K L M N ",
" O P Q R S C ",
" T U V W X Y ",
" Z ` .z ..+.@. ",
" Z Z #.$.%.&.T ",
" Z Z Z *.=.-.Z ",
" Z Z Z Z Z Z Z ",
" "};

Some files were not shown because too many files have changed in this diff Show more