diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-11-11 16:28:52 +0100 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2010-11-11 16:28:52 +0100 |
commit | 70cfa5b379e90e6899c7e1a210a5c468dc578479 (patch) | |
tree | 75237d0ac9844d11b61147d77182f78e60b81f76 /elisp | |
parent | 8d1e1c47563131cd0f52f0cc02fa0b23eebd2227 (diff) | |
parent | 5a7c0553d5b60cd9475ecb33c5d65b76789757e0 (diff) | |
download | geiser-guile-70cfa5b379e90e6899c7e1a210a5c468dc578479.tar.gz geiser-guile-70cfa5b379e90e6899c7e1a210a5c468dc578479.tar.bz2 |
Merge branch 'guile-meta' into meta-reconnection
Diffstat (limited to 'elisp')
-rw-r--r-- | elisp/geiser-edit.el | 6 | ||||
-rw-r--r-- | elisp/geiser-guile.el | 30 |
2 files changed, 22 insertions, 14 deletions
diff --git a/elisp/geiser-edit.el b/elisp/geiser-edit.el index 4d61edc..8c34c28 100644 --- a/elisp/geiser-edit.el +++ b/elisp/geiser-edit.el @@ -205,10 +205,12 @@ With prefix, asks for the symbol to edit." (geiser-completion--read-symbol "Edit symbol: "))) (cmd `(:eval (:ge symbol-location ',symbol))) (marker (point-marker))) - (condition-case nil + (condition-case err (progn (geiser-edit--try-edit symbol (geiser-eval--send/wait cmd)) (when marker (ring-insert find-tag-marker-ring marker))) - (error (geiser-edit-module-at-point))))) + (error (condition-case nil + (geiser-edit-module-at-point) + (error (error (error-message-string err)))))))) (defun geiser-pop-symbol-stack () "Pop back to where \\[geiser-edit-symbol-at-point] was last invoked." diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index d58821b..3979688 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -113,28 +113,33 @@ This function uses `geiser-guile-init-file' if it exists." ;;; Evaluation support: +(defsubst geiser-guile--linearize-args (args) + (mapconcat 'identity args " ")) (defun geiser-guile--geiser-procedure (proc &rest args) (case proc - ((eval compile) (format "((@ (geiser emacs) ge:compile) '%s '%s)" - (mapconcat 'identity (cdr args) " ") - (or (car args) "#f"))) - ((load-file compile-file) - (format "((@ (geiser emacs) ge:%s) %s)" proc (car args))) - ((no-values) "((@ (guile) values))") - (t (format "(apply (@ (geiser emacs) ge:%s) (list %s))" - proc (mapconcat 'identity args ""))))) + ((eval compile) (format ",geiser-eval %s %s%s" + (or (car args) "#f") + (geiser-guile--linearize-args (cdr args)) + (if (cddr args) "" " ()"))) + ((load-file compile-file) (format ",geiser-load-file %s" (car args))) + ((no-values) ",geiser-no-values") + (t (format "ge:%s (%s)" proc (geiser-guile--linearize-args args))))) (defconst geiser-guile--module-re "(define-module +\\(([^)]+)\\)") +(defconst geiser-guile--library-re + "(library +\\(([^)]+)\\)") + (defun geiser-guile--get-module (&optional module) (cond ((null module) (save-excursion (ignore-errors (while (not (zerop (geiser-syntax--nesting-level))) (backward-up-list))) - (if (re-search-backward geiser-guile--module-re nil t) + (if (or (re-search-backward geiser-guile--module-re nil t) + (looking-at geiser-guile--library-re)) (geiser-guile--get-module (match-string-no-properties 1)) :f))) ((listp module) module) @@ -174,7 +179,7 @@ This function uses `geiser-guile-init-file' if it exists." (if geiser-guile-debug-show-bt-p "bt" "fr")))) (compilation-forget-errors) (goto-char (point-max)) - (comint-send-string nil "((@ (geiser emacs) ge:newline))\n") + (comint-send-string nil ",geiser-newline\n") (comint-send-string nil ",error-message\n") (comint-send-string nil bt-cmd) (when geiser-guile-show-debug-help-p @@ -252,8 +257,9 @@ it spawn a server thread." `((,geiser-guile--path-rx 1 compilation-error-face))) (geiser-eval--send/wait - `(:scm ,(format "(set! %%load-path (cons %S %%load-path))" - (expand-file-name "guile/" geiser-scheme-dir)))) + (format "(set! %%load-path (cons %S %%load-path))" + (expand-file-name "guile/" geiser-scheme-dir))) + (geiser-eval--send/wait ",use (geiser emacs)") (geiser-guile-update-warning-level)) |