unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
blob 14f48c9f2155a30b2a5f55dea8e1043db31083e2 2946 bytes (raw)
name: emacs/guix-geiser.el 	 # note: path name is non-authoritative(*)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
;;; guix-geiser.el --- Interacting with Geiser

;; Copyright © 2015 Alex Kost <alezost@gmail.com>

;; This file is part of GNU Guix.

;; GNU Guix is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; GNU Guix is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;; This file provides functions to evaluate guile code using Geiser.

;;; Code:

(require 'geiser-mode)
(require 'guix-guile)

(defun guix-geiser-repl ()
  "Return the current Geiser REPL."
  (or geiser-repl--repl
      (geiser-repl--repl/impl 'guile)
      (error "Geiser REPL not found")))

(defun guix-geiser-eval (str &optional wrap repl)
  "Evaluate STR with guile expression using Geiser REPL.
If REPL is nil, use the current Geiser REPL.
If WRAP is non-nil, wrap STR into (begin ...) form.
Return a list of strings with result values of evaluation."
  (with-current-buffer (or repl (guix-geiser-repl))
    (let* ((wrapped (if wrap (geiser-debug--wrap-region str) str))
           (code `(:eval (:scm ,wrapped)))
           (ret (geiser-eval--send/wait code)))
      (if (geiser-eval--retort-error ret)
          (error "Error in evaluating guile expression: %s"
                 (geiser-eval--retort-output ret))
        (cdr (assq 'result ret))))))

(defun guix-geiser-eval-read (str &optional wrap repl)
  "Evaluate STR with guile expression using Geiser REPL.
For the meaning of WRAP, see `guix-geiser-eval'.
Return elisp expression of the first result value of evaluation."
  ;; Parsing scheme code with elisp `read' is probably not the best idea.
  (read (replace-regexp-in-string
         "#f\\|#<unspecified>" "nil"
         (replace-regexp-in-string
          "#t" "t" (car (guix-geiser-eval str wrap repl))))))

(defun guix-geiser-eval-in-repl (str &optional repl)
  "Switch to Geiser REPL and evaluate STR with guile expression there."
  (if repl
      (geiser-repl--switch-to-buffer repl)
    (geiser--go-to-repl))
  (geiser-repl--send str))

(defun guix-geiser-call (proc &rest args)
  "Call (PROC ARGS ...) synchronously using the current Geiser REPL.
PROC and ARGS should be strings."
  (guix-geiser-eval
   (apply #'guix-guile-make-call-expression proc args)))

(defun guix-geiser-call-in-repl (proc &rest args)
  "Call (PROC ARGS ...) in the current Geiser REPL.
PROC and ARGS should be strings."
  (guix-geiser-eval-in-repl
   (apply #'guix-guile-make-call-expression proc args)))

(provide 'guix-geiser)

;;; guix-geiser.el ends here

debug log:

solving 14f48c9 ...
found 14f48c9 in https://yhetil.org/guix-devel/1437814197-6321-4-git-send-email-alezost@gmail.com/
found 1f0cf72 in https://yhetil.org/guix-devel/1437814197-6321-3-git-send-email-alezost@gmail.com/

applying [1/2] https://yhetil.org/guix-devel/1437814197-6321-3-git-send-email-alezost@gmail.com/
diff --git a/emacs/guix-geiser.el b/emacs/guix-geiser.el
new file mode 100644
index 0000000..1f0cf72


applying [2/2] https://yhetil.org/guix-devel/1437814197-6321-4-git-send-email-alezost@gmail.com/
diff --git a/emacs/guix-geiser.el b/emacs/guix-geiser.el
index 1f0cf72..14f48c9 100644

Checking patch emacs/guix-geiser.el...
Applied patch emacs/guix-geiser.el cleanly.
Checking patch emacs/guix-geiser.el...
Applied patch emacs/guix-geiser.el cleanly.

index at:
100644 14f48c9f2155a30b2a5f55dea8e1043db31083e2	emacs/guix-geiser.el

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).