branch: elpa/geiser-kawa
commit 34b68ce5b3b197dc0c0ed54f5c68cb24b15dd8c0
Author: spellcard199 <[email protected]>
Commit: spellcard199 <[email protected]>
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)