diff options
Diffstat (limited to '.emacs.local.d/modes')
| -rw-r--r-- | .emacs.local.d/modes/notmuch.el | 97 | 
1 files changed, 97 insertions, 0 deletions
| diff --git a/.emacs.local.d/modes/notmuch.el b/.emacs.local.d/modes/notmuch.el new file mode 100644 index 0000000..208e051 --- /dev/null +++ b/.emacs.local.d/modes/notmuch.el @@ -0,0 +1,97 @@ +;; -------- +;; notmuch mode +;; -------- +(require 'notmuch) + +;; This should be upstream +(require 'notmuch-show) +(require 'notmuch-tag) +(defun notmuch-tree-show-message-in () +  "Show the current message (in split-pane)." +  (interactive) +  (let ((id (notmuch-tree-get-message-id)) +        (inhibit-read-only t) +        buffer) +    (when id +      ;; We close and reopen the window to kill off un-needed buffers +      ;; this might cause flickering but seems ok. +      (notmuch-tree-close-message-window) +      (setq notmuch-tree-message-window +            (split-window-vertically (/ (window-height) 4))) +      (with-selected-window notmuch-tree-message-window +        ;; Since we are only displaying one message do not indent. +        (let ((notmuch-show-indent-messages-width 0) +              (notmuch-show-only-matching-messages t)) +          (setq buffer (notmuch-show id)))) +      ;; We need the `let' as notmuch-tree-message-window is buffer local. +      (let ((window notmuch-tree-message-window)) +        (with-current-buffer buffer +          (setq notmuch-tree-message-window window) +          (add-hook 'kill-buffer-hook 'notmuch-tree-message-window-kill-hook))) +      (when notmuch-show-mark-read-tags +        (notmuch-tree-tag-update-display notmuch-show-mark-read-tags) +        (notmuch-tree-tag notmuch-show-mark-read-tags)) +      (setq notmuch-tree-message-buffer buffer)))) +;; End upstream + +;; Keymaps + +; Spam +(define-key notmuch-show-mode-map "S" +  (lambda () +    "mark message as spam" +    (interactive) +    (notmuch-show-tag (list "+spam" "-inbox" "-unread")))) + +(define-key notmuch-search-mode-map "S" +  (lambda (&optional beg end) +    "mark thread as spam" +    (interactive (notmuch-search-interactive-region)) +    (notmuch-search-tag (list "+spam" "-inbox" "-unread") beg end))) + +; Archive +(define-key notmuch-show-mode-map "A" +  (lambda () +    "archive" +    (interactive) +    (notmuch-show-tag (list "+archive" "-inbox" "-unread")))) + +(define-key notmuch-search-mode-map "A" +  (lambda (&optional beg end) +    "mark thread as spam" +    (interactive (notmuch-search-interactive-region)) +    (notmuch-search-tag (list "+archive" "-inbox" "-unread") beg end))) + +; Mark as read +(define-key notmuch-search-mode-map "R" +  (lambda (&optional beg end) +    "mark thread as read" +    (interactive (notmuch-search-interactive-region)) +    (notmuch-search-tag (list "-unread") beg end) +    (notmuch-search-next-thread))) + +(define-key notmuch-search-mode-map (kbd "RET") +  (lambda () +    "Show the selected thread with notmuch-tree if it has more +than one email. Use notmuch-show otherwise." +    (interactive) +    (if (= (plist-get (notmuch-search-get-result) :total) 1) +        (notmuch-search-show-thread) +      (notmuch-tree (notmuch-search-find-thread-id) +                    notmuch-search-query-string +                    nil +                    (notmuch-prettify-subject (notmuch-search-find-subject)))))) + +(defun color-inbox-if-unread () (interactive) +       (save-excursion +         (goto-char (point-min)) +         (let ((cnt (car (process-lines "notmuch" "count" "tag:inbox and tag:unread")))) +           (when (> (string-to-number cnt) 0) +             (save-excursion +               (when (search-forward "inbox" (point-max) t) +                 (let* ((overlays (overlays-in (match-beginning 0) (match-end 0))) +                        (overlay (car overlays))) +                   (when overlay +                     (overlay-put overlay 'face '((:inherit bold) (:foreground "green"))))))))))) + +(add-hook 'notmuch-hello-refresh-hook 'color-inbox-if-unread) | 
