diff --git a/modules/email/mu4e/config.el b/modules/email/mu4e/config.el index f57f544ad..60e8a26f0 100644 --- a/modules/email/mu4e/config.el +++ b/modules/email/mu4e/config.el @@ -203,6 +203,73 @@ will also be the width of all other printable characters." (when (fboundp 'imagemagick-register-types) (imagemagick-register-types)) + ;; Adding emails to the agenda + ;; Perfect for when you see an email you want to reply to + ;; later, but don't want to forget about + + (defun mu4e-msg-to-agenda (arg) + "Refile a message and add a entry in the agenda file with a +deadline. Default deadline is today. With one prefix, deadline +is tomorrow. With two prefixes, select the deadline." + (interactive "p") + (let ((file (car org-agenda-files)) + (sec "^* Email") + (msg (mu4e-message-at-point))) + (when msg + ;; put the message in the agenda + (with-current-buffer (find-file-noselect file) + (save-excursion + ;; find header section + (goto-char (point-min)) + (when (re-search-forward sec nil t) + (let (org-M-RET-may-split-line + (lev (org-outline-level)) + (folded-p (invisible-p (point-at-eol)))) + ;; place the subheader + (when folded-p (show-branches)) ; unfold if necessary + (org-end-of-meta-data) ; skip property drawer + (org-insert-todo-heading 1) ; insert a todo heading + (when (= (org-outline-level) lev) ; demote if necessary + (org-do-demote)) + ;; insert message and add deadline + (insert (concat " Respond to " + "[[mu4e:msgid:" + (plist-get msg :message-id) "][" + (truncate-string-to-width + (caar (plist-get msg :from)) 25 nil nil t) + " - " + (truncate-string-to-width + (plist-get msg :subject) 40 nil nil t) + "]] ")) + (org-deadline nil + (cond ((= arg 1) (format-time-string "%Y-%m-%d")) + ((= arg 4) "+1d"))) + + (org-update-parent-todo-statistics) + + ;; refold as necessary + (if folded-p + (progn + (org-up-heading-safe) + (hide-subtree)) + (hide-entry)))))) + ;; refile the message and update + ;; (cond ((eq major-mode 'mu4e-view-mode) + ;; (mu4e-view-mark-for-refile)) + ;; ((eq major-mode 'mu4e-headers-mode) + ;; (mu4e-headers-mark-for-refile))) + (message "Refiled \"%s\" and added to the agenda for %s" + (truncate-string-to-width + (plist-get msg :subject) 40 nil nil t) + (cond ((= arg 1) "today") + ((= arg 4) "tomorrow") + (t "later")))))) + + (map! :map mu4e-headers-mode-map + :e "l" #'mu4e-msg-to-agenda) + + ;; General keybindings + (map! :localleader :map mu4e-compose-mode-map :desc "send and exit" "s" #'message-send-and-exit