mu4e: Add Org captures for e-mails and contacts

master
Pierre Neidhardt 2018-07-17 12:40:46 +02:00
parent 8492f798f5
commit c819f4cd5d
1 changed files with 52 additions and 0 deletions

View File

@ -274,4 +274,56 @@ This function could be useful in `mu4e-compose-mode-hook'."
(delete-blank-lines)))))
(add-hook 'mu4e-compose-mode-hook 'ambrevar/message-github)
;;; Org captures
(when (require 'org-mu4e nil t)
(require 'init-org) ; For org-agenda-files
(add-to-list 'org-capture-templates
`("t" "Mark e-mail in agenda" entry (file+headline ,(car org-agenda-files) "E-mails")
"* TODO [#A] %?\nSCHEDULED: %(org-insert-time-stamp (org-read-date nil t \"+0d\"))\n%a\n"))
;; TODO: Don't duplicate contacts.
(defun ambrevar/mu4e-contact-dwim ()
"Return a list of (NAME . ADDRESS).
If point has an `email' property, move it to the front of the list.
Addresses in `mu4e-user-mail-address-list' are skipped."
(let (result
(message org-store-link-plist))
(setq result (seq-remove
(lambda (contact) (member (cadr contact) mu4e-user-mail-address-list))
(apply 'append
(mapcar (lambda (addr) (mail-extract-address-components addr t))
(delq nil
(mapcar (lambda (field) (mu4e-message-field message field))
'(:from :to :cc :bcc)))))))
;; Move contact at point to front.
(let ((email-at-point (get-text-property (point) 'email))
(contacts result))
(when email-at-point
(while contacts
(if (not (string= (cadr (car contacts)) email-at-point))
(setq contacts (cdr contacts))
(setq result (delete (car contacts) result))
(push (car contacts) result)
(setq contacts nil)))))
result))
(defun ambrevar/org-contacts-template-name (&optional return-value)
"Like `org-contacts-template-name' for mu4e."
(or (car (car (ambrevar/mu4e-contact-dwim)))
return-value
"%^{Name}"))
(defun ambrevar/org-contacts-template-email (&optional return-value)
"Like `org-contacts-template-name' for mu4e."
(or (cadr (car (ambrevar/mu4e-contact-dwim)))
return-value
(concat "%^{" org-contacts-email-property "}p")))
(add-to-list 'org-capture-templates
`("c" "Add e-mail address to contacts" entry (file+headline ,(car org-contacts-files) "Contacts")
"* %(ambrevar/org-contacts-template-name)
:PROPERTIES:
:EMAIL: %(ambrevar/org-contacts-template-email)
:END:")))
(provide 'init-mu4e)