mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2025-01-11 21:59:08 -05:00
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.
This commit is contained in:
parent
7c786db4fb
commit
5a60d56975
3 changed files with 23 additions and 1 deletions
|
@ -79,7 +79,7 @@ Interactively, use the module defined by the current scheme file."
|
||||||
"(guix store)")
|
"(guix store)")
|
||||||
;; Without this workaround, the build output disappears. See
|
;; Without this workaround, the build output disappears. See
|
||||||
;; <https://github.com/jaor/geiser/issues/83> for details.
|
;; <https://github.com/jaor/geiser/issues/83> for details.
|
||||||
(guix-geiser-eval-in-repl
|
(guix-geiser-eval-in-repl-synchronously
|
||||||
"(current-build-output-port (current-error-port))"
|
"(current-build-output-port (current-error-port))"
|
||||||
repl 'no-history 'no-display))
|
repl 'no-history 'no-display))
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,23 @@ If NO-DISPLAY is non-nil, do not switch to the REPL buffer."
|
||||||
(unless no-display
|
(unless no-display
|
||||||
(geiser-repl--switch-to-buffer repl))))
|
(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)
|
(defun guix-geiser-call (proc &rest args)
|
||||||
"Call (PROC ARGS ...) synchronously using the current Geiser REPL.
|
"Call (PROC ARGS ...) synchronously using the current Geiser REPL.
|
||||||
PROC and ARGS should be strings."
|
PROC and ARGS should be strings."
|
||||||
|
|
|
@ -88,6 +88,11 @@ PROC and ARGS should be strings."
|
||||||
args
|
args
|
||||||
" ")))
|
" ")))
|
||||||
|
|
||||||
|
(defun guix-guile-prompt? (string)
|
||||||
|
"Return non-nil, if STRING contains a Guile prompt."
|
||||||
|
(or (string-match-p geiser-guile--prompt-regexp string)
|
||||||
|
(string-match-p geiser-guile--debugger-prompt-regexp string)))
|
||||||
|
|
||||||
(provide 'guix-guile)
|
(provide 'guix-guile)
|
||||||
|
|
||||||
;;; guix-guile.el ends here
|
;;; guix-guile.el ends here
|
||||||
|
|
Loading…
Reference in a new issue