fix(plantuml): {org-,}plantuml-jar-path resolution

- Ensures `org-plantuml-jar-path` is less likely to be overwritten if the
  user changes it.
- Sets `org-plantuml-jar-path` and `plantuml-default-exec-mode` after
  calling `plantuml-download-jar`, so things Just Work™️ without
  needing the user to know to update these variables.

Close: #7992
This commit is contained in:
Henrik Lissner 2024-08-22 14:47:37 -04:00
parent 9ebd9cb734
commit d309dcad27
No known key found for this signature in database
GPG key ID: B60957CA074D39A3

View file

@ -3,15 +3,24 @@
(use-package! plantuml-mode (use-package! plantuml-mode
:commands plantuml-download-jar :commands plantuml-download-jar
:init :init
(setq plantuml-jar-path (concat doom-data-dir "plantuml.jar") (setq plantuml-jar-path (concat doom-data-dir "plantuml.jar"))
org-plantuml-jar-path plantuml-jar-path)
:config :config
(set-popup-rule! "^\\*PLANTUML" :size 0.4 :select nil :ttl 0) (set-popup-rule! "^\\*PLANTUML" :size 0.4 :select nil :ttl 0)
(setq plantuml-default-exec-mode (setq plantuml-default-exec-mode
(cond ((file-exists-p plantuml-jar-path) 'jar) (cond ((file-exists-p plantuml-jar-path) 'jar)
((executable-find "plantuml") 'executable) ((executable-find plantuml-executable-path) 'executable)
(plantuml-default-exec-mode)))) (plantuml-default-exec-mode)))
;; HACK: If plantuml-jar-path is missing at startup, then plantuml-mode will
;; operate in another `plantuml-default-exec-mode'. After using
;; plantuml-download-jar, we change it to `jar' just for this session.
(defadvice! +plantuml--use-downloaded-jar-a (fn &rest args)
"Configure plantuml-mode to use the downloaded jar for this session."
:around #'plantuml-download-jar
(let ((downloaded? (not (file-exists-p plantuml-jar-path))))
(prog1 (apply fn args)
(when (and downloaded? (file-exists-p plantuml-jar-path))
(setq org-plantuml-jar-path plantuml-jar-path
plantuml-default-exec-mode 'jar))))))
(use-package! flycheck-plantuml (use-package! flycheck-plantuml
@ -25,8 +34,14 @@
(after! ob-plantuml (after! ob-plantuml
;; HACK Force ob-plantuml to use `plantuml-mode''s building mechanism, which ;; The nested `after!' is needed to ensure `org-plantuml-jar-path's new
;; is more sophisticated. ;; default without overwriting any user config.
(after! plantuml-mode
(when (equal org-plantuml-jar-path "")
(setq org-plantuml-jar-path plantuml-jar-path)))
;; HACK: Force ob-plantuml to use `plantuml-mode''s building mechanism, which
;; is more sophisticated.
(advice-add #'org-babel-execute:plantuml (advice-add #'org-babel-execute:plantuml
:override #'+plantuml-org-babel-execute:plantuml-a) :override #'+plantuml-org-babel-execute:plantuml-a)
(add-to-list 'org-babel-default-header-args:plantuml (add-to-list 'org-babel-default-header-args:plantuml