master fd969ace830 1/5: Merge from origin/emacs-31
Eli Zaretskii <[email protected]> Sat, 27 Jun 2026 06:31:06 -0400 (EDT)
| Newsgroups | gmane.emacs.diffs |
|---|---|
| Message-ID | <[email protected]> |
branch: master commit fd969ace830e4dedff4011d1ba84e766857632e5 Merge: 6ef0e6ba1a7 e486f2d975a Author: Eli Zaretskii <[email protected]> Commit: Eli Zaretskii <[email protected]> Merge from origin/emacs-31 e486f2d975a Support tramp-rpc in filenotify-tests.el f6a244333dd ; * etc/NEWS: Presentational fixes and improvements. c19e9ddd486 ; Improve documentation of 'emacs-lock' features 749ce42049b CC Mode: Set parse-sexp-lookup-properties for every mode def15c1b973 Disable DMABUF and Compositing for xwidget 2c5b4911b39 ; * doc/lispref/commands.texi (Interactive Codes): More e... ea87a99b843 ; Fix recent improvements in docs of splitting and mergin... 0ec6a3fd44d Fix failure code in 'run-hook-query-error-with-timeout' 72b8d88171a Use default-value in project--value-in-dir b34952ee947 etags-regen--maybe-generate: No error when no project found 30fc250a262 ; * doc/lispref/frames.texi (Deleting Frames): Fix typo i... 8679bdf0819 Mark ChangeLog entry as tiny change 070a3a356fc VC revert: When un-adding, clear vc-backend property c8a86c15610 ; make change-history-commit 884d7a198c9 Document new option 'delete-frame-choose-selected' (Bug#8... f0bfa330394 Document 'split-frame' and 'merge-frames' in Elisp manual 0d67e76b94e Eglot: release version 1.24 f52457d17ef Jsonrpc: release version 1.0.29 4f6b6f462c1 jsonrpc-shutdown: Ensure we wait whole timeout & increase... # Conflicts: # etc/NEWS --- ChangeLog.5 | 741 +++++++++++++++++++++++++++++++++++++++++- doc/lispref/commands.texi | 8 +- doc/lispref/elisp.texi | 1 + doc/lispref/frames.texi | 94 ++++++ doc/lispref/windows.texi | 24 +- etc/EGLOT-NEWS | 2 +- etc/NEWS.31 | 6 +- lisp/emacs-lock.el | 42 ++- lisp/jsonrpc.el | 10 +- lisp/progmodes/cc-mode.el | 28 +- lisp/progmodes/eglot.el | 4 +- lisp/progmodes/etags-regen.el | 5 +- lisp/progmodes/project.el | 2 +- lisp/subr.el | 2 +- lisp/vc/vc.el | 12 +- lisp/window-x.el | 6 +- src/xterm.c | 7 + test/lisp/filenotify-tests.el | 46 +-- 18 files changed, 953 insertions(+), 87 deletions(-) diff --git a/ChangeLog.5 b/ChangeLog.5 index fbf23263ad3..dc4ae192870 100644 --- a/ChangeLog.5 +++ b/ChangeLog.5 @@ -1,3 +1,742 @@ +2026-06-24 Martin Rudalics <[email protected]> + + Document new option 'delete-frame-choose-selected' (Bug#80397) + + * doc/lispref/frames.texi (Deleting Frames): Document new option + 'delete-frame-choose-selected'. + * etc/NEWS: Mark 'delete-frame-choose-selected', 'split-frame' + and 'merge-frames' as documented. + +2026-06-23 Martin Rudalics <[email protected]> + + Document 'split-frame' and 'merge-frames' in Elisp manual + + * doc/lispref/frames.texi (Splitting and Merging Frames): New + section. + * doc/lispref/elisp.texi (Top): Add new section. + * doc/lispref/windows.texi (Basic Windows): Explain terms + 'layout' and 'identity' of windows. + (Window Configurations): Explain that window identities are + preserved by window configurations and get lost with window + states. + +2026-06-23 Sean Whitton <[email protected]> + + Eglot: release version 1.24 + + * lisp/progmodes/eglot.el (Version): Bump to 1.24. + + * etc/EGLOT-NEWS: Announce new version. + +2026-06-23 Sean Whitton <[email protected]> + + Jsonrpc: release version 1.0.29 + + (Version): Bump to 1.0.29. + +2026-06-23 João Távora <[email protected]> + + jsonrpc-shutdown: Ensure we wait whole timeout & increase timeout + + * lisp/jsonrpc.el (jsonrpc-shutdown): Ensure that we wait for + the whole timeout and increase the timeout to 300ms (bug#80140). + +2026-06-23 Sean Whitton <[email protected]> + + vc-hg-state-slow: Run from the repository root + + * lisp/vc/vc-hg.el (vc-hg-state-slow): Run command from the + repository root. This fixes cases where a whole subdirectory no + longer exists. We should return 'missing' for any files within + it. + +2026-06-23 Sean Whitton <[email protected]> + + vc-dir-delete-file: Call vc-delete-file on FILESET-ONLY-FILES + + * lisp/vc/vc-dir.el (vc-dir-delete-file): Call vc-delete-file on + FILESET-ONLY-FILES. See bug#80998. + +2026-06-23 Stéphane Marks <[email protected]> + + Fix 'truncate-string-pixelwise' to restore the window buffer + + * lisp/emacs-lisp/subr-x.el (truncate-string-pixelwise): Safely + save/restore the selected window's buffer, and not the reference + or current buffers. Guard dedicated windows. Remove the work + buffer from the window's buffer list. Bind + 'buffer-list-update-hook' 'window-scroll-functions' + 'window-configuration-change-hook' to nil around the window + buffer swap. (Bug#81262; see also bug#80244.) + +2026-06-23 Stéphane Marks <[email protected]> + + Restore progress-reporter suffix as update-text (bug#81134) + + * lisp/subr.el (progress-reporter-update-functions): Update + docstring. + (progress-reporter-update): New UPDATE-TEXT argument replacing + previously deleted SUFFIX. + (make-progress-reporter): Document suffix slot available for + reuse. + (progress-reporter-force-update): Update function signature. + (progress-reporter-echo-area): Restore the text argument and + echo it. + (progress-reporter-do-update): Update function signature. Treat + UPDATE-TEXT as ephemeral and do not persist it in the reporter + instance. Update the hook. + (progress-reporter-done): Update the hook. + * lisp/system-taskbar.el + (system-taskbar--progress-reporter-update): Update function + signature. + * lisp/net/tramp.el (tramp-progress-reporter-update): Update + function signature. + * doc/lispref/display.texi (Progress): Update documentation. + +2026-06-22 Juri Linkov <[email protected]> + + Rename recently added after-delete-frame-select-mru-frame + + Rename 'after-delete-frame-select-mru-frame' to + 'delete-frame-choose-selected' for symmetry with + 'delete-window-choose-selected' with the same + default value 'mru' (bug#80397). + + * lisp/cus-start.el: Add a choice like in + 'delete-window-choose-selected'. + + * src/frame.c (delete_frame): Compare delete_frame_choose_selected + with Qmru. + (syms_of_frame): Define symbol Qmru. + Use DEFVAR_LISP for 'delete-frame-choose-selected' + and set the default value to Qmru. + +2026-06-22 duli <[email protected]> (tiny change) + + Eglot: decode unhexed file URI paths as UTF-8 (bug#79897) + + 'url-unhex-string' only decodes %XX sequences and returns a + unibyte string; it does not interpret the resulting octets as + UTF-8. Its docstring says that the resulting string generally + requires decoding with an appropriate coding system. + + LSP messages are UTF-8, and document URIs are transferred as URI + strings. When recovering the file path from the URI, decode the + unhexed octets as UTF-8 instead of using them directly as an + Emacs string. This should fix bug#79897. + + + * lisp/progmodes/eglot.el (eglot-uri-to-path): Decode the + result of 'url-unhex-string' with 'utf-8-unix'. + +2026-06-22 Michael Albinus <[email protected]> + + Sync with Tramp 2.8.2 + + * lisp/net/tramp-message.el (tramp-trace-add-package): New defun. + + * lisp/net/tramp-smb.el (tramp-smb-maybe-open-connection): + Remove superfluous comment. + + * lisp/net/tramp.el (tramp-restricted-shell-hosts-alist): + Use `file-name-sans-extension'. + (tramp-completion-handle-expand-file-name): + Apply `tramp-drop-volume-letter' consequently. + + * test/lisp/net/tramp-tests.el + (tramp--test-ignore-make-symbolic-link-error): Use `file-error' + instead of `remote-file-error' + (tramp--test-instrument-test-case-p): Fix doxstring. + (tramp-test10-write-region-other-file-name-handler) + (tramp-test49-external-backend-function): Adapt tests. + +2026-06-22 Sean Whitton <[email protected]> + + Rename variable to macroexp-enable-preserve-posification + + * lisp/emacs-lisp/macroexp.el + (macroexp-enable-pos-preservation): Rename ... + (macroexp-enable-preserve-posification): ... to this. All uses + changes. + +2026-06-22 Eshel Yaron <[email protected]> + + New variable 'macroexp-enable-pos-preservation' (bug#79599) + + * lisp/emacs-lisp/macroexp.el + (macroexp-enable-pos-preservation): New variable. + (macroexp-preserve-posification): Respect it. + * lisp/emacs-lisp/elisp-scope.el (elisp-scope-1): Use it. + * test/lisp/emacs-lisp/macroexp-tests.el + (macroexp--test-macroexp-enable-pos-preservation): New test. + +2026-06-21 milkvetch <[email protected]> (tiny change) + + Avoid infinite loop in some Dired marking commands + + These commands use dired-get-filename inside a dired-mark-if form; + when the bottom subdirectory is hidden, dired-get-filename makes + it so the dired-mark-if loop never reaches the end of the buffer. + This is fixed by skipping hidden subdirectories (bug#80964). + + * lisp/dired.el (dired-mark-files-regexp) + (dired-mark-files-containing-regexp): + * lisp/dired-x.el (dired-mark-unmarked-files): + * lisp/dired-aux.el (dired-compare-directories): Skip hidden subdirectories. + +2026-06-20 Eli Zaretskii <[email protected]> + + Resurrect effect of 2nd arg t in 'format-mode-line' + + * src/xdisp.c (Fformat_mode_line): Resurrect support for FACE = t. + Doc fix. (Bug#81271) + + * doc/lispref/modes.texi (Emulating Mode Line): Fix documentation + of 'format-mode-line' when 2nd argument is t. + + * test/src/xdisp-tests.el (xdisp-test-format-mode-line): New test. + +2026-06-20 Eli Zaretskii <[email protected]> + + Fix 'format-mode-line' for integer second argument + + * src/xdisp.c (Fformat_mode_line): Test for integers with + INTEGERP. (Bug#81272) + +2026-06-20 Stéphane Marks <[email protected]> + + markdown-ts-mode: fix code block and table overlays (bug#81195) + + Fix to eliminate erroneous multiple code block overlays. Fixes + to deal with 'treesit' fontification catching up to + user-initiated code block range expansions; e.g., inserting, + yanking. Set overlay properties only once. + + * lisp/textmodes/markdown-ts-mode.el + (markdown-ts--fontify-code-block): Use 'overlays-in' not + 'overlays-at'. Use only overlays, eliminate markers. + (markdown-ts--enable-code-block-in-context-mode): Add 'sit-for' + to allow 'treesit' to catch up (pending input should not be an + issue). + (markdown-ts--run-command-in-code-block): Use overlays instead + of 'get-char-property'. + (markdown-ts--code-block-in-context-mode-update-ov): Use + overlays instead of 'get-char-property'. Set overlay properties + only once. + (markdown-ts--in-table-mode-update-ov): Set overlay properties + only once. + +2026-06-20 Stéphane Marks <[email protected]> + + markdown-ts-mode: Fix computing code block current region (bug#81219) + + This ensures that commands such as 'comment-or-uncomment-region' + operate on the correct region in the work buffer. + + * lisp/textmodes/markdown-ts-mode.el (markdown-ts--run-command-in-code-block): + Fix adj-region-beg and adj-region-end. + +2026-06-20 Oleksandr Makhmudov <[email protected]> (tiny change) + + Eglot: add 'nu-ts-mode' as a nushell major mode + + 'nu-ts-mode' is an alternative tree-sitter-based major mode for + nushell. This commit adds it to the list of major modes that run + the nushell language server. + * lisp/progmodes/eglot.el (eglot-server-programs): Add 'nu-ts-mode'. + (Bug#81206) + +2026-06-20 समीर सिंह Sameer Singh <[email protected]> + + Fix c-ts-mode bsd-style indentation of union bodies (bug#81255) + + * lisp/progmodes/c-ts-mode.el (c-ts-mode--simple-indent-rules): Add + "union_specifier" to the parent-is regexp. + + * test/lisp/progmodes/c-ts-mode-resources/indent-bsd.erts: New test. + +2026-06-20 Yuan Fu <[email protected]> + + Fix markdown-inline incremental parsing issue (bug#81019) + + * lisp/treesit.el: + (treesit--embed-languages-need-full-parse): New variable. + (treesit--set-embed-ranges): Reparse full range if the langauge + needs it. + +2026-06-19 Stephen Berman <[email protected]> + + Avoid an unusual error when visiting a directory in Dired + + * lisp/dired.el (dired-internal-noselect): Unset + 'dired--ls-error-buffer' before calling 'dired-readin'. This is a + safeguard to prevent an error when visiting a directory in Dired, + which apparently happens when the variable somehow gets set even + though 'ls' has not emitted an error message (bug#80499, Message #218). + + * test/lisp/dired-tests.el (dired-test-set-dired--ls-error-buffer): New test. + +2026-06-19 Dmitry Gutov <[email protected]> + + Fix "diff-apply-buffer applies to the wrong file" + + * lisp/vc/diff-mode.el (diff-find-file-name): Inhibit the "drop + dir" behavior in diffs produced by Git and Hg (bug#81210). + Except for the virtual subdirectories like a/b/etc, which is + moved and happens for all such diffs. Tighten the check for + such virtual directory names, though (characters are the chars + used by the configuration option 'diff.mnemonicPrefix'). + (diff-setup-buffer-type): Recognize Hg diffs where only one + revision is specified, too. + + * test/lisp/vc/diff-mode-tests.el + (diff-mode-test-setup-buffer-type) + (diff-mode-test-find-file-name-create): New tests. + +2026-06-18 Martin Rudalics <[email protected]> + + Fix thinko in 'set-frame-size-and-position' (Bug#81193) + + * lisp/frame.el (set-frame-size-and-position): Do not subtract + scoll bar, fringes and internal border sizes twice (Bug#81193). + +2026-06-17 JD Smith <[email protected]> + + Correct default native-comp tests + + Supersedes 5bd9d1f7df3. + + * configure.ac: Store `with_native_compilation' to correctly test + whether to use the soft or hard (error) checks, as these set the + variable by side-effect. + +2026-06-16 JD Smith <[email protected]> + + Revert "Fix the Android build" + + This reverts commit 916572f6e0ab3e36f7098b6d9b5ff19f87240da4, in favor + of another fix. + +2026-06-16 Stefan Monnier <[email protected]> + + (comint--intersect-regions): Fix bug#81243 + + * lisp/comint.el (comint--intersect-regions): Fix syntax-propertization. + +2026-06-14 Kyle Meyer <[email protected]> + + Update to Org 9.8.6 + +2026-06-13 Stefan Monnier <[email protected]> + + src/keyboard.c (Finsert_special_event): Don't ignore unknown events + +2026-06-13 João Távora <[email protected]> + + Eglot: restore compatibility to Emacs 26.3 + + Github-reference: https://github.com/joaotavora/eglot/discussions/1591 + + Can't use setf plist-get. + + * lisp/progmodes/eglot.el (eglot--async-request): Use cl-getf. + +2026-06-12 Martin Rudalics <[email protected]> + + Fix behavior of 'temp-buffer-resize-mode' (Bug#81207) + + * lisp/help.el (temp-buffer-resize-mode): Fix doc-string - a + window can be resized now even if it has shown another buffer in + between (Bug#81207). + (resize-temp-buffer-window): Resize window if and only if its + buffer is the buffer it has shown initially (Bug#81207). + +2026-06-11 Xiyue Deng <[email protected]> + + Restore public interfaces for accessing built-in package info + + These functions were removed in ab36f5892203e4b1f59da7c995e0f1fa0a81d1b6 + during the reorganization of package.el as part of Bug#80079. + + Also add a simple test for these functions to avoid future regressions. + + See also discussion at + https://lists.gnu.org/archive/html/emacs-devel/2026-06/msg00149.html. + + * lisp/emacs-lisp/package.el (package-versioned-builtin-packages, + package-builtin-package-version): Restore. + * lisp/emacs-lisp/package-activate.el: Remove lingering comments. + * test/lisp/emacs-lisp/package-tests.el + (package-test-builtin-package-info): Add. + +2026-06-11 Philip Kaludercic <[email protected]> + + Allow uninstalling dependency with multiple installations + + * lisp/emacs-lisp/package.el (package--dependency-p): Add new + function to check if a package is a dependency. + (package-delete): Prompt user if it is OK to uninstall a package + that serves as a dependency, but where the package has multiple + installations. This also means that we don't de-select a + selected dependency if there are multiple installations. + + (Bug#81082) + +2026-06-11 Andrea Alberti <[email protected]> + + Fix memcpy size in 'merge_faces' + + * src/xfaces.c (merge_faces): Use 'sizeof lface_attrs' instead of + LFACE_VECTOR_SIZE as the 'memcpy' size argument. (Bug#81224) + +2026-06-11 Sean Whitton <[email protected]> + + Fix fontification in short unintegrated changes logs (bug#81215) + + Do not merge to master. + + * lisp/vc/vc.el (vc--shortlog): New variable. + (vc-print-log-internal): + * lisp/vc/vc-git.el (vc-git-log-view-mode): + * lisp/vc/vc-hg.el (vc-hg-log-view-mode): Use it. + +2026-06-11 Sean Whitton <[email protected]> + + * lisp/vc/vc.el (vc-log-remote-unintegrated): Set vc-log-view-type. + + Do not merge to master. + +2026-06-11 Sean Whitton <[email protected]> + + vc-hg-trunk-or-topic-p, vc-hg-topic-outgoing-base: Fix ret vals + + * lisp/vc/vc-hg.el (vc-hg-trunk-or-topic-p) + (vc-hg-topic-outgoing-base): Fix return values. + +2026-06-11 Stéphane Marks <[email protected]> + + markdown-ts-mode: Sanitize work-buffer pool + + This a workaround for the release branch due to the work-buffer + pool being insufficiently sanitized. + * lisp/textmodes/markdown-ts-mode.el + (markdown-ts--run-command-in-code-block): Reset 'mark-active'. + Do not merge to master. (Bug#81218) (Bug#81111) + +2026-06-10 Michael Albinus <[email protected]> + + Extend Tramp external operations + + * doc/misc/tramp.texi (New operations): Extend. + + * lisp/net/tramp.el (tramp-file-name-for-operation-external): + Extend docstring. + (tramp-file-name-for-operation): Make more use of + `tramp-file-name-for-operation-external'. + (tramp-add-external-operation): Support ARG-TYPE `tramp-file-name'. + + * test/lisp/net/tramp-tests.el (tramp-test49-external-backend-function): + Extend test. + +2026-06-10 Rahul Martim Juliato <[email protected]> + + markdown-ts-mode: fix duplicated menu entries (bug#81201) + + * lisp/textmodes/markdown-ts-mode.el + (markdown-ts-code-block-in-context-mode-map) + (markdown-ts-in-table-mode-map): Remove redundant :parent. + +2026-06-10 Sean Whitton <[email protected]> + + vc-dir-recompute-file-state: Change directory to DEF-DIR + + * lisp/vc/vc-dir.el (vc-dir-recompute-file-state): Change + directory to DEF-DIR before calling into the backend. + * test/lisp/vc/vc-tests/vc-test-misc.el + (vc-test-vc-dir-on-symlink): Test that the file has the right + state. + +2026-06-10 Pip Cet <[email protected]> + + Restore "interactive" when describing functions + + * lisp/help-fns.el (help-fns-function-description-header): Only + substitute "an" for "a", not for a longer BEG (bug#81203). + +2026-06-09 Stéphane Marks <[email protected]> + + Inhibit follow-link via `mouse-1' on the tab-bar (bug#81036) + + Prevent 'tab-bar' mouse clicks from being directed to the + current buffer, for example, in `dired-mode'. This prevents the + side effect that the clicked tab is erroneously closed. + + * lisp/mouse.el (mouse-on-link-p): Explicitly exempt clicks in + 'tab-bar' if there is a 'follow-link' property. + +2026-06-09 Juri Linkov <[email protected]> + + Fix the tab close button appearance when clicking (bug#76394) + + * src/xdisp.c (handle_tab_bar_click): Use the variable 'close_p' + to show mouse face as sunken/raised only when clicked + on the close button. Clicking elsewhere on the tab should not + change the close button's appearance using DRAW_MOUSE_FACE. + +2026-06-09 Peter Oliver <[email protected]> + + Install images with info documentation (bug#81204) + + * Makefile.in (info_misc): Install all files with .png and .jpg + extensions into the info directory (bug#81204). + +2026-06-09 Sean Whitton <[email protected]> + + vc-dir-recompute-file-state: Return nil state for nonexistent file + + * lisp/vc/vc-dir.el (vc-dir-recompute-file-state): Return nil + state for nonexistent file (bug#81191). + +2026-06-09 Sean Whitton <[email protected]> + + vc-test-vc-dir-on-symlink: Use vc-test--with-author-identity + + * test/lisp/vc/vc-tests/vc-tests.el (vc-hg-global-switches): + Declare. + (vc-tests-helpers): Require. + (vc-test--create-repo-function, vc-test--with-author-identity): + Move these from here ... + * test/lisp/vc/vc-tests/resources/vc-tests-helpers.el + (vc-test--create-repo-function, vc-test--with-author-identity): + ... to here. + (vc-hg-global-switches): + * test/lisp/vc/vc-tests/vc-test-misc.el (vc-hg-global-switches): + Declare. + (vc-dir, log-edit, vc-tests-helpers): Require. + (vc-test-vc-dir-on-symlink): Use vc-test--with-author-identity + and vc-test--create-repo-function. + +2026-06-08 Stéphane Marks <[email protected]> + + Fix M-RET in 'markdown-ts-in-table-mode-map' + + * lisp/textmodes/markdown-ts-mode.el + (markdown-ts-in-table-mode-map): Map 'M-RET' to + 'markdown-ts-table-insert-row-below' (bug#81196). + +2026-06-08 Sean Whitton <[email protected]> + + Fix recurrence of bug#80803 after changes in bug#80967 + + * lisp/vc/vc-dir.el (vc-dir-resynch-file): Pass only truenames + to vc-dir-recompute-file-state. + * test/lisp/vc/vc-tests/vc-test-misc.el (vc-git): Require. + (vc-test-vc-dir-on-symlink): New test. + +2026-06-08 Michael Albinus <[email protected]> + + Ensure Tramp backward compatibility + + * lisp/net/tramp.el (tramp-local-environment-variable-p): + Use `tramp-compat-funcall'. + +2026-06-07 Juri Linkov <[email protected]> + + Read a key sequence instead of a single key in 'map-y-or-n-p' + + This is necessary to correctly read keys like 'M-~' + used by 'save-some-buffers' that is two keys 'ESC ~' + on a tty. + + * doc/lispref/minibuf.texi (Multiple Queries): + Index 'y-or-n-p-use-read-key' for 'map-y-or-n-p'. + Mention using a key sequence instead of single keys. + + * lisp/emacs-lisp/map-ynp.el (map-y-or-n-p): + In the 'y-or-n-p-use-read-key' cond-branch, + use 'read-key-sequence-vector' instead of 'read-key'. + In the default cond-branch, use 'this-command-keys-vector' + instead of 'last-command-event'. In both cond-branches + use 'key-description' instead of 'single-key-description' + (bug#81168). + Instead of '(eq def nil)' check if chars are either nil + or an empty vector in noninteractive mode (bug#67836). + + * test/lisp/emacs-lisp/map-ynp-tests.el (test-map-ynp-kmacro): + Test separately nil/non-nil 'y-or-n-p-use-read-key'. + (test-map-ynp-keys): New test for complete coverage of + 'map-y-or-n-p'. + +2026-06-07 Eli Zaretskii <[email protected]> + + Avoid recursive error in debug-early in batch mode + + * lisp/emacs-lisp/debug-early.el (cl--generic-compiler): Defvar it. + (debug-early-backtrace): Bind it so as to avoid loading + byte-compiler; see the value of the variable in cl-generic.el. + Do not merge to master. (Bug#80916) + +2026-06-07 Eli Zaretskii <[email protected]> + + Remove from CC Mode code that modifies 'major-mode-remap-defaults' + + * lisp/progmodes/cc-mode.el: Remove code that adds to + 'major-mode-remap-defaults', as enabling and disabling tree-sitter + based modes now goes through 'treesit-enabled-modes'. + +2026-06-06 Pip Cet <[email protected]> + + Assert we don't double-free timers (bug#81108) + + * src/atimer.c (cancel_atimer): Assert that we found the timer. + +2026-06-06 Pip Cet <[email protected]> + + Don't cancel random timers in x_get_foreign_selection (bug#81108) + + * src/pgtkselect.c (pgtk_display_selection_waiting_message): + (pgtk_cancel_atimer): + (pgtk_get_foreign_selection): + * 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 + the timer twice. + +2026-06-06 Pip Cet <[email protected]> + + Fix use-after-free in Ffuncall_with_delayed_message (bug#81108) + + * src/eval.c (with_delayed_message_display): + (with_delayed_message_cancel): + (Ffuncall_with_delayed_message): Use new temporary data + structure. Cancel timer at most once. + +2026-06-06 Andrea Alberti <[email protected]> + + Document 'margin' face as base for margin display strings (Bug#80693) + + * doc/lispref/display.texi (Displaying Faces): Note that the + underlying-text rule does not apply to strings displayed in the + display margins, and reword the margin-face bullet to describe + 'margin' as the base. + (Basic Faces): Note that the 'margin' face also provides the base + attributes for strings displayed in the margins. + (Display Margins): Drop a sentence that restated the preceding one + about unspecified attributes inheriting from 'margin'. + * etc/NEWS: Document the change for margin strings. + + Suggested by F. Jason Park <[email protected]>. + +2026-06-06 Augusto Stoffel <[email protected]> + + Improve prompting for mail sending by by 'report-emacs-bug' + + * lisp/mail/emacsbug.el (report-emacs-bug-hook): Don't ask about + mail sending options if 'message-server-alist' is set. (Bug#81176) + +2026-06-06 Po Lu <[email protected]> + + Fix the Android build + + * configure.ac: Don't test for libgccjit.h if a preceding test + have already concluded that native compilation is unavailable. + +2026-06-05 Andrea Alberti <[email protected]> + + Don't resurrect invisible child frames when rebuilding parent links + + On the NS port, -[EmacsWindow setParentChildRelationships] reattaches + every child frame to its parent via -addChildWindow:ordered:, which also + orders the child window onto the screen. This runs whenever the + parent/child relationships are rebuilt, e.g., when entering non-native + fullscreen, which allocates a fresh EmacsWindow whose initializer + rebuilds the relationships. A child frame that Emacs had made invisible + (e.g. a corfu/company completion popup) was thereby brought back as a + stale, non-responsive child frame. Emacs never repaints to clear it + because frame_redisplay_p trusts FRAME_VISIBLE_P on the NS port and + avoids dealing with the child frame when it is marked as invisible. + + Native fullscreen does not trigger this: -toggleFullScreen: hands off to + AppKit without allocating a new window, so the rebuild never runs. + + A hidden child frame is normally detached from its parent already: Emacs + hides it with -orderOut: (ns_make_frame_invisible), which per Apple's + documentation removes a child window from its parent before ordering it + out. The fix is therefore not to re-attach a child while it is + invisible; ns_make_frame_visible already reinstates the parent/child link + when the frame is shown again. + + * src/nsterm.m ([EmacsWindow setParentChildRelationships]): Only + re-attach a child window when the frame is marked visible. + (ns_make_frame_visible): Explain, with a reference to Apple's + documentation, why the parent/child link must be reinstated on show. + +2026-06-05 Stéphane Marks <[email protected]> + + Improve progress-reporter state to remove hard coded length (bug#80988) + + Remove hard-coded state range, now a monotonically increasing + integer. + + * lisp/subr.el (progress-reporter-update-functions): Update + docstring. + (progress-reporter-echo-area): Use + 'progress-reporter--pulse-characters' length. + (progress-reporter-do-update): Increase 'state' by 1 each pass. + * + lisp/system-taskbar.el (system-taskbar--progress-reporter-update): + Make steps independent of 'progress-reporter-echo-area' steps. + +2026-06-05 Arash Esbati <[email protected]> + + (tex-main-file): Add forgotten safety predicate (bug#81099) + + That variable is commonly set file-locally. + + * lisp/textmodes/tex-mode.el (tex-main-file): Add safety predicate. + +2026-06-05 Al Haji-Ali <[email protected]> + + Fix bug in latexenc when AUCTeX is loaded + + * lisp/international/latexenc.el + (latexenc-find-file-coding-system): Set file name correctly when + `TeX-master' is a string. (Bug#81099) + +2026-06-05 Stefan Monnier <[email protected]> + + paren.el: Fix part of bug#81035 + + * lisp/paren.el (show-paren--default): Syntax-propertize before narrowing. + +2026-06-05 Michael Albinus <[email protected]> + + Adapt Tramp version + + * lisp/net/trampver.el (customize-package-emacs-version-alist): + Add Tramp version integrated in Emacs 31.1. + + * doc/misc/trampver.texi: + * lisp/net/trampver.el (tramp-version): Adapt Tramp versions. + +2026-06-05 Augusto Stoffel <[email protected]> + + Check buffer-local value in tramp-local-environment-variable-p + + * lisp/net/tramp.el (tramp-local-environment-variable-p): Do it. + +2026-06-05 Sean Whitton <[email protected]> + + Bump Emacs version to 31.0.90 + + * README: + * configure.ac: + * exec/configure.ac: + * java/AndroidManifest.xml.in (Version-code): + * msdos/sed2v2.inp: + * nt/README.W32: Bump Emacs version to 31.0.90. + 2026-06-04 Stefan Monnier <[email protected]> message.el: Fix part of bug#81035 @@ -65759,7 +66498,7 @@ This file records repository revisions from commit 1cda0967b4d3c815fc610794ad6a8fc2b913a3c5 (exclusive) to -commit 5e3e1a5bb23b5e7813a60c2b121b1393ff6ca86f (inclusive). +commit 884d7a198c9eff1cf0a9cc6e2a021f7d82cb57c6 (inclusive). See ChangeLog.4 for earlier changes. ;; Local Variables: diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 8614ee53f87..0e993f45b48 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -393,9 +393,11 @@ many Emacs primitives will signal an error if a command attempts to modify text of a read-only buffer, even if the command's interactive spec does not include @samp{*}. So this character is for when you want to forcibly signal an error even if the command's implementation doesn't -invoke any primitives which modify the buffer. For example, a command -that binds @code{inhibit-read-only} non-@code{nil} (because it affects -more than just read-only buffers), or a command which, depending on the +invoke any primitives which modify the buffer, or if you want to avoid +processing or side effects of a command that will fail later due to +buffer modifications. For example, a command that binds +@code{inhibit-read-only} non-@code{nil} (because it affects more than +just read-only buffers), or a command which, depending on the conditions, might end up not modifying the buffer, but you want it to signal this error anyway. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index eb697c1da38..2944b598178 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -1137,6 +1137,7 @@ Frames * Frame Titles:: Automatic updating of frame titles. * Deleting Frames:: Frames last until explicitly deleted. * Finding All Frames:: How to examine all existing frames. +* Splitting and Merging Frames:: Transferring window layouts between frames. * Minibuffers and Frames:: How a frame finds the minibuffer to use. * Input Focus:: Specifying the selected frame. * Visibility of Frames:: Frames may be visible or invisible, or icons. diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 8535cb6ec08..945cb4d0f32 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -151,6 +151,7 @@ unique id. * Frame Titles:: Automatic updating of frame titles. * Deleting Frames:: Frames last until explicitly deleted. * Finding All Frames:: How to examine all existing frames. +* Splitting and Merging Frames:: Transferring window layouts between frames. * Minibuffers and Frames:: How a frame finds the minibuffer to use. * Input Focus:: Specifying the selected frame. * Visibility of Frames:: Frames may be visible or invisible, or icons. @@ -2990,6 +2991,18 @@ for example, deleting a frame during a drag-and-drop operation the @code{delete-frame} call in a @code{condition-case} form. @end defun +When the selected frame gets deleted Emacs has to select another frame +instead. The following option lets you choose which one. + +@defopt delete-frame-choose-selected +This variable specifies which frame to select after deleting the +selected frame. The default value @code{mru} means @code{delete-frame} +should try to select the most recently used frame as returned by +@code{get-mru-frame} (@pxref{Input Focus}) on the same terminal. The +value @code{nil} means that @code{delete-frame} will try to select the +oldest visible frame on the same terminal as the deleted one. +@end defopt + @node Finding All Frames @section Finding All Frames @@ -3076,6 +3089,87 @@ criteria, and should return non-@code{nil} if the frame satisfies the criteria. @end defun + +@node Splitting and Merging Frames +@section Splitting and Merging Frames +@cindex splitting a frame +@cindex merging two frames +@cindex transferring window layouts to frames + +The following two functions are useful to transfer parts of the window +layout (@pxref{Basic Windows}) of one frame to two separate frames and +to merge the window layouts of two separate frames into one frame. + +@deffn Command split-frame &optional frame arg +This command transfers some windows of the specified @var{frame} to a +new frame and subsequently deletes them on @var{frame}. @var{frame} +must be a live frame and defaults to the selected frame. @var{arg} +specifies the number of windows to transfer and defaults to 1. +Interactively, @var{arg} is the prefix argument. + +In a first step, it divides the child windows (@pxref{Windows and +Frames}) of @var{frame}'s main window (@pxref{Side Windows}) into two +parts. The first part includes the first @var{arg} child windows if +@var{arg} is positive, and the @minus{}@var{arg} last child windows if +@var{arg} is negative. The second part includes the remaining child +windows of @var{frame}'s main window. + +In a second step, it clones (@pxref{Window Configurations}) into a newly +created frame each of the windows of the part which does not include +@var{frame}'s selected window (@pxref{Selecting Windows}) and removes +those windows from @var{frame}. Note that the original identity +(@pxref{Basic Windows}) of the cloned windows is lost in this step. The +identity of the windows retained on @var{frame} is preserved, however. +In a final step, it deletes the windows that have been cloned from +@var{frame} and returns the newly created frame. + +This function signals an error if @var{arg} is either zero or not a +number, or if @var{frame}'s main window is either live or does not have +more child windows than specified by the absolute value of @var{arg}. +@end deffn + +@deffn Command merge-frames &optional frame1 frame2 vertical +This command transfers the main window (@pxref{Side Windows}) of +@var{frame2} to @var{frame1}. Both @var{frame1} and @var{frame2} must +specify live frames. + +In the first step it splits the main window of @var{frame1}. If +@var{vertical} is non-@code{nil}, it makes the new window below the old +main window of @var{frame1}. Otherwise, it makes the new window on the +right of @var{frame1}'s main window. + +In the second step it makes the new window a clone (@pxref{Window +Configurations}) of the main window of @var{frame2}. The original +identity (@pxref{Basic Windows}) of the cloned windows is lost in that +step. In the final step, it deletes @var{frame2} if the merge completed +successfully and returns @var{frame1}. + +Interactively, @var{vertical} is the prefix argument, @var{frame1} is +the selected frame and @var{frame2} is the frame following @var{frame1} +in the list of all frames (@pxref{Finding All Frames}). If @var{frame1} +and @var{frame2} are omitted or @code{nil} in calls from Lisp, they +default to the above values. +@end deffn + +In general you cannot ``undo'' a @code{split-frame} call with a +subsequent @code{merge-frames} call for the following reasons: In its +second step @code{merge-frame} puts the main window of @var{frame2} into +an internal window split off in the first step. No such window was +present in the configuration of @var{frame1} before calling +@code{split-frame}. Also, after merging is complete, the window cloned +from the main window of @var{frame2} will occupy as much space as the +main window of @var{frame1} before merging. This might not match the +space distribution of the original layout. + +Hence, if your preferred workflow is to temporarily split off windows +for working on them in a separate frame and later continue with the +original layout of the original frame, you should proceed as follows: +Save the configuration (@pxref{Window Configurations}) of the original +frame, call @code{split-frame} to create the separate frame and finally +restore the saved configuration of the original frame and delete the +separate frame. + + @node Minibuffers and Frames @section Minibuffers and Frames diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index fbd578b08f0..16b82a6a29e 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -78,14 +78,19 @@ disambiguation, we use the term @dfn{window-system window} when we mean the window-system window corresponding to an Emacs frame. @cindex tiled windows +@cindex window layout Unlike X windows, Emacs windows are @dfn{tiled}; they never overlap within the area of their frame. When a window is created, resized, or deleted, the change in window space is taken from or given to other windows on the same frame, so that the total area of the frame is -unchanged. +unchanged. The @dfn{window layout} of a frame is the result of all +tiling operations for that frame. +@cindex window object +@cindex window identity In Emacs Lisp, windows are represented by a special Lisp object type -(@pxref{Window Type}). +(@pxref{Window Type}). Two windows are identical if and only if they are +represented by the same Lisp object. @defun windowp object This function returns @code{t} if @var{object} is a window (whether or @@ -7263,11 +7268,16 @@ and/or two columns. In the context of window states, the @dfn{clone of a window} is a window that has the same decorations and contents as the window whose state was used to produce it, but is actually represented by another window -object. Operating on the original or the clone of a window does not -affect the other in any way. Note that while @code{window-state-get} -clones existing windows, these clones are not yet valid windows. They -become valid only after @code{window-state-put} has put them into a live -frame. +object. Hence it does not have the same identity as the original +window. Operating on the original or the clone of a window does not +affect the other in any way. + +Note that while @code{set-window-configuration} always restores the +identity of the windows it puts back into their frame, +@code{window-state-put} never does that. Note also that while +@code{window-state-get} clones existing windows, these clones are not +yet valid windows. They become valid only after @code{window-state-put} +has put them into a live frame. By default, @code{set-window-configuration} and @code{window-state-put} may delete a window from the restored configuration or state when they diff --git a/etc/EGLOT-NEWS b/etc/EGLOT-NEWS index cdbd3048f27..ad6aae10436 100644 --- a/etc/EGLOT-NEWS +++ b/etc/EGLOT-NEWS @@ -18,7 +18,7 @@ to look up issue github#1234, go to https://github.com/joaotavora/eglot/issues/1234. -* Changes to upcoming Eglot +* Changes in Eglot 1.24 (23/6/2026) ** New command 'M-x eglot-describe-connection' diff --git a/etc/NEWS.31 b/etc/NEWS.31 index 6b2abe30aaa..8e7d035bf84 100644 --- a/etc/NEWS.31 +++ b/etc/NEWS.31 @@ -519,7 +519,7 @@ same terminal as the selected frame. Child frames can be excluded. A single frame can be excluded, for example, the selected frame. 'get-mru-frame' returns the single most recently used frame. ---- ++++ *** After deleting, 'delete-frame' now selects the most recently used frame. Previously, after deleting a specified frame, 'delete-frame' would select the oldest visible frame on the same terminal. To revert to the @@ -550,7 +550,7 @@ the corresponding frame parameters 'width', 'height', 'left' and 'top'. 'set-frame-size-and-position-pixelwise' is similar but has a more restricted set of values for specifying size and position. ---- ++++ *** New commands 'split-frame' and 'merge-frames'. 'split-frame' moves a specified number of windows from an existing frame to a newly-created frame. 'merge-frames' merges all windows from two @@ -2587,7 +2587,7 @@ one as before. This makes them different from 'vc-diff' and 'vc-root-diff' when those are called without a prefix argument. *** 'diff-apply-hunk' now supports creating and deleting files. -diff-apply-buffer supports creating files but not deleting them, yet. +'diff-apply-buffer' supports creating files but not deleting them, yet. +++ *** Diff mode's application and killing commands now consider the region. diff --git a/lisp/emacs-lock.el b/lisp/emacs-lock.el index ec71fa2c713..c28b9d7bd52 100644 --- a/lisp/emacs-lock.el +++ b/lisp/emacs-lock.el @@ -62,13 +62,13 @@ Possible values are: ;; the old emacs-lock.el. (defcustom emacs-lock-unlockable-modes '((shell-mode . all) (telnet-mode . all)) - "Alist of auto-unlockable modes. + "Alist of major modes whose buffers can be automatically unlocked. Each element is a pair (MAJOR-MODE . ACTION), where ACTION is one of `kill', `exit' or `all'. Buffers with matching major -modes are auto-unlocked for the specific action if their -inferior processes are not alive. If this variable is t, all -buffers associated to inferior processes are auto-unlockable -for both actions (NOT RECOMMENDED)." +modes that have `emacs-lock-mode' turned on can be auto-unlocked +for the specific action if their inferior processes are not alive. +If this variable is t, all buffers associated with inferior processes +are auto-unlockable for all actions (NOT RECOMMENDED)." :type '(choice (const :tag "All buffers with inferior processes" t) (repeat :tag "Selected modes" @@ -82,15 +82,20 @@ for both actions (NOT RECOMMENDED)." :version "24.1") (defcustom emacs-lock-locked-buffer-functions nil - "Abnormal hook run when Emacs Lock prevents exiting Emacs, or killing a buffer. -The functions get one argument, the first locked buffer found." + "Abnormal hook run when exiting Emacs or killing a buffer. +When exiting Emacs, the hook is run from `kill-emacs-query-functions' +and from `kill-emacs-hook' if any buffer has `emacs-lock-mode' turned on. +When killing a buffer, the hook is run if the buffer has `emacs-lock-mode' +turned on. +The functions on this hook are called with one argument, the first (or +only) locked buffer that is found." :type 'hook :group 'emacs-lock :version "24.3") (defvar-local emacs-lock-mode nil "If non-nil, the current buffer is locked. -It can be one of the following values: +The value can be one of the following: exit -- Emacs cannot exit while the buffer is locked kill -- the buffer cannot be killed, but Emacs can exit as usual all -- the buffer is locked against both actions @@ -116,7 +121,7 @@ Internal use only.") (defun emacs-lock--can-auto-unlock (action) "Return t if the current buffer can auto-unlock for ACTION. -ACTION must be one of `kill' or `exit'. +ACTION must be one of `kill', `exit' or `all'. See `emacs-lock-unlockable-modes'." (and emacs-lock--try-unlocking (not (emacs-lock-live-process-p (current-buffer))) @@ -136,7 +141,7 @@ See `emacs-lock-unlockable-modes'." nil))) (defun emacs-lock--kill-emacs-hook () - "Signal an error if any buffer is exit-locked. + "Signal an error if any buffer is exit-locked to prevent Emacs from exiting. Used from `kill-emacs-hook' (which see)." (let ((locked (emacs-lock--exit-locked-buffer))) (when locked @@ -145,7 +150,7 @@ Used from `kill-emacs-hook' (which see)." (buffer-name locked))))) (defun emacs-lock--kill-emacs-query-functions () - "Display a message if any buffer is exit-locked. + "Display a message if any buffer is exit-locked and prevent Emacs exiting. Return a value appropriate for `kill-emacs-query-functions' (which see)." (let ((locked (emacs-lock--exit-locked-buffer))) (if (not locked) @@ -156,7 +161,7 @@ Return a value appropriate for `kill-emacs-query-functions' (which see)." nil))) (defun emacs-lock--kill-buffer-query-functions () - "Display a message if the current buffer is kill-locked. + "Display a message if the current buffer is kill-locked and prevent killing it. Return a value appropriate for `kill-buffer-query-functions' (which see)." (if (or (emacs-lock--can-auto-unlock 'kill) (memq emacs-lock-mode '(nil exit))) @@ -190,13 +195,17 @@ Return a value appropriate for `kill-buffer-query-functions' (which see)." ;;;###autoload (define-minor-mode emacs-lock-mode "Toggle Emacs Lock mode in the current buffer. +When a buffer is locked, it cannot be killed and/or Emacs cannot exit +unless the buffer is unlocked first. This protects buffers from +being accidentally killed or lost. + If called with a plain prefix argument, ask for the locking mode -to be used. +to be used in the buffer. Initially, if the user does not pass an explicit locking mode, it defaults to `emacs-lock-default-locking-mode' (which see); afterwards, the locking mode most recently set on the buffer is -used instead. +used as the default instead. When called from Elisp code, ARG can be any locking mode: @@ -204,7 +213,7 @@ When called from Elisp code, ARG can be any locking mode: kill -- the buffer cannot be killed, but Emacs can exit as usual all -- the buffer is locked against both actions -Other values are interpreted as usual. +Other values are interpreted as usual for turning modes on/off. See also `emacs-lock-unlockable-modes', which exempts buffers under some major modes from being locked under some circumstances." @@ -233,7 +242,8 @@ some major modes from being locked under some circumstances." (add-hook 'kill-emacs-query-functions 'emacs-lock--kill-emacs-query-functions)) (defun emacs-lock-unload-function () - "Unload the Emacs Lock library." + "Unload the Emacs Lock library. +This is called from `unload-feature', which see." (catch :continue (dolist (buffer (buffer-list)) (set-buffer buffer) diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el index 174c99afc86..55d0dea81bb 100644 --- a/lisp/jsonrpc.el +++ b/lisp/jsonrpc.el @@ -4,7 +4,7 @@ ;; Author: João Távora <[email protected]> ;; Keywords: processes, languages, extensions -;; Version: 1.0.28 +;; Version: 1.0.29 ;; Package-Requires: ((emacs "25.2")) ;; This is a GNU ELPA :core package. Avoid functionality that is not @@ -678,14 +678,16 @@ If CONN is not shutdown within a reasonable amount of time, warn and delete the network process." (unwind-protect (cl-loop - with proc = (jsonrpc--process conn) for i from 0 + with proc = (jsonrpc--process conn) + with grace = 0.3 with start = (float-time) + for i from 0 while (not (process-get proc 'jsonrpc-sentinel-cleanup-started)) - unless (zerop i) do + unless (or (zerop i) (< (- (float-time) start) grace)) do (jsonrpc--warn "Sentinel for %s still hasn't run, deleting it!" proc) (delete-process proc) do ;; Let sentinel have a chance to run - (accept-process-output nil 0.1)) + (accept-process-output nil grace)) (when cleanup (kill-buffer (process-buffer (jsonrpc--process conn))) (kill-buffer (jsonrpc-stderr-buffer conn))))) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index f930d2d34f3..c00fef8a471 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -675,24 +675,16 @@ that requires a literal mode spec at compile time." (setq c-min-syn-tab-mkr nil) (setq c-max-syn-tab-mkr nil) - (when (or c-recognize-<>-arglists - (c-major-mode-is 'awk-mode) - (c-major-mode-is '(java-mode c-mode c++-mode objc-mode pike-mode))) - ;; We'll use the syntax-table text property to change the syntax - ;; of some chars for this language, so do the necessary setup for - ;; that. - ;; - ;; Note to other package developers: It's ok to turn this on in CC - ;; Mode buffers when CC Mode doesn't, but it's not ok to turn it - ;; off if CC Mode has turned it on. - - ;; Emacs. - (when (boundp 'parse-sexp-lookup-properties) - (set (make-local-variable 'parse-sexp-lookup-properties) t)) - - ;; Same as above for XEmacs. - (when (boundp 'lookup-syntax-properties) - (set (make-local-variable 'lookup-syntax-properties) t))) + ;; We use the syntax-table text property to change the syntax of some + ;; chars, potentially in every language, so set this up. + ;; Emacs. + (when (boundp 'parse-sexp-lookup-properties) + (make-local-variable 'parse-sexp-lookup-properties) + (setq parse-sexp-lookup-properties t)) + ;; Same as above for XEmacs. + (when (boundp 'lookup-syntax-properties) + (make-local-variable 'lookup-syntax-properties) + (setq lookup-syntax-properties t)) ;; Use this in Emacs 21+ to avoid meddling with the rear-nonsticky ;; property on each character. diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 2afb2b40094..f701a38ab8b 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -2,12 +2,12 @@ ;; Copyright (C) 2018-2026 Free Software Foundation, Inc. -;; Version: 1.23 +;; Version: 1.24 ;; Author: João Távora <[email protected]> ;; Maintainer: João Távora <[email protected]> ;; URL: https://github.com/joaotavora/eglot ;; Keywords: convenience, languages -;; Package-Requires: ((emacs "26.3") (eldoc "1.16.0") (external-completion "0.1") (flymake "1.4.5") (jsonrpc "1.0.28") (project "0.11.2") (seq "2.23") (xref "1.7.0")) +;; Package-Requires: ((emacs "26.3") (eldoc "1.16.0") (external-completion "0.1") (flymake "1.4.5") (jsonrpc "1.0.29") (project "0.11.2") (seq "2.23") (xref "1.7.0")) ;; This is a GNU ELPA :core package. Avoid adding functionality ;; that is not available in the version of Emacs recorded above or any diff --git a/lisp/progmodes/etags-regen.el b/lisp/progmodes/etags-regen.el index b9cb75358c0..9be4be9f92d 100644 --- a/lisp/progmodes/etags-regen.el +++ b/lisp/progmodes/etags-regen.el @@ -236,8 +236,9 @@ is used in buffers that have no alternative completion configured." ;; this mode, skip all functionality. (not (or tags-file-name tags-table-list)) - (file-exists-p (etags-regen--choose-tags-file - (setq proj (project-current))))) + (prog1 (setq proj (project-current)) + (unless proj (message "No project found"))) + (file-exists-p (etags-regen--choose-tags-file proj))) (message "Found existing tags table, refreshing...") (etags-regen--refresh proj)) (when (and (not (or tags-file-name diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index cea78437d20..c89d01b0908 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -974,7 +974,7 @@ DIRS must contain directory names." (let ((res (project--read-dir-locals dir))) (project--set-cached dir 'project-vc-dir-locals (or res 'none)) res)))) - (symbol-value var))) + (default-value var))) (defun project--read-dir-locals (dir) (with-temp-buffer diff --git a/lisp/subr.el b/lisp/subr.el index 03fcd1927c2..16e91934382 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -7810,7 +7810,7 @@ seconds." (unless (y-or-n-p-with-timeout (format "Error %s; continue?" (error-message-string err)) 5 t) - (error err)))) + (signal err)))) ;; Continue running. nil))) diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 7fe7e430860..ef5cdd75182 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -5002,11 +5002,11 @@ If FILE is a directory, revert all files inside that directory." (vc-responsible-backend file) (vc-backend file)) 'revert file backup-file)) - `((vc-state . ,(if (eq (vc-state file) 'added) - 'unregistered - 'up-to-date)) - (vc-checkout-time - . ,(file-attribute-modification-time (file-attributes file))))) + (let ((state (vc-state file))) + `(,@(and (eq state 'added) '((vc-backend . nil))) + (vc-state . ,(if (eq state 'added) 'unregistered 'up-to-date)) + (vc-checkout-time + . ,(file-attribute-modification-time (file-attributes file)))))) (vc-resynch-buffer file t t)) (defun vc-revert-files (backend files) @@ -5022,7 +5022,7 @@ For entries in FILES that are directories, revert all files inside them." ;; Use `vc-file-getprop' directly here because we may be ;; handling very many files and do not want to hit the disk. `(,@(pcase (vc-file-getprop file 'vc-state) - ('added '((vc-state . unregistered))) + ('added '((vc-backend . nil) (vc-state . unregistered))) ;; If we have no known state for the file somehow, leave ;; it that way. ('nil nil) diff --git a/lisp/window-x.el b/lisp/window-x.el index 4197d5a0a26..813b8aed9f3 100644 --- a/lisp/window-x.el +++ b/lisp/window-x.el @@ -319,8 +319,10 @@ ones in `window--transpose'." (defun merge-frames (&optional frame1 frame2 vertical) "Merge the main window of FRAME2 into FRAME1. Split the main window of FRAME1 and make the new window display the main -window of FRAME2. Both FRAME1 and FRAME2 must be live frames. If -VERTICAL is non-nil, make the new window below the old main window of +window of FRAME2. Both FRAME1 and FRAME2 must be live frames. FRAME1 +defaults to the selected frame and FRAME2 to the frame that follows FRAME1 +in the frame list. +If VERTICAL is non-nil, make the new window below the old main window of FRAME1. Otherwise, make the new window on the right of FRAME1's main window. Interactively, VERTICAL is the prefix argument, FRAME1 is the selected frame and FRAME2 is the frame following FRAME1 in the frame diff --git a/src/xterm.c b/src/xterm.c index 55479eb2c96..aaccc563839 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -32400,6 +32400,13 @@ static struct textconv_interface text_conversion_interface = void init_xterm (void) { +#if defined(HAVE_XWIDGETS) && !defined(HAVE_PGTK) + /* Emacs uses off-screen gtk widgets for webkit views, which do not support + DMABUF or Compositing Mode; webkit aborts unless we disable those. */ + xputenv ("WEBKIT_DISABLE_DMABUF_RENDERER=1"); + xputenv ("WEBKIT_DISABLE_COMPOSITING_MODE=1"); +#endif + #ifndef HAVE_XINPUT2 /* Emacs can handle only core input events when built without XI2 support, so make sure Gtk doesn't use Xinput or Xinput2 diff --git a/test/lisp/filenotify-tests.el b/test/lisp/filenotify-tests.el index fc826aba8d4..798253aeb0c 100644 --- a/test/lisp/filenotify-tests.el +++ b/test/lisp/filenotify-tests.el @@ -37,7 +37,7 @@ ;; a respective command. The first command found is used. In order to ;; use a dedicated one, the environment variable ;; $REMOTE_FILE_NOTIFY_LIBRARY shall be set, possible values are -;; "inotifywait", "gio", and "smb-notify". +;; "inotifywait", "gio", "smb-notify" and "tramp-rpc". ;; Local file-notify libraries are auto-detected during Emacs ;; configuration. This can be changed with a respective configuration @@ -60,7 +60,7 @@ ;; Filter suppressed remote file-notify libraries. (when (stringp (getenv "REMOTE_FILE_NOTIFY_LIBRARY")) - (dolist (lib '("inotifywait" "gio" "smb-notify")) + (dolist (lib '("inotifywait" "gio" "smb-notify" "tramp-rpc")) (unless (string-equal (getenv "REMOTE_FILE_NOTIFY_LIBRARY") lib) (add-to-list 'tramp-connection-properties `(nil ,lib nil))))) @@ -255,11 +255,16 @@ must be a valid watch descriptor." ;; - GKqueueFileMonitor (gfilenotify and gio on FreeBSD) ;; - GPollFileMonitor (gio on cygwin) ;; - SMBSamba (smb-notify on Samba server) - ;; - SMBWindows (smb-notify on MS Windows). + ;; - SMBWindows (smb-notify on MS Windows) + ;; - TrampRPCinotify (tramp-rpc on GNU/Linux) + ;; - TrampRPCkqueue (tramp-rpc on FreeBSD) + ;; - TrampRPCfsevent (tramp-rpc on macOS) + ;; - TrampRPCpoll (tramp-rpc). (if file-notify--test-desc (or (alist-get file-notify--test-desc file-notify--test-monitors) (when (member - (file-notify--test-library) '("gfilenotify" "gio" "smb-notify")) + (file-notify--test-library) + '("gfilenotify" "gio" "smb-notify" "tramp-rpc")) (add-to-list 'file-notify--test-monitors (cons file-notify--test-desc @@ -884,18 +889,15 @@ delivered." '(GFamFileMonitor GFamDirectoryMonitor GKqueueFileMonitor GPollFileMonitor)) '()) - ;; For GInotifyFileMonitor, `write-region' raises also an - ;; `attribute-changed' event on gio. - ((and (string-equal (file-notify--test-library) "gio") - (eq (file-notify--test-monitor) 'GInotifyFileMonitor)) - '(attribute-changed attribute-changed attribute-changed)) - ;; For kqueue, `write-region' raises also an `attribute-changed' - ;; event. - ((string-equal (file-notify--test-library) "kqueue") - '(attribute-changed attribute-changed attribute-changed)) - ;; For inotifywait, `write-region' raises also an + ;; For kqueue, inotifywait, GInotifyFileMonitor and + ;; TrampRPCinotify, `write-region' raises also an ;; `attribute-changed' event. - ((string-equal (file-notify--test-library) "inotifywait") + ((or (string-equal (file-notify--test-library) "kqueue") + (string-equal (file-notify--test-library) "inotifywait") + (and (string-equal (file-notify--test-library) "gio") + (eq (file-notify--test-monitor) 'GInotifyFileMonitor)) + (and (string-equal (file-notify--test-library) "tramp-rpc") + (eq (file-notify--test-monitor) 'TrampRPCinotify))) '(attribute-changed attribute-changed attribute-changed)) (t '(attribute-changed attribute-changed))) (write-region "any text" nil file-notify--test-tmpfile nil 'no-message) @@ -1177,10 +1179,10 @@ delivered." file-notify--test-tmpdir '(change) #'file-notify--test-event-handler))) (let ((file-notify-debug ;; Temporarily. - (or file-notify-debug - (and (getenv "EMACS_EMBA_CI") - (string-equal (file-notify--test-library) "gio") - (eq (file-notify--test-monitor) 'GInotifyFileMonitor)))) + (or file-notify-debug + (and (getenv "EMACS_EMBA_CI") + (string-equal (file-notify--test-library) "gio") + (eq (file-notify--test-monitor) 'GInotifyFileMonitor)))) (n 10);00) source-file-list target-file-list (default-directory file-notify--test-tmpdir)) @@ -1680,6 +1682,10 @@ the file watch." ((or "inotify" "inotifywait") '(unmount isdir)) ((or "gfilenotify" "gio") '(unmounted)) ("kqueue" '(revoke)) + ("tramp-rpc" + (pcase (file-notify--test-monitor) + ('TrampRPCinotify '(unmount isdir)) + (err (ert-fail (format "Monitor %s not supported" err))))) (err (ert-fail (format "Library %s not supported" err)))) (pcase (file-notify--test-library) ("kqueue" (file-local-name file-notify--test-tmpfile)) @@ -1692,7 +1698,7 @@ the file watch." ("inotify" #'file-notify--callback-inotify) ("gfilenotify" #'file-notify--callback-gfilenotify) ("kqueue" #'file-notify--callback-kqueue) - ((or "inotifywait" "gio") #'file-notify-callback) + ((or "inotifywait" "gio" "tramp-rpc") #'file-notify-callback) (err (ert-fail (format "Library %s not supported" err))))))) ;; The watch has been stopped.