rcirc: Reconnecting after you have lost the connection
4.6 Reconnecting after you have lost the connection
===================================================
If you’re chatting from a laptop, then you might be familiar with this
problem: When your laptop falls asleep and wakes up later, your IRC
client doesn’t realize that it has been disconnected. It takes several
minutes until the client decides that the connection has in fact been
lost. The simple solution is to use ‘M-x rcirc’. The problem is that
this opens an _additional_ connection, so you’ll have two copies of
every channel buffer, one dead and one live.
The real answer, therefore, is a ‘/reconnect’ command:
(with-eval-after-load 'rcirc
(defun-rcirc-command reconnect (arg)
"Reconnect the server process."
(interactive "i")
(unless process
(error "There's no process for this target"))
(let* ((server (car (process-contact process)))
(port (process-contact process :service))
(nick (rcirc-nick process))
channels query-buffers)
(dolist (buf (buffer-list))
(with-current-buffer buf
(when (eq process (rcirc-buffer-process))
(remove-hook 'change-major-mode-hook
'rcirc-change-major-mode-hook)
(if (rcirc-channel-p rcirc-target)
(setq channels (cons rcirc-target channels))
(setq query-buffers (cons buf query-buffers))))))
(delete-process process)
(rcirc-connect server port nick
rcirc-default-user-name
rcirc-default-full-name
channels))))