* lisp/hi-lock.el (hi-lock-line-face-buffer, hi-lock-face-buffer)
(hi-lock-face-phrase-buffer): Use the new function
`hi-lock-read-regexp' to read font-lock patterns, mirroring
`hi-lock-read-face-name' used to read face names. For end users,
all three functions now get the default value from the active
region, rather than just `hi-lock-face-buffer'.
(hi-lock-read-regexp): Extract font-lock pattern reading
functionality from `hi-lock-face-buffer' into this function, to
mirror how faces are read with `hi-lock-read-face-name' and to
promote reuse. (Bug#79976)
Suggested by Mattias Engdegård (bug#80021#17).
* src/lisp.h (lisp_h_FIXNUMP, lisp_h_TAGGEDP):
Go back to the simpler (X&7) == TAG approach for checking object tags.
This reverses my commit ccdb08ef4e
“Improve performance of CONSP, FIXNUMP, etc.”
dated 2018-08-25 13:39:18 -0700,
though it keeps the TAGGEDP function the older commit introduced.
Although the older commit improved performance on its circa 2010
platform, when I ran today’s ‘make -C lisp compile-always’
benchmark on Ubuntu 25.10 which uses gcc (Ubuntu 15.2.0-4ubuntu4)
on an circa-2021 Intel Xeon W-1350, this patch makes the
‘make -C lisp compile-always’ benchmark 3.1% faster. Although the
patch unfortunately also makes the Emacs text segment 0.6% larger,
in this case speed and simplicity beat text size in importance.
Without the fix, ‘make compile-always’ failed nearly immediately
in a native compilation build, with ‘ELC+ELN
emacs-lisp/loaddefs-gen.elc’ outputting “Error: file-missing
("Cannot open load file" "No such file or directory" "comp")...”.
* lisp/Makefile.in (compile-always):
Build ../src first, since the ‘find ... -delete’ removes files
needed by ‘make compile’.
Else will make a number of file-notify descriptors proportional to
the number of files in a directory (though this doesn't apply to
out-of-root watchers).
* lisp/progmodes/eglot.el (eglot--watch-globs): Tweak.
This reverts commit 821c0d36df.
Despite re-enacting what the modern Git versions seem to do under the
covers, the effect is not the same: filtering works differently.
When find-based directory listing fails, fallback to project-files
strategy for robustness.
* lisp/progmodes/eglot.el (eglot--watch-globs): Inline directory
listing and add error handling with fallback. Rename BASE-PATH to DIR,
add IN-ROOT parameter.
(eglot--list-directories): Delete
(eglot-register-capability): Adjust caller, group by both DIR and
IN-ROOT.
* test/lisp/erc/erc-scenarios-join-display-context.el
(erc-scenarios-join-display-context--errors): Attempt to indirectly fix
a reoccurring failure on EMBA. Instead of asserting the membership of
`erc-join--requested-channels', have the client attempt to manually join
an autojoined channel previously denied by an error response. But this
time assert that the display context for the now successfully joined
channel doesn't indicate it originated from the autojoin module.
* test/lisp/erc/resources/base/gapless-connect/barnet.eld: Increase
timeout.
* test/lisp/erc/resources/join/buffer-display/mode-context.eld: Update
accordingly.
Use find-based directory listing when watching outside project root,
avoiding the expensive delete-dups/file-name-directory/project-files
combo.
* lisp/progmodes/eglot.el (eglot--list-directories): New helper.
(eglot--watch-globs): Use it for directories outside project root.
* etc/NEWS: Announce the new user option.
* lisp/recentf.el (recentf-auto-cleanup): When canceling the
auto-cleanup timer, set recentf-auto-cleanup-timer to nil to
avoid false positive timerp.
(recentf-autosave-interval): New defcustom.
(recentf--autosave-timer, recentf--cancel-autosave-timer)
(recentf--manage-autosave-timer): New defun.
(recentf-mode): Call recentf--manage-autosave-timer.
* progmodes/antlr-mode.el (antlr-mode): Fix initialization of
variables, some are actually auto buffer-local and others not.
Patch by Arash Esbati <arash@gnu.org>.
It's fairly important to do this to reduce both the number of
file-notify watches and the number of expensive project-files among
"watcher" items pertaining to the same baseUri.
* lisp/progmodes/eglot.el (eglot--watch-globs): Rename from
eglot--watch-glob. Accept list of compiled glob/kind pairs.
(eglot-register-capability): Group watchers by base-path before
setting up watches.
* lisp/vc/vc-hooks.el (vc-symbolic-working-revision): Don't
return nil when passed a directory if also passed a backend.
* lisp/vc/vc.el (vc-diff-outgoing): Pass backend to
vc-symbolic-working-revision.
According to the spec, glob patterns are matched against relative paths
when server provides a RelativePattern baseUri. Else match the glob
against the absolute path as usual.
* lisp/progmodes/eglot.el (eglot--watch-glob): Tweak
Announce relativePatternSupport capability. Parse RelativePattern
objects with baseUri and pattern fields. Add defvar
eglot-watch-files-outside-project-root to control filtering.
Rewrote file watching implementation. Key by registration ID instead of
directory. Each LSP watchers item spawns directory watchers
indenpendently that will look for the associated pattern only.
This change needs (or at least is known to work more efficiently) with
the latest project.el, so we should bump it.
* lisp/progmodes/eglot.el (eglot-client-capabilities): Announce
relativePatternSupport for didChangeWatchedFiles.
(eglot-lsp-server): Change file-watches slot to ID-keyed structure.
(eglot-watch-files-outside-project-root): New defvar.
(eglot--watch-glob): New function.
(eglot-register-capability): Rewrite.
(eglot-unregister-capability): Simplified for ID-keyed structure.
(eglot--on-shutdown): Update watch cleanup.
* doc/misc/tramp.texi (Remote processes): Provide more details in
"Running remote processes on MS Windows hosts".
* test/lisp/net/tramp-tests.el (tramp-test29-start-file-process)
(tramp-test30-make-process): Adapt tests.
* test/lisp/emacs-lisp/package-vc-tests.el
(package-vc-test-deftest): Add support for `:tags' keyword.
(upgrade, upgrade-all, upgrade-all-after-require, rebuild)
(prepare-patch, log-incoming, pkg-spec-info-manual): Mark as
`:expensive-test'.
* test/lisp/emacs-lisp/package-vc-tests.el
(pkg-spec-make-shell-command): Rename from
`pkg-spec-doc-make-shell-command'. Remove assertions related to
info manual installation.
(pkg-spec-info-manual): Add tests for info manual installation.
* lisp/calendar/calendar.el (calendar-get-buffer): New function.
(calendar-mode-line-format): Support displaying non-default
calendar buffer name.
(calendar-exit): Handle non-default calendar buffer separately.
(calendar-generate-window): Update mode-line after cursor
motion (bug#79994).
(calendar-redraw, calendar-update-mode-line, calendar-unmark)
(calendar-mark-visible-date):
* lisp/calendar/cal-hebrew.el (calendar-hebrew-mark-date-pattern)
(calendar-hebrew-list-yahrzeits):
* lisp/calendar/diary-lib.el (diary-mark-sexp-entries)
(calendar-mark-days-named, calendar-mark-date-pattern)
(calendar-mark-1): Replace 'calendar-buffer' with the new
function or current calendar buffer.
(diary-mark-entries): Record current calendar buffer (bug#79994).
We can't use `cconv-make-interpreted-closure` until it's
compiled because it would get called in an infinite recursion.
The same holds for a lof of the code needed to compute the interpreted
closures used during the computation of `cconv-make-interpreted-closure`.
We used to work around this inf-loop in `loadup.el` with a hack
that checks if two specific functions have been compiled.
In practice that worked well enough in normal use, but was brittle
if you ever tried to load `cconv.el`, or Edebug or `M-C-x` that code
for whatever reason. So we replace it with a more conservative
approach which just short-circuits any recursive invocation.
It makes it conservative in that it will sometimes redirect the call
to the "dumb" `make-interpreted-closure` even though it would be able
to complete the call properly, but it should be infrequent
enough to be worth the added reliability.
* lisp/loadup.el: Simplify setting of
`internal-make-interpreted-closure-function`.
* lisp/emacs-lisp/cconv.el (cconv-make-interpreted-closure):
Avoid recursive invocations.
* doc/misc/tramp.texi (Remote processes): Provide more details in
"Running remote processes on MS Windows hosts".
* lisp/net/tramp-smb.el (tramp-smb-handle-make-process):
Suppress lock files.
* test/lisp/net/tramp-tests.el (auto-revert-notify-watch-descriptor)
(auto-revert-remote-files, auto-revert-use-notify): Declare. Set
proper values.
(tramp-test30-make-process): Adapt test.
Instead of delaying hooks, set the variable 'buffer' to the buffer object
returned by 'get-buffer-create'. This allows renaming the diff buffer
via 'diff-mode-hook'.