summaryrefslogtreecommitdiff
path: root/elisp/geiser-repl.el
diff options
context:
space:
mode:
authorJose Antonio Ortega Ruiz <jao@gnu.org>2013-09-25 05:10:00 +0200
committerJose Antonio Ortega Ruiz <jao@gnu.org>2013-09-25 05:10:00 +0200
commit2cb40f5a1f0115a995daa176208f76b674dd523e (patch)
tree815faf64ef3c8a212145a159dd35aaba7023d376 /elisp/geiser-repl.el
parent438e26d9e1759b85785637efc0b64e818e289e57 (diff)
downloadgeiser-chez-2cb40f5a1f0115a995daa176208f76b674dd523e.tar.gz
geiser-chez-2cb40f5a1f0115a995daa176208f76b674dd523e.tar.bz2
Scheme version checks
And, if you happen to be launching it all the time, a way of skipping them via a customizable variable. Should address issue #15.
Diffstat (limited to 'elisp/geiser-repl.el')
-rw-r--r--elisp/geiser-repl.el25
1 files changed, 25 insertions, 0 deletions
diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index 68e4708..ebb74c2 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -105,6 +105,16 @@ expression, if any."
:type 'boolean
:group 'geiser-repl)
+(geiser-custom--defcustom geiser-repl-skip-version-check-p nil
+ "Whether to skip version checks for the Scheme executable.
+
+When set, Geiser won't check the version of the Scheme
+interpreter when starting a REPL, saving a few tenths of a
+second.
+"
+ :type 'boolean
+ :group 'geiser-repl)
+
(geiser-custom--defcustom geiser-repl-query-on-exit-p nil
"Whether to prompt for confirmation on \\[geiser-repl-exit]."
:type 'boolean
@@ -188,6 +198,13 @@ module command as a string")
(geiser-impl--define-caller geiser-repl--exit-cmd exit-command ()
"Function returning the REPL exit command as a string")
+(geiser-impl--define-caller geiser-repl--version version-command (binary)
+ "Function returning the version of the corresponding scheme process,
+ given its full path.")
+
+(geiser-impl--define-caller geiser-repl--min-version minimum-version ()
+ "A variable providing the minimum required scheme version, as a string.")
+
;;; Geiser REPL buffers and processes:
@@ -355,6 +372,13 @@ module command as a string")
geiser-repl-query-on-kill-p)
(message "%s up and running!" (geiser-repl--repl-name impl))))
+(defun geiser-repl--check-version (impl)
+ (when (not geiser-repl-skip-version-check-p)
+ (let ((v (geiser-repl--version impl (geiser-repl--binary impl)))
+ (r (geiser-repl--min-version impl)))
+ (when (geiser--version< v r)
+ (error "Geiser requires %s version %s but detected %s" impl r v)))))
+
(defun geiser-repl--start-scheme (impl address prompt)
(setq comint-prompt-regexp prompt)
(let* ((name (geiser-repl--repl-name impl))
@@ -363,6 +387,7 @@ module command as a string")
`(,(geiser-repl--binary impl)
nil
,@(geiser-repl--arglist impl)))))
+ (when (not address) (geiser-repl--check-version impl))
(condition-case err
(apply 'make-comint-in-buffer `(,name ,buff ,@args))
(error (insert "Unable to start REPL:\n"