From 855240471c4d479c7770db599db8cbe7d225de3a Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sat, 30 Oct 2010 22:46:12 +0200 Subject: Guile: using meta-commands to talk with Guile --- elisp/geiser-guile.el | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index 3e1c03f..e07fb1b 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -113,17 +113,25 @@ This function uses `geiser-guile-init-file' if it exists." ;;; Evaluation support: +(defun geiser-guile--linearize (str) + (if (string-match "\n" str) + (with-temp-buffer + (insert str) + (subst-char-in-region (point-min) (point-max) ?\n ? t) + (buffer-string)) + str)) + +(defsubst geiser-guile--linearize-args (args) + (mapconcat 'geiser-guile--linearize 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" + (or (car args) "#f") + (geiser-guile--linearize-args (cdr 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 +\\(([^)]+)\\)") @@ -247,9 +255,10 @@ it spawn a server thread." (font-lock-add-keywords nil `((,geiser-guile--path-rx 1 compilation-error-face))) - (geiser-eval--send/result - `(:scm ,(format "(set! %%load-path (cons %S %%load-path))" - (expand-file-name "guile/" geiser-scheme-dir)))) + (geiser-eval--send/wait + (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)) -- cgit v1.2.3 From 9ad7d3a695d4543bd530e42252d36456914be5be Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sat, 30 Oct 2010 22:51:45 +0200 Subject: Guile: recognizing R6RS libraries as modules --- elisp/geiser-guile.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index e07fb1b..51de947 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -134,7 +134,7 @@ This function uses `geiser-guile-init-file' if it exists." (t (format "ge:%s %s" proc (geiser-guile--linearize-args args))))) (defconst geiser-guile--module-re - "(define-module +\\(([^)]+)\\)") + "(\\(?:define-module\\|library\\) +\\(([^)]+)\\)") (defun geiser-guile--get-module (&optional module) (cond ((null module) -- cgit v1.2.3 From 6b31cd5a246ada814327aaffd3fcfe38eaa7dbcf Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sat, 30 Oct 2010 23:48:18 +0200 Subject: Guile: really support R6RS libs --- elisp/geiser-guile.el | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index 51de947..c406d88 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -134,7 +134,10 @@ This function uses `geiser-guile-init-file' if it exists." (t (format "ge:%s %s" proc (geiser-guile--linearize-args args))))) (defconst geiser-guile--module-re - "(\\(?:define-module\\|library\\) +\\(([^)]+)\\)") + "(define-module +\\(([^)]+)\\)") + +(defconst geiser-guile--library-re + "(library +\\(([^)]+)\\)") (defun geiser-guile--get-module (&optional module) (cond ((null module) @@ -142,7 +145,8 @@ This function uses `geiser-guile-init-file' if it exists." (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) -- cgit v1.2.3 From 4f0c19c4bacdd7173a9c3b31a3e065996f78f1a0 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sun, 31 Oct 2010 01:46:29 +0200 Subject: Guile: reactivating the debugger during evaluation --- elisp/geiser-guile.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index c406d88..8f8d7af 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -185,7 +185,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 -- cgit v1.2.3 From 061559ee48e45d1f7ecb8082346b5ef1f5f523ae Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Mon, 1 Nov 2010 00:03:31 +0100 Subject: Guile: suppress embedded comments when sending multi-line sexps --- elisp/geiser-guile.el | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index 8f8d7af..3f8aa4b 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -116,7 +116,14 @@ This function uses `geiser-guile-init-file' if it exists." (defun geiser-guile--linearize (str) (if (string-match "\n" str) (with-temp-buffer + (set-syntax-table scheme-mode-syntax-table) (insert str) + (goto-char (point-min)) + (let ((kill-whole-line nil)) + (while (> (skip-syntax-forward "^<") 0) + (let ((p (point))) + (end-of-line) + (kill-region p (point))))) (subst-char-in-region (point-min) (point-max) ?\n ? t) (buffer-string)) str)) -- cgit v1.2.3 From ce57385a794978cc5ee2279289d83a120e6ca621 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Mon, 1 Nov 2010 00:19:23 +0100 Subject: Guile: shorten a bit more multi-line sexps sent to REPL --- elisp/geiser-guile.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index 3f8aa4b..363c061 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -124,7 +124,9 @@ This function uses `geiser-guile-init-file' if it exists." (let ((p (point))) (end-of-line) (kill-region p (point))))) - (subst-char-in-region (point-min) (point-max) ?\n ? t) + (goto-char (point-min)) + (while (re-search-forward "[ \t\n\r][ \t\n\r]+" nil t) + (replace-match " " nil nil)) (buffer-string)) str)) -- cgit v1.2.3 From d5252a159bb218181f440e04b159f1b08fda398a Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Mon, 1 Nov 2010 00:43:10 +0100 Subject: Guile: fix for the argument shortening algorithm --- elisp/geiser-guile.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index 363c061..f0d090d 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -125,8 +125,8 @@ This function uses `geiser-guile-init-file' if it exists." (end-of-line) (kill-region p (point))))) (goto-char (point-min)) - (while (re-search-forward "[ \t\n\r][ \t\n\r]+" nil t) - (replace-match " " nil nil)) + (while (search-forward-regexp "\n[ \t\r\n]*" nil t) + (replace-match " ")) (buffer-string)) str)) -- cgit v1.2.3 From cd2cfae323665c99f56528a9d67fd8c386fac541 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Mon, 1 Nov 2010 01:45:58 +0100 Subject: Guile: better meta-command args handling --- elisp/geiser-guile.el | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/elisp/geiser-guile.el b/elisp/geiser-guile.el index f0d090d..93d1237 100644 --- a/elisp/geiser-guile.el +++ b/elisp/geiser-guile.el @@ -113,34 +113,18 @@ This function uses `geiser-guile-init-file' if it exists." ;;; Evaluation support: -(defun geiser-guile--linearize (str) - (if (string-match "\n" str) - (with-temp-buffer - (set-syntax-table scheme-mode-syntax-table) - (insert str) - (goto-char (point-min)) - (let ((kill-whole-line nil)) - (while (> (skip-syntax-forward "^<") 0) - (let ((p (point))) - (end-of-line) - (kill-region p (point))))) - (goto-char (point-min)) - (while (search-forward-regexp "\n[ \t\r\n]*" nil t) - (replace-match " ")) - (buffer-string)) - str)) - (defsubst geiser-guile--linearize-args (args) - (mapconcat 'geiser-guile--linearize args " ")) + (mapconcat 'identity args " ")) (defun geiser-guile--geiser-procedure (proc &rest args) (case proc - ((eval compile) (format ",geiser-eval %s %s" + ((eval compile) (format ",geiser-eval %s %s%s" (or (car args) "#f") - (geiser-guile--linearize-args (cdr args)))) + (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))))) + (t (format "ge:%s (%s)" proc (geiser-guile--linearize-args args))))) (defconst geiser-guile--module-re "(define-module +\\(([^)]+)\\)") -- cgit v1.2.3