Skip to content

Commit c5868c8

Browse files
committed
Merge pull request #500 from jonpither/rename-buf
Change cider buffers designation
2 parents 09b7ea8 + 347e79e commit c5868c8

File tree

4 files changed

+105
-0
lines changed

4 files changed

+105
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### New features
66

7+
* New interactive command `cider-change-buffers-designation`.
78
* Cider command uses `cider-known-endpoints`.
89
* [#490](https://github.com/clojure-emacs/cider/pull/490) Dedicated
910
support for `company-mode` in `cider-complete-at-point`.

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,8 @@ The single prefix <kbd>C-u C-c C-z</kbd>, will switch you to the relevant REPL b
540540

541541
To explicitly choose the REPL buffer that <kbd>C-c C-z</kbd> uses based on project directory, use a double prefix <kbd>C-u C-u C-c C-z</kbd>. This assumes you have `cider-switch-to-relevant-repl` mapped to the var `cider-switch-to-repl-command` which is the default configuration.
542542

543+
To change the designation used for CIDER buffers use <kbd>M-x cider-change-buffers-designation</kbd>. This changes the CIDER REPL buffer, nREPL connection buffer and nREPL server buffer. For example using `cider-change-buffers-designation` with the string "foo" would change `*cider-repl localhost*` to `*cider-repl foo*`.
544+
543545
## Requirements
544546

545547
* [Leiningen](http://leiningen.org) 2.x (only for `cider-jack-in`)

cider-interaction.el

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,42 @@ endpoint and Clojure version."
143143
(list (car nrepl-connection-list))))
144144
(message (cider--connection-info (car nrepl-connection-list))))
145145

