;;; app/irc/autoload/ivy.el -*- lexical-binding: t; -*- ;;;###if (modulep! :completion ivy) ;;;###autoload (defun +irc/ivy-jump-to-channel (&optional this-server) "Jump to an open channel or server buffer with ivy. 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)) (ivy-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 (format " %s" (buffer-name buf))))) :action #'+irc--ivy-switch-to-buffer-action :preselect (buffer-name (current-buffer)) :keymap ivy-switch-buffer-map :caller '+irc/ivy-jump-to-channel))) (defun +irc--ivy-switch-to-buffer-action (buffer) (when (stringp buffer) (ivy--switch-buffer-action (string-trim-left buffer))))