diff options
Diffstat (limited to '.emacs.d/rul-emacs.org')
| -rw-r--r-- | .emacs.d/rul-emacs.org | 93 |
1 files changed, 80 insertions, 13 deletions
diff --git a/.emacs.d/rul-emacs.org b/.emacs.d/rul-emacs.org index dd944c4..04e3d50 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" @@ -1874,13 +1935,19 @@ TODO (message-mode . electric-quote-local-mode)) (use-package message + :init + (setq mml-enable-flowed nil) :hook (message-mode . my/message-mode-setup)) (defun my/message-mode-setup () (setq fill-column 72 sentence-end-double-space nil) - (auto-fill-mode 1)) + (auto-fill-mode -1) + (visual-line-mode 1) + (when (require 'olivetti nil t) + (setq-local olivetti-body-width 100) + (olivetti-mode 1))) ;; Flycheck (use-package flycheck |
