;;; acdw-erc.el -*- lexical-binding: t; coding: utf-8-unix -*- ;; Author: Case Duckworth ;; Created: 24 May 2021 ;; Keywords: configuration ;; URL: https://tildegit.org/acdw/emacs ;; This file is NOT part of GNU Emacs. ;;; License: ;; Everyone is permitted to do whatever with this software, without ;; limitation. This software comes without any warranty whatsoever, ;; but with two pieces of advice: ;; - Don't hurt yourself. ;; - Make good choices. ;;; Commentary: ;; `acdw-erc' is a dumping ground for functions and stuff for ERC, so they ;; don't clutter up `init.el'. ;;; Code: (defgroup acdw-erc nil "Customizations for ERC." :group 'erc) ;;; Show a different header-line face when ERC is disconnected. ;; https://www.emacswiki.org/emacs/ErcModeline#h5o-1 (defface erc/header-line-disconnected '((t (:foreground "black" :background "indianred"))) "Face to use when ERC has been disconnected.") (defun erc/update-header-line-show-disconnected () "Use a different face in the header-line when disconnected." (erc-with-server-buffer (cond ((erc-server-process-alive) 'erc-header-line) (t 'erc/header-line-disconnected)))) ;;; Convenience functions ;; from Prelude: ;; https://github.com/bbatsov/prelude/blob/master/modules/prelude-erc.el#L114 (defcustom erc/servers nil "The list of IRC servers to connect to with `erc/connect'." :type '(list string)) (defcustom erc/bye-message "See You Space Cowpokes." "Quit message sent when calling `erc/disconnect'." :type 'string) (defun connect-to-erc (server &optional use-tls port nick) "Connects to IRC SERVER at PORT with NICK. If USE-TLS is non-nil, use TLS." (let* ((use-tls (or use-tls t)) (erc-fn (if use-tls #'erc-tls #'erc)) (port (or port (if use-tls 6697 6667))) (nick (or nick erc-nick))) (funcall erc-fn :server server :port port :nick nick))) (defun erc/connect () "Connect to all the servers in `erc/servers'." (interactive) (mapcar #'connect-to-erc erc/servers)) (defun filter-server-buffers () (delq nil (mapcar (lambda (x) (and (erc-server-buffer-p x) x)) (buffer-list)))) (defun erc/disconnect () "Disconnect from all IRC servers." (interactive) (dolist (buffer (filter-server-buffers)) (with-message (format "Killing server buffer: %s" (buffer-name buffer)) (with-current-buffer buffer (erc-quit-server erc/bye-message))))) (provide 'acdw-erc) ;;; acdw-erc.el ends here