From 92d36fc65ff6a181769426cf1716245bf6fc2121 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Fri, 20 Mar 2009 01:32:38 +0100 Subject: Reuse closed REPL buffers. --- elisp/geiser-repl.el | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'elisp') diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index f5eac52..b3a47e7 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -74,6 +74,7 @@ implementation name gets appended to it." ;;; Geiser REPL buffers and processes: (defvar geiser-repl--repls nil) +(defvar geiser-repl--closed-repls nil) (make-variable-buffer-local (defvar geiser-repl--repl nil)) @@ -84,9 +85,9 @@ implementation name gets appended to it." (defsubst geiser-repl--set-this-buffer-repl (r) (setq geiser-repl--repl r)) -(defun geiser-repl--repl/impl (impl) +(defun geiser-repl--repl/impl (impl &optional repls) (catch 'repl - (dolist (repl geiser-repl--repls) + (dolist (repl (or repls geiser-repl--repls)) (with-current-buffer repl (when (eq geiser-impl--implementation impl) (throw 'repl repl)))))) @@ -111,8 +112,12 @@ implementation name gets appended to it." (defun geiser-repl--to-repl-buffer (impl) (unless (and (eq major-mode 'geiser-repl-mode) (not (get-buffer-process (current-buffer)))) - (pop-to-buffer - (generate-new-buffer (format "* %s *" (geiser-repl--repl-name impl))))) + (let* ((old (geiser-repl--repl/impl impl geiser-repl--closed-repls)) + (old (and (buffer-live-p old) old))) + (pop-to-buffer + (or old + (generate-new-buffer (format "* %s *" + (geiser-repl--repl-name impl))))))) (geiser-repl-mode) (geiser-impl--set-buffer-implementation impl)) @@ -219,10 +224,15 @@ If no REPL is running, execute `run-geiser' to start a fresh one." (let ((comint-prompt-read-only nil) (comint-input-ring-file-name (geiser-repl--history-file))) (geiser-repl--on-quit) + (push (current-buffer) geiser-repl--closed-repls) (when (buffer-name (current-buffer)) (insert "\nIt's been nice interacting with you!\n") (insert "Press C-cz to bring me back.\n" )))))) +(defun geiser-repl--on-kill () + (geiser-repl--on-quit) + (remove (current-buffer) geiser-repl--closed-repls)) + (defun geiser-repl--input-filter (str) (and (not (string-match "^\\s *$" str)) (not (string-match "^,quit *$" str)))) @@ -232,7 +242,7 @@ If no REPL is running, execute `run-geiser' to start a fresh one." (geiser-repl--history-file)) (set (make-local-variable 'comint-input-ring-size) geiser-repl-history-size) (set (make-local-variable 'comint-input-filter) 'geiser-repl--input-filter) - (add-hook 'kill-buffer-hook 'geiser-repl--on-quit nil t) + (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)) -- cgit v1.2.3