From d8da8d0e8733bb5c2fc01347be17dfc7c1c4cfa7 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sun, 14 Jun 2009 22:19:36 +0200 Subject: Fixes in geiser-reload (unload forcibly and pick repl implementations). --- elisp/geiser-impl.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index 6bc4e79..d45fadc 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -213,7 +213,7 @@ implementation to be used by Geiser.")) (defun geiser-impl-unload-function () (dolist (imp (mapcar 'geiser-impl--impl-feature geiser-impl--impls)) - (when (featurep imp) (unload-feature imp))) + (when (featurep imp) (unload-feature imp t))) t) (defun geiser-impl--reload-implementations (impls) -- 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-impl.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 a38f0cb328b48de908a978436388f216a270d6dd Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Wed, 17 Jun 2009 00:53:36 +0200 Subject: Circular dependencies between elisp modules eliminated. --- elisp/geiser-doc.el | 16 +++++----------- elisp/geiser-impl.el | 12 +++--------- elisp/geiser.el | 4 ++-- 3 files changed, 10 insertions(+), 22 deletions(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-doc.el b/elisp/geiser-doc.el index bece09e..adef4c6 100644 --- a/elisp/geiser-doc.el +++ b/elisp/geiser-doc.el @@ -24,6 +24,7 @@ ;;; Code: +(require 'geiser-impl) (require 'geiser-completion) (require 'geiser-eval) (require 'geiser-syntax) @@ -157,13 +158,6 @@ ;;; Commands: -(make-variable-buffer-local - (defvar geiser-doc--external-help-function nil)) - -(defun geiser-doc--external-help (symbol module) - (and geiser-doc--external-help-function - (funcall geiser-doc--external-help-function symbol module))) - (defun geiser-doc--get-docstring (symbol module) (geiser-eval--send/result `(:eval ((:ge symbol-documentation) ',symbol) ,module))) @@ -172,10 +166,10 @@ (geiser-eval--send/result `(:eval ((:ge module-exports) (:module ,module))))) (defun geiser-doc-symbol (symbol &optional module impl) - (let ((module (or module (geiser-eval--get-module)))) - (unless (geiser-doc--external-help symbol module) - (let ((impl (or impl geiser-impl--implementation)) - (ds (geiser-doc--get-docstring symbol module))) + (let ((module (or module (geiser-eval--get-module))) + (impl (or impl geiser-impl--implementation))) + (unless (geiser-impl--external-help impl symbol module) + (let ((ds (geiser-doc--get-docstring symbol module))) (if (or (not ds) (not (listp ds))) (message "No documentation available for '%s'" symbol) (geiser-doc--with-buffer diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index 38c34ee..b4c01c7 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -27,7 +27,6 @@ (require 'geiser-eval) (require 'geiser-base) -(require 'geiser-doc) (require 'geiser-completion) @@ -124,10 +123,6 @@ (defsubst geiser-impl--geiser-procedure-function (impl) (geiser-impl--sym impl "geiser-procedure")) -(defsubst geiser-impl--external-help-function (impl) - (let ((f (geiser-impl--sym impl "external-help"))) - (and (fboundp f) f))) - (defsubst geiser-impl--symbol-begin (impl) (geiser-impl--sym impl "symbol-begin")) @@ -136,8 +131,6 @@ (geiser-impl--module-function impl)) (setq geiser-eval--geiser-procedure-function (geiser-impl--geiser-procedure-function impl)) - (setq geiser-doc--external-help-function - (geiser-impl--external-help-function impl)) (setq geiser-completion--symbol-begin-function (geiser-impl--symbol-begin impl))) @@ -150,8 +143,6 @@ (geiser-impl--module-function imp)) (geiser-eval--geiser-procedure-function (geiser-impl--geiser-procedure-function imp)) - (geiser-doc--external-help-function - (geiser-impl--external-help-function imp)) (geiser-completion--symbol-begin-function (geiser-impl--symbol-begin imp))) (funcall thunk))) @@ -192,6 +183,9 @@ (defsubst geiser-impl--startup (impl) (geiser-impl--call-if-bound impl "startup")) +(defsubst geiser-impl--external-help (impl symbol module) + (geiser-impl--call-if-bound impl "external-help" symbol module)) + ;;; Access to implementation guessing function: diff --git a/elisp/geiser.el b/elisp/geiser.el index b12127c..926cb4f 100644 --- a/elisp/geiser.el +++ b/elisp/geiser.el @@ -114,10 +114,10 @@ (quote '( geiser-mode geiser-repl - geiser-impl - geiser-doc geiser-xref geiser-edit + geiser-doc + geiser-impl geiser-completion geiser-autodoc geiser-compile -- cgit v1.2.3 From bcc096b289e0ca237914c8aaa3e351d2bf7d0731 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Wed, 17 Jun 2009 03:13:38 +0200 Subject: Implementation-specific backtrace display. --- elisp/geiser-debug.el | 11 ++++++++--- elisp/geiser-impl.el | 3 +++ elisp/geiser.el | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-debug.el b/elisp/geiser-debug.el index f0dc6ec..3bf262c 100644 --- a/elisp/geiser-debug.el +++ b/elisp/geiser-debug.el @@ -25,6 +25,7 @@ ;;; Code: +(require 'geiser-impl) (require 'geiser-eval) (require 'geiser-popup) (require 'geiser-base) @@ -60,13 +61,17 @@ (defun geiser-debug--display-retort (what ret) (let* ((err (geiser-eval--retort-error ret)) - (output (geiser-eval--retort-output ret))) + (key (geiser-eval--error-key err)) + (output (geiser-eval--retort-output ret)) + (impl geiser-impl--implementation) + (module (geiser-eval--get-module))) (geiser-debug--with-buffer (erase-buffer) (insert what) (newline 2) - (when err (insert (geiser-eval--error-str err) "\n\n")) - (when output (insert output "\n\n")) + (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"))) (goto-char (point-min))) (when err (geiser-debug--pop-to-buffer)))) diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index b4c01c7..fadc8b6 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -186,6 +186,9 @@ (defsubst geiser-impl--external-help (impl symbol module) (geiser-impl--call-if-bound impl "external-help" symbol module)) +(defsubst geiser-impl--display-error (impl module key msg) + (geiser-impl--call-if-bound impl "display-error" module key msg)) + ;;; Access to implementation guessing function: diff --git a/elisp/geiser.el b/elisp/geiser.el index 926cb4f..748fb23 100644 --- a/elisp/geiser.el +++ b/elisp/geiser.el @@ -117,11 +117,11 @@ geiser-xref geiser-edit geiser-doc + geiser-debug geiser-impl geiser-completion geiser-autodoc geiser-compile - geiser-debug geiser-eval geiser-connection geiser-syntax -- cgit v1.2.3 From 222d885b124798234e5e736b25a24a87918db49b Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Thu, 18 Jun 2009 17:30:23 +0200 Subject: Will i ever get initialisation right? --- elisp/geiser-impl.el | 6 +++++- elisp/geiser.el | 19 +++---------------- 2 files changed, 8 insertions(+), 17 deletions(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index fadc8b6..ccb0584 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -105,6 +105,9 @@ (defsubst geiser-impl--fboundp (imp name) (fboundp (geiser-impl--sym imp name))) +(defsubst geiser-impl--impl-feature (impl) + (intern (format "geiser-%s" impl))) + (defun geiser-impl--value (imp name &optional fun) (let ((sym (geiser-impl--sym imp name))) (unless (or (and (not fun) (boundp sym)) @@ -221,7 +224,8 @@ implementation to be used by Geiser.")) ;;; Initialization: -(mapc 'geiser-impl--register geiser-impl-installed-implementations) +(mapc 'geiser-impl--register + (or geiser-impl-installed-implementations '(guile plt))) (provide 'geiser-impl) diff --git a/elisp/geiser.el b/elisp/geiser.el index 42e8cc1..1cc3c51 100644 --- a/elisp/geiser.el +++ b/elisp/geiser.el @@ -90,18 +90,10 @@ geiser-xref)) -;;; Scheme mode setup: +;;; Setup: -(defsubst geiser-impl--impl-feature (impl) - (intern (format "geiser-%s" impl))) - -(defun geiser-setup () - (eval-after-load "scheme" - '(add-hook 'scheme-mode-hook 'turn-on-geiser-mode)) - (mapc (lambda (impl) - (require (geiser-impl--impl-feature impl) nil t)) - (or geiser-impl-installed-implementations - '(guile plt)))) +(eval-after-load "scheme" + '(add-hook 'scheme-mode-hook 'turn-on-geiser-mode)) ;;; Reload: @@ -165,11 +157,6 @@ loaded." (geiser-mode--restore buffers) (message "Geiser reloaded!"))) - -;; Initialization: - -(geiser-setup) - (provide 'geiser) ;;; geiser.el ends here -- cgit v1.2.3 From fee4491e73ff69a25a320be815a64daf18246ca8 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Fri, 19 Jun 2009 16:51:31 +0200 Subject: Directory-specific implementations. --- elisp/geiser-impl.el | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index ccb0584..236af27 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -46,6 +46,18 @@ :type '(repeat symbol) :group 'geiser-impl) +(defcustom geiser-impl-implementations-alist nil + "A map from regular expressions or directories to implementations. +When opening a new file, its full path will be matched against +each one of the regular expressions or directories in this map in order to +determine its scheme flavour." + :type '(repeat (list (choice (group :tag "Regular expression" + (const regexp) regexp) + (group :tag "Directory" + (const dir) directory)) + symbol)) + :group 'geiser-impl) + ;;; Registering implementations: @@ -200,10 +212,21 @@ "Set this buffer local variable to specify the Scheme implementation to be used by Geiser.")) +(defun geiser-impl--match-impl (desc bn) + (let ((rx (if (eq (car desc) 'regexp) + (cadr desc) + (format "^%s" (regexp-quote (cadr desc)))))) + (and rx (string-match-p rx bn)))) + (defun geiser-impl--guess () (or geiser-impl--implementation geiser-scheme-implementation (catch 'impl + (let ((bn (buffer-file-name))) + (when bn + (dolist (x geiser-impl-implementations-alist) + (when (geiser-impl--match-impl (car x) bn) + (throw 'impl (cadr x)))))) (dolist (impl geiser-impl--impls) (when (geiser-impl--call-if-bound impl "guess") (throw 'impl impl)))) -- cgit v1.2.3 From 00dbf12a4326b911d9cc78378754e24000952d75 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Fri, 19 Jun 2009 17:03:30 +0200 Subject: Registered implementations are loaded by default. --- elisp/geiser-impl.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index 236af27..c148920 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -64,7 +64,8 @@ determine its scheme flavour." (defvar geiser-impl--impls nil) (defun geiser-impl--register (impl) - (add-to-list 'geiser-impl--impls impl)) + (when (require (geiser-impl--impl-feature impl) nil t) + (add-to-list 'geiser-impl--impls impl))) (defun geiser-impl--unregister (impl) (setq geiser-impl--impls (remove impl geiser-impl--impls))) -- cgit v1.2.3 From ac30982fe9cf0b9fdde1de4f7e86684a0f688db4 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Fri, 19 Jun 2009 17:26:16 +0200 Subject: User command to register scheme implementations (geiser-register-implementation). --- elisp/geiser-impl.el | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index c148920..58cd089 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -233,6 +233,21 @@ implementation to be used by Geiser.")) (throw 'impl impl)))) (geiser-impl--default-implementation))) + +;;; User commands + +(defun geiser-register-implementation () + "Register a new Scheme implementation." + (interactive) + (let ((current geiser-impl-installed-implementations) + (impl (geiser-impl--read-impl "New implementation: " nil t))) + (unless (geiser-impl--register impl) + (error "geiser-%s.el not found in load-path")) + (when (and (not (memq impl current)) + (y-or-n-p "Remember this implementation using customize? ")) + (customize-save-variable + 'geiser-impl-installed-implementations (cons impl current))))) + ;;; Unload support -- cgit v1.2.3 From 8b5fc88976f5cd037ed8304bade16a8118e67825 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Fri, 19 Jun 2009 17:27:31 +0200 Subject: Bug fix. --- elisp/geiser-impl.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index 58cd089..767a7cf 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -242,7 +242,7 @@ implementation to be used by Geiser.")) (let ((current geiser-impl-installed-implementations) (impl (geiser-impl--read-impl "New implementation: " nil t))) (unless (geiser-impl--register impl) - (error "geiser-%s.el not found in load-path")) + (error "geiser-%s.el not found in load-path" impl)) (when (and (not (memq impl current)) (y-or-n-p "Remember this implementation using customize? ")) (customize-save-variable -- cgit v1.2.3 From 737ef29d17b6d85732c6164f560949d75c5f4c77 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Fri, 19 Jun 2009 20:44:32 +0200 Subject: New user command to unregister Scheme implementations. --- elisp/geiser-impl.el | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index 767a7cf..4239f1e 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -68,7 +68,8 @@ determine its scheme flavour." (add-to-list 'geiser-impl--impls impl))) (defun geiser-impl--unregister (impl) - (setq geiser-impl--impls (remove impl geiser-impl--impls))) + (setq geiser-impl--impls (remove impl geiser-impl--impls)) + (ignore-errors (unload-feature (geiser-impl--impl-feature impl)))) (defvar geiser-impl--default-implementation geiser-impl-default-implementation) @@ -240,7 +241,7 @@ implementation to be used by Geiser.")) "Register a new Scheme implementation." (interactive) (let ((current geiser-impl-installed-implementations) - (impl (geiser-impl--read-impl "New implementation: " nil t))) + (impl (geiser-impl--read-impl "New Scheme implementation: " nil t))) (unless (geiser-impl--register impl) (error "geiser-%s.el not found in load-path" impl)) (when (and (not (memq impl current)) @@ -248,6 +249,17 @@ implementation to be used by Geiser.")) (customize-save-variable 'geiser-impl-installed-implementations (cons impl current))))) +(defun geiser-unregister-implementation () + "Unregister an installed Scheme implementation." + (interactive) + (let* ((current geiser-impl-installed-implementations) + (impl (geiser-impl--read-impl "Forget implementation: " current))) + (geiser-impl--unregister impl) + (when (and (impl current) + (y-or-n-p "Forget permanently using customize? ")) + (customize-save-variable + 'geiser-impl-installed-implementations (remove impl current))))) + ;;; Unload support -- cgit v1.2.3 From 5e9892d0cfbd25448ee106a8304b5b1ed528c121 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sat, 20 Jun 2009 09:56:59 +0200 Subject: Auxiliary function. --- elisp/geiser-impl.el | 3 +++ 1 file changed, 3 insertions(+) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index 4239f1e..cb5daa8 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -71,6 +71,9 @@ determine its scheme flavour." (setq geiser-impl--impls (remove impl geiser-impl--impls)) (ignore-errors (unload-feature (geiser-impl--impl-feature impl)))) +(defun geiser-impl--add-to-alist (kind what impl) + (add-to-list 'geiser-impl-implementations-alist (list (list kind what) impl))) + (defvar geiser-impl--default-implementation geiser-impl-default-implementation) -- cgit v1.2.3 From b0e3391ace36cf2bb111ed0c56883dd1e0cb4117 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sun, 28 Jun 2009 21:47:49 +0200 Subject: Bug fix: initialisation loop removed. --- elisp/geiser-impl.el | 13 ++++++++----- elisp/geiser-repl.el | 7 ++++--- 2 files changed, 12 insertions(+), 8 deletions(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index cb5daa8..32acade 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -64,7 +64,8 @@ determine its scheme flavour." (defvar geiser-impl--impls nil) (defun geiser-impl--register (impl) - (when (require (geiser-impl--impl-feature impl) nil t) + (when (and (not (memq impl geiser-impl--impls)) + (require (geiser-impl--impl-feature impl) nil t)) (add-to-list 'geiser-impl--impls impl))) (defun geiser-impl--unregister (impl) @@ -275,12 +276,14 @@ implementation to be used by Geiser.")) (dolist (impl impls) (load-library (format "geiser-%s" impl)))) + +(provide 'geiser-impl) + ;;; Initialization: -(mapc 'geiser-impl--register - (or geiser-impl-installed-implementations '(guile plt))) +(eval-after-load 'geiser-impl + '(mapc 'geiser-impl--register + (or geiser-impl-installed-implementations '(guile plt)))) - -(provide 'geiser-impl) ;;; geiser-impl.el ends here diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index 38ebc6c..f1719e8 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -141,8 +141,8 @@ implementation name gets appended to it." (geiser-repl--history-setup) (geiser-con--setup-connection (current-buffer) prompt-rx) (add-to-list 'geiser-repl--repls (current-buffer)) - (geiser-impl--startup impl) - (geiser-repl--set-this-buffer-repl (current-buffer)))) + (geiser-repl--set-this-buffer-repl (current-buffer)) + (geiser-impl--startup impl))) (defun geiser-repl--process () (let ((buffer (geiser-repl--get-repl geiser-impl--implementation))) @@ -257,7 +257,8 @@ If no REPL is running, execute `run-geiser' to start a fresh one." (set (make-local-variable 'comint-input-filter) 'geiser-repl--input-filter) (add-hook 'kill-buffer-hook 'geiser-repl--on-kill nil t) (comint-read-input-ring t) - (set-process-sentinel (get-buffer-process (current-buffer)) 'geiser-repl--sentinel)) + (set-process-sentinel (get-buffer-process (current-buffer)) + 'geiser-repl--sentinel)) ;;; geiser-repl mode: -- cgit v1.2.3 From 8ec4b1b63c9e4976988988b0f534bcec77583c79 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sun, 23 Aug 2009 02:59:09 +0200 Subject: Fixes for all byte-compilation warnings. --- elisp/geiser-autodoc.el | 4 ++-- elisp/geiser-base.el | 20 ++-------------- elisp/geiser-completion.el | 6 ++--- elisp/geiser-doc.el | 2 +- elisp/geiser-edit.el | 5 +++- elisp/geiser-eval.el | 38 +++++++++++++++--------------- elisp/geiser-impl.el | 58 ++++++++++++++++++++++++---------------------- elisp/geiser-log.el | 2 ++ 8 files changed, 63 insertions(+), 72 deletions(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el index 1d876dd..a8a7a50 100644 --- a/elisp/geiser-autodoc.el +++ b/elisp/geiser-autodoc.el @@ -114,8 +114,8 @@ when `geiser-autodoc-display-module-p' is on." (module (cdr (assoc 'module signature)))) (if (not args) (geiser-autodoc--proc-name proc module) (let ((cpos 1) - (pos (or (second desc) 0)) - (prev (third desc)) + (pos (or (cadr desc) 0)) + (prev (caddr desc)) (reqs (cdr (assoc 'required args))) (opts (cdr (assoc 'optional args))) (keys (cdr (assoc 'key args)))) diff --git a/elisp/geiser-base.el b/elisp/geiser-base.el index 362930d..ba0067a 100644 --- a/elisp/geiser-base.el +++ b/elisp/geiser-base.el @@ -25,26 +25,10 @@ ;;; Code: - -;;; Versioning: - -(defconst geiser-version-major 0 - "Geiser's major version number.") -(defconst geiser-version-minor 1 - "Geiser's minor version number.") - -(defun geiser-version-string () - "Geiser's version as a string." - (format "%s.%s" geiser-version-major geiser-version-minor)) - -(defun geiser-version () - "Echoes Geiser's version." - (interactive) - (message "Geiser %s" (geiser-version-string))) - - ;;; Emacs compatibility: +(eval-when-compile (require 'cl)) + (eval-after-load "ring" '(when (not (fboundp 'ring-member)) (defun ring-member (ring item) diff --git a/elisp/geiser-completion.el b/elisp/geiser-completion.el index 28aef12..cd03cae 100644 --- a/elisp/geiser-completion.el +++ b/elisp/geiser-completion.el @@ -29,7 +29,7 @@ (require 'geiser-syntax) (require 'geiser-base) -(eval-when-compile (require 'cl)) +(require 'cl) ;;; Completions window handling, heavily inspired in slime's: @@ -84,7 +84,7 @@ terminates a current completion." (remove-hook 'pre-command-hook 'geiser-completion--maybe-restore-window-cfg) (condition-case err - (cond ((find last-command-char "()\"'`,# \r\n:") + (cond ((find last-command-event "()\"'`,# \r\n:") (geiser-completion--restore-window-cfg)) ((not (geiser-completion--window-active-p)) (geiser-completion--forget-window-cfg)) @@ -146,7 +146,7 @@ terminates a current completion." ;;; Completion functionality: -(defsubst geiser-completion--symbol-list (prefix) +(defun geiser-completion--symbol-list (prefix) (delete-duplicates (append (mapcar (lambda (s) (format "%s" s)) (geiser-syntax--locals-around-point)) (geiser-eval--send/result `(:eval ((:ge completions) ,prefix)))) diff --git a/elisp/geiser-doc.el b/elisp/geiser-doc.el index 61c50f5..8e5c816 100644 --- a/elisp/geiser-doc.el +++ b/elisp/geiser-doc.el @@ -180,7 +180,7 @@ (cdr (assoc 'signature ds)))) (newline) (insert (or (cdr (assoc 'docstring ds)) "")) - (goto-line (point-min)) + (goto-char (point-min)) (setq geiser-doc--buffer-link (geiser-doc--history-push (geiser-doc--make-link symbol module impl)))) diff --git a/elisp/geiser-edit.el b/elisp/geiser-edit.el index 723e898..ad2c11e 100644 --- a/elisp/geiser-edit.el +++ b/elisp/geiser-edit.el @@ -106,8 +106,9 @@ or following links in error buffers.") (format "\\_<%s\\_>" (regexp-quote (format "%s" thing)))) (defun geiser-edit--goto-line (symbol line) + (goto-char (point-min)) (if (numberp line) - (goto-line line) + (forward-line (max 0 (1- line))) (goto-char (point-min)) (when (or (re-search-forward (geiser-edit--def-re symbol) nil t) (re-search-forward (geiser-edit--def-re* symbol) nil t) @@ -152,6 +153,8 @@ or following links in error buffers.") ;;; Commands: +(defvar geiser-edit--symbol-history nil) + (defun geiser-edit-symbol () "Asks for a symbol to edit, with completion." (interactive) diff --git a/elisp/geiser-eval.el b/elisp/geiser-eval.el index 3e0d0d9..1c8cbfe 100644 --- a/elisp/geiser-eval.el +++ b/elisp/geiser-eval.el @@ -54,25 +54,6 @@ EVAL, COMPILE, LOAD-FILE and COMPILE-FILE should be supported.")) ;;; Code formatting: -(defun geiser-eval--scheme-str (code) - (cond ((null code) "'()") - ((eq code :f) "#f") - ((eq code :t) "#t") - ((listp code) - (cond ((eq (car code) :eval) (geiser-eval--eval (cdr code))) - ((eq (car code) :comp) (geiser-eval--comp (cdr code))) - ((eq (car code) :load-file) - (geiser-eval--load-file (cadr code))) - ((eq (car code) :comp-file) - (geiser-eval--comp-file (cadr code))) - ((eq (car code) :module) (geiser-eval--module (cadr code))) - ((eq (car code) :ge) (geiser-eval--ge (cadr code))) - ((eq (car code) :scm) (cadr code)) - (t (concat "(" - (mapconcat 'geiser-eval--scheme-str code " ") ")")))) - ((symbolp code) (format "%s" code)) - (t (format "%S" code)))) - (defsubst geiser-eval--eval (code) (geiser-eval--scheme-str `(,(geiser-eval--form 'eval) (quote ,(nth 0 code)) @@ -99,6 +80,25 @@ EVAL, COMPILE, LOAD-FILE and COMPILE-FILE should be supported.")) (defsubst geiser-eval--ge (proc) (geiser-eval--scheme-str (geiser-eval--form proc))) +(defun geiser-eval--scheme-str (code) + (cond ((null code) "'()") + ((eq code :f) "#f") + ((eq code :t) "#t") + ((listp code) + (cond ((eq (car code) :eval) (geiser-eval--eval (cdr code))) + ((eq (car code) :comp) (geiser-eval--comp (cdr code))) + ((eq (car code) :load-file) + (geiser-eval--load-file (cadr code))) + ((eq (car code) :comp-file) + (geiser-eval--comp-file (cadr code))) + ((eq (car code) :module) (geiser-eval--module (cadr code))) + ((eq (car code) :ge) (geiser-eval--ge (cadr code))) + ((eq (car code) :scm) (cadr code)) + (t (concat "(" + (mapconcat 'geiser-eval--scheme-str code " ") ")")))) + ((symbolp code) (format "%s" code)) + (t (format "%S" code)))) + ;;; Code sending: diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index 32acade..840d0c1 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -58,11 +58,40 @@ determine its scheme flavour." symbol)) :group 'geiser-impl) + +;;; Auxiliary functions: +(defsubst geiser-impl--sym (imp name) + (intern (format "geiser-%s-%s" imp name))) + +(defsubst geiser-impl--boundp (imp name) + (boundp (geiser-impl--sym imp name))) + +(defsubst geiser-impl--fboundp (imp name) + (fboundp (geiser-impl--sym imp name))) + +(defsubst geiser-impl--impl-feature (impl) + (intern (format "geiser-%s" impl))) + +(defun geiser-impl--value (imp name &optional fun) + (let ((sym (geiser-impl--sym imp name))) + (unless (or (and (not fun) (boundp sym)) + (and fun (fboundp sym))) + (error "Unbound %s '%s' in Geiser Scheme implementation %s" + (if fun "function" "variable") sym imp)) + (if fun (symbol-function sym) (symbol-value sym)))) + +(defsubst geiser-impl--call-if-bound (imp name &rest args) + (when (geiser-impl--fboundp imp name) + (apply (geiser-impl--value imp name t) args))) + ;;; Registering implementations: (defvar geiser-impl--impls nil) +(make-variable-buffer-local + (defvar geiser-impl--implementation nil)) + (defun geiser-impl--register (impl) (when (and (not (memq impl geiser-impl--impls)) (require (geiser-impl--impl-feature impl) nil t)) @@ -91,9 +120,6 @@ determine its scheme flavour." ;;; Installing Scheme implementations: -(make-variable-buffer-local - (defvar geiser-impl--implementation nil)) - (defvar geiser-impl--impl-prompt-history nil) (defun geiser-impl--read-impl (&optional prompt impls non-req) @@ -114,30 +140,6 @@ determine its scheme flavour." (geiser-impl--install-vars impl) (geiser-impl--register impl))) -(defsubst geiser-impl--sym (imp name) - (intern (format "geiser-%s-%s" imp name))) - -(defsubst geiser-impl--boundp (imp name) - (boundp (geiser-impl--sym imp name))) - -(defsubst geiser-impl--fboundp (imp name) - (fboundp (geiser-impl--sym imp name))) - -(defsubst geiser-impl--impl-feature (impl) - (intern (format "geiser-%s" impl))) - -(defun geiser-impl--value (imp name &optional fun) - (let ((sym (geiser-impl--sym imp name))) - (unless (or (and (not fun) (boundp sym)) - (and fun (fboundp sym))) - (error "Unbound %s '%s' in Geiser Scheme implementation %s" - (if fun "function" "variable") sym imp)) - (if fun (symbol-function sym) (symbol-value sym)))) - -(defsubst geiser-impl--call-if-bound (imp name &rest args) - (when (geiser-impl--fboundp imp name) - (apply (geiser-impl--value imp name t) args))) - (defsubst geiser-impl--module-function (impl) (geiser-impl--sym impl "get-module")) @@ -259,7 +261,7 @@ implementation to be used by Geiser.")) (let* ((current geiser-impl-installed-implementations) (impl (geiser-impl--read-impl "Forget implementation: " current))) (geiser-impl--unregister impl) - (when (and (impl current) + (when (and impl (y-or-n-p "Forget permanently using customize? ")) (customize-save-variable 'geiser-impl-installed-implementations (remove impl current))))) diff --git a/elisp/geiser-log.el b/elisp/geiser-log.el index 68e0fae..27a485a 100644 --- a/elisp/geiser-log.el +++ b/elisp/geiser-log.el @@ -28,6 +28,8 @@ (require 'geiser-popup) (require 'geiser-base) +(require 'comint) + ;;; Customization: -- cgit v1.2.3 From 2120142f34e99935354e3ec74c4eed400a63b5be Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Sun, 23 Aug 2009 22:35:24 +0200 Subject: fixes for geiser-unload. --- elisp/geiser-impl.el | 9 ++++----- elisp/geiser-mode.el | 4 ++++ 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'elisp/geiser-impl.el') diff --git a/elisp/geiser-impl.el b/elisp/geiser-impl.el index 840d0c1..00fa1ef 100644 --- a/elisp/geiser-impl.el +++ b/elisp/geiser-impl.el @@ -271,16 +271,12 @@ implementation to be used by Geiser.")) (defun geiser-impl-unload-function () (dolist (imp (mapcar 'geiser-impl--impl-feature geiser-impl--impls)) - (when (featurep imp) (unload-feature imp t))) - t) + (when (featurep imp) (unload-feature imp t)))) (defun geiser-impl--reload-implementations (impls) (dolist (impl impls) (load-library (format "geiser-%s" impl)))) - -(provide 'geiser-impl) - ;;; Initialization: @@ -288,4 +284,7 @@ implementation to be used by Geiser.")) '(mapc 'geiser-impl--register (or geiser-impl-installed-implementations '(guile plt)))) + +(provide 'geiser-impl) + ;;; geiser-impl.el ends here diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index e19cb68..cc5a00f 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -261,6 +261,10 @@ interacting with the Geiser REPL is at your disposal. (geiser-mode 1) (when (cdr b) (geiser-impl--set-buffer-implementation (cdr b)))))) +(defun geiser-mode-unload-function () + (dolist (b (geiser-mode--buffers)) + (with-current-buffer (car b) (geiser-mode nil)))) + (provide 'geiser-mode) ;;; geiser-mode.el ends here -- cgit v1.2.3