- decodes mime-encoded strings,
- stores enough properties for
org-email-link-description-formatto be used in full, and
- all vm specific information, including
%:fromto, to be used in
org-store-link-plistto expand the escape is not nice but works:
;; Add mairix as new link type in org (org-add-link-type "mairix" 'ra/org-vm-mairix-open) (add-hook 'org-store-link-functions 'ra/org-vm-store-mairix-link) ;; Store link as mairix search for message ID ;; Most from org-vm-store-link in org-vm.el, modded (defun ra/org-vm-store-mairix-link () "Store a link to the current VM message as a Mairix search for its Message ID." (when (and (or (eq major-mode 'vm-summary-mode) (eq major-mode 'vm-presentation-mode)) (save-window-excursion (vm-select-folder-buffer) buffer-file-name)) (and (eq major-mode 'vm-presentation-mode) (vm-summarize)) (vm-follow-summary-cursor) (save-excursion (vm-select-folder-buffer) (let* ( ;; Collect properties (message (car vm-message-pointer)) (subject (vm-decode-mime-encoded-words-in-string (vm-su-subject message))) (from (vm-decode-mime-encoded-words-in-string (vm-get-header-contents message "From"))) (to (vm-decode-mime-encoded-words-in-string (vm-get-header-contents message "To"))) (message-id (vm-su-message-id message)) ;; Date needed for full use of org-email-link-description ;; and for use in capture templates (date (vm-get-header-contents message "Date")) ;; Date active/inactive in correct time stamp format for ;; use in capture templates (date-ts (and date (ignore-errors (format-time-string (org-time-stamp-format t) (date-to-time date))))) (date-ts-ia (and date (ignore-errors (format-time-string (org-time-stamp-format t t) (date-to-time date))))) (link (org-make-link "mairix:" (format "m:%s" (org-remove-angle-brackets message-id))))) (org-store-link-props :type "mairix" :message-id message-id :from from :to to :subject subject :date date :date-timestamp date-ts :date-timestamp-inactive date-ts-ia :link link) (org-add-link-props :description (org-email-link-description)) ;; It seems we need to reset :fromto with expanded escapes ;; after :description to use %:fromto in ;; org-capture-templates... bug? (org-add-link-props :fromto (org-replace-escapes (or (plist-get org-store-link-plist :fromto) "from %f") ; if org-from-is-user-regexp is nil (list (cons "%f" (or (plist-get org-store-link-plist :fromname) (plist-get org-store-link-plist :fromaddress) "?")) (cons "%t" (or (plist-get org-store-link-plist :toname) (plist-get org-store-link-plist :toaddress) "?"))))) ;; save vm folder and update the mairix db (vm-save-folder) (mairix-update-database) ; Make sure mairix-synchronous-update ; is nil, default, so we do not have ; to wait link)))) ;; Open the mairix link, making use of mairix.el to make the search ;; and display the results (defun ra/org-vm-mairix-open (msearch) "Search for messages with message-id with mairix, and display them in a VM folder. This requires a proper mairix.el setup." (mairix-search msearch t))Of course, as stated in my old blog post, a working setup of Mairix and the Emacs Mairix mode is still required.