dotemacs/contrapunctus/cp-irc.el

208 lines
7.3 KiB
EmacsLisp
Raw Normal View History

2015-11-25 23:33:55 +00:00
;;;; IRC packages config
2015-11-24 21:12:10 +00:00
2017-05-08 02:59:01 +00:00
;; TODO - Revamp C-x e e - use hydra or magit-popup to make a menu
;; which shows servers you've set up to use. Indicate via faces or
;; symbols if you are connected to them or not. If connected,
;; selecting the server switches to its server buffer, else connects
;; to it.
;;
;; Likewise revamp C-x e r and C-x e w
(setq erc-autojoin-channels-alist
'(("freenode"
2017-05-08 02:59:01 +00:00
"##archlinux-animangames"
;; "#emacs"
"##emacs.de"
"#lilypond"
;; "#lisp"
;; "#lispgames"
;; "#scheme"
"#opensourcemusicians"
2016-09-28 11:55:09 +00:00
"##privacy"
"##classical"
"##guitar"
;; "#music-theory"
;; "##piano"
"##hindi"
;; "##italiano"
"##deutsch"
2017-05-08 02:59:01 +00:00
"#VelvetAndLace"
"#wikisource")
("oftc"
;; "#debian-next"
"#osm")))
(with-eval-after-load 'erc
2016-09-28 12:51:58 +00:00
(defun cp-erc-generate-log-file-name (buffer target nick server port)
"Generates a log-file name using only the channel and network
names rather than server name. This results in a file name of the
form irc.NETWORK.#CHANNEL.erclog. This function is a possible
value for `erc-generate-log-file-name-function'."
(require 'erc-networks)
(let ((file (concat
2017-05-08 03:16:15 +00:00
;; (replace-regexp-in-string "^.*?\\." "irc." erc-server-announced-name)
erc-session-server
;; (erc-compute-server)
2016-09-28 12:51:58 +00:00
;; "irc."
;; (or (with-current-buffer buffer (erc-network-name)) server)
;; (if target (concat target "!"))
"."
target
".erclog")))
;; we need a make-safe-file-name function.
(convert-standard-filename file)))
(setq ;; erc-default-coding-system 'utf-8
erc-password "trololo_trololo"
erc-fill-mode nil
2016-09-28 12:51:58 +00:00
erc-generate-log-file-name-function 'cp-erc-generate-log-file-name
;; erc-generate-log-file-name-function 'erc-generate-log-file-name-network
erc-log-channels-directory "~/.emacs.d/erc/logs/"
erc-log-mode t
erc-save-buffer-on-part nil
erc-save-queries-on-quit nil
erc-log-write-after-send t
erc-log-write-after-insert t
erc-modules '(autojoin completion list log menu ring stamp ercn
netsplit button match track readonly networks noncommands
irccontrols move-to-prompt)
erc-nick '("contrapunctus"
"HisaoNakai"
"[Batou]"
"[Togusa]"
"[2501]")
erc-stamp-mode t
erc-timestamp-format-left "[%FT%T%z]
"
erc-timestamp-format-right nil
erc-join-buffer 'bury
2017-05-08 03:34:11 +00:00
erc-fools '("c-c@" "Kimryd" "csmr" "NeoFrontier")
;; erc-part-reason 'cp/erc-random-exitmsg
;; erc-quit-reason 'cp/erc-random-exitmsg
erc-part-reason 'cp/quitmsg
erc-quit-reason 'cp/quitmsg
)
(define-key erc-mode-map (kbd "C-c C-c") nil)
(add-hook 'erc-mode-hook 'erc-fill-disable)
2017-05-08 03:34:11 +00:00
(add-hook 'erc-mode-hook (lambda () (setq erc-ignore-list '("*!csmr@kapsi.fi"))))
;; (defun cp/erc-random-exitmsg (quit-string)
;; "If the user is in more than 5 channels, return a random quit
;; message. QUIT-STRING (see `erc-quit-reason') is ignored."
;; (if (>= 5 (length (erc-channel-list nil)))
;; (cp/random-elt
;; '("Interested in making music with libre/open-source tools? Feel free to join #opensourcemusicians!"
;; "Love classical music? Join ##classical!"
;; "Check out Freenode's bicycles group - ##bicycles !"
;; ))
;; "ciao"))
(defun cp/quitmsg (quit-string)
(cp/random-elt
'(
"\"The Eternal Value of Privacy\", Bruce Schneier - https://www.schneier.com/essays/archives/2006/05/the_eternal_value_of.html"
"Take back your right to privacy. https://prism-break.org/"
"Help make mass surveillance of entire populations uneconomical. https://prism-break.org/"
"Interested in making music with libre/open-source tools? Feel free to join #opensourcemusicians!"
"Love classical music? Join us in ##classical!"
"The future of ethically funding free (software|culture|anything) is here. https://snowdrift.coop/"
"https://medium.freecodecamp.com/ill-never-bring-my-phone-on-an-international-flight-again-neither-should-you-e9289cde0e5f#.58zrgizib"
))))
(autoload 'erc "erc" "ERC." t)
;; erc-server-buffer-p is the first ERC function called by
;; cp-erc-freenode, which is what I use to start ERC
(autoload 'erc-server-buffer-p "erc" "ERC." t)
;; (let ((results (remove-if-not (lambda (a)
;; (string-match regexp a))
;; (mapcar #'buffer-name (buffer-list)))))
;; (if all results (car results)))
;; (defun cp-erc-server-buffer ()
;; (cp-get-buffer-regexp "^irc"))
(defun cp-erc-server-buffer (&optional all)
(let ((results (remove-if-not #'erc-server-buffer-p
(buffer-list))))
(if all results (car results))))
2015-11-26 23:33:07 +00:00
(defun cp-erc-freenode ()
(interactive)
(let ((bufname (cp-erc-server-buffer)))
2015-11-26 23:33:07 +00:00
(if bufname
(switch-to-buffer bufname)
(erc :server "irc.freenode.net"
:nick "contrapunctus"
:password "trololo_trololo"))))
(defun cp-erc-reconnect ()
(interactive)
(if (equal major-mode 'erc-mode)
(erc-server-reconnect)
(progn (switch-to-buffer (cp-erc-server-buffer))
2015-11-26 23:33:07 +00:00
(erc-server-reconnect))))
2016-06-12 04:50:44 +00:00
(defun cp-erc-ghost ()
(interactive)
;; (cp-erc-server-buffer)
2017-05-08 03:34:11 +00:00
(erc-message "PRIVMSG"
(if (string-match-p "freenode" erc-server-announced-name)
"NickServ GHOST contrapunctus"
"NickServ REGAIN contrapunctus trololo"))
2016-06-12 04:50:44 +00:00
(erc-cmd-NICK "contrapunctus"))
(defun cp-erc-toggle-autojoin ()
(interactive)
(if erc-autojoin-mode
(progn (erc-autojoin-disable)
(message "ERC - autojoin disabled."))
(progn (erc-autojoin-enable)
(message "ERC - autojoin enabled."))))
;; (defun cp-erc-cycle ()
;; (interactive)
;; ())
2016-06-12 04:51:08 +00:00
(global-unset-key (kbd "C-x e"))
2015-11-26 23:33:07 +00:00
(cp-set-keys
:bindings
`((,(kbd "C-x e r") cp-erc-reconnect)
(,(kbd "C-x e e") cp-erc-freenode)
2016-06-12 04:51:08 +00:00
(,(kbd "C-x e w") cp-erc-ghost)
(,(kbd "C-c C-c") erc-track-switch-buffer)
(,(kbd "C-x e a") cp-erc-toggle-autojoin)))
2015-11-30 18:13:00 +00:00
(define-derived-mode erc-log-read-mode text-mode "ERC-log"
"Major mode for viewing ERC logs."
(highlight-lines-matching-regexp "^\[[0-9: ]*\]$"
"font-lock-comment-face")
(highlight-lines-matching-regexp "^\*\*\*.*\(join\|quit\|part\)"
"font-lock-comment-face"))
2016-09-28 12:51:58 +00:00
;; (add-to-list 'auto-mode-alist
;; (cons "/erc/logs/" 'erc-log-read-mode))
(add-to-list 'auto-mode-alist
2016-09-28 12:51:58 +00:00
(cons ".erclog$" 'erc-log-read-mode))
2015-11-24 21:12:10 +00:00
(with-eval-after-load 'rcirc
(setq
rcirc-log-flag t
rcirc-time-format "%Y %m %e %T "
rcirc-fill-column 80
rcirc-server-alist '(("irc.freenode.net"
:channels
("#emacs" "#lilypond" "#velvetandlace"
"#opensourcemusicians" "##classical"
"##guitar" "##deutsch" "##hindi")
:password
"trololo_trololo"))
rcirc-default-nick "contrapunctus"
;; rcirc-coding-system-alist '(("" . 'utf-8))
))
2016-09-28 12:51:58 +00:00
;; TODO
;; open log file for current channel