diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2009-02-09 21:59:23 +0100 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2009-02-09 21:59:23 +0100 |
commit | aacdd11a8816430e6bdd2704c52e07466f0cca19 (patch) | |
tree | 067d7a3d87453d0e8f6705eefae05e0233eeb47d | |
parent | 99c436f18a37a665156f130ab7de720b37c8cf90 (diff) | |
download | geiser-chez-aacdd11a8816430e6bdd2704c52e07466f0cca19.tar.gz geiser-chez-aacdd11a8816430e6bdd2704c52e07466f0cca19.tar.bz2 |
Better preparation of Scheme results for the Elisp reader.
-rw-r--r-- | elisp/geiser-connection.el | 9 | ||||
-rw-r--r-- | elisp/geiser-syntax.el | 17 |
2 files changed, 18 insertions, 8 deletions
diff --git a/elisp/geiser-connection.el b/elisp/geiser-connection.el index 060ab7b..c18e7b2 100644 --- a/elisp/geiser-connection.el +++ b/elisp/geiser-connection.el @@ -26,6 +26,7 @@ ;;; Code: (require 'geiser-log) +(require 'geiser-syntax) (require 'geiser-base) (require 'comint) @@ -156,15 +157,9 @@ (defsubst geiser-con--comint-buffer () (get-buffer-create " *geiser connection retort*")) -(defun geiser-con--cleaunp-result-str () - (goto-char (point-min)) - (while (re-search-forward "#(" nil t) (replace-match "(vector ")) - (goto-char (point-min)) - (while (re-search-forward "#" nil t) (replace-match "\\\\#"))) - (defun geiser-con--comint-buffer-form () (with-current-buffer (geiser-con--comint-buffer) - (geiser-con--cleaunp-result-str) + (geiser-syntax--prepare-scheme-for-elisp-reader) (goto-char (point-min)) (condition-case nil (let ((form (read (current-buffer)))) diff --git a/elisp/geiser-syntax.el b/elisp/geiser-syntax.el index fa8e9b2..5e45470 100644 --- a/elisp/geiser-syntax.el +++ b/elisp/geiser-syntax.el @@ -53,7 +53,7 @@ ;;; Code parsing: (defsubst geiser-syntax--end-of-thing () - (let ((sc (syntax-class (syntax-after (point))))) + (let ((sc (or (syntax-class (syntax-after (point))) 0))) (when (= sc 7) (forward-char)) (cond ((nth 3 (syntax-ppss)) (skip-syntax-forward "^\"") @@ -77,6 +77,21 @@ (when (< (point) p) (setq arg-no (1+ arg-no)))) (cons proc arg-no))))) +(defun geiser-syntax--prepare-scheme-for-elisp-reader () + (goto-char (point-min)) + (while (re-search-forward "#\<\\([^>]*?\\)\>" nil t) + (let ((from (match-beginning 1)) + (to (match-end 1))) + (goto-char from) + (while (re-search-forward "\\([() ;'`]\\)" to t) + (replace-match "\\\\\\1")) + (goto-char to))) + (goto-char (point-min)) + (while (re-search-forward "#(" nil t) (replace-match "(vector ")) + (goto-char (point-min)) + (while (re-search-forward "#" nil t) (replace-match "\\\\#"))) + + ;;; Fontify strings as Scheme code: |