[emacs-berlin] Magic magit

Tilmann Singer tils at tils.net
Thu Oct 1 21:34:48 UTC 2015


It was, indeed. Thanks for telling me about completing-read. In case you
or anyone else is interested, below is the code that I use it in now: a
function to quickly clear the notmuch inbox, by archiving the email and
creating an org TODO entry for it. Feedback as usual welcome.


cheers, Til


(defun notmuch-stuff-create ()
  "Quickly move an email from the inbox into org. Creates an org
TODO entry with a link to the current email, and archives the
current email. It prompts for the target org file, prefilled with
best guess as default, based on rules in
notmuch-stuff--guess-org-file."
  (interactive)
  (let* (
         (link (org-store-link nil))
         (org-file
          (completing-read "Org file: " (org-agenda-files) nil t nil
                           'notmuch-stuff-files (notmuch-stuff--guess-org-file))))

    (with-current-buffer (find-file-noselect org-file)
      (save-excursion
        (end-of-buffer)
        (org-insert-heading nil nil t)
        (org-todo "TODO")
        (insert link)
        (org-set-tags-to ":mail:")
        ;; NOTE: tags should already be aligned, but they are not. This
        ;; doesn't work either: (org-set-tags nil t)
        (org-set-tags nil t)
        (org-return)
        (org-insert-time-stamp (current-time) nil t)
        (org-return))
      (save-buffer))
    (notmuch-show-tag-all (list "-inbox"))
    (notmuch-bury-or-kill-this-buffer)
    (message (concat "Created TODO entry in " org-file))))

(define-key notmuch-show-mode-map (kbd "C-c t") 'notmuch-stuff-create)

(defun notmuch-stuff-create-from-search ()
  "From a notmuch search buffer, call notmuch-stuff-create for the mail on the current line"
  (interactive)
  (notmuch-search-show-thread)
  (notmuch-stuff-create)
  (notmuch-search-next-thread))

(define-key notmuch-search-mode-map (kbd "C-c t") 'notmuch-stuff-create-from-search)


(defun notmuch-stuff--guess-org-file ()
  "Guess which org file an email belongs to, fall back to projects"
  (let (
        (subject (or (notmuch-show-get-subject) ""))
        (from (or (notmuch-show-get-from) ""))
        (to (or (notmuch-show-get-to) ""))
        (cc (or (notmuch-show-get-cc) "")))
    (cond

          ;; some conditions snipped

          ((string-match-p "@emacs-berlin\\.org" to) "~/org/emacs.org")
          ((string-match-p "@emacs-berlin\\.org" cc) "~/org/emacs.org")
          ((string-match-p "\\[rubycorns\\]" subject) "~/org/railsgirls.org")
          ((string-match-p "\\[rorganize\\.it\\]" subject) "~/org/railsgirls.org")
          ((string-match-p "@railsgirlsberlin\\.de" to) "~/org/railsgirls.org")
          ((string-match-p "@railsgirlsberlin\\.de" cc) "~/org/railsgirls.org")
          ((string-match-p "@railsgirlsberlin\\.de" from) "~/org/railsgirls.org")
          (t "~/org/projects.org"))))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 472 bytes
Desc: not available
URL: <http://mailb.org/pipermail/emacs-berlin/attachments/20151001/f72230a5/attachment.sig>


More information about the emacs-berlin mailing list