* 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)
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.
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.
* 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'.
Implement basic LSP 3.17 pull diagnostics ('textDocument/diagnostic').
Only diagnostics for the current document are requested. This is
chiefly because virtually no server has been found to support the
'relatedDocumentSupport' sub-capability which would allow to test this.
* etc/EGLOT-NEWS: Announce pull diagnostics support.
* lisp/progmodes/eglot.el (eglot-client-capabilities): Announce
:diagnostic capability.
(eglot--flymake-diag-type): New function.
(eglot--flymake-make-diag): New function.
(eglot--flymake-push-report-fn): Rename from
eglot--current-flymake-report-fn.
(eglot-flymake-backend): Check for :diagnosticProvider and dispatch
to pull or push path.
(eglot--flymake-pull): New function.
(eglot--flymake-push): Rename from eglot--report-to-flymake.
(eglot-handle-notification textDocument/publishDiagnostics): Use
eglot--flymake-make-diag helper.
(eglot-ignored-server-capabilities): Add diagnosticProvider
* lisp/progmodes/project.el (project--vc-list-files):
Call backend function 'project-list-files'.
(project-files): Catch 'vc-not-supported' and default to
'project--files-in-directory' using the current project.
(vc-git-project-list-files, vc-hg-project-list-files):
New functions, extracted from 'project--vc-list-files'.
(https://lists.gnu.org/archive/html/emacs-devel/2025-12/msg00290.html)