#+TITLE: Circe config #+BEGIN_SRC emacs-lisp (require 'circe) (require 'circe-color-nicks) (require 'circe-serenity) (require 'oni-circe) (require 'mowedline) #+END_SRC I switched to Circe from ERC because I couldn't make the customizations I wanted to, Circe seems much better at this. I spend most of my time on IRC on Freenode. #+BEGIN_SRC emacs-lisp -r -l ";(ref:%s)" (add-to-list 'circe-network-options `("Freenode" :nick "ryuslash" :channels ("#mowedline" "#ninthfloor" "#dispass" "#linuxvoice" "#conkeror" "#emacs-circe" "#chicken" :after-auth ;(ref:aauth) "#emacs") :nickserv-password ,(oni-circe-get-password-for "irc.freenode.net"))) #+END_SRC The [[(aauth)][:after-auth]] keyword is used to specify that the =#emacs= channel should only be joined once the authentication with NickServ has finished. This has apparently become a requirement. Sometimes I watch some Twitch streams as well. #+BEGIN_SRC emacs-lisp (add-to-list 'circe-network-options `("Twitch" :use-tls nil :nick "ryuslash" :host "irc.twitch.tv" :pass ,(oni-circe-get-password-for "irc.twitch.tv") :port 6667)) #+END_SRC Enable coloring of nicks. #+BEGIN_SRC emacs-lisp (enable-circe-color-nicks) #+END_SRC Align all nicks and generally clean up the buffer. I call it: Circe Serenity. #+BEGIN_SRC emacs-lisp (enable-circe-serenity) #+END_SRC Add external tracking. Show the status of tracked buffers in mowedline instead in the mode-line. With color! This code has been generously donated by [[http://retroj.net][retroj]], the author of mowedline. First define a function to parse the text properties from the tracking buffers list so that highlights (from mentions) also appear in mowedline. #+BEGIN_SRC emacs-lisp (defun mowedline-colorize-mode-line-spec (s) (cond ((stringp s) (string-trim s)) ((eq ':propertize (car s)) (let ((s (cadr s)) (face (plist-get (cddr s) 'face))) (if face `(color ,(face-foreground face) ,(substring-no-properties s)) s))) (t ""))) #+END_SRC Also tell mowedline to use the dbus interface directly, instead of going through the command-line interface. #+BEGIN_SRC emacs-lisp (setq mowedline-update-function 'mowedline-update/dbus) #+END_SRC #+BEGIN_SRC emacs-lisp (defvar jjf-tracking-buffers '()) (defvar jjf-external-tracking-timer nil) (defun jjf-external-tracking () (setq jjf-external-tracking-timer nil) (mowedline-update 'irc (if (stringp jjf-tracking-buffers) (mowedline-colorize jjf-tracking-buffers t) (format "%S" (mapcar #'mowedline-colorize-mode-line-spec jjf-tracking-buffers))))) (defun oni:clear-irc-mowedline-widget () (mowedline-clear 'irc)) (defun jjf-external-tracking-advice (orig-fun &rest args) "Update my external status bar when tracking computes a new status line, and suppress tracking in the mode-line. Since tracking-status may be called many times in quick succession, for example on a make-frame-visible event, we use a short timer to only call the updater once within a minimum duration." (setq jjf-tracking-buffers (apply orig-fun args)) (when jjf-external-tracking-timer (cancel-timer jjf-external-tracking-timer)) (setq jjf-external-tracking-timer (run-at-time 0.2 nil 'jjf-external-tracking)) nil) (advice-add 'tracking-status :around #'jjf-external-tracking-advice) (add-hook 'kill-emacs-hook 'oni:clear-irc-mowedline-widget) #+END_SRC