[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/gnorb 63ac8f6 011/449: gnorb-org.el: (gnorb-org-handle-
From: |
Stefan Monnier |
Subject: |
[elpa] externals/gnorb 63ac8f6 011/449: gnorb-org.el: (gnorb-org-handle-mail, gnorb-org-handle-mail-agenda) |
Date: |
Fri, 27 Nov 2020 23:14:58 -0500 (EST) |
branch: externals/gnorb
commit 63ac8f669f0bfc3331546af37b2e141f3f159b1f
Author: Eric Abrahamsen <eric@ericabrahamsen.net>
Commit: Eric Abrahamsen <eric@ericabrahamsen.net>
gnorb-org.el: (gnorb-org-handle-mail, gnorb-org-handle-mail-agenda)
New functions to facilitate answering email-related TODOs, and then
return to the org buffer from whence we came.
---
lisp/gnorb-org.el | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 74 insertions(+), 2 deletions(-)
diff --git a/lisp/gnorb-org.el b/lisp/gnorb-org.el
index 2026380..297340b 100644
--- a/lisp/gnorb-org.el
+++ b/lisp/gnorb-org.el
@@ -41,10 +41,82 @@
(insert (format "[[%s][%s]]" link name))
link)))
+(defvar gnorb-org-window-conf nil
+ "Save org-buffer window configuration here, for restoration
+ after the mail is sent.")
+
+(defun gnorb-org-restore-after-send ()
+ (gnus-summary-exit nil t)
+ (when (window-configuration-p gnorb-org-window-conf)
+ (set-window-configuration gnorb-org-window-conf))
+ ; Should check here that we actually made it back to the right org
+ ; heading. Could save an ID prop on the heading and check for that.
+ (call-interactively 'org-agenda-todo))
+
+(defun gnorb-org-handle-mail (&optional from-agenda)
+ "Handle mail-related links for current headline."
+ (interactive)
+ (unless (org-back-to-heading t)
+ (error "Not in an org item"))
+ (unless from-agenda
+ ;; window conf should return to the agenda.
+ (setq gnorb-org-window-conf (current-window-configuration)))
+ (let (message mailto)
+ (while (re-search-forward org-any-link-re (line-end-position) t)
+ (let ((addr (or (match-string-no-properties 2)
+ (match-string-no-properties 0))))
+ (cond
+ ((string-match "^<?gnus:" addr)
+ (push (substring addr (match-end 0)) message))
+ ((string-match "^<?mailto:" addr)
+ (push (substring addr (match-end 0)) mailto))
+ ((string-match-p "^<?bbdb:" addr)
+ (with-current-buffer bbdb-buffer-name
+ (let ((recs bbdb-records))
+ (org-open-link-from-string addr)
+ (let ((mail (bbdb-mail-address (bbdb-current-record))))
+ (bbdb-display-records recs)
+ (push mail mailto))))))))
+ (cond
+ (message
+ (org-gnus-open (org-link-unescape (car message)))
+ (call-interactively
+ 'gnus-summary-wide-reply-with-original)
+ (when mailto
+ (message-goto-to)
+ (insert ", ")
+ (insert (mapconcat 'identity mailto ", ")))
+ (add-to-list 'message-exit-actions
+ 'gnorb-org-restore-after-send t)
+ (message-goto-body))
+ (mailto
+ (compose-mail (mapconcat 'identity mailto ", ")
+ nil nil nil nil nil nil
+ 'gnorb-org-restore-after-send))
+ (t
+ (error "No mail-related links in headline")))))
+
+(defun gnorb-org-handle-mail-agenda ()
+ "Examine item at point for mail-related links, and handle them."
+ (interactive)
+ (org-agenda-check-type t 'agenda 'timeline 'todo 'tags)
+ (org-agenda-check-no-diary)
+ (let* ((marker (or (org-get-at-bol 'org-hd-marker)
+ (org-agenda-error)))
+ (buffer (marker-buffer marker))
+ (pos (marker-position marker)))
+ (setq gnorb-org-window-conf (current-window-configuration))
+ (with-current-buffer buffer
+ (widen)
+ (goto-char pos)
+ (gnorb-org-handle-mail t))))
+
;; (eval-after-load "gnorb-org"
;; '(progn
-;; (global-set-key (kbd "C-c C") 'gnorb-bbdb-cite-contact)))
-
+;; (global-set-key (kbd "C-c C") 'gnorb-bbdb-cite-contact)
+;; (global-set-key (kbd "C-c H") 'gnorb-org-handle-mail)))
+;; (eval-after-load 'org-agenda
+;; '(org-defkey org-agenda-mode-map (kbd "H") 'gnorb-org-handle-mail-agenda))
(provide 'gnorb-org)
;;; gnorb-org.el ends here
- [elpa] externals/gnorb b7dce0b 016/449: gnorb-utils.el: Require the cl library., (continued)
- [elpa] externals/gnorb b7dce0b 016/449: gnorb-utils.el: Require the cl library., Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb d79617f 019/449: gnorb-org.el: Email current subtree as exported text or file, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 27d08ef 022/449: README.org: Reorganize README, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 3edf1c9 025/449: gnorb-utils.el: gnorb-prompt-for-bbdb-record, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 32ecc09 026/449: gnorb-org.el: gnorb-org-handle-mail, gnorb-org-email-subtree, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 123b521 031/449: gnorb-org.el: bugfix gnorb-org-restore-after-send, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb a9c7410 032/449: gnorb-gnus.el: bugfix gnorb-gnus-attach-part, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 5adcc84 008/449: gnorb-utils: (gnorb-prompt-for-bbdb-record), Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb bedce9d 012/449: gnorb-gnus.el: (gnorb-gnus(article|mime)-org-attach), Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb d28a099 005/449: gnorb-bbdb.el: New function gnorb-bbdb-tag-agenda, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 63ac8f6 011/449: gnorb-org.el: (gnorb-org-handle-mail, gnorb-org-handle-mail-agenda),
Stefan Monnier <=
- [elpa] externals/gnorb c2b1a3a 013/449: Docstring for gnorb-org-contact-link, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb d4987a7 014/449: gnorb-utils.el: More likely requires for Org libraries, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 62368b7 017/449: gnorb-gnus.el: Make attachment fiddling work in org capture, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb da7cf10 018/449: gnorb-utils.el: Require mailcap, and parse, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 5264b3c 021/449: README.org: Document gnorb-org-email-subtree, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 82bb9db 023/449: README.org: Add keybindings to gnus mime commands., Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 534b2bf 024/449: gnorb-org.el: new option gnorb-org-mail-todos, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 9c5d04a 027/449: README.org: More explanation about the mail stuff., Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb e53d908 028/449: gnorb-gnus.el: bugfix in gnorb-gnus-collect-all-attachments, Stefan Monnier, 2020/11/27
- [elpa] externals/gnorb 4f16002 029/449: gnorb-org.el: Fix attaching attachments to outgoing messages., Stefan Monnier, 2020/11/27