This fixes a bug reported and diagnosed by Campbell Barton
<ideasman42@gmail.com> 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.
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.
Copyright-paperwork-exempt: yes
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).
Copyright-paperwork-exempt: yes
* 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.
* 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.
* 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.
* 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.)
* 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.
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.
'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.
Copyright-paperwork-exempt: yes
* lisp/progmodes/eglot.el (eglot-uri-to-path): Decode the
result of 'url-unhex-string' with 'utf-8-unix'.
* 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.
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.
* 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.
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.
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.
'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)
Copyright-paperwork-exempt: yes
* 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.
* 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.
* 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.
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.