40 lines
1.5 KiB
EmacsLisp
40 lines
1.5 KiB
EmacsLisp
|
(require 'rcirc)
|
||
|
|
||
|
(defun helm-rcirc-auto-join-channels-alist ()
|
||
|
"Return an alist where key is a server and value is a list of defined
|
||
|
channels to auto join."
|
||
|
(mapcar (lambda (server)
|
||
|
(cons (car server) (plist-get (cdr server) :channels)))
|
||
|
rcirc-server-alist)
|
||
|
)
|
||
|
|
||
|
(defun helm-rcirc-auto-join-channels-source (entry)
|
||
|
"Construct the Helm source given an ENTRY.
|
||
|
|
||
|
ENTRY is a key value pair where key is the server and value is a list of
|
||
|
channels."
|
||
|
(let ((server (car entry))
|
||
|
(chans (cdr entry)))
|
||
|
(list (cons 'name (format "Server: %s" (car entry)))
|
||
|
(cons 'candidates (mapcar (lambda (chan)
|
||
|
(cons chan (cons server chan))) chans))
|
||
|
(cons 'action 'helm-rcirc-open-channel-buffer))))
|
||
|
|
||
|
(defun helm-rcirc-open-channel-buffer (selected-value)
|
||
|
"Open the buffer corresponding to SELECTED-VALUE if any.
|
||
|
|
||
|
SELECTED-VALUE is a key value pair where key is the server and value is the
|
||
|
channel name."
|
||
|
(let ((buf (format "%s@%s" (cdr selected-value) (car selected-value))))
|
||
|
(if (bufferp (get-buffer buf))
|
||
|
(switch-to-buffer buf)
|
||
|
(message (format "Cannot find buffer %s" buf)))))
|
||
|
|
||
|
;;;###autoload
|
||
|
(defun helm-rcirc-auto-join-channels ()
|
||
|
"rcirc auto join channels selection with helm interface."
|
||
|
(interactive)
|
||
|
(helm :buffer "*helm: Auto Join Channels (rcirc)*"
|
||
|
:sources (mapcar 'helm-rcirc-auto-join-channels-source
|
||
|
(helm-rcirc-auto-join-channels-alist))))
|