;;; acdw-circe.el --- bespoke circe customizations -*- lexical-binding: t -*- ;;; Commentary: ;; Besoke Circe customizations. ;;; Code: (require 'circe) ;;; Functions (defun circe-current-topic (&optional message) "Return the topic of the current channel. When called with MESSAGE set to non-nil (or interactively), also message the current topic." (interactive "p") (let ((topic (save-excursion (re-search-backward (rx "*** Topic for #" (+ (or word "-")) ": ")) (buffer-substring-no-properties (match-end 0) (line-end-position))))) (when message (message "%s" topic)) topic)) ;;; Chat commands (defun circe-command-SHORTEN (url) "Shorten URL using `0x0-shorten-uri'." (interactive "sURL to shorten: ") (require '0x0) ;; TODO: enable /shorten URL comment syntax (let ((short-url (0x0-shorten-uri (0x0--choose-server) url))) (circe-command-SAY short-url))) (defun circe-command-SLAP (nick) "Slap NICK around a bit with a large trout." (interactive "sWho we slappin' today, boss? ") (circe-command-ME (concat "slaps " (string-trim nick) " around a bit with a large trout"))) ;;; Hooks (defun circe-chat@set-prompt () "Set the prompt to the buffer name, shortening it." (interactive) ; set interactive to unfuck the prompt when need be (lui-set-prompt (propertize (concat (acdw-irc/margin-format (buffer-name) "" ">") " ") 'face 'circe-prompt-face 'read-only t 'intangible t 'cursor-intangible t))) ;;; Advices (defun circe-part@kill-buffer (&rest _) "Advice to kill the channel buffer after PART." (let ((circe-channel-killed-confirmation nil)) (kill-buffer))) (defun circe-quit@kill-buffer (&rest _) "Advice to kill all buffers of a server after QUIT." ;; `circe-server-killed-confirmation' set to nil, and manually ;; deleting all chat buffers, pending Github issue #402 ;; (https://github.com/emacs-circe/circe/issues/402) (let ((circe-server-killed-confirmation nil)) (with-circe-server-buffer (dolist (buf (circe-server-chat-buffers)) (let ((circe-channel-killed-confirmation nil)) (kill-buffer buf))) (kill-buffer)))) (defun circe-gquit@kill-buffer (&rest _) "Advice to kill all Circe related buffers after GQUIT." ;; `circe-server-killed-confirmation' set to nil, and manually ;; deleting all chat buffers, pending Github issue #402 ;; (https://github.com/emacs-circe/circe/issues/402) (let ((circe-server-killed-confirmation nil)) (dolist (buf (circe-server-buffers)) (with-current-buffer buf (dolist (buf (circe-server-chat-buffers)) (let ((circe-channel-killed-confirmation nil)) (kill-buffer buf)) (cancel-timer 'irc-send--queue)) (message "%s: %s" buf circe-server-killed-confirmation) (kill-buffer))))) (provide 'acdw-circe) ;;; acdw-circe.el ends here