Skip to content

Instantly share code, notes, and snippets.

@unhammer
Last active August 8, 2019 11:41
Show Gist options
  • Save unhammer/53dc6e2f50d1bc6014c50def9d23ab5b to your computer and use it in GitHub Desktop.
Save unhammer/53dc6e2f50d1bc6014c50def9d23ab5b to your computer and use it in GitHub Desktop.
make a fake erc buffer of incoming pidgin chats, so erc-track will show them
(defun my-purple-ReceivedImMsg-handler (_num0 nick msg _num1 _num2)
"Handle ReceivedImMsg from Purple dbus service.
NICK and MSG go into an alert, other arguments ignored."
(let ((msg-rendered
(if (fboundp 'libxml-parse-html-region)
(with-temp-buffer
(insert msg)
(shr-render-region (point-min) (point-max))
(buffer-string))
msg)))
(my-purple-erc-track nick msg-rendered)))
(defun my-erc-nick-add-face (nick)
"Add face text property to NICK and return it."
(add-face-text-property 0
(length nick)
(erc-get-face-for-nick nick)
nil
nick)
nick)
(defun my-purple-erc-track (nick msg)
"Make a fake ERC buffer with NICK's MSG highlighted with erc-track.
Assumes `erc-track-remove-disconnected-buffers' is nil."
(let ((channel (format "🗩%s" nick)))
(with-current-buffer (get-buffer-create channel)
(insert (format "%s %s\n"
(my-erc-nick-add-face nick)
msg))
(erc-mode)
(setq-local erc-default-recipients (list channel channel))
(erc-track-modified-channels))))
(defun my-purple-register-handler ()
"Register handler for ReceivedImMsg."
(require 'dbus)
(dbus-register-signal
:session
"im.pidgin.purple.PurpleService"
"/im/pidgin/purple/PurpleObject"
"im.pidgin.purple.PurpleInterface"
"ReceivedImMsg"
'my-purple-ReceivedImMsg-handler))
(my-purple-register-handler)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment