selectrum: refactor +irc/selectrum-jump-to-channel
This commit is contained in:
parent
49a5c51615
commit
24f2efd8ca
3 changed files with 32 additions and 24 deletions
|
@ -72,6 +72,16 @@ argument) is non-nil only show channels in current server."
|
||||||
((featurep! :completion selectrum) #'+irc/selectrum-jump-to-channel)
|
((featurep! :completion selectrum) #'+irc/selectrum-jump-to-channel)
|
||||||
((user-error "No jump-to-channel backend is enabled. Enable selectrum or ivy!")))))
|
((user-error "No jump-to-channel backend is enabled. Enable selectrum or ivy!")))))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +irc--circe-all-buffers ()
|
||||||
|
(cl-loop with servers = (circe-server-buffers)
|
||||||
|
for server in servers
|
||||||
|
collect server
|
||||||
|
nconc
|
||||||
|
(with-current-buffer server
|
||||||
|
(cl-loop for buf in (circe-server-chat-buffers)
|
||||||
|
collect buf))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +irc/tracking-next-buffer ()
|
(defun +irc/tracking-next-buffer ()
|
||||||
"Disables switching to an unread buffer unless in the irc workspace."
|
"Disables switching to an unread buffer unless in the irc workspace."
|
||||||
|
|
|
@ -2,24 +2,22 @@
|
||||||
;;;###if (featurep! :completion selectrum)
|
;;;###if (featurep! :completion selectrum)
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +irc/selectrum-jump-to-channel (&optional this-server)
|
(defun +irc/selectrum-jump-to-channel ()
|
||||||
"Jump to an open channel or server buffer with selectrum. If THIS-SERVER (universal
|
"Jump to an open channel or server buffer with selectrum."
|
||||||
argument) is non-nil only show channels in current server."
|
(interactive)
|
||||||
(interactive "P")
|
(require 'consult)
|
||||||
(if (not (circe-server-buffers))
|
(consult--multi (list (plist-put +irc--consult-circe-source
|
||||||
(message "No circe buffers available")
|
:hidden nil))
|
||||||
(when (and this-server (not circe-server-buffer))
|
:narrow nil
|
||||||
(setq this-server nil))
|
:require-match t
|
||||||
(when-let
|
:prompt "Jump to:"
|
||||||
((buffer (completing-read
|
:sort nil))
|
||||||
(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))
|
;;;###autoload
|
||||||
with current-buffer = (current-buffer)
|
(defvar +irc--consult-circe-source
|
||||||
for server in servers
|
`(:name "circe"
|
||||||
collect (buffer-name server)
|
:hidden t
|
||||||
nconc
|
:narrow ?c
|
||||||
(with-current-buffer server
|
:category buffer
|
||||||
(cl-loop for buf in (circe-server-chat-buffers)
|
:state ,#'consult--buffer-state
|
||||||
unless (eq buf current-buffer)
|
:items ,(lambda () (mapcar #'buffer-name (+irc--circe-all-buffers)))))
|
||||||
collect (buffer-name buf)))))))
|
|
||||||
(switch-to-buffer buffer))))
|
|
||||||
|
|
|
@ -141,9 +141,9 @@ playback.")
|
||||||
;; Fail gracefully if not in a circe buffer
|
;; Fail gracefully if not in a circe buffer
|
||||||
(global-set-key [remap tracking-next-buffer] #'+irc/tracking-next-buffer)
|
(global-set-key [remap tracking-next-buffer] #'+irc/tracking-next-buffer)
|
||||||
|
|
||||||
(after! marginalia
|
|
||||||
(when (featurep! :completion selectrum)
|
(when (featurep! :completion selectrum)
|
||||||
(add-to-list 'marginalia-command-categories '(+irc/selectrum-jump-to-channel . buffer))))
|
(after! consult
|
||||||
|
(add-to-list 'consult-buffer-sources '+irc--consult-circe-source 'append)))
|
||||||
|
|
||||||
(map! :localleader
|
(map! :localleader
|
||||||
(:map circe-mode-map
|
(:map circe-mode-map
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue