branch: elpa/geiser-kawa commit 34b68ce5b3b197dc0c0ed54f5c68cb24b15dd8c0 Author: spellcard199 <spellcard...@protonmail.com> Commit: spellcard199 <spellcard...@protonmail.com>
Add check for deps with run-kawa is called. Uses emacs advice on run-kawa. --- elisp/geiser-kawa.el | 55 +++++++++++++++++++++++++++++++++++++++++++--------- quickstart.el | 10 ++++++---- 2 files changed, 52 insertions(+), 13 deletions(-) diff --git a/elisp/geiser-kawa.el b/elisp/geiser-kawa.el index 59d5d26..f9b8dc2 100644 --- a/elisp/geiser-kawa.el +++ b/elisp/geiser-kawa.el @@ -75,16 +75,9 @@ ;; End of adaptations for making this package separate from geiser -;; Download, compile and package "kawa-geiser" and its recursive -;; dependencies into a fat jar. -(defun geiser-kawa-mvn-package-java-deps() - (interactive) - (let ((default-directory geiser-kawa-dir)) - (compile "./mvnw package"))) - ;; Using `mvn package' from the pom.xml's directory should produce a ;; jar containing all the java dependencies. -(defcustom geiser-kawa-kawa-geiser-jar-path +(defcustom geiser-kawa-deps-jar-path (expand-file-name "./target/kawa-geiser-0.1-SNAPSHOT-jar-with-dependencies.jar" geiser-kawa-dir) @@ -92,6 +85,47 @@ :type 'string :group 'geiser-kawa) +;; Download, compile and package "kawa-geiser" and its recursive +;; dependencies into a fat jar. +(defun geiser-kawa-deps-mvn-package() + (interactive) + (let* ((default-directory geiser-kawa-dir) + (mvn-buf (compile "./mvnw package"))) + (when mvn-buf + (let ((save-buf (current-buffer))) + (switch-to-buffer-other-window mvn-buf) + (end-of-buffer) + (switch-to-buffer-other-window save-buf))))) + +(defun geiser-kawa--deps-run-kawa-advice-add() + (add-function :override + (symbol-function 'run-kawa) + #'geiser-kawa--deps-run-kawa-advice)) + +(defun geiser-kawa--deps-run-kawa-advice-remove() + (remove-function (symbol-function 'run-kawa) + #'geiser-kawa--deps-run-kawa-advice)) + +(defun geiser-kawa--deps-run-kawa-unadviced() + (geiser-kawa--deps-run-kawa-advice-remove) + (run-kawa) + (geiser-kawa--deps-run-kawa-advice-add)) + +(defun geiser-kawa--deps-run-kawa-removecompilhook(buf desc) + (geiser-kawa--deps-run-kawa-unadviced) + (remove-hook 'compilation-finish-functions + #'geiser-kawa--deps-run-kawa-remove-compil-hook)) + +(defun geiser-kawa--deps-run-kawa-advice() + (if (file-exists-p geiser-kawa-deps-jar-path) + (geiser-kawa--deps-run-kawa-unadviced) + (when (y-or-n-p + "geiser-kawa depends on additional java libraries. Do you want to download and compile them now?") + (add-hook + 'compilation-finish-functions + #'geiser-kawa--deps-run-kawa-removecompilhook) + (geiser-kawa-deps-mvn-package)))) + ;;; Customization: @@ -154,7 +188,7 @@ (concat lib-dir "jline.jar")) nil)) nil) - (list geiser-kawa-kawa-geiser-jar-path)))) + (list geiser-kawa-deps-jar-path)))) (mapconcat #'identity jars ":"))) (defvar geiser-kawa--arglist @@ -389,6 +423,9 @@ Argument MOD is passed by geiser, but it's not used here." (geiser-impl--add-to-alist 'regexp "\\.scm$" 'kawa t) (geiser-impl--add-to-alist 'regexp "\\.sld$" 'kawa t) +;; Check for kawa-geiser jar each time `run-kawa' is called. +(geiser-kawa--deps-run-kawa-advice-add) + (provide 'geiser-kawa) ;;; geiser-kawa.el ends here diff --git a/quickstart.el b/quickstart.el index 74f99cd..1351f5a 100644 --- a/quickstart.el +++ b/quickstart.el @@ -9,12 +9,14 @@ (require 'geiser-mode) (defun run-kawa-after-compilation-finishes (buffer desc) ;; Use included Kawa, to avoid issues with unsupported old Kawa versions (< 3.1.1) - (setq geiser-kawa-use-kawa-version-included-in-kawa-geiser t) + (setq geiser-kawa-use-included-kawa t) (run-kawa) (switch-to-buffer-other-window "*scratch*") (geiser-impl--set-buffer-implementation 'kawa) (geiser-mode) - (remove-hook 'compilation-finish-functions #'run-kawa-after-compilation-finishes)) + (remove-hook 'compilation-finish-functions + #'run-kawa-after-compilation-finishes)) -(add-hook 'compilation-finish-functions #'run-kawa-after-compilation-finishes) -(geiser-kawa-mvn-package-java-deps) +(add-hook 'compilation-finish-functions + #'run-kawa-after-compilation-finishes) +(geiser-kawa-deps-mvn-package)