Here’s how to detach an rcirc channel when using soju:
(defun-rcirc-command detach (channel)
"Detach channel to soju."
(interactive "sPart channel: ")
(let ((channel (if (> (length channel) 0) channel target)))
(rcirc-send-privmsg
process "BouncerServ"
(format
"channel update %s -detached true -reattach-on highlight" channel))))
Soju/rcirc already lets you reattached detached channels with /join
,
and this lets you type /detach
in a channel to detach it. This makes
it easy to attach and detach channels. This method works by talking to
BouncerServ, if there’s instead some fancy Modern IRC way to do it
that’s better, let me know!
Also, rcirc parts the channel when you kill the buffer or change the
major mode. To instead detach, change rcirc-clean-up-buffer
to this
(after definining detach as per above):
(defun rcirc-clean-up-buffer (reason)
(let ((buffer (current-buffer)))
(rcirc-clear-activity buffer)
(when (and (rcirc-buffer-process)
(rcirc--connection-open-p (rcirc-buffer-process)))
(with-rcirc-server-buffer
(setq rcirc-buffer-alist
(rassq-delete-all buffer rcirc-buffer-alist)))
(rcirc-update-short-buffer-names)
(when (rcirc-channel-p rcirc-target)
(rcirc-cmd-detach rcirc-target)))
(setq rcirc-target nil)))
This means that whenever you kill a channel buffer, you’ll just detach
it and still be idling in it; when you actually do wanna leave a
channel, /part
it before you kill it.