From 5a60d56975a67facbea41cb97fb4903453bf0752 Mon Sep 17 00:00:00 2001 From: Alex Kost Date: Tue, 6 Oct 2015 20:30:16 +0300 Subject: 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. --- emacs/guix-geiser.el | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'emacs/guix-geiser.el') 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." -- cgit v1.2.3