Clickable email addresses in emacs
Posted June 21, 2015 at 04:42 PM | categories: email, emacs | tags:
There are clickable mailto:jkitchin@andrew.cmu.edu links in org-mode, but standalone email addresses like jkitchin@cmu.edu are just ordinary text. Here, I want to explore using clickable text instead. I will use the button-lock package for this. I borrowed an email regexp from EmacsWiki: Regular Expression for this. The idea is to define a regular expression for an email address, and use it to make the emails clickable.
I am still not sure what the canonical way to get the value of the text that was highlighted. Here we use the :additional-property feature to set a property to t, and then use that property to get the characters that have a non-nil "email-address" property. It seems clunky, but it works. The main action is to compose an email in mu4e (my preferred email program in emacs). You could also put a call to helm here, or to a hydra for other options.
I make the email addresses stand out a little by giving them a gray background, and a tooltip so you can see why they are highlighted. I also bind RET so I don't have to use the mouse. Don't forget you can type C-h . to see the local help instead of mousing over it! Finally, we add a text-mode hook so this will get loaded when we open a text file (or one with a mode derived from text-mode like org-mode).
(defun highlight-email-addresses () "Add button to email address. Clicking or RET will open a compose email window." (button-lock-set-button "\\w+\\(\\.\\w+\\)?@\\(\\w\\|\\.\\)+" (lambda () (interactive) (let ((start) (end) (email-address)) (while (get-text-property (point) 'email-address) (backward-char)) (forward-char) (setq start (point)) (while (get-text-property (point) 'email-address) (forward-char)) (setq end (point)) (setq email-address (buffer-substring start end)) (mu4e~compose-mail email-address))) :face '((:background "gray80") (:underline t)) :help-echo "click to send mu4e email" :keyboard-binding (kbd "RET") :additional-property 'email-address)) (add-hook 'text-mode-hook 'highlight-email-addresses)
That doesn't look too bad. Now, anytime I open an org-mode file with an email address in it, the address is highlighted in light gray, and underlined. I can click on it or put the cursor on it and press return and I get a compose email window open, with the email address pre-filled in! I am sure this will have some other applications.
Copyright (C) 2015 by John Kitchin. See the License for information about copying.
Org-mode version = 8.2.10