2026-07-22 Sean Whitton VC-Annotate menu: Fix inserting "Span NN.NN days" entries * lisp/vc/vc-annotate.el (vc-annotate-mode-menu): Generate entries based on vc-annotate-color-map using a :filter function, instead of using whatever value that variable happened to have at load time. 2026-07-22 Donjuanplatinum (tiny change) Fix typo in Fmatch_end's doc string * src/search.c (Fmatch_end): Fix "start position" to "end position". (Bug#81447) 2026-07-21 James Cherti Fix false positive warnings in 'elisp-flymake-checkdoc' when narrowed * lisp/progmodes/elisp-mode.el (elisp-flymake-checkdoc): Temporarily widen the buffer before calling 'checkdoc-current-buffer'. This prevents checkdoc from reporting missing file-level structural elements when the user has narrowed the buffer. (Bug#81258) 2026-07-20 Aaron L. Zeng (tiny change) Fix void-function on push-button in goto-address-mode * lisp/net/goto-addr.el (goto-address--button-action): New function (bug#81419). (goto-address-fontify): Use it as the button action. 2026-07-19 Petteri Hintsanen Fix perl-calculate-indent * lisp/progmodes/perl-mode.el (perl-calculate-indent): Ensure that the value from (nth 3 state) is a character before passing it to char-equal. 2026-07-19 Michael Albinus * admin/notes/documentation: Describe quoting of key names. 2026-07-19 Eli Zaretskii Fix 'url-parse-query-string' * lisp/url/url-util.el (url-parse-query-string): Fix use of 'match-beginning' and 'match-end'. (Bug#81430) 2026-07-18 Eshel Yaron markdown-ts-mode: Fix code-block fontification leak * lisp/textmodes/markdown-ts-mode.el (markdown-ts--fontify-non-ts-collect-faces): Prevent 'font-lock-ensure' from widening and fontifying outside the intended code-block (bug#81412). 2026-07-18 Eli Zaretskii Revert "; * admin/authors.el (authors-aliases): Fix Borys Buliha's name." This reverts commit cf6918c189e11a891facdac4a9baea3316a39c59. It was a mistake, as Boris prefers the other spelling. 2026-07-18 Eli Zaretskii Fix 'mouse-drag-copy-region' = 'non-empty' * lisp/mouse.el (mouse-save-then-kill): Fix conditions for copying when 'mouse-drag-copy-region' is 'non-empty'. (Bug#81366) 2026-07-16 Michael Albinus Fix `with-tramp-local-environment' * lisp/net/tramp.el (with-tramp-local-environment): Do not change the global environment. Reported by Daniel Kraus . (Bug#81409) 2026-07-16 Dmitry Gutov project.el: Bump version to 0.12 Do not merge to master. 2026-07-15 Paul Eggert Port pdumper to m68k Problem reported by John Paul Adrian Glaubitz (bug#44531). * src/pdumper.c (DUMP_RELOCATION_ALIGNMENT_BITS): Remove. It’s not needed for optimization, as today’s compilers deduce that multiplying and dividing by the alignment can be done with shifts. All uses changed to use DUMP_RELOCATION_ALIGNMENT. (DUMP_RELOCATION_ALIGNMENT) [__mc68000__]: Now min (4, alignof (Lisp_Object)), not 4. (dump_reloc_set_offset): Change eassert to eassume to help the compiler. 2026-07-14 Mark Hindley (tiny change) browse-url-with-browser-kind: Use strings for DEF * lisp/net/browse-url.el (browse-url-with-browser-kind): Use strings for DEF argument to completing-read (bug#81369). 2026-07-14 Martin Rudalics Fix issues related to window layout changes (Bug#81406) * src/window.c (Vwindow_combination_resize): In doc-string say that binding this to nil may be necessary to produce specific, predefined frame layouts (Bug#81406). * lisp/window-x.el (window-layout-rotate-clockwise) (window-layout-rotate-anticlockwise) (window-layout-flip-leftright, window-layout-flip-topdown) (window-layout-transpose, rotate-windows-change-selected) (rotate-windows, rotate-windows-back): Rewrite doc-strings. Make sure that non-interactive calls with nil or absent WINDOW argument work on the frame's main window. Fix infinite loop when 'rotate-windows' is called for a non-selected frame. * doc/lispref/windows.texi (Recombining Windows): Say that binding 'window-combination-resize' to nil may be necessary to produce specific, predefined frame layouts (Bug#81406). (Changing Window Layouts): Minor rewrite. * etc/NEWS: Announce names of new commands to change window layout (Bug#81406). 2026-07-13 Martin Rudalics Turn off combination resizing in 'window--transpose-1' (Bug#81406) * lisp/window-x.el (window--transpose-1): Bind 'window-combination-resize' to nil around splitting (Bug#81406). 2026-07-13 Eli Zaretskii Fix copy-by-mouse in *Backtrace* buffers * lisp/emacs-lisp/backtrace.el (backtrace--filter-visible): Support BEG and END in reverse order. Patch by Jakub T. Jankiewicz . (Bug#81365) 2026-07-11 Kisaragi Hiu Support javascript "using" keyword (bug#81351) * lisp/progmodes/js.el: (js--keyword-re): Add "using" as a JavaScript keyword. (js--font-lock-keywords-3, js--declaration-keyword-re): Add "using" as a variable declaration keyword, like "const". (js--treesit-optional-keywords): New variable, for keywords that may not yet be supported by many versions of tree-sitter-javascript. (js--treesit-font-lock-settings): Use it. (js--treesit-defun-name, js--treesit-valid-imenu-entry) (js--treesit-sentence-nodes, js--treesit-simple-imenu-settings) (js--treesit-defun-type-regexp): Add using_declaration as an alternative to lexical_declaration (let and const) and variable_declaration (var). * lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode--keywords): Add "using" as a TypeScript keyword. 2026-07-10 Juri Linkov Ensure the correct current buffer in completions--background-update * lisp/minibuffer.el (completions--background-update): Add new arg 'buffer' and compare it with 'current-buffer'. (completions--start-background-update): Run an idle timer for 'completions--background-update' with a new arg set to 'current-buffer' that ensures that the timer function is run in the same buffer (bug#81349). 2026-07-09 Daniel Mendler Improve eldoc-help-at-pt docstrings * lisp/emacs-lisp/eldoc.el (eldoc-help-at-pt, eldoc-show-help-at-pt): Improve docstrings. (Bug#81356) 2026-07-09 Daniel Mendler Fix 'eldoc-show-help-at-pt' * lisp/emacs-lisp/eldoc.el (eldoc-show-help-at-pt): Don't test 'eldoc-help-at-pt'. (Bug#81356) 2026-07-07 Paul Eggert Fix uninit read in Android TrueType font scan Problem reported privately by Michal Majchrowicz and Marcin Wyczechowski, members of the AFINE Team. * src/sfnt.c (sfnt_read_table_directory): Fix typo where wrong size was used. 2026-07-07 Paul Eggert Fix OOB read in Android TrueType font scan Problem reported privately by Michal Majchrowicz and Marcin Wyczechowski, members of the AFINE Team. * src/sfnt.c (sfnt_vary_simple_glyph, sfnt_vary_compound_glyph): Reject indexes equal exactly to sizes. 2026-07-07 Martin Rudalics Have 'replace-buffer-in-windows' remove BUFFER-OR-NAME everywhere (Bug#81370) * lisp/window.el (replace-buffer-in-windows): Unrecord BUFFER-OR-NAME and thus remove it from the lists of previous and next buffers in all live windows regardless of whether they currently show BUFFER-OR-NAME or not (Bug#81370). 2026-07-07 Juri Linkov Fix test breakage in files-tests * test/lisp/files-tests.el (files-tests--with-buffer-offer-save): Redefine 'read-key-sequence-vector' instead of 'read-key' after recent changes in 'map-y-or-n-p' (bug#81168). 2026-07-07 Juri Linkov Check for a live buffer in 'quit-restore-window' * lisp/window.el (quit-restore-window): Check with 'buffer-live-p' when finding a prev buffer in 'window-prev-buffers' (bug#81370). 2026-07-07 Daniel Mendler Fix blinking Eldoc messages Ensure that `global-eldoc-mode' does not enable `eldoc-mode' in ephemeral Eldoc buffers and accidentally reset `eldoc-last-message'. This caused Eldoc message blinking (bug#81356). * lisp/emacs-lisp/eldoc.el (eldoc--supported-p): Exclude ephemeral Eldoc buffers to avoid blinking. (eldoc-help-at-pt): Add custom :set function. (eldoc-documentation-functions): Do not register `eldoc-show-help-at-pt' by default. 2026-07-06 Paul Eggert Fix undefined behavior in pbm_load int*int problem reported by Tristan Madani in: https://bugs.gnu.org/81344 * src/image.c (pbm_load): Avoid undefined behavior when multiplying ints, or when adding pointer to int. 2026-07-05 Philip Kaludercic Avoid destructively modifying 'package--builtin-alist' * lisp/emacs-lisp/package.el (package--upgradeable-packages): Use 'append' instead of 'nconc' to not append the contents of 'package-alist' to 'package--builtin-alist'. (Bug#81242) 2026-07-05 Kyle Meyer Update to Org 9.8.7 2026-07-05 Michael Albinus Ensure, that `buffer-file-name' is expanded in tramp-archive * lisp/net/tramp-archive.el (tramp-archive-handle-insert-file-contents): Ensure, that `buffer-file-name' is expanded. 2026-07-04 Eli Zaretskii Fix min-width in mode-line constructs * src/xdisp.c (handle_display_prop): To handle min-width's end on the mode line, call display_min_width also when starting a new string. This is needed because mode line supports :propertize application to a list of strings, and we only need to apply the effect of min-width at the end of the last element. (Bug#81354) 2026-07-03 Binbin Ye (tiny change) Fix syntax of tsx tag angle brackets to use matching pairs The matching characters for JSX tag angle brackets were self-referential ('<' matched '<', and '>' matched '>') rather than pointing at each other. Tools that check the matching character, such as 'show-paren-mode' and the rainbow-delimiters package, therefore treated every JSX closing '>' as a mismatched delimiter. Use the same descriptors as 'sgml-make-syntax-table', where '<' is closed by '>' and '>' by '<' (bug#81348). * lisp/progmodes/typescript-ts-mode.el (tsx-ts--syntax-propertize-captures): Give '<' the syntax descriptor "(>" and '>' the descriptor ")<". 2026-07-03 Samuele FAVAZZA (tiny change) Fix Tramp container name completion * lisp/net/tramp-container.el (tramp-container--completion-function): Use "<>" as separator instead of "\t", which could be modified in the shell. 2026-07-03 Sean Whitton server-tests/can-create-frames-p: Check for TERM=dumb-emacs-ansi * test/lisp/server-tests.el (server-tests/can-create-frames-p): Check for TERM=dumb-emacs-ansi. 2026-07-03 Sean Whitton Disable failing SCCS tests on the release branch These are broken and we don't have an SCCS expert to fix them at present. This shouldn't block the Emacs 31 release because SCCS is a relatively obscure VCS. * test/lisp/vc/vc-tests/vc-tests.el (vc-test-sccs05-rename-file) (vc-test-sccs10-rename-directory): Mark as expected to fail. Do not merge to master. 2026-07-03 Sean Whitton Finish reverting experiment with proportional font on mode line This change Author: Lars Ingebrigtsen AuthorDate: Thu Dec 23 11:43:47 2021 +0100 Revert back to using monospaced fonts in the mode line * lisp/faces.el (mode-line-active, mode-line-inactive): Revert back to using monospaced fonts on the mode line (for now). The main remaining usability problem is clicking on the very small "-" characters in "U:--". didn't also undo these changes to bindings.el that were introduced along with the proportional font experiment, leading to bug#81336. * lisp/bindings.el (mode-line-position) (standard-mode-line-format): Don't set display minimum widths (bug#81336). 2026-07-03 Alan Mackenzie CC Mode: Fix erroneous type: arguments to two defcustoms. This allows customize to set the variables directly to regular expressions as an alternative to a list of identifiers. It fixes bug#81339. * lisp/progmodes/cc-vars.el (c-noise-macro-with-parens-names) (c-noise-macro-names): Correct the type: arguments to defcustom to two `choice' constructs. 2026-07-02 Spencer Baugh Fix initials completion style after // in file name * lisp/minibuffer.el (completion-initials-expand): Change the heuristic to check for an empty previous field, not total string length (bug#81241). * test/lisp/minibuffer-tests.el (completion-initials): New test. 2026-07-02 Spencer Baugh Fix c-pcm-try-completion with boundaries completion PCM try-completion could behavior incorrectly with completion tables using boundaries, such as file name completion. It would "grow" earlier path components as if point was at the end of each path component (rather than at its true location), which meant all path components would "grow" not only from the left \(which is correct) but also from the right (which can only work when point is there). * lisp/minibuffer.el (completion-pcm--find-all-completions): Drop the sub-pattern's trailing `point' (bug#80914). * test/lisp/minibuffer-tests.el (completion-pcm-test-9): New test. 2026-07-02 haiyang miao (tiny change) In pgtk_free_frame_resources transfer keyboard focus to parent (Bug#64625) * src/pgtkterm.c (pgtk_new_focus_frame): Declare static. (pgtk_free_frame_resources): If this frame currently holds keyboard focus, explicitly transfer focus to its parent frame before releasing resources (Bug#64625). 2026-07-02 Johan Myréen (tiny change) Fix fullscreen state handling for PGTK (Bug#81165, Bug#81320) * src/pgtkterm.c (set_fullscreen_state): Unfullscreen frame in the FULLSCREEN_HEIGHT/_WIDTH case (Bug#81165, Bug#81320). 2026-07-02 Dmitry Gutov * lisp/progmodes/project.el: Update Commentary. 2026-07-02 Dmitry Gutov Localize cache invalidation to project-try-vc With other functions only using the cached values or populating when necessary. * lisp/progmodes/project.el: Update commentary (bug#81317). (project--get-cached): Add explicit parameter TIMEOUT, use it. (project-try-vc): Build its value from 'non-essential' and the values of two timeout variables. And pass them on. (project-try-vc--search, project--vc-merge-submodules-p) (project--value-in-dir): Also add TIMEOUT. (project-files, vc-git-project-list-files) (vc-hg-project-list-files, project-ignores, project-buffers) (project-name, project-uniquify-dirname-transform): Remove the binding of 'non-essential' as now redundant for cache duration. * test/lisp/progmodes/project-tests.el (project-try-vc-uses-cache) (project-try-vc-invalidates-cache) (project-name--reuses-cache) (project-name--obeys-cache-invalidation): New tests. (project-vc-supports-project-in-different-dir) (project-vc-ignores-in-external-directory): Use 'project--clear-cache' as the more reliable option. 2026-07-02 Dmitry Gutov Fix project--clear-cache and project--value-in-dir in special case * lisp/progmodes/project.el (project--clear-cache): Make sure to clear the 'project-vc-dir-locals' keys too. (project--value-in-dir): Predicate the cache lookup (and most importantly, write) on whether enable-dir-local-variables is non-nil. So its uses inside recursive 'project-try-vc--search' call do not not bust the value (bug#81317). 2026-07-01 Michael Albinus * admin/notes/jargon: Add TTTT. 2026-07-01 Michael Albinus Fix error handling in Tramp delete-{file,directory} * lisp/net/tramp-smb.el (tramp-smb-handle-delete-directory): * lisp/net/tramp.el (tramp-skeleton-delete-directory): Fail if DIRECTORY is missing. (tramp-skeleton-delete-file): Don't fail if DIRECTORY is missing. * test/lisp/net/tramp-tests.el (tramp-test14-delete-directory): Adapt test. 2026-07-01 Michael Albinus Change Tramp version integrated in Emacs 31.1 (don't merge) * 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 Yuan Fu Correct cursor range in Ftreesit_query_capture (bug#81297) * src/treesit.c (Ftreesit_query_capture): Always explicitly set cursor's range. 2026-06-30 Sean Whitton vc-dir-update: Remove assertion invalid on this branch * lisp/vc/vc-dir.el (vc-dir-update): Remove assertion invalid on the emacs-31 branch. Do not merge to master. 2026-06-30 Martin Rudalics Don't use window manager activation when a child frame has focus (Bug#81326) * src/xterm.c (x_get_toplevel_parent): Remove. (x_focus_frame): Never call x_ewmh_activate_frame when a child frame has focus (Bug#81326). 2026-06-29 Philip Kaludercic Compile User Lisp files after adjusting 'load-path' * lisp/startup.el (prepare-user-lisp): Collect Lisp files in a list and process these after traversing the file system. This is necessary to prevent the compiler from failing to byte-compile files that depend on other files in the User Lisp directory because their neighboring dependencies cannot be located. (Bug#81304) 2026-06-29 Sean Whitton Fix strange logic in vc-git-incoming-revision I think that I didn't fully update this function in this change: commit e915646b8944d8b611ab7094d9eb305ed162ff27 Author: Sean Whitton Date: Wed Feb 18 11:35:16 2026 +0000 vc-git-pull, vc-git-incoming-revision: Use push remotes * lisp/vc/vc-git.el (vc-git-pull, vc-git-incoming-revision): Use configured push remotes. * etc/NEWS: Announce change to vc-git-pull. * lisp/vc/vc-git.el (vc-git-incoming-revision): Don't duplicate looking for a branch remote after just having called vc-git--branch-remotes (bug#81328). 2026-06-28 Eli Zaretskii Fix 'format-mode-line' when faces are in format string * src/xdisp.c (store_mode_line_string): Don't assume that PROPS can only specify the face for LISP_STRING; if PROPS don't specify a face, fall back on the 'face' property of LISP_STRING. (Bug#81316) * test/src/xdisp-tests.el (xdisp-test-format-mode-line): Add a test for this issue. 2026-06-28 Martin Rudalics Restore frame's fullheight/fullwidth after exiting from fullboth (Bug#81165) * src/xterm.c (do_ewmh_fullscreen): Try to restore fullheight/fullwidth states after exiting from fullboth state (Bug#81165). 2026-06-27 Zhengyi Fu (tiny change) Fix interactive mode spec of `xwidget-webkit-end-edit-textarea' * lisp/xwidget.el (xwidget-webkit-end-edit-textarea): Remove `xwidget-webkit-mode' condition from the interactive mode spec. This command is intended to be invoked in the 'textarea' buffer, which is created by `xwidget-webkit-begin-edit-textarea', and that buffer is in Fundamental mode. (Bug#81306) 2026-06-27 Andrea Alberti Fix pixels-vs-columns confusion in margin face fill (bug#81109) * src/xdisp.c (extend_face_to_end_of_line): WINDOW_LEFT/RIGHT_MARGIN_WIDTH is a pixel value (columns times the frame column width). Compare the margin glyph count against WINDOW_LEFT/RIGHT_MARGIN_COLS instead, and use the *_WIDTH value directly for remaining_pixels rather than multiplying it by FRAME_COLUMN_WIDTH a second time. The old code worked on text terminals, where the column width is one pixel, but computed wrong widths on GUI frames. 2026-06-27 Richard Lawrence Fix ISO date insertion in diary See Bug#81263. Diary's 'iso' dates should use ISO8601 YYYY-MM-DD format. This change fixes the format used by `diary-insert-entry'. * lisp/calendar/calendar.el (diary-iso-date-insertion-form): Use YYYY-MM-DD format (not YYYY/M/D) when inserting ISO dates. * test/lisp/calendar/diary-icalendar-resources/import-bug-11473.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-bug-22092.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-bug-33277.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-legacy-vars.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-multiple-vcalendars.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-non-recurring-1.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-non-recurring-all-day.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-non-recurring-another-example.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-non-recurring-folded-summary.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-non-recurring-long-summary.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-time-format-12hr-blank.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-with-attachment.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-with-timezone.diary-iso: * test/lisp/calendar/diary-icalendar-resources/import-with-uid.diary-iso: Update tests. 2026-06-27 Eli Zaretskii Minor fix for 'format-mode-line' * src/xdisp.c (Fformat_mode_line): Treat 'default' exactly like nil. (Bug#81307) 2026-06-26 Juri Linkov Improve the previous fix in toggle-window-dedicated * lisp/window.el (toggle-window-dedicated): Don't select the window by mouse click in another window. This keeps the currently selected window like for toggling other indicators on the mode-line (bug#81178). 2026-06-25 Sean Whitton VC-Dir: Fix removing empty directory entries * lisp/vc/vc-dir.el (vc-dir-refresh-files): Do another pass to remove directory entries with no children. Do not merge to master. 2026-06-25 Juri Linkov Fix interactive spec of some commands bound on the mode line Use interactive spec '@' for two commands bound on the mode line that should select the window associated with the mouse click to avoid toggling the status of the wrong window or buffer. * lisp/progmodes/elisp-mode.el (elisp-enable-lexical-binding): Add interactive spec '@' (bug#81178). * lisp/window.el (toggle-window-dedicated): Add interactive spec '@' and replace 'current-buffer' with 'window-buffer' to not assume that it operates on the current buffer. 2026-06-25 Sean Whitton vc-dir--count-outgoing: Bind enable-local-variables * lisp/vc/vc-dir.el (vc-dir--count-outgoing): Bind enable-local-variables (bug#81233). Do not merge to master. 2026-06-25 Michael Albinus Support tramp-rpc in filenotify-tests.el * test/lisp/filenotify-tests.el (top, file-notify--test-monitor) (file-notify-test03-events, file-notify-test12-unmount): Handle also tramp-rpc. 2026-06-25 Alan Mackenzie CC Mode: Set parse-sexp-lookup-properties for every mode This fixes a bug reported and diagnosed by Campbell Barton on the emacs-devel list. * lisp/progmodes/cc-mode.el (c-basic-common-init): Set parse-sexp-lookup-properties or (for XEmacs) lookup-syntax-properties for every CC Mode mode. 2026-06-25 Dirk-Jan C. Binnema (tiny change) Disable DMABUF and Compositing for xwidget Webkit does not support DMABUF or accelerated compositing in the offscreen widgets Emacs uses for xwidget. Disable both for non-pgtk GTK3 builds (Bug#80834). * src/xterm.c (init_xterm): Set WEBKIT_DISABLE_DMABUF_RENDERER and WEBKIT_DISABLE_COMPOSITING_MODE when built with xwidgets and not pgtk. 2026-06-25 Eli Zaretskii Fix failure code in 'run-hook-query-error-with-timeout' * lisp/subr.el (run-hook-query-error-with-timeout): Fix incorrect call to 'error'. (Bug#81292) 2026-06-25 Zhengyi Fu (tiny change) Use default-value in project--value-in-dir When in a VC project whose dir-locals file specifies `project-vc-name', the function `project--value-in-dir' previously used `symbol-value' to retrieve the variable value, causing `project-name' to return the same name for all VC projects without an explicit `project-vc-name'. Use `default-value' instead to correctly fall back to the default value. * lisp/progmodes/project.el (project--value-in-dir): Replace `symbol-value' with `default-value' (bug#81293). 2026-06-24 Dmitry Gutov etags-regen--maybe-generate: No error when no project found * lisp/progmodes/etags-regen.el (etags-regen--maybe-generate): When no project found, abort cleanly with a message. 2026-06-24 Stephen Berman Mark ChangeLog entry as tiny change * ChangeLog.5: Mark an entry as a tiny change, because the "Copyright-paperwork-exempt: yes" line was mistakenly omitted from the commit log entry. 2026-06-24 Sean Whitton VC revert: When un-adding, clear vc-backend property * lisp/vc/vc.el (vc-revert-file, vc-revert-files): When un-adding, clear vc-backend property (bug#81291). 2026-06-24 Martin Rudalics 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 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 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 Jsonrpc: release version 1.0.29 (Version): Bump to 1.0.29. 2026-06-23 João Távora 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 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 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 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 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 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 (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 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 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 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 (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 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 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 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 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 (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 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 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 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 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 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 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 Revert "Fix the Android build" This reverts commit 916572f6e0ab3e36f7098b6d9b5ff19f87240da4, in favor of another fix. 2026-06-16 Stefan Monnier (comint--intersect-regions): Fix bug#81243 * lisp/comint.el (comint--intersect-regions): Fix syntax-propertization. 2026-06-14 Kyle Meyer Update to Org 9.8.6 2026-06-13 Stefan Monnier src/keyboard.c (Finsert_special_event): Don't ignore unknown events 2026-06-13 João Távora 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 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 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 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 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 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 * lisp/vc/vc.el (vc-log-remote-unintegrated): Set vc-log-view-type. Do not merge to master. 2026-06-11 Sean Whitton 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 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 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 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 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 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 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 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 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 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 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 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 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 Ensure Tramp backward compatibility * lisp/net/tramp.el (tramp-local-environment-variable-p): Use `tramp-compat-funcall'. 2026-06-07 Juri Linkov 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 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 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 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 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 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 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 . 2026-06-06 Augusto Stoffel 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 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 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 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 (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 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 paren.el: Fix part of bug#81035 * lisp/paren.el (show-paren--default): Syntax-propertize before narrowing. 2026-06-05 Michael Albinus 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 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 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 message.el: Fix part of bug#81035 * lisp/gnus/message.el (message-narrow-to-field) (message-hide-headers): Syntax-propertize before narrowing. 2026-06-04 Michael Albinus Fix prompt in remote shell * lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Do not use a hard-coded directory in PS1. (Bug#81177) 2026-06-04 Dirk-Jan C. Binnema Fmake_xwidget: Use about:blank workaround only when needed * src/process.c (glib_installs_sigchld_handler): New variable. (init_process_emacs): Set it when GLib overrides Emacs's SIGCHLD handler. * src/process.h (glib_installs_sigchld_handler): Declare. * src/xwidget.c (Fmake_xwidget): Skip the "about:blank" workaround when glib_installs_sigchld_handler is false. 2026-06-04 JD Smith Allow brew/macports libgccjit for default native compilation * configure.ac: Move flag setup for libgccjit installed by Homebrew or macports earlier, so default native compilation can proceed (bug#81171). 2026-06-04 Sean Whitton vc-dir-refresh: Respect non-essential wrt saving buffers * lisp/vc/vc-dir.el (vc-dir-refresh): If non-essential is non-nil, don't call vc-buffer-sync-fileset. 2026-06-04 Alan Mackenzie CC Mode: Fontify a cast type preceding a brace initialization This fixes bug#81084. * lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): In the test for a cast near the end of the function, add a test for a {...} block which isn't a statement block, allowing such blocks to be recognized as operands of casts. 2026-06-04 Michael Albinus Fix Tramp distrobox integration * lisp/net/tramp.el (tramp-yesno-prompt-regexp): Fix docstring. (tramp-yn-prompt-regexp): Fix docstring. Extend. Add :version. * test/lisp/net/tramp-tests.el (tramp-test03-file-error): Adapt test. 2026-06-04 Rahul Martim Juliato markdown-ts-mode: fix first-item indent (bug#81118) * lisp/textmodes/markdown-ts-mode.el (markdown-ts--fontify-unordered-list-marker): Skip leading whitespace in the node range before applying the display bullet, since the tree-sitter grammar bundles indent into the first list_marker_* node. 2026-06-03 Dmitry Gutov [GTK3] Re-fix the stored values for width and height * src/gtkutil.c (xg_frame_set_char_size) (xg_frame_set_size_and_position): Round WIDTH and HEIGHT to multiples of SCALE without adding toolbar/menubar (bug#80662). 2026-06-02 João Távora Eglot: mentions markdown-ts-view-mode less (bug#81150) * doc/misc/eglot.texi (Customization Variables): Don't mention markdown-ts-view-mode. * etc/EGLOT-NEWS: Don't mention markdown-ts-view-mode. 2026-06-02 Alexander Adolf vc--subject-to-file-name: Fix over-greedy regex (bug#81017) * lisp/vc/vc.el (vc--subject-to-file-name): Make the prefix regex less greedy, ensure the result has no text properties, improve the docstring (bug#81017). 2026-06-02 F. Jason Park Fix more missing faces on ERC margin strings * lisp/erc/erc-goodies.el (keep-place-indicator): Add `erc-keep-place-indicator-arrow' face to overlay arrow. * lisp/erc/erc-stamp.el (erc-stamp--display-prompt-in-left-margin) (erc--conceal-prompt): Add `erc-prompt-face' to entire `left-margin' string. See also 9ba65aa9 "Fix missing margin face on display prop in erc-stamp". * test/lisp/erc/erc-fill-tests.el (erc-fill--left-hand-stamps): Update expected text properties on prompt. (Bug#80693) 2026-06-01 João Távora Eglot: Simplify markdown rendering support (bug#81150) Now that markdown-ts-view-mode is demoted to "experimental" in emacs-31, simplify bits of eglot.el and rewrite docs to be more neutral. In practice 'gfm-view-mode' is still used if found, just like before, but intrepid users can still try the "experimental" modes. * lisp/progmodes/eglot.el (eglot-documentation-renderer): Rewrite doc string. (eglot--accepted-formats): Rewrite. (eglot--builtin-mdown-p): Remove. * doc/misc/eglot.texi (Customization Variables): Rewrite entry. * etc/EGLOT-NEWS: Tweak. 2026-06-01 Eli Zaretskii 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) (cherry picked from commit 94eb6389d403eb1b71a81ecdc3b8416cf5f850d6) 2026-06-01 Sean Whitton Disable markdown-ts-mode & markdown-ts-view-mode for Emacs 31 Do not merge to master. * lisp/progmodes/eglot.el (eglot-documentation-renderer) (eglot--format-markup): Don't call eglot--builtin-mdown-p. * lisp/textmodes/markdown-ts-mode.el (markdown-ts-mode) (markdown-ts-view-mode): Mark as experimental. (auto-mode-alist, treesit-major-mode-remap-alist): Don't add anything. * doc/misc/eglot.texi (Customization Variables): * etc/EGLOT-NEWS: * etc/NEWS: Don't mention markdown-ts-mode or markdown-ts-view-mode. 2026-05-31 Juri Linkov More tests for fill-paragraph-handle-comment.erts * test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts: Add more tests for current comment lines (bug#80449). 2026-05-31 Kyle Meyer Update to Org 9.8.5 2026-05-30 João Távora Eglot: replace eglot-prefer-plaintext with eglot-documentation-renderer The old boolean 'eglot-prefer-plaintext' is replaced by the more expressive 'eglot-documentation-renderer', which can hold a major-mode symbol, t (plain text), or nil (auto-detect each time). By selecting a renderer once at startup the repeated per-request lookups are avoided, which helps with the slowness reported in bug#81150. * lisp/progmodes/eglot.el (eglot-prefer-plaintext): Declare obsolete alias to 'eglot-documentation-renderer'. (eglot-documentation-renderer): New defcustom, reworked from from eglot-prefer-plaintext. (eglot--accepted-formats): Use new variable. (eglot--format-markup): Use new variable. * etc/EGLOT-NEWS: Announce change. * doc/misc/eglot.texi (Customization Variables): Document eglot-documentation-renderer. 2026-05-30 Amin Bandali Make HTML button elements tab-stoppable in eww (bug#81107) * lisp/net/eww.el (eww-form-submit): Call put-text-property to add help-echo and shr-tab-stop properties. (eww-tag-input): Exclude inputs with type="submit" when adding the help-echo and shr-tab-stop properties, since that's now done in eww-form-submit, called earlier for type="submit". 2026-05-30 Eli Zaretskii Don't make buffer read-only when reverting if 'view-mode' was disabled * lisp/view.el (view--disable): Reset 'read-only-mode--state'. (Bug#81149) 2026-05-29 Augusto Stoffel * lisp/shell.el (shell): Fix typo: use process-live-p (bug#81145). 2026-05-28 David Ponce widget-image-find: Use 'image-load-path' (bug#81140) * lisp/wid-edit.el (widget-image-find): Use 'image-load-path' (bug#81140). 2026-05-28 Po Lu Fix the MSDOS build * msdos/sedlibmk.inp (GL_GNULIB_MEMEQ, GL_GNULIB_STREQ) (GL_GNULIB_STRNUL): New substitutions, replacing that of GL_GNULIB_STRINGEQ. * src/term.c (init_tty) [MSDOS]: Assign appropriate value to tty->TN_max_colors. Do not merge to master. 2026-05-27 Zhengyi Fu (tiny change) Fix lax whitespace highlight during query-replace * lisp/replace.el (query-replace-read-args): Add :lax-whitespace to minibuffer-lazy-highlight-setup, so lazy highlight during query-replace respects replace-lax-whitespace and replace-regexp-lax-whitespace (bug#81131). 2026-05-27 Juri Linkov Fix fill-paragraph combining text with preceding comment * lisp/textmodes/fill.el (fill-paragraph): Handle the case when a non-comment line follows a comment line with non-nil 'fill-paragraph-handle-comment' (bug#80449). Skip such a comment line before filling a non-comment line. * test/lisp/textmodes/fill-tests.el (fill-test-fill-paragraph-handle-comment): Add new test. * test/lisp/textmodes/fill-resources/fill-paragraph-handle-comment.erts: New file. 2026-05-27 Paul Eggert emacsclient quote_argument is void * lib-src/emacsclient.c (quote_argument): Don’t use ‘return E;’ in a function returning void. Problem found by Oracle Developer Studio 12.6. 2026-05-24 Sean Whitton Revert "* admin/notes/documentation: Recommend not using "it's"." 2026-05-24 Sean Whitton native--compile-skip-on-battery-p: Try to fix ?b, ?B conditions * lisp/emacs-lisp/comp-run.el (native--compile-skip-on-battery-p): Don't skip charging because the battery is charging, and don't look for "discharging", at least for now (bug#80922). Thanks to David Koppelman for the report. 2026-05-24 Zhengyi Fu (tiny change) Save and restore original local keymap in grep-edit-mode * lisp/progmodes/grep.el (grep-edit-original-mode-map): New variable. (grep-change-to-grep-edit-mode): Save the current local map before switching to grep-edit-mode-map. (grep-edit-save-changes): Restore the saved local map instead of assuming grep-mode-map (bug#81090). 2026-05-24 Eli Zaretskii Fix display of inline SVG images in Rmail * lisp/mail/rmailmm.el (rmail-mime-set-bulk-data): Support Content-type of "svg+xml" if SVG images are supported, 2026-05-24 Yuan Fu Add treesit-ready-p check back to tree-sitter major modes (bug#80909) * lisp/progmodes/c-ts-mode.el (c-ts-mode): (c++-ts-mode): * 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-ts-mode): (go-mod-ts-mode): (go-work-ts-mode): * lisp/progmodes/heex-ts-mode.el (heex-ts-mode): * lisp/progmodes/js.el (js-ts-mode): * lisp/progmodes/lua-ts-mode.el (lua-ts-mode): * lisp/progmodes/python.el (python-ts-mode): * lisp/progmodes/rust-ts-mode.el (rust-ts-mode): * lisp/progmodes/sh-script.el (bash-ts-mode): * lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode): (tsx-ts-mode): * lisp/textmodes/css-mode.el (css-ts-mode): * lisp/textmodes/mhtml-ts-mode.el (mhtml-ts-mode): * lisp/textmodes/toml-ts-mode.el (toml-ts-mode): * lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode): * lisp/treesit-x.el (treesit-generic-mode-setup): Add the check. 2026-05-24 João Távora Fix pathological slowness in flex completion The 'completion-regexp-list' optimization in completion--flex-all-completions-1, a cheap pre-filter via a trivial regexp, performs very poorly for longer patterns and strings, so drop it. That alone recovers fairly decent performance for the flex completion when compared to the 'hotfuzz' point of reference. We then recover the cheap rejection with an O(N+M) pre-check in the Fcompletion__flex_cost_gotoh C scorer. This kicks in the common case (completion-ignore-case is nil) and pays off especially when the table is already a list and 'all-completions' needn't cons. See: https://lists.gnu.org/archive/html/emacs-devel/2026-04/msg01081.html https://lists.gnu.org/archive/html/emacs-devel/2026-05/msg00519.html * lisp/minibuffer.el (completion--flex-all-completions-1): Remove regexp pre-filter. * src/minibuf.c (Fcompletion__flex_cost_gotoh): Add subsequence pre-check. 2026-05-23 Amin Bandali No longer raise error on HTTP 402 (Payment Required) (bug#81101) * lisp/url/url-http.el (url-http-parse-headers): Return t instead of raising an error, to give the user a chance to interact with the page. 2026-05-23 Thomas Mühlbacher (tiny change) Avoid compilation-mode matching rust as gnu * lisp/progmodes/compile.el (compilation-error-regexp-alist-alist): Put 'rust' before 'gnu' to avoid a mismatch since the " |" has become optional (bug#81075). 2026-05-23 Sean Whitton * build-aux/git-hooks/commit-msg: Replace Markdown-style quotation. 2026-05-23 Sean Whitton vc-test--rename-file: Disable part of test for SCCS * test/lisp/vc/vc-tests/vc-tests.el (vc-test--rename-file): Disable part of test for SCCS. 2026-05-23 Rahul Martim Juliato markdown-ts-mode: Don't enable unconditionally by default * lisp/textmodes/markdown-ts-mode.el (markdown-ts-mode-maybe): New function. (auto-mode-alist): Bind ".md", ".markdown", and ".mdx" to 'markdown-ts-mode-maybe' instead of 'markdown-ts-mode'. * etc/NEWS: Update the 'markdown-ts-mode' entry. 2026-05-23 Manuel Giraud Prettify special glyphs * lisp/disp-table.el (prettify-special-glyphs-mode): New mode to display nicer special glyphs. (special-glyphs): New face for displaying special glyphs when the minor mode is active. (prettify-special-glyphs-saved-truncation) (prettify-special-glyphs-saved-continuation): Internal variables to save previous special glyphs. * etc/NEWS: Announce the change. (Bug#80628) 2026-05-23 Eli Zaretskii Revert "sh-script: Mark + and * as punctuation rather than a symbol constituent" This reverts commit b3c0aee42b086af4b3c6e26da1a5d81490b6128b. It caused regressions in 'sh-script', see bug#80794 and bug#80854. 2026-05-23 Richard Lawrence Rename `icalendar-recur' type and related functions More context in Bug#80786 and: https://lists.gnu.org/archive/html/emacs-orgmode/2026-03/msg00286.html `icalendar-recur' as a type name for RRULE values was confusing and made the accessors for this type difficult to discover, because `icalendar-recur-' is also used as a prefix in icalendar-recur.el. This change renames the `icalendar-recur' type to `icalendar-rrule-value' and renames the accessor functions for these values appropriately. * lisp/calendar/icalendar-parser.el: Rename symbols as follows: (icalendar-recur): `icalendar-rrule-value' (icalendar-read-recur-rule-part): `icalendar-read-rrule-part' (icalendar-print-recur-rule-part): `icalendar-print-rrule-part' (icalendar-recur-rule-part): `icalendar-rrule-part' (icalendar-read-recur): `icalendar-read-rrule-value' (icalendar-print-recur): `icalendar-print-rrule-value' (icalendar--recur-value-types): `icalendar--rrule-value-types' (icalendar-recur-value-p): `icalendar-rrule-value-p' (icalendar-recur-freq): `icalendar-rrule-freq' (icalendar-recur-interval-size): `icalendar-rrule-interval-size' (icalendar-recur-until): `icalendar-rrule-until' (icalendar-recur-count): `icalendar-rrule-count' (icalendar-recur-weekstart): `icalendar-rrule-weekstart' (icalendar-recur-by*): `icalendar-rrule-by*'. (icalendar-rrule): (icalendar-index-insert): (icalendar-index-get): Update references. * lisp/calendar/icalendar-recur.el (icalendar-recur-find-interval): (icalendar-recur-nth-interval): (icalendar-recur-next-interval): (icalendar-recur-previous-interval): (icalendar-recur-refine-from-clauses): (icalendar-recur-recurrences-in-interval): (icalendar-recur-recurrences-in-window): (icalendar-recur-recurrences-to-count): (icalendar-recur-tz-observance-on): Update references. * lisp/calendar/diary-icalendar.el: Update references. * lisp/calendar/icalendar-shortdoc.el (icalendar): Update shortdoc examples. * lisp/gnus/gnus-icalendar.el: Update references. * test/lisp/calendar/diary-icalendar-tests.el: * test/lisp/calendar/icalendar-parser-tests.el: * test/lisp/calendar/icalendar-recur-tests.el: Update references in tests. 2026-05-22 Jacek Migacz Fix Lisp injection via X-Draft-From in Gnus * lisp/gnus/gnus-msg.el (gnus-inews-make-draft-meta-information): Escape the group name with prin1-to-string to prevent arbitrary Lisp injection through crafted group names. The unescaped group name was embedded into a Lisp-readable string, parsed back with read-from-string in gnus-draft-setup, and eventually eval'd via message-do-actions, allowing code execution when a draft was sent. 2026-05-22 Martin Rudalics Save/restore old_buffer slot via window configurations (Bug#81097) With Emacs 31 the old_buffer slot of a window gets overwritten with the buffer unshown in that window when that window is deleted. Fset_window_configuration triggers that when calling delete_all_child_windows. If a window configuration gets saved and restored in one and the same redisplay cycle, the change time stamps of the window and its frame will be equal and 'window-buffer-change-functions' may wrongly decide that the window's buffer has not changed because its buffer and old_buffer slots refer to the same buffer (Bug#81097). Fix that by saving and restoring the old_buffer slot. * src/window.c (struct saved_window): Add 'old_buffer' slot. (Fset_window_configuration): Restore old_buffer slot. (save_window_save): Save old_buffer slot. 2026-05-22 Michael Albinus Adapt ert-remote-temporary-file-directory settings * lisp/emacs-lisp/ert-x.el (tramp-default-remote-shell) (tramp-encoding-shell): Declare. (tramp-methods) : Add `tramp-tmpdir'. Adapt `tramp-login-program' and `tramp-remote-shell'. 2026-05-22 Eli Zaretskii Fix warning message in 'markdown-ts-mode--initialize' * lisp/textmodes/markdown-ts-mode.el (markdown-ts-mode--initialize): Tweak the warning message when Tree-sitter is not available. (Bug#81100) 2026-05-22 Dmitry Gutov Fix "assertion 'GTK_IS_WINDOW (window)' failed" * src/gtkutil.c (xg_frame_set_size_and_position): Remove a gtk_window_resize call which used a wrong value type (GdkX11Window instead of GtkWindow). The original motivation for that line seems to be fixed by later changes (bug#80662). 2026-05-21 Dmitry Gutov [Xt] Fix child frame resizing glitch * src/widget.c (EmacsFrameResize): Exit early for child frames (bug#81077). 2026-05-21 João Távora Eglot: use standard face for completion annotations (bug#81088) * lisp/progmodes/eglot.el (eglot-completion-at-point): Use completions-annotations face, not font-lock-function-name-face. 2026-05-20 Juri Linkov Fix 'shr-outline-search' (bug#81073) * lisp/net/shr.el (shr-outline-search): Don't check for the beginning of the line. Suggested by Omar Antolín Camarena . Confirmed by Rahguzar . 2026-05-20 Michael Albinus Improve auth-source-backend-parse * lisp/auth-source.el (auth-source-backend-parse): Use `run-hook-wrapped'. Suggested by Augusto Stoffel . Transform a warning into a debug message. 2026-05-20 João Távora Eglot: announce markdown support for completion docs No reason not to. Tested with gfm-view-mode and markdown-ts-mode * lisp/progmodes/eglot.el (eglot-client-capabilities): Annouce markdown support for completion docs. 2026-05-20 Rahul Martim Juliato markdown-ts-mode: hide fence lines in view-mode (bug#81081) * lisp/textmodes/markdown-ts-mode.el (markdown-ts--fontify-delimiter): When `markdown-ts-hide-markup' is enabled in `markdown-ts-view-mode', also hide the whole line containing a `fenced_code_block_delimiter' (including its terminating newline) so Eldoc/LSP markdown snippets render without stray blank lines around the code block. Scoped to view-mode and to fenced delimiters on purpose: the same handler is shared by inline delimiters (emphasis, code span, link brackets) where munching surrounding whitespace would collapse word separators, and tuning rendering for hide-markup-while-editing is not a goal. 2026-05-20 João Távora markdown-ts-mode: align default face definitions with markdown-mode Match the out-of-the-box appearance of markdown-ts-mode to the non-tree-sitter markdown-mode package, making switching between modes less jarring. * lisp/textmodes/markdown-ts-mode.el (markdown-ts-delimiter) (markdown-ts-heading-1, markdown-ts-heading-2, markdown-ts-heading-3) (markdown-ts-heading-4, markdown-ts-heading-5, markdown-ts-heading-6) (markdown-ts-block-quote, markdown-ts-code-block, markdown-ts-code-span) (markdown-ts-indented-code-block, markdown-ts-html-tag) (markdown-ts-html-block, markdown-ts-thematic-break) (markdown-ts-entity-reference, markdown-ts-numeric-character-reference) (markdown-ts-table, markdown-ts-table-header, markdown-ts-table-cell) (markdown-ts-table-delimiter-cell, markdown-ts-language-keyword) (markdown-ts-list-marker, markdown-ts-hard-line-break-backslash) (markdown-ts-hard-line-break-backslash-hidden) (markdown-ts-hard-line-break-space-hidden) (markdown-ts-task-unchecked, markdown-ts-task-checked): Tweak. 2026-05-20 Stéphane Marks Fix markdown-ts-mode atx_heading face computation (bug#81042) The grammar reports leading spaces as part of the atx_heading "marker" and we cannot use the length of the marker as a result. Instead, count the number of consecutive # after any blanks to determine its "level." * lisp/textmodes/markdown-ts-mode.el (markdown-ts--fontify-atx-heading): Count the octothorpes rather than using the length of the marker node's text. 2026-05-20 Stéphane Marks Allow markdown-ts--run-command-in-code-block to ignore output (bug#81041) Do not assume every command run in 'markdown-ts--run-command-in-code-block' produces output that needs to be merged from the temp/work buffer into the source buffer. One example is 'xref-find-definitions', the temp buffer of which is unrelated to the source buffer. * lisp/textmodes/markdown-ts-mode.el (markdown-ts-code-block-commands): Add 'complete-symbol'. (markdown-ts-code-block-ignore-output-commands): New defvar. (markdown-ts--run-command-in-code-block): Ignore command output when necessary. 2026-05-19 Lin Sun hideshow: Menu entry for 'hs-toggle-all' * lisp/progmodes/hideshow.el: Menu entry for hs-toggle-all (bug#81045). 2026-05-18 Stefan Monnier doc/lispref/text.texi: Add complement to commit f4a1c006569f * doc/lispref/text.texi (Examining Properties): Mention the change in cursor-sensor-functions. 2026-05-18 João Távora Eglot: fix eglot--format-makrup when MARKUP just a string * lisp/progmodes/eglot.el (eglot--format-markup): Fix case where markup is string. 2026-05-18 F. Jason Park Fix missing margin face on display prop in erc-stamp * lisp/erc/erc-stamp.el (erc-insert-timestamp-right): Explicitly add face to right-hand stamp's `display' margin string. Commit d24b10ca "Introduce 'margin' face for window margin background" did away with the "fall-through" behavior in which a margin spec's string that lacks its own face property inherited whatever the associated `display' char happened to have. (Bug#80693) ;; The old language in "(elisp) Display Margins" said "if the ;; string to be displayed in the margin doesn't specify a face, its ;; face is determined using the same rules and priorities as it is ;; for strings displayed in the text area (see Displaying Faces)," ;; and that "if this results in undesirable 'leaking' of faces into ;; the margin, make sure the string has an explicit face specified ;; for it." It seems ERC and likely more than a few other packages ;; never came to heed this guidance and have erroneously depended ;; on such behavior for years if not decades. ;; ;; * 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: Update ;; snapshot. 2026-05-18 Sean Whitton vc-refresh-state: Override default-directory for backend functions I ran into the issue described in the comment with the current code in project-find-file-in and project-find-dir, when using 'C-x p p' to switch between projects. * lisp/vc/vc-hooks.el (vc-refresh-state): When calling into the backend, override any let-bindings of default-directory. 2026-05-18 João Távora Eglot: unbreak for treesit-less builds * lisp/progmodes/eglot.el (eglot--builtin-mdown-p): New helper. (eglot--accepted-formats) (eglot--format-markup): Use it. 2026-05-18 Joshua Murphy (tiny change) Get selected item in newsticker list view * lisp/net/newst-treeview.el (newsticker--treeview-get-selected-item): If an item is already selected, use it. (Bug#80972) 2026-05-17 Brian Leung Eglot: fix thinko in recent markdown-related commit (bug#81063) * lisp/progmodes/eglot.el (eglot--format-markup): Correct return value for gfm-view-mode. 2026-05-17 João Távora Jsonrpc: migrate more tests to Python subprocess fixtures All tests now use 'jsonrpc--with-python-fixture' with a Python3 subprocess instead of the in-Emacs TCP server. Changed the "harakiri" method to be a request instead of a notification for to reduce chance of "Sentinel hasn't run" warning. The two in-Emacs-RPC-specific error tests ('errors-with--32601' and 'signals-an--32603-JSONRPC-error') are dropped with the fixture itself, as the error paths they exercise are internal to the Emacs Lisp dispatcher and have no direct Python equivalent. They will have to be re-done later on in other form. * test/lisp/jsonrpc-resources/server-emacsrpc.py: New file. * test/lisp/jsonrpc-resources/server-anxious-nested.py: Use new harakiri. * test/lisp/jsonrpc-resources/server-emacsrpc.py: Use new harakiri. * test/lisp/jsonrpc-resources/server-harakiri.py: Use new harakiri. * test/lisp/jsonrpc-resources/server-remote-during-sync-1.py: Use new harakiri. * test/lisp/jsonrpc-resources/server-remote-during-sync-2.py: Use new harakiri. * test/lisp/jsonrpc-resources/server-remote-error.py: Use new harakiri. * test/lisp/jsonrpc-resources/common.py (harakiri): New definition. * test/lisp/jsonrpc-tests.el (jsonrpc--with-python-fixture): Rework, move up. (jsonrpc-connection-ready-p): Move up. (jsonrpc--call-with-emacsrpc-fixture) (jsonrpc--with-emacsrpc-fixture) (errors-with--32601) (signals-an--32603-JSONRPC-error): Remove. (returns-3, times-out, doesnt-time-out, stretching-it-but-works) (deferred-action-toolate, deferred-action-intime) (deferred-action-complex-tests): Migrate to Python fixture. (scontrol-remote-during-sync-1, scontrol-remote-during-sync-2) (scontrol-anxious-nested, scontrol-remote-error) (shutdown-clean-after-notification): Tweak. 2026-05-17 João Távora Eglot: add left-fringe code action indicator (bug#80326) The fringe indicator uses a custom lightning-bolt bitmap, an alternative to the margin indicator on GUI frames. It is non-interactive, however. * lisp/progmodes/eglot.el (eglot--fringe-action): New fringe bitmap. (eglot-code-action-indications): Add 'left-fringe' to default value and to docstring. Update incompatibility note. (eglot-code-action-suggestion): Handle 'left-fringe' indication. 2026-05-17 Michael Albinus Fix auth-source-backends-parse * lisp/auth-source.el (auth-source-backend-parse): Drop backends of type `ignore'. (Bug#81024) (auth-source-backends): Drop duplicate backends. 2026-05-17 Eli Zaretskii Fix updates of embedded formulas by 'calc-embedded-update-formula' * lisp/calc/calc-embed.el (calc-embedded-update): Use 'buffer-substring' to better track the string representation of the formula when it is being edited. Suggested by gnu@publik.slmail.me. Also, update commentary. (Bug#80901) 2026-05-16 Andrea Alberti Fill margins with 'margin' face on truncated screen lines * src/xdisp.c (display_line): Remove the unnecessary condition that row->used of the margin areas is zero, for when we call 'extend_face_to_end_of_line'. (Bug#80693) 2026-05-14 João Távora Eglot: adjust reference to completion frontends in manual * doc/misc/eglot.texi (Eglot Features): Rework. 2026-05-14 João Távora Eldoc: display documentation in visual-line-mode Documentation is overwhelmingly prose and intended to be viewed, not edited. Using visual-line-mode allows members of 'eldoc-doc-functions' to provide long lines that correctly fill to the window width. * lisp/emacs-lisp/eldoc.el (eldoc--format-doc-buffer): Use visual-line-mode. 2026-05-14 João Távora Eglot: prefer markdown-ts-view-mode for markup rendering (bug#80127) Eglot previously needed gfm-view-mode from markdown-mode.el to render Markdown from LSP servers. It now prefers markdown-ts-view-mode when available. * lisp/progmodes/eglot.el (eglot--accepted-formats): Recognize markdown-ts-view-mode as a Markdown renderer. (eglot--format-markup): Rework with cl-labels; prefer markdown-ts-view-mode over gfm-view-mode. * doc/misc/eglot.texi (Eglot Features): Don't mention markdown-mode directly. * etc/EGLOT-NEWS: Mention change 2026-05-14 Rahul Martim Juliato Use 'read-multiple-choice' in 'markdown-ts-mode' (bug#81027) Replace the "c" character-prompt interactive spec with 'read-multiple-choice', which presents named options instead of requiring users to decode the prompt string and type a single character. * lisp/textmodes/markdown-ts-mode.el (markdown-ts-table-align-column): Use 'read-multiple-choice'. Adjust ALIGN docstring punctuation. * lisp/textmodes/markdown-ts-mode-x.el (markdown-ts-toc-insert-template): Use 'read-multiple-choice'. 2026-05-14 Rahul Martim Juliato Fix 'markdown-ts-code-span' face (bug#81026) * lisp/textmodes/markdown-ts-mode.el (markdown-ts-code-span): Inherit from 'font-lock-keyword-face' rather than 'font-lock-string-face'. 2026-05-14 Rahul Martim Juliato Add read-only 'markdown-ts-view-mode' (bug#81023) This new derived mode is intended for consumers that render Markdown content for display rather than editing, such as Eglot and Eldoc when showing documentation popups and buffers. It pre-sets the relevant customizations (markup hidden, inline images on, hard-line-break markup hidden, native code-block fontification, table and code-block context minor modes off), makes the buffer read-only, and uses its own keymap derived from 'special-mode-map' so navigation keys behave like a viewer. A pre-init hook lets callers normalize buffer content before the grammar parses it; 'markdown-ts-add-final-newline' is the default so that markup depending on a terminating newline parses correctly. 'markdown-ts-buffer-string' returns the rendered buffer string with overlay faces flattened into text properties, which is useful for callers that capture the rendered output. Along the way: 'list_marker_parenthesis' is now recognized as an ordered list marker; the strikethrough query is simplified to a single rule; thematic breaks span the window via an ':extend' underline when the face supports it. * lisp/textmodes/markdown-ts-mode.el (markdown-ts-view-mode): New read-only derived mode. (markdown-ts-view-mode-map): New keymap. (markdown-ts-view-mode-pre-init-hook): New hook, defaulting to 'markdown-ts-add-final-newline'. (markdown-ts-mode--initialize): New helper, factored out of 'markdown-ts-mode' so 'markdown-ts-view-mode' can reuse the parser readiness and setup logic after overriding local variables. (markdown-ts-mode): Call 'markdown-ts-mode--initialize'. (markdown-ts-add-final-newline): New function. (markdown-ts-buffer-string): New function. (markdown-ts-unordered-list-marker): New defcustom. (markdown-ts-hard-line-break-backslash) (markdown-ts-hard-line-break-space): Accept the symbol 'hide. (markdown-ts--fontify-hard-line-break): Honor 'hide. (markdown-ts--fontify-atx-heading) (markdown-ts--fontify-setext-heading) (markdown-ts--fontify-atx-delimiter) (markdown-ts--fontify-unordered-list-marker) (markdown-ts--list-item-depth): New functions supporting clean rendering when markup is hidden. (markdown-ts--fontify-thematic-break): Use ':extend' underline span when the face supports it. (markdown-ts--resolve-display-value): Accept non-cons values. (markdown-ts--list-ordered-item-p): Also recognize 'list_marker_parenthesis'. (markdown-ts--range-settings): Mark markdown-inline embed as ':local t'. (markdown-ts--set-up): Create the markdown-inline parser only in the inline setup branch; drop the redundant 'markdown-ts-hide-markup' make-local-variable. (markdown-ts--treesit-settings): Route atx and setext headings to their dedicated fontifiers; route unordered list markers through 'markdown-ts--fontify-unordered-list-marker'; move 'strikethrough' to the simpler paragraph-inline query. 2026-05-13 Rahul Martim Juliato Fix strikethrough in 'markdown-ts-mode' (bug#80991) * lisp/textmodes/markdown-ts-mode.el (markdown-ts--treesit-settings): Add a new font-lock block for 'paragraph-inline' that handles strikethrough nodes more carefully. 2026-05-13 Rahul Martim Juliato Fix code-span in headings in 'markdown-ts-mode' (bug#80979) * lisp/textmodes/markdown-ts-mode.el (markdown-ts--treesit-settings): Move the 'code_span' and 'code_span_delimiter' font-lock rules into a separate block with ':override prepend' instead of 'append'. The heading feature (level 1) applies its face via 'font-lock-append-text-property', so a code span that later appends 'markdown-ts-code-span' ends up with '(markdown-ts-heading-N markdown-ts-code-span)', where the heading face takes priority and the code-span face is suppressed. Prepending ensures 'markdown-ts-code-span' appears first in the face list and wins visually. 2026-05-13 Stéphane Marks Make 'markdown-ts-inline-images' buffer local and test for GUI (bug#80978) * lisp/textmodes/markdown-ts-mode.el (markdown-ts-inline-images): Now buffer local. (markdown-ts--fontify-image): Defensively test for graphical display before rendering images. 2026-05-13 Michael Albinus * etc/NEWS: Mention new user option tramp-propagate-emacsclient-tramp. 2026-05-13 Michael Albinus Propagate EMACSCLIENT_TRAMP to remote hosts with Tramp * doc/misc/tramp.texi (Remote processes): Explain `tramp-propagate-emacsclient-tramp'. * lisp/net/tramp.el (tramp-remote-process-environment): Adapt docstring. (tramp-propagate-emacsclient-tramp): New defcustom. (tramp-handle-make-process): * lisp/net/tramp-sh.el (tramp-sh-handle-make-process) (tramp-sh-handle-process-file): Use it. * test/lisp/net/tramp-tests.el (tramp-test33-environment-variables): Adapt test. 2026-05-13 Stefan Monnier keyboard-tests.el: Try and fix the failure on EMBA * test/src/keyboard-tests.el (keyboard-sigint-to-quit): Fix a small race condition and avoid `sit-for` returning early. 2026-05-13 Stefan Monnier doc: Remove long obsolete references to `package-initialize` Since Emacs-27, `package-initialize` is for internal use only, and callers should either call `package-activate-all` instead (cheaper and faster) or do nothing at all (because the other functions should trigger the needed initialization automatically as needed). * doc/lispref/package.texi (Packaging Basics): Delete `package-initialize`. * doc/misc/eglot.texi (Reporting bugs): Don't recommend using `package-initialize`. * doc/misc/org.org (Using Emacs packaging system): Simplify the command line since both `(require 'package)` and `(package-initialize)` are redundant here. 2026-05-13 Sean Whitton vc-next-action: Call vc-delete-file on FILESET-ONLY-FILES * lisp/vc/vc.el (vc-next-action): Call vc-delete-file on FILESET-ONLY-FILES, not FILES (bug#80998). 2026-05-12 Elias Gabriel Perez hideshow: Support new 'margin' face for margin indicators. (Bug#80693) * lisp/progmodes/hideshow.el (hs-indicator-hide): Remove 'default' face. (hs--make-indicators-overlays): Rework. 2026-05-12 Juri Linkov Use the new 'margin' face in Flymake (bug#80693) * lisp/progmodes/flymake.el (flymake--bs-display): Use the 'margin' face when it's available. 2026-05-12 Sean Whitton vc-dir-resynch-file: Pass down non-truename'd FILE * lisp/vc/vc-dir.el (vc-dir-recompute-file-state): Delete recently introduced TRUENAME parameter. (vc-dir-resynch-file): Pass the file name from before calling file-truename to vc-dir-recompute-file-state. 2026-05-12 F. Jason Park Change ERC version for Emacs 31 to 5.6.2.31.1 * doc/misc/erc.texi: Change ERCVER to 5.6.2.31.1. * lisp/erc/erc.el: Change "Version" package header to 5.6.2.31.1. Don't update the `customize-package-emacs-version-alist' entry because this is not a GNU ELPA release. (erc-version): Change version to 5.6.2.31.1. Do not merge to master. 2026-05-11 Philip Kaludercic Fix 'sgml-parse-tag-backward' to handle tags in comments * lisp/textmodes/sgml-mode.el (sgml--find-<>-backward): Ignore SGML tags that happen to occur within comments. This also means that the contents of comments are not indented, but also do not affect the indentation of tags following the comments as well. (Bug#80841) 2026-05-11 Aidan Coyle (tiny change) Fix eww-submit for forms with no action (bug#80918) * lisp/net/eww.el (eww-submit): If a form does not specify an action the assumed action is the current URL. If the current URL has an existing query part, that part must be replaced by the form values, rather than appended to. 2026-05-11 Elias Gabriel Perez * lisp/progmodes/hideshow.el (hs--set-variable): Use 'set-local' (bug#80999) 2026-05-11 Juri Linkov Fix Completions buffer disappearing with tmm-menubar (bug#80995) * lisp/minibuffer.el (completions--start-background-update): Cancel a possible leftover timer (e.g. from the previous after-change hook) that would suppress the display of *Completions* when 'completion-eager-update' is nil. (completions--after-change): Don't start background update when not required to automatically update *Completions*. 2026-05-11 Michael Albinus Fix secrets.el when Emacs is a flatpak * doc/misc/dbus.texi (Flatpak integration): New chapter. * lisp/net/secrets.el (top): Protect against wrong signals in the flatpak case. (Bug#80977) 2026-05-11 Philip Kaludercic Fix 'prepare-user-lisp' to follow symlinks * lisp/startup.el (prepare-user-lisp): Call 'directory-files-recursively' with a non-nil value for FOLLOW-SYMLINKS. This was the intended way for the function to operate, during the planning phase, so that users could structure their User Lisp directory by linking in Lisp directories from other parts of their file system. 2026-05-11 Philip Kaludercic Update "timeout" to 2.1.6 See https://lists.gnu.org/archive/html/emacs-devel/2026-05/msg00033.html. 2026-05-11 Dmitry Gutov [GTK3, HiDPI] Fix width/height round-trip through ConfigureNotify * src/gtkutil.c (xg_frame_set_char_size) (xg_frame_set_size_and_position): Truncate WIDTH and HEIGHT to be multiples of the scale factor (bug#80662). 2026-05-11 Dmitry Gutov [GTK3] On Expose, repaint the border before the content * src/xterm.c (handle_one_xevent): Move the x_clear_under_internal_border call before expose_frame, for less chance of implicit flush to screen in between (bug#80662). 2026-05-10 Pip Cet Test read-passwd behavior (bug#80838) * test/lisp/auth-source-tests.el (auth-source-test--displayed-string): (auth-source-test-read-passwd): (auth-source-test-read-passwd-revealed): (auth-source-test-read-passwd-nested): New. 2026-05-10 Pip Cet Fix nested read-passwd calls (bug#80838) Calls to 'read-passwd' may be nested. The old code didn't handle that, because some of the state was global and we'd end up revealing passwords. The new code still has global state, but it has been changed so that we hide rather than reveal passwords when we enter or leave a nested read-passwd prompt. * lisp/auth-source.el (read-passwd--hide-password): Removed. (read-passwd--password-hidden): New. (read-passwd-toggle-visibility): Add optional FORCE argument. (read-passwd--mini-buffers): New variable. (read-passwd-mode): Don't modify mode line when nested. Hide password when returning to nested minibuffer or entering a new one. 2026-05-09 Pip Cet Fix terminal emulation of "ESC [ K" sequence * lisp/term.el (term-erase-in-line): Don't immediately delete the newly inserted characters. 2026-05-09 Eli Zaretskii Fix vertical-motion across overlay strings with embedded newlines * src/indent.c (Fvertical_motion): Handle the case of an overlay string on invisible text at point. (Bug#80989) 2026-05-09 Morgan Smith Mark gnus-dbus.el as obsolete This functionality has been replaced by the new sleep library which supports more then just DBUS systems. * lisp/obsolete/gnus-dbus.el: Add Obsolete-since header. Add commentary. (gnus-dbus-close-on-sleep, gnus-dbus-sleep-registration-object) (gnus-dbus-register-sleep-signal gnus-dbus-sleep-handler) (gnus-dbus-unregister-sleep-signal): Mark as obsolete. 2026-05-09 Morgan Smith Move gnus-dbus.el to obsolete/gnus-dbus.el * lisp/gnus/gnus-dbus.el: Move from here... * lisp/obsolete/gnus-dbus.el: ...to here. 2026-05-09 Morgan Smith Gnus: Use new sleep library * etc/NEWS: Announce. * lisp/gnus/gnus-start.el: Don't require gnus-dbus. (gnus-sleep-handler): New function. (gnus-close-on-sleep): New variable. (gnus-1): Add `gnus-sleep-handler' to `system-sleep-event-functions' when `gnus-close-on-sleep' is non-nil. * doc/misc/gnus.texi: Update documentation. 2026-05-09 Eli Zaretskii Fix Rmail behavior wrt globalized minor modes Previously, "M-x rmail" would not call 'run-mode-hooks', which didn't let globalized minor modes a chance to turn on themselves in Rmail buffers. This modifies the way Rmail runs the various hooks so as to abide by behavior required by Emacs 30 and later. * lisp/mail/rmail.el (rmail-mode-2): Call 'run-mode-hooks'. (rmail-mode): Call 'run-hooks', not 'run-mode-hooks'. Suggested by Mark Lillibridge . (Bug#80879) 2026-05-09 Eli Zaretskii Fix display images in the display margins * src/xdisp.c (handle_single_display_spec): Set the iterator face to use 'margin' when displaying in the margins. (Bug#80693) 2026-05-09 João Távora Eglot: fix eglot--sig-info with non-UTF-32 positionEncoding Github-reference: https://github.com/joaotavora/eglot/discussions/1588 When the server negotiates positionEncoding utf-8 or utf-16, ParameterInformation.label vector offsets are byte/code-unit counts into the signature label, not character counts. Using them raw caused wrong highlights and crashes on Unicode-rich signatures. * lisp/progmodes/eglot.el (eglot--sig-info): Mostly rewrite. (eglot-move-to-utf-8-linepos-function): Tweak docstring. (eglot-move-to-utf-8-linepos, eglot-move-to-utf-16-linepos): Return position moved to. 2026-05-08 Alan Third [NS] Fix deprecated variable (bug#80985) * src/nsterm.h (NSLevelIndicatorStyleContinuousCapacity): Define in macOS < 10.15. 2026-05-08 Dmitry Gutov vc-switch-working-tree: Use project-current again * lisp/vc/vc.el (vc-switch-working-tree): Use project-current instead of manually constructing VC project objects. 2026-05-08 Stéphane Marks treesit-explore-mode usability improvements (bug#80935) Improve the usability of treesit-explore-mode. - Prompt for the primary parser first, if there is one, rather than the first in the list reported by 'treesit-parser-list'. Previously, in a multi-parser buffer like 'markdown-ts-mode', one had to hunt for the primary parser. - Kill the tree buffer and its window if the source buffer is killed or 'treesit-explore-mode'. Previously, when 'treesit-explore-mode' is disabled in the source buffer, its companion explorer tree buffer was left dangling and window open (with an unrelated buffer). - Improve 'treesit--explorer-refresh-1' to recenter the window around the selected nodes when the selected region in the source buffer changes. Previously, one had to navigate manually to find the corresponding highlighted node in the tree window which may be far away from that the source buffer's region represents. - Disable 'treesit-explore-mode' in the source buffer if its companion tree buffer is killed. Previously, 'treesit-explore-mode' remained active in the source buffer in an effectively unusable state. - Disable 'treesit-explore-mode' if the user quits 'completing-read' in 'treesit-explorer-switch-parser' when enabling the mode. Previously, 'treesit-explore-mode' was left enabled after quit. - New command to switch back and forth between the source buffer and tree buffer windows to make navigating more convenient. Previously, in a multi-window frame, one had to navigate to/from these two related windows in a more cumbersome way. - New command to quit 'treesit-explore-mode' and 'treesit--explorer-tree-mode' and handle buffer and window cleanup. * lisp/treesit.el (treesit--explorer-refresh-1): Recenter the window, if amenable, to the node selected in the source buffer. (treesit--explorer-kill-explorer-buffer): Remove function. (treesit--explorer-generate-parser-alist): Prioritize the primary parser, if there is one. (treesit--explorer-tree-mode-cleanup): New defun. (treesit-explore-quit): New command. (treesit-explorer-tree-window): New defun. (treesit-explorer-source-buffer-window): New defun. (treesit-explore-mode-map): Revise key bindings. (treesit--explorer-tree-mode-map): Revise key bindings. (treesit--explorer-tree-mode): New keymap. (treesit-explorer-switch-parser): Add a default to completing-read. (treesit-explore-mode): Guard completing read quit. Wire up the new cleanup functions. 2026-05-07 João Távora Fix 'vc-dir-resynch-file' again (bug#80967) This unbreak project-vc-dir for dirs under non-truename hierarchies. The following commit presumably makes 'M-x vc-dir' usable again for versioned directories inside non-truename hierarchies, commit e05fab5775c96f8f88eab8d75dea40253bfb78eb Author: Stephen Berman Date: Sat May 2 15:11:37 2026 +0200 Fix 'vc-dir-resynch-file' (bug#80803) * lisp/vc/vc-dir.el (vc-dir-resynch-file): Apply 'file-truename' instead of 'expand-file-name' to FNAME argument to prevent spurious display of symlinked files in *vc-dir* buffer. However the similar command 'M-x project-vc-dir' was broken and made unusable in similar circumstances. This relatively simple fix addresses both situations touching only the problematic 'vc-resynch-file' and one of its callees, 'vc-dir-recompute-file-state', which now discerns clearly between the short/familiar name to present in the list and the "fname" to use to 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. * lisp/vc/vc-dir.el (vc-dir-resynch-file): Call vc-dir-recompute-file-state with truename=t. (vc-dir-recompute-file-state): Accept optional truename param. 2026-05-07 Sean Whitton Cut the emacs-31 release branch * README: * configure.ac: * exec/configure.ac: * java/AndroidManifest.xml.in (Version-code): * msdos/sed2v2.inp: * nt/README.W32: Bump Emacs version to 31.0.60. * lisp/cus-edit.el (customize-changed-options-previous-release): Set last version to 30.2. 2026-05-07 Zeke Dou (tiny change) Move ns_init_colors() after init_callproc() (bug#80752) 'data-directory' needs to be established in advance of 'ns_init_colors' to ensure the file "etc/rgb.txt" is read. This was encountered on an out-of-tree Nix build. * src/emacs.c (main): Move the 'ns_init_colors' after 'init_callproc'. 2026-05-07 Jonas Bernoulli Update to Transient v0.13.3-10-g87d0ca08 2026-05-07 Eli Zaretskii Fix infloop in redisplay due to continuation glyphs * src/xdisp.c (display_line): When inserting continuation glyphs, account for the border glyph in non-rightmost windows on TTY frames. (Bug#80975) 2026-05-07 Sean Whitton Unpreload package-activate-all See for my reasoning. * lisp/emacs-lisp/package-activate.el (package-activate-all): Unpreload. 2026-05-07 Dmitry Gutov [GTK3] Move the frame to position before showing * src/xterm.c (x_make_frame_visible): Move XMoveWindow call before gtk_widget_show_all, so that the move happens before the frame become visible (bug#80662). 2026-05-07 Dmitry Gutov [GTK3] Improve the resize -> hide -> show scenario * src/gtkutil.c (xg_frame_set_char_size) (xg_frame_set_size_and_position): Call gtk_window_resize for child frames too, to record _GtkWindowGeometryInfo#resize_width and resize_height. They are later looked up by gtk_widget_show_all in x_make_frame_visible (bug#80662). Without this the widgets go back and forth between the remembered and actual sizes after make-visible. 2026-05-06 Michael Albinus Handle long environment variables in Tramp oricesses * lisp/net/tramp-sh.el (tramp-sh-handle-make-process): Handle loooong environment variables. (Bug#80783) * test/lisp/net/tramp-tests.el (tramp-test33-environment-variables): Adapt test. 2026-05-06 Dmitry Gutov Fix flicker of child frame right after make-frame-visible * src/xterm.c (x_make_frame_visible): Call SET_FRAME_GARBAGED before making a child frame visible (bug#80943). 2026-05-05 Stefan Monnier (help--symbol-completion-table): Try and fix bug#80873 * lisp/help-fns.el (help--symbol-completion-table): Don't let `test-completion` pretend that `definition-prefixes` are actually valid function names. 2026-05-05 Juri Linkov Improve 'context-menu-send-to' (bug#79512) * lisp/mouse.el (context-menu-functions): Add missing 'context-menu-send-to' to :type. (context-menu-send-to): Get non-nil items to avoid useless message "Nothing to send". * lisp/send-to.el (send-to-handlers): Change from 'defvar-local' to 'defvar' to allow easier global configuration. (send-to-supported-p): Check for non-nil handler. 2026-05-05 Sean Whitton vc-switch-working-tree: Don't find non-VC projects * lisp/vc/vc.el (project-current-directory-override): Delete declaration. (project-find-matching-buffer-function): Declare. (vc-switch-working-tree): Don't find non-VC projects (bug#80939). 2026-05-05 Sean Whitton vc-finish-logentry: Skip displaying async command buffer sometimes * lisp/vc/vc-dispatcher.el (vc-finish-logentry): Don't display the async command buffer if vc-display-failed-async-commands is non-nil. 2026-05-05 Eshel Yaron elisp-mode: Cache 'help-echo' function results (bug#80948) This ensures we only compute the 'help-echo' string once per symbol in a certain position. * lisp/progmodes/elisp-mode.el (elisp--annotate-symbol-with-help-echo): Add caching for when the symbol role's :help property is a function. 2026-05-05 Andrea Alberti Introduce 'margin' face for window margin background A new basic face 'margin' is used for text displayed in the left and right margin areas, i.e., the areas typically used by VCS and LSP packages for per-line annotations. Its background defaults to the frame default, preserving existing behavior for users who do not customize it. * etc/NEWS: Document the new 'margin' face. * lisp/faces.el (margin): Add 'margin' face, inheriting from 'default'. * src/dispextern.h (face_id): Add MARGIN_FACE_ID. * src/xdisp.c (face_at_pos): Use 'margin' as the base face for strings displayed in margin areas so that they inherit the gutter background by default. (extend_face_to_end_of_line): Compute 'margin_fill_face_id' from the 'margin' face. Use while loops to explicitly fill all empty character slots in both left and right margins for both GUI and TTY branches. (display_line): Call 'extend_face_to_end_of_line' for beyond-EOB rows when the window has margins. Also extend the existing condition for text rows with empty margins to trigger when the 'margin' face background differs from the frame default, not only when the default face is remapped. * src/xfaces.c (realize_basic_faces): Realize 'margin' as a basic face to support face-remapping and efficient lookup. (Bug#80693) 2026-05-05 Augusto Stoffel Accept stream type as 4th argument of X-Message-SMTP-Method header * lisp/gnus/message.el (message-multi-smtp-send-mail): Set 'smtpmail-stream-type' if specificed in the header. * doc/misc/message.texi (Mail Variables): Document that. (Bug#80880) 2026-05-05 Rahul Martim Juliato Stéphane Marks Improve 'markdown-ts-mode' Overhaul 'markdown-ts-mode' with comprehensive fontification, code block handling, editing commands, fill-paragraph support, inline image previews, a mode menu, and table editing. Add 'markdown-ts-mode-x.el' with conversion/export and TOC support. * lisp/textmodes/markdown-ts-mode.el: Add Version, Package-Requires, and Keywords header fields. Expand Commentary with documentation for code block language modes, code block commands, bidirectional text, and known tree-sitter grammar bugs. (require 'goto-addr, xref, icons): New requirements. (markdown-ts): New customization group with :version and :package-version tags. (markdown-ts-hide-markup): Add :version and :package-version. (markdown-ts-ellipsis): New option for folded heading ellipsis. (markdown-ts-menu-bar-show): New option to toggle mode menu. (markdown-ts-default-folding): New option for default fold level. (markdown-ts-inline-images): New option to display inline images. (markdown-ts-image-max-width): New option for image max width. (markdown-ts-display-remote-inline-images): New option for remote image handling. (markdown-ts--resolve-display-value): New helper to resolve display values using char-displayable-p. (markdown-ts-checked-checkbox): New option for checked checkbox display string or icon. (markdown-ts-checked-checkbox-icon): New icons.el icon for the checked variant. (markdown-ts-unchecked-checkbox): New option for unchecked checkbox display string or icon. (markdown-ts-unchecked-checkbox-icon): New icons.el icon for the unchecked variant. (markdown-ts-thematic-break-character): New option for thematic break display character. (markdown-ts-hard-line-break-backslash): New option for the glyph shown in place of a trailing-backslash hard line break when markup is hidden. (markdown-ts-hard-line-break-space): New option for the glyph shown in place of a trailing-spaces hard line break when markup is hidden. (markdown-ts-code-block-in-context-mode-lighter): New option for code block context mode lighter string. (markdown-ts-inhibit-code-block-mode-warnings): New option to inhibit code-block major-mode messages and warnings. (markdown-ts-table-default-column-width): New option for default table column width. (markdown-ts-enable-table-mode): New option to enable table mode. (markdown-ts-table-auto-align): New option for triggers that cause automatic table alignment. (markdown-ts-table-align-features): New option for table align features. (markdown-ts-in-table-mode-lighter): New option for markdown-ts-in-table-mode lighter string. (markdown-ts-emphasis, markdown-ts-bold) (markdown-ts-strikethrough, markdown-ts-link) (markdown-ts-link-destination, markdown-ts-code-span) (markdown-ts-code-block, markdown-ts-code-block-markup-hidden) (markdown-ts-indented-code-block, markdown-ts-html-tag) (markdown-ts-html-block, markdown-ts-thematic-break) (markdown-ts-entity-reference) (markdown-ts-numeric-character-reference, markdown-ts-latex) (markdown-ts-table-header, markdown-ts-table-cell) (markdown-ts-table-delimiter-cell, markdown-ts-task-unchecked) (markdown-ts-task-checked): New faces. (markdown-ts-hard-line-break-backslash) (markdown-ts-hard-line-break-backslash-hidden) (markdown-ts-hard-line-break-space) (markdown-ts-hard-line-break-space-hidden): New faces for the two hard-line-break variants, with distinct shown/hidden appearances. (markdown-ts-in-code-block): New face for when point is inside a fenced code block. (markdown-ts-table): New face for Markdown pipe table background. (markdown-ts-in-table): New face for markdown-ts-in-table-mode when point is in a table. (markdown-ts--set-up-inline): New variable for lightweight setup in embedded inline markdown-ts-mode buffers used by code block commands. (markdown-ts-default-code-block-mode): New variable to define default mode for anonymous code blocks. (markdown-ts-fontify-code-blocks-natively): New option to enable/disable native fontification of fenced code block contents. (markdown-ts-enable-code-block-context-mode): New option to enable/disable code block context integration. (markdown-ts-code-block-modes): New variable replacing markdown-ts--code-block-language-map and markdown-ts-code-block-source-mode-map with unified language to mode mapping including heuristic lookup. (markdown-ts-code-block-force-conventional-modes): New variable listing tree-sitter modes whose fontification of code block content should be harvested via a temporary buffer. (markdown-ts-table-export-buffer): New constant for table export output buffer name. (markdown-ts--table-row-types, markdown-ts--table-cell-types) (markdown-ts--table-delimiter-cell-types) (markdown-ts--table-delimiter-cell-subtypes): New constants for pipe table node type classification. (markdown-ts--make-link-button): New function to create clickable link buttons with mailto, browse-url, and find-file dispatch. (markdown-ts--fontify-link-destination): New fontifier that hides link destinations when markup is hidden. (markdown-ts--link-ref-cache, markdown-ts--link-ref-cache-tick) (markdown-ts--link-ref-definitions) (markdown-ts--resolve-link-ref): New link reference definition cache with case-insensitive matching per CommonMark spec. (markdown-ts--fontify-link-node): New fontifier for inline, reference, shortcut, and collapsed links as clickable buttons. (markdown-ts--fontify-autolink): New fontifier for URI and email autolinks with angle bracket hiding. (markdown-ts--fontify-link-ref-label) (markdown-ts--fontify-link-ref-destination): New fontifiers for link reference definitions. (markdown-ts--slug-github-strip-re, markdown-ts--slug-github) (markdown-ts--slug-pandoc, markdown-ts--explicit-id-re) (markdown-ts--heading-text-and-id) (markdown-ts--heading-id-cache) (markdown-ts--heading-id-cache-tick) (markdown-ts--build-heading-ids, markdown-ts--heading-ids) (markdown-ts--follow-fragment): New fragment link support with GitHub and Pandoc slug algorithms. (markdown-ts--latex-block-valid-p) (markdown-ts--fontify-latex-block): New LaTeX/math fontifier with cross-paragraph validation. (markdown-ts--fontify-backslash-escape): New fontifier that hides backslash in escapes except inside LaTeX blocks. (markdown-ts--decode-entity, markdown-ts--fontify-entity): New HTML entity decoder and fontifier using org-entities and sgml-char-names with display property for decoded values. (markdown-ts--fontify-checkbox): New fontifier showing the configured checkbox glyph when markup is hidden. (markdown-ts--fontify-hard-line-break): New fontifier for 'hard_line_break' nodes. (markdown-ts--fontify-heading): New fontifier for ATX and Setext headings. (markdown-ts--fontify-thematic-break): New fontifier showing horizontal line when markup is hidden. (markdown-ts--fontify-code-block): New fontifier applying background overlay to code blocks with language and mode properties. (markdown-ts-at-code-block-p) (markdown-ts-code-block-language-at) (markdown-ts-code-block-mode-at): New accessors for code block overlay properties. (markdown-ts--imenu-code-block-node-p): New helper for imenu code block detection. (markdown-ts--image-alone-on-line-p) (markdown-ts--fontify-image): New inline image display with standalone and inline positioning. (markdown-ts--bare-url-regexp) (markdown-ts--bare-email-uri-regexp) (markdown-ts--fontify-bare-uri): New bare URL/email fontification via jit-lock using goto-addr regexps. (markdown-ts--treesit-settings): Rewrite with dedicated faces, custom fontifiers, and new font-lock features for all inline and block elements. Also add a new 'error' font-lock feature highlighting tree-sitter ERROR nodes. (markdown-ts--code-block-languages) (markdown-ts--code-block-non-ts-modes): New buffer-local alists for code block language tracking. (markdown-ts--harvest-mode-treesit-configuration): Rename from markdown-ts--harvest-treesit-configs with delay-mode-hooks. (markdown-ts--configure-current-buffer): Rename from markdown-ts--add-config-for-mode. (markdown-ts--language-at-node): New helper extracting language symbol from code_fence_content node. (markdown-ts--non-ts-fontify-cache): New buffer-local hash table caching fontification results for non-tree-sitter code blocks. (markdown-ts--fontify-non-ts-collect-faces): New function harvesting face properties from a mode in an indirect or temporary buffer. (markdown-ts--fontify-non-ts-code-block): New fontifier for non-tree-sitter modes via temporary buffer font-lock. (markdown-ts--code-block-language-mode): New function with heuristic mode name probing. (markdown-ts--code-block-ts-language): Rename from markdown-ts--convert-code-block-language with support for non-ts modes and recursive markdown handling. (markdown-ts-code-block-commands) (markdown-ts-code-block-thing-commands) (markdown-ts-code-block-region-commands): New command lists for code-block context execution. (markdown-ts--enable-code-block-in-context-mode) (markdown-ts--maybe-run-command-in-code-block) (markdown-ts--code-block-xref-find-definitions) (markdown-ts--run-command-in-code-block): New code block minor mode with temp-buffer command dispatch. (markdown-ts--code-block-newline): New command for newline inside code blocks, dispatching to the block's mode. (markdown-ts--range-settings): Update range configuration; remove :range-fn treesit-range-fn-exclude-children. (markdown-ts--remove-image-overlays) (markdown-ts--outline-view-change): New helpers for image overlay management during outline fold/unfold. (markdown-ts--outline-invisible-p): New helper testing whether a position is inside an outline-folded region. (markdown-ts--host-ranges-notifier): New function pruning stale code block overlays when the host parse tree changes. (markdown-ts--barf-if-not-mode): New helper signaling a user-error when the current buffer is not derived from markdown-ts-mode. (markdown-ts-code-block-in-context-mode): New minor mode enabled when point is within a fenced code block, activating markdown-ts-code-block-in-context-mode-map so eligible commands dispatch to the block's major mode. (markdown-ts--set-hide-markup): Clear image overlays when toggling markup visibility. (markdown-ts--set-inline-images) (markdown-ts-toggle-inline-images): New functions for toggling inline image display. (markdown-ts--parser-heading-max-level): New constant. (markdown-ts--heading-at-point, markdown-ts--heading-level) (markdown-ts--section-at-point): New heading navigation helpers. (markdown-ts-promote, markdown-ts-demote): New commands for heading and list item promotion/demotion with region support. (markdown-ts--promote-or-demote) (markdown-ts--promote-or-demote-region): New heading level adjustment functions. (markdown-ts-move-subtree-up, markdown-ts-move-subtree-down): New commands for moving sections and list items. (markdown-ts--section-folded-p) (markdown-ts--move-subtree-up-or-down): New subtree move with folding state preservation. (markdown-ts-toggle-checkbox): New command to toggle task list checkboxes. (markdown-ts--list-item-at-point): New helper with block quote marker handling. (markdown-ts--list-marker-width, markdown-ts--list-item-region) (markdown-ts--list-ordered-item-p): New list item helpers. (markdown-ts--list-promote-or-demote): New function with ordered list nesting guard. (markdown-ts--list-node-bol, markdown-ts--list-move): New list item movement functions. (markdown-ts-renumber-list): New command for sequential list renumbering with prefix argument support. (markdown-ts--list-item-new-marker) (markdown-ts--new-marker-for-line): New marker string generators for list item insertion. (markdown-ts--line-block-quote-depth): New helper counting block quote depth. (markdown-ts-newline): New RET command for context-aware newline. (markdown-ts-insert-list-item): New M-RET command that creates a new list item. (markdown-ts--fill-unfillable-block-query): New tree-sitter query for unfillable blocks. (markdown-ts--list-item-text-column): New helper for list item text alignment. (markdown-ts--fill-list-item): New function filling within list items without merging adjacent items. (markdown-ts--adaptive-fill): New adaptive fill function for list item continuation. (markdown-ts--fill-forward-paragraph): New paragraph motion respecting list items and unfillable blocks. (markdown-ts-fill-paragraph): New fill-paragraph-function with cond* dispatch for lists, block quotes, HTML comments, and unfillable blocks. (markdown-ts--fill-html-comment): New HTML comment filler with continuation alignment. (markdown-ts--block-quote-prefix): New helper preserving existing block quote marker style. (markdown-ts--fill-block-quote): New block quote filler with list item text column alignment. (markdown-ts-emphasis-alist): New alist of emphasis markers. (markdown-ts--emphasis-node-at-point): New tree-sitter based emphasis detection. (markdown-ts-remove-emphasis): New command removing emphasis at point or region. (markdown-ts-emphasize): New interactive emphasis insertion with region wrapping and word-at-point support. (markdown-ts-insert-structure): New command for inserting code blocks, block quotes, and dividers. (markdown-ts--insert-code-block): New function with language completion from known modes. (markdown-ts--insert-block-quote): New function with region wrapping. (markdown-ts--insert-divider): New function for horizontal rules. (markdown-ts--apply-ellipsis): New function applying custom ellipsis via display table. (markdown-ts--set-up): Rename from markdown-ts-setup. (markdown-ts-outline-cycle): New TAB command cycling outline visibility on headings. (markdown-ts-mode-map): New keymap for code block navigation, bindings for heading navigation, structure editing, emphasis, and list operations. (markdown-ts-code-block-in-context-mode-map): New keymap for code block context. (markdown-ts-mode-menu): New menu bar with Show/Hide, Navigate Headings, Edit Structure, and Editing sections. (markdown-ts-mode): Add outline-minor-mode, ellipsis, folding, fill-paragraph integration, code-block-context-mode hooks, comment settings, and outline-view-change-hook. Use markdown-ts-mode directly in auto-mode-alist instead of markdown-ts-mode-maybe. (markdown-ts-mode-install-parsers): New command for installing required and optional tree-sitter language grammars. (markdown-ts-code-block-context-mode): New minor mode for code block context. (markdown-ts--find-code-block-delimiter) (markdown-ts--find-next-code-block-delimiter): New helpers for locating fenced code block delimiter nodes. (markdown-ts-move-to-next-code-block) (markdown-ts-move-to-previous-code-block): New commands for navigating between fenced code blocks. (markdown-ts--table-abutting-pos, markdown-ts--table-node-cell) (markdown-ts--table-node-row, markdown-ts--table-parse-error-p): New pipe table node helpers. (markdown-ts-at-table-p): New predicate returning non-nil when point is at or within a pipe table. (markdown-ts--enable-in-table-mode): New helper enabling markdown-ts-in-table-mode from post-command-hook. (markdown-ts--table-body-row-near-pos): New helper locating the nearest body row to a position. (markdown-ts--table-compute-node-column) (markdown-ts-table--goto-column): New helpers for column-based table navigation. (markdown-ts--table-aligners, markdown-ts--table-make-aligner) (markdown-ts--table-align-cell): New table cell alignment helpers. (markdown-ts-table-insert-table): New command to insert a pipe table with configurable rows and columns. (markdown-ts-table-delete-table): New command to delete the pipe table at point. (markdown-ts-table-previous-row, markdown-ts-table-next-row) (markdown-ts-table-previous-cell, markdown-ts-table-next-cell): New commands for navigating table rows and cells. (markdown-ts-table-insert-row-below) (markdown-ts-table-insert-row-above) (markdown-ts-table-clone-row-below) (markdown-ts-table-clone-row-above) (markdown-ts-table-insert-row): New commands for inserting and cloning table rows. (markdown-ts-table-delete-row, markdown-ts-table-move-row-up) (markdown-ts-table-move-row-down, markdown-ts-table-move-row): New commands for deleting and moving table rows. (markdown-ts-table-insert-column-left) (markdown-ts-table-insert-column-right) (markdown-ts-table-clone-column-left) (markdown-ts-table-clone-column-right) (markdown-ts-table-insert-column): New commands for inserting and cloning table columns. (markdown-ts-table-delete-column) (markdown-ts-table-move-column-left) (markdown-ts-table-move-column-right) (markdown-ts-table-move-column): New commands for deleting and moving table columns. (markdown-ts-table-align-column-left) (markdown-ts-table-align-column-center) (markdown-ts-table-align-column-right) (markdown-ts-table-align-column): New commands for setting column alignment. (markdown-ts-table-align-table): New command to align all columns in the table at point. (markdown-ts-table-transpose-table): New command to transpose the table at point. (markdown-ts-table-convert-csv-region) (markdown-ts-table-convert-tsv-region) (markdown-ts-table-convert-region): New commands to convert delimited text regions to pipe tables. (markdown-ts-table-export-table-csv) (markdown-ts-table-export-table-tsv) (markdown-ts-table-export-table): New commands to export the pipe table at point to CSV or TSV format. (markdown-ts-in-table-mode-map): New keymap for markdown-ts-in-table-mode. (markdown-ts--code-block-in-context-mode-ov): New buffer-local variable for code block context overlay. (markdown-ts--code-block-in-context-mode-update-ov): New function updating the code block context overlay. (markdown-ts-in-table-mode): New minor mode enabled when point is within a pipe table, activating markdown-ts-in-table-mode-map. (markdown-ts--in-table-mode-ov) (markdown-ts--in-table-mode-get-ov) (markdown-ts--table-tick-update) (markdown-ts--table-tick-stale-p) (markdown-ts--in-table-mode-update-ov): New helpers supporting markdown-ts-in-table-mode overlay management. (markdown-ts-table-mode): New minor mode providing table editing commands and auto-alignment. (markdown-ts-mode-maybe): Remove; auto-mode-alist now uses markdown-ts-mode directly. Auto-mode-alist: Add .markdown and .mdx extensions. * lisp/textmodes/markdown-ts-mode-x.el: New file providing extra features for markdown-ts-mode. (markdown-ts-commonmark-spec-url, markdown-ts-gfm-spec-url): New constants for CommonMark and GFM specification URLs. (markdown-ts-browse-commonmark-spec) (markdown-ts-browse-gfm-spec): New commands to browse the CommonMark and GFM specifications. (markdown-ts-convert): New customization group for Markdown conversion/export features. (markdown-ts-default-converter): New option to set the default format and converter for Markdown export. (markdown-ts-convert-display-function): New option specifying the function used to display converted output. (markdown-ts-converters): New variable listing format/converter configurations for pandoc, cmark, cmark-gfm, markdown, and markdown.pl. (markdown-ts-convert-file, markdown-ts-convert): New commands to convert Markdown buffers or files to HTML, PDF, and other formats via external converters. (markdown-ts-toc): New customization group for table of contents features. (markdown-ts-toc-generate-warn-if-none): New option controlling behavior when no TOC is found during generation. (markdown-ts-toc-update-before-save-mode-lighter): New option for the before-save TOC update minor mode lighter string. (markdown-ts-toc-slug-function): New option to select the slug algorithm used for TOC heading anchors. (markdown-ts--toc-handles, markdown-ts--toc-handle-classes): New variables defining TOC handle types and classes. (markdown-ts--toc-expand-candidate-handles, markdown-ts--tocs) (markdown-ts--tocs-sanity-check) (markdown-ts--toc-collect-candidates) (markdown-ts--toc-list-item-depth) (markdown-ts--toc-atx_header-normalize) (markdown-ts--toc-text-normalizers) (markdown-ts--toc-text-normalize): New internal helpers for TOC parsing and text normalization. (markdown-ts-toc-update-before-save-mode): New minor mode that regenerates tables of contents before saving. (markdown-ts-toc-clear-and-remove, markdown-ts-toc-clear): New commands to remove or clear TOC bodies. (markdown-ts-toc-insert-template): New command to insert a TOC template at point. (markdown-ts-toc-generate): New command to generate tables of contents in the current buffer. Includes fixes for: (bug#80613) (bug#80625) (bug#80690) 2026-05-05 Stefan Monnier nadvice.el: Make it easier to find how to change an interactive-form * lisp/emacs-lisp/nadvice.el (advice--how-alist): Add ':interactive-only'. * doc/lispref/functions.texi (Advice Combinators): Document it. (Core Advising Primitives): Use it. 2026-05-05 Stefan Monnier lisp/emacs-lisp/lisp-mode.el (lisp-fdefs): Avoid obsolete "face vars" 2026-05-04 Stefan Monnier keyboard.c: Allow SIGINT to `quit` in batch mode, instead of exit In terminal sessions, SIGINT is turned into a `quit` ELisp signal, but in batch it has traditionally killed Emacs. It can be very useful to cause a `quit` from outside the process when running in batch (e.g. for "batch" sessions that provide a REPL via stdin/out), so add a new var 'kill-emacs-on-sigint' to control that behavior. (bug#80942) * src/keyboard.c (handle_interrupt_signal): Obey `kill_emacs_on_sigint`. (init_keyboard): Use `deliver_interrupt_signal` for SIGINT also for batch sessions. (syms_of_keyboard): New variable `kill_emacs_on_sigint`. * test/src/keyboard-tests.el (keyboard-sigint-to-quit): New test. * doc/emacs/cmdargs.texi (Initial Options): Mention the effect of `kill-emacs-on-sigint` in batch mode. 2026-05-04 Michael Albinus Adaot tramp-tests.el * test/lisp/net/tramp-tests.el (ert-remote-temporary-file-directory): Ensure that it is expanded. 2026-05-04 Michael Albinus * admin/notes/documentation: Recommend not using "it's". 2026-05-04 João Távora Jsonrpc: add new tests using Python subprocesses Most of these tests are for the scontrol/"anxious continuation" mechanism (bug#80623) The new ERT tests use Python subprocesses via stdin/stdout pipe as JSONRPC endpoints. A shared framing library lives in jsonrpc-resources/common.py. * test/lisp/jsonrpc-tests.el (jsonrpc--test-dir): New constant. (jsonrpc--with-python-fixture): New macro. (scontrol-remote-during-sync-1) (scontrol-remote-during-sync-2) (scontrol-anxious-nested) (scontrol-remote-error) (shutdown-clean-after-notification): New tests. * test/lisp/jsonrpc-resources/common.py: New file. * test/lisp/jsonrpc-resources/server-remote-during-sync-1.py: New file. * test/lisp/jsonrpc-resources/server-remote-during-sync-2.py: New file. * test/lisp/jsonrpc-resources/server-anxious-nested.py: New file. * test/lisp/jsonrpc-resources/server-remote-error.py: New file. * test/lisp/jsonrpc-resources/server-harakiri.py: New file. 2026-05-04 João Távora Jsonrpc: rework sync request handling (bug#80623) When the remote endpoint is handling a local request 'LR' it can sometimes make a remote sync request 'RR' as part of its handling. Some endpoints (like Go's gopls) wait for Emacs's reply to 'RR' before responding to 'LR'. Others (like Julia's JETLS) respond to 'LR' immediately, and only then wait for Emacs's reply to 'RR'. Both approaches are valid. However, in the latter case, the handling of 'RR' (which could well be waiting for user input from the minibuffer to complete) is vulnerable to 'throw' from process filters handling (which is just what happens when the endpoints replies to 'LR'), so if that happens it will unexpectedly be aborted when the reply to 'LR' comes in, suprising the user and causing a spurious -32603 reply to be sent. To solve this problem, this commit first refactors the sync request/anxious queue handling and replace plain integer keys of the rebaptized "scontrol" alist with structured (:local ID) / (:remote ID) pairs, using `equal' for comparisons. This is to introduce some clarity/sanity into this somewhat hairy code. Then, the 'RR' situation is fixed: we push a (:remote ID) entry onto the top of the 'jsonrpc-connection--control' stack and only then call rdispatcher. Any 'LR' reply arriving during dispatch is deferred as an "anxious" continuation rather than firing its `throw' immediately. When rdispatcher is done, we call jsonrpc--continue at a safe point, this will run any "anxious" continuations. * lisp/jsonrpc.el (jsonrpc-connection): Rename -sync-request-alist to -scontrol; accessor from jsonrpc--sync-request-alist to jsonrpc--scontrol; update docstring for new key structure. (jsonrpc-connection-receive): Update with-slots binding to scontrol. Tighten anxious check to match (:local ID) keys with `equal'. In remote-request branch, push (:remote ID) entry before rdispatcher and call jsonrpc--continue after jsonrpc--reply. (jsonrpc-request): Pass (:local ID) to jsonrpc--continue. (jsonrpc--continue): Use jsonrpc--scontrol; change `=' to `equal' in sanity check. p (jsonrpc--async-request-1): Push (:local ID) entry. (jsonrpc--log-event): Use jsonrpc--scontrol. 2026-05-04 Dmitry Gutov Re-add a call to clear_under_internal_border in clear_garbaged_frames * src/xdisp.c (clear_garbaged_frames): Re-add the call to clear_under_internal_border, reverting that part of commit a6a3b32208c5 as not essential to the fix (bug#80662). 2026-05-03 Philip Kaludercic Ensure package archives are loaded for 'package-isolate' * lisp/emacs-lisp/package.el (package-isolate): Use 'package--archive-contents' instead of the actual variable, to ensure that we load the archive contents if missing. This is likely the case if 'package-isolate' is the first package function invoked during a session. 2026-05-03 Philip Kaludercic Add for to 'html-tag-alist' and 'html-tag-help' * lisp/textmodes/sgml-mode.el (html-tag-alist): Add very basic skeleton. (html-tag-help): Add description. 2026-05-03 Philip Kaludercic Add for
to 'html-tag-alist' and 'html-tag-help' * lisp/textmodes/sgml-mode.el (html-tag-alist): Add skeleton. (html-tag-help): Add description. 2026-05-03 Philip Kaludercic Prevent indentation within whitespace sensitive HTML tags * lisp/textmodes/sgml-mode.el (sgml-whitespace-sensitive-tags): Add new variable. (sgml-calculate-indent): Check if in the context of a tag specified by 'sgml-whitespace-sensitive-tags'. (html-mode): Set 'sgml-whitespace-sensitive-tags' to not adjust the indentation within
 and