summaryrefslogtreecommitdiff
path: root/.config/emacs/modules/bd--irc.el
blob: fe2d58fbf57c3dc67e6a7c254f7ace059ab35220 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
;;; -*- 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