I need to use a version of
prolog.el not older than 1.25, so I defined the function
(defun maybe-reload-prolog-el () (when (version< prolog-mode-version "1.25") (add-to-list 'load-path (file-name-as-directory (concat my-lib-path "prolog-el"))) (load-library "prolog"))))
...which adds the path to my personal copy of
load-path (and then reloads
prolog) if it detects that
prolog-mode-version is too old 1.
Then I put a call to
maybe-reload-prolog-el in a hook I already had for
(add-hook 'prolog-mode-hook (lambda () ;; ;; some keyboard settings, like ;; (local-set-key [f10] ...) ;; (local-set-key [f9] ...) ;; ;; etc (maybe-reload-prolog-el)))
The main problem with this approach is that
prolog.el is responsible for more than
prolog-mode. For example, it has the code for the autoloaded function
run-prolog, which I use to run a Prolog sub-process in an Emacs buffer. AFAICT,
prolog-mode-hook does not get triggered when I run
run-prolog, so I end up running an outdated version of it.
Is there some way to trigger
maybe-reload-prolog-el right after
prolog.el is loaded, before any of its code gets executed?
BTW, as currently written,
maybe-reload-prolog-el can run only after
prolog.el is loaded, because it relies on the variable
prolog-mode-version, which is defined in
prolog.el, to decide whether to load my local copy of
prolog.el. IOW, if I simply put the following code in my init file
(if (version< prolog-mode-version "1.25") (add-to-list 'load-path (file-name-as-directory (concat my-lib-path "prolog-el"))))
...it fails with:
Symbol’s value as variable is void: prolog-mode-version
If there were some way to test the version of the default
prolog.el's version before loading it (let's call this method
PROLOG-OLDER-THAN-1.25-p, then I would just put this in my init file:
(if (PROLOG-OLDER-THAN-1.25-p) (add-to-list 'load-path (file-name-as-directory (concat my-lib-path "prolog-el"))))
Please let me know if there's a way to implement a
PROLOG-OLDER-THAN-1.25-p that does not require
prolog.el to be loaded.
Of course, I know that I can always use my copy of
prolog.el, unconditionally. IOW, I can just put this in my init file:
(add-to-list 'load-path (file-name-as-directory (concat my-lib-path "prolog-el"))))
This approach works in the short-term, of course, but it requires more maintenance long-term.
1 Please let me know if what my
maybe-reload-prolog-el function does is the best way to conditionally reload
prolog.el. I'm not too confident that
(load-library "prolog") is the right thing to do here.
PROLOG-OLDER-THAN-1.25-pthat does not require prolog.el to be loaded" - the only way would be to search the source code text.