26 lines
1.3 KiB
EmacsLisp
26 lines
1.3 KiB
EmacsLisp
|
;;; app/irc/autoload/selectrum.el -*- lexical-binding: t; -*-
|
||
|
;;;###if (featurep! :completion selectrum)
|
||
|
|
||
|
;;;###autoload
|
||
|
(defun +irc/selectrum-jump-to-channel (&optional this-server)
|
||
|
"Jump to an open channel or server buffer with selectrum. If THIS-SERVER (universal
|
||
|
argument) is non-nil only show channels in current server."
|
||
|
(interactive "P")
|
||
|
(if (not (circe-server-buffers))
|
||
|
(message "No circe buffers available")
|
||
|
(when (and this-server (not circe-server-buffer))
|
||
|
(setq this-server nil))
|
||
|
(when-let
|
||
|
((buffer (completing-read
|
||
|
(format "Jump to%s: " (if this-server (format " (%s)" (buffer-name circe-server-buffer)) ""))
|
||
|
(cl-loop with servers = (if this-server (list circe-server-buffer) (circe-server-buffers))
|
||
|
with current-buffer = (current-buffer)
|
||
|
for server in servers
|
||
|
collect (buffer-name server)
|
||
|
nconc
|
||
|
(with-current-buffer server
|
||
|
(cl-loop for buf in (circe-server-chat-buffers)
|
||
|
unless (eq buf current-buffer)
|
||
|
collect (buffer-name buf)))))))
|
||
|
(switch-to-buffer buffer))))
|