emacs: Fix converting scheme into elisp expression.

* emacs/guix-geiser.el (guix-geiser-eval-read): Replace #f/#t with nil/t
  only when they follow "(" or " ".
master
Alex Kost 2016-01-24 11:16:44 +03:00
parent c1f73569be
commit 4c68c53804
1 changed files with 17 additions and 5 deletions

View File

@ -46,11 +46,23 @@ Return a list of strings with result values of evaluation."
(defun guix-geiser-eval-read (str &optional repl) (defun guix-geiser-eval-read (str &optional repl)
"Evaluate STR with guile expression using Geiser REPL. "Evaluate STR with guile expression using Geiser REPL.
Return elisp expression of the first result value of evaluation." Return elisp expression of the first result value of evaluation."
;; Parsing scheme code with elisp `read' is probably not the best idea. ;; The goal is to convert a string with scheme expression into elisp
(read (replace-regexp-in-string ;; expression.
"#f\\|#<unspecified>" "nil" (let ((result (car (guix-geiser-eval str repl))))
(replace-regexp-in-string (cond
"#t" "t" (car (guix-geiser-eval str repl)))))) ((or (string= result "#f")
(string= result "#<unspecified>"))
nil)
((string= result "#t")
t)
(t
(read (replace-regexp-in-string
"[ (]\\(#f\\)" "nil"
(replace-regexp-in-string
"[ (]\\(#t\\)" "t"
result
nil nil 1)
nil nil 1))))))
(defun guix-repl-send (cmd &optional save-history) (defun guix-repl-send (cmd &optional save-history)
"Send CMD input string to the current REPL buffer. "Send CMD input string to the current REPL buffer.