[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#67480: 30.0.50; Cannot start eglot
From: |
Stefan Monnier |
Subject: |
bug#67480: 30.0.50; Cannot start eglot |
Date: |
Sat, 02 Dec 2023 13:54:39 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
> I suspect this should be fixed the same way I proposed to fix these
> kinds of problems in Org, i.e. with something like:
>
> (defun require-with-check (feature &optional filename noerror)
> "If FEATURE is not already loaded, load it from FILENAME.
> This is like `require' except if FEATURE is already a member of the list
> `features’, then we check if this was provided by a different file than
> the
> one that we would load now (presumably because `load-path' has been
> changed since the file was loaded)."
> (let ((lh load-history)
> (res (require feature filename noerror)))
> ;; If the `feature' was not yet provided, `require' just loaded the
> right
> ;; file, so we're done.
> (if (not (eq lh load-history)) res
> ;; If `require' did nothing, we need to make sure that was
> warranted.
> (let ((fn (locate-file (or filename (symbol-name feature))
> load-path (get-load-suffixes))))
> ;; If the right file was indeed loaded already, we're done.
> (if (assoc fn load-history) res
> (funcall (if noerror #'warn #'error)
> "Feature provided by other file: %S" feature)
> res)))))
>
> This sample code doesn't try to handle preloaded packages, so it
> would/will need some tweak for that.
Actually, it seems it does work with preloaded files as well because the
`load-history` is adjusted at startup to make it look right for
preloaded packages.
So maybe we should add the above function to `subr.el` and then install
the patch below, WDYT?
Stefan
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index d410367f902..468606086ec 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -116,13 +116,8 @@
;; having installed them, didn't correctly re-load them over the
;; built-in versions.
(eval-and-compile
- (load "project")
- (load "eldoc")
- (load "seq")
- (load "flymake")
- (load "xref")
- (load "jsonrpc")
- (load "external-completion"))
+ (mapc #'require-with-check
+ '(project eldoc seq flymake xref jsonrpc external-completion)))
;; forward-declare, but don't require (Emacs 28 doesn't seem to care)
(defvar markdown-fontify-code-blocks-natively)