;;; -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (require 'fill-column) (use-package rcirc :bind (:map rcirc-mode-map ("C-c j" . #'bd/rcirc-jump-net) ("C-c q" . #'bd/rcirc-detach-buffer)) :hook ((rcirc-mode . (lambda () (setq-local fill-column-desired-width 80) (fill-column-mode) (rcirc-omit-mode)))) :config (setopt bd/rcirc-networks '("libera" "furnet")) (defun bd/rcirc-jump-net () "Prompts the user for a irc network in BD/RCIRC-NETWORKS, then issues ZNC to hop networks." (interactive) (let ((buffer (current-buffer))) (when (and (buffer-local-value 'rcirc-server-buffer buffer) (eq (process-status (rcirc-buffer-process)) 'open)) (let ((target (completing-read "Jump to: " bd/rcirc-networks))) (if (stringp target) (rcirc-send-string (rcirc-buffer-process) "PRIVMSG" "*status" : (concat "JUMPNETWORK " target))))))) (defun bd/rcirc-detach-buffer () "If the current buffer is an rcirc channel, detaches through ZNC and deletes the buffer. This bypasses the default behavior of deleting an active channel, which is issuing the PART command." (interactive) (let ((buffer (current-buffer))) (when (and (rcirc-buffer-process) (eq (process-status (rcirc-buffer-process)) 'open)) (with-rcirc-server-buffer (setq rcirc-buffer-alist (rassq-delete-all buffer rcirc-buffer-alist))) (rcirc-update-short-buffer-names) (if (rcirc-channel-p rcirc-target) (rcirc-send-string (rcirc-buffer-process) "PRIVMSG" "*status" : (concat "DETACH " rcirc-target)))) (setq rcirc-target nil) (kill-buffer buffer))) (setopt rcirc-fill-column 80 rcirc-omit-threshold 10 rcirc-reconnect-delay 60 rcirc-omit-responses '("JOIN" "PART" "QUIT" "NICK" "AWAY") rcirc-track-minor-mode t rcirc-track-ignore-server-buffer-flag t rcirc-server-alist '(("operationnull.com" :nick "Gondul" :user-name "Gondul" :port 6697 :encryption tls)))) (provide 'bd--irc) ;;; bd--irc.el ends here