geiser-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Geiser-users] [PATCH] Evaluate last expression to buffer with a prefix


From: Diogo F. S. Ramos
Subject: [Geiser-users] [PATCH] Evaluate last expression to buffer with a prefix
Date: Thu, 11 Apr 2013 18:56:30 -0300

Use a prefix before pressing C-x C-e to print the result of evaluating
the expression before mark to the current buffer.
---
 elisp/geiser-debug.el |    6 +++---
 elisp/geiser-eval.el  |   10 ++++++++++
 elisp/geiser-mode.el  |   24 +++++++++++++++++-------
 3 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/elisp/geiser-debug.el b/elisp/geiser-debug.el
index c35f577..184d9c8 100644
--- a/elisp/geiser-debug.el
+++ b/elisp/geiser-debug.el
@@ -172,9 +172,9 @@ buffer.")
     (when (not err)
       (save-excursion
         (goto-char (/ (+ end start) 2))
-        (geiser-autodoc--clean-cache))
-      (message "%s" res))
-    (geiser-debug--display-retort (geiser-syntax--scheme-str str) ret res)))
+        (geiser-autodoc--clean-cache)))
+    (geiser-debug--display-retort (geiser-syntax--scheme-str str) ret res)
+    ret))
 
 (defun geiser-debug--expand-region (start end all wrap)
   (let* ((str (buffer-substring-no-properties start end))
diff --git a/elisp/geiser-eval.el b/elisp/geiser-eval.el
index dd0e45d..5d61580 100644
--- a/elisp/geiser-eval.el
+++ b/elisp/geiser-eval.el
@@ -173,6 +173,16 @@ module-exports, autodoc, callers, callees and 
generic-methods.")
         (concat "=> " (mapconcat 'identity values "\n=> "))
       "(No value)")))
 
+(defun geiser-eval--retort-result-list (ret)
+  "Return the list of results."
+  (cdr (assoc 'result ret)))
+
+(defun geiser-eval--retort-result-to-buffer (ret)
+  "Return a string formated for printing to buffer."
+  (mapconcat 'identity
+             (geiser-eval--retort-result-list ret)
+             "\n"))
+
 (defsubst geiser-eval--retort-output (ret) (cdr (assoc 'output ret)))
 (defsubst geiser-eval--retort-error (ret) (cdr (assoc 'error ret)))
 
diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el
index b6d083a..ee3b5b3 100644
--- a/elisp/geiser-mode.el
+++ b/elisp/geiser-mode.el
@@ -107,13 +107,23 @@ With prefix, goes to the REPL buffer afterwards (as
   (interactive)
   (geiser-eval-definition t))
 
-(defun geiser-eval-last-sexp ()
-  "Eval the previous sexp in the Geiser REPL."
-  (interactive)
-  (geiser-eval-region (save-excursion (backward-sexp) (point))
-                      (point)
-                      nil
-                      t))
+(defun geiser-eval-last-sexp (print-to-buffer-p)
+  "Eval the previous sexp in the Geiser REPL.
+
+With a prefix, print the result of the evaluation to the buffer."
+  (interactive "P")
+  (let ((ret (geiser-eval-region (save-excursion (backward-sexp) (point))
+                                 (point)
+                                 nil
+                                 t)))
+    (if print-to-buffer-p
+        (let ((str (geiser-eval--retort-result-to-buffer ret)))
+          ;; It's possible that a procedure returns nothing, so we
+          ;; don't want to `push-mark' if it's not necessary
+          (unless (string= "" str)
+            (push-mark)
+            (insert str)))
+      (message "%s" (geiser-eval--retort-result-str ret)))))
 
 (defun geiser-compile-definition (&optional and-go)
   "Compile the current definition in the Geiser REPL.
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]