diff options
| author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2009-03-20 01:32:38 +0100 | 
|---|---|---|
| committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2009-03-20 01:32:38 +0100 | 
| commit | 92d36fc65ff6a181769426cf1716245bf6fc2121 (patch) | |
| tree | a7d8cc454ce874e654a0edd6f0ad5d389bf5716f /elisp | |
| parent | c9d2c699ecd4e9dee6033ccc59a454bbb9bb3085 (diff) | |
| download | geiser-92d36fc65ff6a181769426cf1716245bf6fc2121.tar.gz geiser-92d36fc65ff6a181769426cf1716245bf6fc2121.tar.bz2 | |
Reuse closed REPL buffers.
Diffstat (limited to 'elisp')
| -rw-r--r-- | elisp/geiser-repl.el | 20 | 
1 files changed, 15 insertions, 5 deletions
| 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)) | 