146+
(defun cider-extract-designation-from-current-repl-buffer ()
147+
"Extract the designation from the cider repl buffer name."
148+
(let ((repl-buffer-name (cider-current-repl-buffer))
149+
(template (split-string nrepl-repl-buffer-name-template "%s")))
150+
(string-match (format "^%s\\(.*\\)%s"
151+
(regexp-quote (concat (car template) nrepl-buffer-name-separator))
152+
(regexp-quote (cadr template)))
153+
repl-buffer-name)
154+
(or (match-string 1 repl-buffer-name) "<no designation>")))
155+
156+
(defun cider-change-buffers-designation ()
157+
"Changes the designation in cider buffer names.
158+
Buffer names changed are cider-repl, nrepl-connection and nrepl-server."
159+
(interactive)
160+
(cider-ensure-connected)
161+
(let* ((designation (read-string (format "Change CIDER buffer designation from '%s': "
162+
(cider-extract-designation-from-current-repl-buffer))))
163+
(new-repl-buffer-name (nrepl-format-buffer-name-template
164+
nrepl-repl-buffer-name-template designation)))
165+
(with-current-buffer (cider-current-repl-buffer)
166+
(rename-buffer new-repl-buffer-name))
167+
(with-current-buffer (nrepl-current-connection-buffer)
168+
(setq-local nrepl-repl-buffer new-repl-buffer-name)
169+
(let ((new-connection-buffer-name (nrepl-format-buffer-name-template
170+
nrepl-connection-buffer-name-template designation)))
171+
(rename-buffer new-connection-buffer-name)
172+
(setq nrepl-connection-list
173+
(cons new-connection-buffer-name (cdr nrepl-connection-list)))
174+
(when nrepl-server-buffer
175+
(let ((new-server-buffer-name (nrepl-format-buffer-name-template
176+
nrepl-server-buffer-name-template designation)))
177+
(with-current-buffer nrepl-server-buffer
178+
(rename-buffer new-server-buffer-name))
179+
(setq-local nrepl-server-buffer new-server-buffer-name)))))
180+
(message "CIDER buffer designation changed to: %s" designation)))
181+
146182
;;; Switching between REPL & source buffers
147183
(make-variable-buffer-local
148184
(defvar cider-last-clojure-buffer nil

test/cider-tests.el

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,3 +448,69 @@
448448
(noflet ((cider-known-endpoint-candidates () '())
449449
(ido-completing-read (dontcare dontcare) "label host port"))
450450
(should (equal '("host" "port") (cider-select-known-endpoint)))))
451+
452+
(ert-deftest test-cider-change-buffers-designation ()
453+
(with-temp-buffer
454+
(let ((server-buffer (current-buffer)))
455+
(with-temp-buffer
456+
(let* ((connection-buffer (current-buffer))
457+
(nrepl-connection-list (list (buffer-name connection-buffer))))
458+
(with-temp-buffer
459+
(let ((repl-buffer (current-buffer)))
460+
(with-current-buffer connection-buffer
461+
(setq-local nrepl-repl-buffer (buffer-name repl-buffer))
462+
(setq-local nrepl-server-buffer (buffer-name server-buffer)))
463+
(noflet ((read-string (dontcare) "bob"))
464+
(cider-change-buffers-designation)
465+
(should (equal "*cider-repl bob*" (buffer-name repl-buffer)))
466+
(should (equal "*nrepl-connection bob*" (buffer-name connection-buffer)))
467+
(should (equal "*nrepl-server bob*" (buffer-name server-buffer)))))))))))
468+
469+
(ert-deftest test-cider-change-buffers-designation-to-existing-designation-has-no-effect ()
470+
(with-temp-buffer
471+
(let ((server-buffer (current-buffer)))
472+
(with-temp-buffer
473+
(let* ((connection-buffer (current-buffer))
474+
(nrepl-connection-list (list (buffer-name connection-buffer))))
475+
(with-temp-buffer
476+
(rename-buffer "*cider-repl bob*") ;; Make a buffer that already has the designation
477+
(with-temp-buffer
478+
(let* ((repl-buffer (current-buffer))
479+
(before-repl-buffer-name (buffer-name repl-buffer))
480+
(before-connection-buffer-name (buffer-name connection-buffer))
481+
(before-server-buffer-name (buffer-name server-buffer)))
482+
483+
(with-current-buffer connection-buffer
484+
(setq-local nrepl-repl-buffer (buffer-name repl-buffer))
485+
(setq-local nrepl-server-buffer (buffer-name server-buffer)))
486+
487+
(noflet ((read-string (dontcare) "bob"))
488+
(should-error
489+
(cider-change-buffers-designation))
490+
(should (equal before-repl-buffer-name (buffer-name repl-buffer)))
491+
(should (equal before-connection-buffer-name (buffer-name connection-buffer)))
492+
(should (equal before-server-buffer-name (buffer-name server-buffer))))))))))))
493+
494+
(ert-deftest cider-extract-designation-from-current-repl-buffer ()
495+
(with-temp-buffer
496+
(let* ((connection-buffer (current-buffer))
497+
(nrepl-connection-list (list (buffer-name connection-buffer))))
498+
(with-temp-buffer
499+
(let ((repl-buffer (current-buffer)))
500+
(rename-buffer "*cider-repl bob*")
501+
(with-temp-buffer
502+
(with-current-buffer connection-buffer
503+
(setq-local nrepl-repl-buffer (buffer-name repl-buffer)))
504+
(should (equal "bob" (cider-extract-designation-from-current-repl-buffer)))))))))
505+
506+
(ert-deftest cider-extract-designation-from-current-repl-buffer-no-designation()
507+
(with-temp-buffer
508+
(let* ((connection-buffer (current-buffer))
509+
(nrepl-connection-list (list (buffer-name connection-buffer))))
510+
(with-temp-buffer
511+
(let ((repl-buffer (current-buffer)))
512+
(rename-buffer "*cider-repl*")
513+
(with-temp-buffer
514+
(with-current-buffer connection-buffer
515+
(setq-local nrepl-repl-buffer (buffer-name repl-buffer)))
516+
(should (equal "<no designation>" (cider-extract-designation-from-current-repl-buffer)))))))))

0 commit comments

Comments
 (0)