aboutsummaryrefslogtreecommitdiff
path: root/.emacs.d/rul-emacs.org
diff options
context:
space:
mode:
Diffstat (limited to '.emacs.d/rul-emacs.org')
-rw-r--r--.emacs.d/rul-emacs.org85
1 files changed, 73 insertions, 12 deletions
diff --git a/.emacs.d/rul-emacs.org b/.emacs.d/rul-emacs.org
index dd944c4..15175e9 100644
--- a/.emacs.d/rul-emacs.org
+++ b/.emacs.d/rul-emacs.org
@@ -683,6 +683,13 @@ Emacs can act as Mail User Agent. My preferred package for this is
;; Use sender to find GPG key.
(setq mml-secure-openpgp-sign-with-sender t)
+;; Keep HTML mail readable without sender-defined styling.
+(setq shr-use-colors nil
+ shr-use-fonts nil)
+
+(with-eval-after-load 'shr
+ (set-face-attribute 'shr-link nil :inherit 'default :underline t))
+
(use-package notmuch
:ensure t
:config
@@ -698,6 +705,53 @@ Emacs can act as Mail User Agent. My preferred package for this is
(setq notmuch-draft-folder "current/Drafts")
+ (defvar-local rul/notmuch-show-refreshing-for-olivetti nil)
+
+ (defun rul/notmuch-show-enable-olivetti ()
+ "Enable Olivetti before notmuch renders message HTML."
+ (setq-local olivetti-body-width 100
+ shr-width nil
+ shr-max-width olivetti-body-width)
+ (olivetti-mode 1))
+
+ (defun rul/notmuch-show-refresh-after-olivetti ()
+ "Refresh an already-rendered notmuch buffer after Olivetti changes width."
+ (when (and (derived-mode-p 'notmuch-show-mode)
+ olivetti-mode
+ notmuch-show-thread-id
+ (not rul/notmuch-show-refreshing-for-olivetti))
+ (setq rul/notmuch-show-refreshing-for-olivetti t)
+ (run-at-time
+ 0 nil
+ (lambda (buffer)
+ (when (buffer-live-p buffer)
+ (with-current-buffer buffer
+ (unwind-protect
+ (when (and (derived-mode-p 'notmuch-show-mode)
+ olivetti-mode
+ notmuch-show-thread-id)
+ (notmuch-refresh-this-buffer))
+ (setq rul/notmuch-show-refreshing-for-olivetti nil)))))
+ (current-buffer))))
+
+ (add-hook 'notmuch-show-mode-hook #'rul/notmuch-show-enable-olivetti)
+
+ (with-eval-after-load 'olivetti
+ (add-hook 'olivetti-mode-on-hook
+ #'rul/notmuch-show-refresh-after-olivetti
+ t))
+
+ (defun rul/notmuch-inline-override-images (types)
+ "Treat standalone image MIME parts as attachments in notmuch."
+ (if (member "image/.*" types)
+ types
+ (append types '("image/.*"))))
+
+ (unless (advice-member-p #'rul/notmuch-inline-override-images
+ 'notmuch--inline-override-types)
+ (advice-add 'notmuch--inline-override-types :filter-return
+ #'rul/notmuch-inline-override-images))
+
;; Keymaps
(defun rul/capture-mail()
"Capture mail to org mode."
@@ -731,20 +785,27 @@ Emacs can act as Mail User Agent. My preferred package for this is
(notmuch-search-tag (list "+spam" "-inbox" "-unread") beg end)))
;; Archive
+ ;; Stock `a` applies notmuch-archive-tags but doesn't re-run the search, so
+ ;; the thread stays visible in the tag:inbox buffer with stale results. Wrap
+ ;; both `a` and `A` to refresh the buffer so the thread drops out of view.
(setq notmuch-archive-tags (list "-inbox" "+archive"))
- (define-key notmuch-show-mode-map "A"
- (lambda ()
- "archive"
- (interactive)
- (notmuch-show-tag (list "+archive" "-inbox" "-unread"))
- (notmuch-refresh-this-buffer)))
- (define-key notmuch-search-mode-map "A"
- (lambda (&optional beg end)
- "archive thread"
- (interactive (notmuch-search-interactive-region))
- (notmuch-search-tag (list "+archive" "-inbox" "-unread") beg end)
- (notmuch-refresh-this-buffer)))
+ (defun rul/notmuch-search-archive (&optional unarchive beg end)
+ "Archive threads and refresh so they drop out of the inbox view."
+ (interactive (cons current-prefix-arg (notmuch-search-interactive-region)))
+ (notmuch-search-archive-thread unarchive beg end)
+ (notmuch-refresh-this-buffer))
+
+ (defun rul/notmuch-show-archive ()
+ "Archive the current message with +archive -inbox -unread and refresh."
+ (interactive)
+ (notmuch-show-tag (list "+archive" "-inbox" "-unread"))
+ (notmuch-refresh-this-buffer))
+
+ (define-key notmuch-search-mode-map "a" 'rul/notmuch-search-archive)
+ (define-key notmuch-search-mode-map "A" 'rul/notmuch-search-archive)
+ (define-key notmuch-show-mode-map "a" 'rul/notmuch-show-archive)
+ (define-key notmuch-show-mode-map "A" 'rul/notmuch-show-archive)
;; Mark as read
(define-key notmuch-search-mode-map "r"
nihil fit ex nihilo