From 7fad7a69914a920774fd2ce766198ecbd25265bc Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Tue, 16 Jun 2009 22:35:21 +0200 Subject: Better parsing of scheme retorts in the Emacs end. --- elisp/geiser-connection.el | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'elisp/geiser-connection.el') diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 33579f6..33668e0 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -160,10 +160,14 @@ (defun geiser-con--comint-buffer-form () (with-current-buffer (geiser-con--comint-buffer) - (geiser-syntax--prepare-scheme-for-elisp-reader) (condition-case nil - (let ((form (read (current-buffer)))) - (if (listp form) form (error))) + (progn + (goto-char (point-min)) + (re-search-forward "((\\(result\\|error\\) ") + (goto-char (match-beginning 0)) + (geiser-syntax--prepare-scheme-for-elisp-reader) + (let ((form (read (current-buffer)))) + (if (listp form) form (error)))) (error `((error (key . geiser-con-error) (msg . ,(buffer-string)))))))) (defun geiser-con--process-next (con) -- cgit v1.2.3 From 85838e68615303ec37832272a398fa8d4f474962 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Tue, 16 Jun 2009 23:15:16 +0200 Subject: Fixes in retort parsing. --- elisp/geiser-connection.el | 4 ++-- elisp/geiser-impl.el | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'elisp/geiser-connection.el') diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 33668e0..8090247 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -163,12 +163,12 @@ (condition-case nil (progn (goto-char (point-min)) - (re-search-forward "((\\(result\\|error\\) ") + (re-search-forward "((\\(result\\|error\\)\\>") (goto-char (match-beginning 0)) (geiser-syntax--prepare-scheme-for-elisp-reader) (let ((form (read (current-buffer)))) (if (listp form) form (error)))) - (error `((error (key . geiser-con-error) (msg . ,(buffer-string)))))))) + (error `((error (key . geiser-con-error)) (output . ,(buffer-string))))))) (defun geiser-con--process-next (con) (when (not (geiser-con--connection-current-request con)) diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index d45fadc..38c34ee 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -171,7 +171,8 @@ (geiser-impl--call-if-bound (geiser-impl--default-implementation) "geiser-procedure" proc)) -(set-default 'geiser-eval--geiser-procedure-function 'geiser-impl-geiser-procedure) +(set-default 'geiser-eval--geiser-procedure-function + 'geiser-impl-geiser-procedure) ;;; Access to implementation specific execution parameters: -- cgit v1.2.3 From 44a70803378f67ef2f6a9bfb91a2d9cbe7063369 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Wed, 17 Jun 2009 03:12:33 +0200 Subject: Whitespace. --- elisp/geiser-connection.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'elisp/geiser-connection.el') diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 8090247..0ec6405 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -168,7 +168,8 @@ (geiser-syntax--prepare-scheme-for-elisp-reader) (let ((form (read (current-buffer)))) (if (listp form) form (error)))) - (error `((error (key . geiser-con-error)) (output . ,(buffer-string))))))) + (error `((error (key . geiser-con-error)) + (output . ,(buffer-string))))))) (defun geiser-con--process-next (con) (when (not (geiser-con--connection-current-request con)) -- cgit v1.2.3 From bdd12279d05fd5451b186d2da9f1a864f1d1a0f9 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Thu, 2 Jul 2009 05:29:04 +0200 Subject: Simpler, nicer, more efficient handling of evaluation results. It comes with a pony too. --- elisp/geiser-connection.el | 1 - elisp/geiser-debug.el | 10 +++++++--- elisp/geiser-eval.el | 9 ++++++++- elisp/geiser-syntax.el | 10 ---------- 4 files changed, 15 insertions(+), 15 deletions(-) (limited to 'elisp/geiser-connection.el') diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 0ec6405..4f8592b 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -165,7 +165,6 @@ (goto-char (point-min)) (re-search-forward "((\\(result\\|error\\)\\>") (goto-char (match-beginning 0)) - (geiser-syntax--prepare-scheme-for-elisp-reader) (let ((form (read (current-buffer)))) (if (listp form) form (error)))) (error `((error (key . geiser-con-error)) diff --git a/elisp/geiser-debug.el b/elisp/geiser-debug.el index ec2e93e..6d795df 100644 --- a/elisp/geiser-debug.el +++ b/elisp/geiser-debug.el @@ -59,7 +59,7 @@ ;;; Displaying retorts -(defun geiser-debug--display-retort (what ret) +(defun geiser-debug--display-retort (what ret &optional res) (let* ((err (geiser-eval--retort-error ret)) (key (geiser-eval--error-key err)) (output (geiser-eval--retort-output ret)) @@ -69,6 +69,9 @@ (erase-buffer) (insert what) (newline 2) + (when res + (insert res) + (newline 2)) (unless (geiser-impl--display-error impl module key output) (when err (insert (geiser-eval--error-str err) "\n\n")) (when output (insert output "\n\n"))) @@ -88,10 +91,11 @@ (wrapped (if wrap (geiser-debug--wrap-region str) str)) (code `(,(if compile :comp :eval) (:scm ,wrapped))) (ret (geiser-eval--send/wait code)) + (res (geiser-eval--retort-result-str ret)) (err (geiser-eval--retort-error ret))) (when and-go (funcall and-go)) - (when (not err) (message (format "=> %S" (geiser-eval--retort-result ret)))) - (geiser-debug--display-retort str ret))) + (when (not err) (message "%s" res)) + (geiser-debug--display-retort str ret res))) (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 90be67c..428d057 100644 --- a/elisp/geiser-eval.el +++ b/elisp/geiser-eval.el @@ -145,7 +145,14 @@ EVAL, COMPILE, LOAD-FILE and COMPILE-FILE should be supported.")) (defun geiser-eval--retort-result (ret) (let ((values (cdr (assoc 'result ret)))) - (if (> (length values) 1) (cons :values values) (car values)))) + (and (stringp (car values)) + (ignore-errors (car (read-from-string (car values))))))) + +(defun geiser-eval--retort-result-str (ret) + (let ((values (cdr (assoc 'result ret)))) + (if values + (concat "=> " (mapconcat 'identity values "\n=> ")) + "(No value)")))) (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-syntax.el b/elisp/geiser-syntax.el index c70aacb..db1c842 100644 --- a/elisp/geiser-syntax.el +++ b/elisp/geiser-syntax.el @@ -84,16 +84,6 @@ (geiser-popup--define syntax " *geiser syntax analyst*" scheme-mode) -(defun geiser-syntax--prepare-scheme-for-elisp-reader () - (let ((end (save-excursion - (goto-char (point-max)) - (and (re-search-backward "(output \\. \"" nil t) - (point))))) - (save-excursion - (while (re-search-forward "#(" end t) (replace-match "(vector ")) - (goto-char (point-min)) - (while (re-search-forward "#" end t) (replace-match "\\\\#"))))) - (defsubst geiser-syntax--del-sexp (arg) (let ((p (point))) (forward-sexp arg) -- cgit v1.2.3