From 708205e21031dd016172523ef15e9aeda4417412 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Wed, 4 Mar 2009 02:07:41 +0100 Subject: New geiser-reload command. New geiser command. --- README | 2 ++ elisp/geiser-debug.el | 1 - elisp/geiser-mode.el | 11 +++++++++ elisp/geiser-repl.el | 18 +++++++++++++-- elisp/geiser.el | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 3 deletions(-) diff --git a/README b/README index 0300dfa..98ddf77 100644 --- a/README +++ b/README @@ -13,6 +13,8 @@ In particular, customize `geiser-repl-guile-binary' (in geiser-repl), which should point to a guile-vm executable. + - To start a REPL, M-x geiser. + * Quick key reference *** In Scheme buffers: diff --git a/elisp/geiser-debug.el b/elisp/geiser-debug.el index 0bc3f85..35b81ca 100644 --- a/elisp/geiser-debug.el +++ b/elisp/geiser-debug.el @@ -25,7 +25,6 @@ ;;; Code: -(require 'geiser-repl) (require 'geiser-eval) (require 'geiser-popup) (require 'geiser-base) diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index 6a3df40..855f071 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -192,6 +192,17 @@ interacting with the Geiser REPL is at your disposal. (geiser-mode--triple-chord ?x ?r 'geiser-expand-region) (geiser-mode--triple-chord ?x ?x 'geiser-expand-definition) + +;;; Reload support: + +(defun geiser-mode--buffers () + (let ((buffers)) + (dolist (buffer (buffer-list)) + (when (buffer-live-p buffer) + (set-buffer buffer) + (when geiser-mode (push buffer buffers)))) + buffers)) + (provide 'geiser-mode) ;;; geiser-mode.el ends here diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index c542a66..304b0d4 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -158,9 +158,13 @@ REPL buffer." ;;; Interface: starting and interacting with geiser REPL: (defalias 'switch-to-guile 'run-guile) -(defalias 'switch-to-geiser-repl 'run-guile) -(defun run-guile (&optional arg) +(defun run-guile () + "Run Geiser using Guile." + (interactive) + (geiser 'guile)) + +(defun geiser (&optional implementation) "Show the geiser-repl buffer, starting the process if needed." (interactive) (let ((buf (process-buffer (geiser-repl--process t))) @@ -223,6 +227,16 @@ REPL buffer." (define-key geiser-repl-mode-map "\M-." 'geiser-edit-symbol-at-point) (define-key geiser-repl-mode-map "\M-," 'geiser-edit-pop-edit-symbol-stack) + +;;; Unload: + +(defun geiser-repl--live-p () + (buffer-live-p geiser-repl--buffer)) + +(defun geiser-repl-unload-function () + (when (geiser-repl--live-p) + (kill-buffer geiser-repl--buffer)) + t) (provide 'geiser-repl) diff --git a/elisp/geiser.el b/elisp/geiser.el index 3bdc218..ea41779 100644 --- a/elisp/geiser.el +++ b/elisp/geiser.el @@ -45,6 +45,9 @@ ;;; Autoloads: +(autoload 'geiser "geiser-repl.el" + "Start a Geiser REPL, or switch to a running one." t) + (autoload 'run-guile "geiser-repl.el" "Start a Geiser Guile REPL, or switch to a running one." t) @@ -69,6 +72,67 @@ (defun geiser-setup () (geiser-setup-scheme-mode)) + +;;; Reload: + +(defmacro geiser--features-list () + (quote '( + geiser-mode + geiser-repl + geiser-doc + geiser-edit + geiser-completion + geiser-autodoc + geiser-compile + geiser-debug + geiser-eval + geiser-connection + geiser-syntax + geiser-log + geiser-custom + geiser-base + geiser-popup + ))) + +(defun geiser-unload-function () + (dolist (feature (geiser--features-list)) + (when (featurep feature) (unload-feature feature t))) + t) + +(defun geiser-unload () + (interactive) + (when (featurep 'geiser) (unload-feature 'geiser))) + +(defun geiser-reload (&optional arg) + "Reload Geiser. +With prefix arg, prompts for the DIRECTORY in which Geiser should be +loaded." + (interactive "P") + (let* ((dir (or (and arg (read-directory-name "New Geiser root dir: " + geiser-root-dir + geiser-root-dir + t + geiser-root-dir)) + geiser-root-dir)) + (geiser-main-file (expand-file-name "elisp/geiser.el" dir)) + (repl (and (featurep 'geiser-repl) (geiser-repl--live-p))) + (buffers (and (featurep 'geiser-mode) (geiser-mode--buffers)))) + (unless (file-exists-p geiser-main-file) + (error "%s does not contain Geiser!" dir)) + (remove geiser-elisp-dir load-path) + (geiser-unload) + (load-file geiser-main-file) + (geiser-setup) + (when repl + (load-library "geiser-repl") + (geiser 'repl)) + (when buffers + (load-library "geiser-mode") + (dolist (b buffers) + (set-buffer b) + (geiser-mode 1))) + (message "Geiser reloaded!"))) + (provide 'geiser) ;;; geiser.el ends here -- cgit v1.2.3