aboutsummaryrefslogtreecommitdiff
path: root/emacs/guix-geiser.el
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2015-10-06 20:30:16 +0300
committerAlex Kost <alezost@gmail.com>2015-10-09 16:17:45 +0300
commit5a60d56975a67facbea41cb97fb4903453bf0752 (patch)
treefc019af46e491639b89207460a0721a03ed13af3 /emacs/guix-geiser.el
parent7c786db4fba0c19d46d23f978af3d0131f985f15 (diff)
downloadguix-5a60d56975a67facbea41cb97fb4903453bf0752.tar
guix-5a60d56975a67facbea41cb97fb4903453bf0752.tar.gz
emacs: Fix 'guix-devel-setup-repl'.
Setting up guix ports needs to be done in Geiser REPL synchronously, otherwise this operation may not be finished before the further evaluating of guile code. * emacs/guix-guile.el (guix-guile-prompt?): New function. * emacs/guix-geiser.el (guix-geiser-eval-in-repl-synchronously): New function. * emacs/guix-devel.el (guix-devel-setup-repl): Use it.
Diffstat (limited to 'emacs/guix-geiser.el')
-rw-r--r--emacs/guix-geiser.el17
1 files changed, 17 insertions, 0 deletions
diff --git a/emacs/guix-geiser.el b/emacs/guix-geiser.el
index eb449bcdb1..0e6cc03a84 100644
--- a/emacs/guix-geiser.el
+++ b/emacs/guix-geiser.el
@@ -80,6 +80,23 @@ If NO-DISPLAY is non-nil, do not switch to the REPL buffer."
(unless no-display
(geiser-repl--switch-to-buffer repl))))
+(defun guix-geiser-eval-in-repl-synchronously (str &optional repl
+ no-history no-display)
+ "Evaluate STR in Geiser REPL synchronously, i.e. wait until the
+REPL operation will be finished.
+See `guix-geiser-eval-in-repl' for the meaning of arguments."
+ (let* ((repl (if repl (get-buffer repl) (guix-geiser-repl)))
+ (running? nil)
+ (filter (lambda (output)
+ (setq running?
+ (and (get-buffer-process repl)
+ (not (guix-guile-prompt? output))))))
+ (comint-output-filter-functions
+ (cons filter comint-output-filter-functions)))
+ (guix-geiser-eval-in-repl str repl no-history no-display)
+ (while running?
+ (sleep-for 0.1))))
+
(defun guix-geiser-call (proc &rest args)
"Call (PROC ARGS ...) synchronously using the current Geiser REPL.
PROC and ARGS should be strings."