branch: elpa/inf-clojure commit f24722c60477ff1177df1b8f5038984b2f2eb5f9 Author: dan sutton <d...@dpsutton.com> Commit: Bozhidar Batsov <bozhidar.bat...@gmail.com>
Extract useful functions --- inf-clojure.el | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/inf-clojure.el b/inf-clojure.el index 25457b5..1ec3db8 100644 --- a/inf-clojure.el +++ b/inf-clojure.el @@ -199,6 +199,22 @@ has been found. See also variable `inf-clojure-buffer'." (unless no-error (error "No Clojure subprocess; see variable `inf-clojure-buffer'")))) +(defun inf-clojure-repl-p () + "Indicates if current buffer is an inf-clojure repl. +Checks the mode and that there is a live process." + (and (derived-mode-p 'inf-clojure-mode) + (get-buffer-process (current-buffer)) + (process-live-p (get-buffer-process (current-buffer))))) + +(defun inf-clojure-repls-list () + "Return a list of all known inf-clojure repls." + (let (repl-buffers) + (dolist (b (buffer-list)) + (with-current-buffer b + (when (inf-clojure-repl-p) + (push (buffer-name b) repl-buffers)))) + repl-buffers)) + (defun inf-clojure-set-repl (always-ask) "Set an inf clojure buffer as the active repl. If in a repl already, use that unless a prefix is used (or @@ -206,21 +222,14 @@ ALWAYS-ASK). Otherwise get a list of all active inf-clojure repls and offer a choice. Recommended to rename buffers as they are created with `rename-buffer`." (interactive "P") - (cl-flet ((inf-clojure-repl-p () (and (derived-mode-p 'inf-clojure-mode) - (get-buffer-process (current-buffer)) - (process-live-p (get-buffer-process (current-buffer)))))) - (if (and (not always-ask) - (inf-clojure-repl-p)) - (setq inf-clojure-buffer (current-buffer)) - (let (repl-buffers) - (dolist (b (buffer-list)) - (with-current-buffer b - (when (inf-clojure-repl-p) - (push (buffer-name b) repl-buffers)))) - (if (> (length repl-buffers) 0) - (when-let ((repl-buffer (completing-read "Use for repl: " repl-buffers nil t))) - (setq inf-clojure-buffer (get-buffer repl-buffer))) - (user-error "No buffers have an inf-clojure process")))))) + (if (and (not always-ask) + (inf-clojure-repl-p)) + (setq inf-clojure-buffer (current-buffer)) + (let ((repl-buffers (inf-clojure-repls-list))) + (if (> (length repl-buffers) 0) + (when-let ((repl-buffer (completing-read "Use for repl: " repl-buffers nil t))) + (setq inf-clojure-buffer (get-buffer repl-buffer))) + (user-error "No buffers have an inf-clojure process"))))) (defvar-local inf-clojure-repl-type nil "Symbol to define your REPL type.