mirror of https://github.com/djcb/mu.git
mu4e-view: use Gnus' article mode (experimental)
Add a defcustom `mu4e-view-use-gnus`, which, when `t', use Gnus' article-mode for displaying messages instead of mu4e's built-in mode. This is experimental, and a view messages do not display correctly yet (base64-encoded bodies).
This commit is contained in:
parent
cc34705930
commit
260a8bb629
|
@ -1,6 +1,6 @@
|
||||||
;;; mu4e-view.el -- part of mu4e, the mu mail user agent
|
;;; mu4e-view.el -- part of mu4e, the mu mail user agent
|
||||||
;;
|
;;
|
||||||
;; Copyright (C) 2011-2017 Dirk-Jan C. Binnema
|
;; Copyright (C) 2011-2018 Dirk-Jan C. Binnema
|
||||||
|
|
||||||
;; Author: Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
|
;; Author: Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
|
||||||
;; Maintainer: Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
|
;; Maintainer: Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
|
||||||
|
@ -34,6 +34,7 @@
|
||||||
(require 'mu4e-actions)
|
(require 'mu4e-actions)
|
||||||
(require 'mu4e-message)
|
(require 'mu4e-message)
|
||||||
|
|
||||||
|
(require 'gnus-art)
|
||||||
(require 'comint)
|
(require 'comint)
|
||||||
(require 'browse-url)
|
(require 'browse-url)
|
||||||
(require 'button)
|
(require 'button)
|
||||||
|
@ -45,12 +46,17 @@
|
||||||
(eval-when-compile (byte-compile-disable-warning 'cl-functions))
|
(eval-when-compile (byte-compile-disable-warning 'cl-functions))
|
||||||
(require 'cl)
|
(require 'cl)
|
||||||
|
|
||||||
|
|
||||||
;; the message view
|
;; the message view
|
||||||
(defgroup mu4e-view nil
|
(defgroup mu4e-view nil
|
||||||
"Settings for the message view."
|
"Settings for the message view."
|
||||||
:group 'mu4e)
|
:group 'mu4e)
|
||||||
|
|
||||||
|
(defcustom mu4e-view-use-gnus nil
|
||||||
|
"Whether to (experimentally) use Gnu's article view instead of
|
||||||
|
mu4e's internal viewer."
|
||||||
|
:type 'boolean
|
||||||
|
:group 'mu4e-view)
|
||||||
|
|
||||||
(defcustom mu4e-view-fields
|
(defcustom mu4e-view-fields
|
||||||
'(:from :to :cc :subject :flags :date :maildir :mailing-list :tags
|
'(:from :to :cc :subject :flags :date :maildir :mailing-list :tags
|
||||||
:attachments :signature :decryption)
|
:attachments :signature :decryption)
|
||||||
|
@ -297,14 +303,23 @@ found."
|
||||||
(delete-all-overlays)
|
(delete-all-overlays)
|
||||||
(remove-overlays)))
|
(remove-overlays)))
|
||||||
|
|
||||||
|
|
||||||
(defun mu4e-view (msg)
|
(defun mu4e-view (msg)
|
||||||
"Display the message MSG in a new buffer, and keep in sync with HDRSBUF.
|
"Display the message MSG in a new buffer, and keep in sync with HDRSBUF.
|
||||||
'In sync' here means that moving to the next/previous message in
|
'In sync' here means that moving to the next/previous message in
|
||||||
the the message view affects HDRSBUF, as does marking etc.
|
the the message view affects HDRSBUF, as does marking etc.
|
||||||
|
|
||||||
As a side-effect, a message that is being viewed loses its 'unread'
|
As a side-effect, a message that is being viewed loses its 'unread'
|
||||||
marking if it still had that."
|
marking if it still had that.
|
||||||
|
|
||||||
|
Depending on the value of `mu4e-view-use-gnus', either use mu4e's
|
||||||
|
internal display mode, or a display mode based on Gnu's
|
||||||
|
article-mode."
|
||||||
|
(if mu4e-view-use-gnus
|
||||||
|
(mu4e~view-gnus msg)
|
||||||
|
(mu4e~view-internal msg)))
|
||||||
|
|
||||||
|
(defun mu4e~view-internal (msg)
|
||||||
|
"Display a message using mu4e's internal view mode."
|
||||||
(let* ((embedded ;; is it as an embedded msg (ie. message/rfc822 att)?
|
(let* ((embedded ;; is it as an embedded msg (ie. message/rfc822 att)?
|
||||||
(when (gethash (mu4e-message-field msg :path)
|
(when (gethash (mu4e-message-field msg :path)
|
||||||
mu4e~path-parent-docid-map) t))
|
mu4e~path-parent-docid-map) t))
|
||||||
|
@ -334,6 +349,28 @@ marking if it still had that."
|
||||||
(unless mode-enabled (run-mode-hooks 'mu4e-view-mode-hook)))))
|
(unless mode-enabled (run-mode-hooks 'mu4e-view-mode-hook)))))
|
||||||
(switch-to-buffer buf)))
|
(switch-to-buffer buf)))
|
||||||
|
|
||||||
|
(defun mu4e~view-gnus (msg)
|
||||||
|
"View MSG using Gnu's article mode. Experimental."
|
||||||
|
(let ((marked-read (mu4e~view-mark-as-read-maybe msg))
|
||||||
|
(path (mu4e-message-field msg :path))
|
||||||
|
(inhibit-read-only t))
|
||||||
|
(switch-to-buffer (get-buffer-create mu4e~view-buffer-name))
|
||||||
|
(erase-buffer)
|
||||||
|
(unless marked-read
|
||||||
|
;; when we're being marked as read, no need to start rendering the messages; just the minimail
|
||||||
|
;; so (update... ) can find us.
|
||||||
|
(insert-file-contents path)
|
||||||
|
(setq gnus-summary-buffer (get-buffer-create " *appease-gnus*"))
|
||||||
|
(let ((gnu-article-buffer (current-buffer)))
|
||||||
|
(gnus-article-prepare-display))
|
||||||
|
(mu4e~view-make-urls-clickable)
|
||||||
|
(mu4e~view-construct-attachments-header msg))
|
||||||
|
(mu4e-view-mode)
|
||||||
|
(setq mu4e~view-msg msg)
|
||||||
|
(setq gnus-article-buffer (current-buffer))
|
||||||
|
(set-buffer-modified-p nil)
|
||||||
|
(read-only-mode)))
|
||||||
|
|
||||||
(defun mu4e~view-get-property-from-event (prop)
|
(defun mu4e~view-get-property-from-event (prop)
|
||||||
"Get the property PROP at point, or the location of the mouse.
|
"Get the property PROP at point, or the location of the mouse.
|
||||||
The action is chosen based on the `last-command-event'.
|
The action is chosen based on the `last-command-event'.
|
||||||
|
@ -812,22 +849,32 @@ FUNC should be a function taking two arguments:
|
||||||
:group 'mu4e-view)
|
:group 'mu4e-view)
|
||||||
|
|
||||||
(defvar mu4e-view-mode-abbrev-table nil)
|
(defvar mu4e-view-mode-abbrev-table nil)
|
||||||
(define-derived-mode mu4e-view-mode special-mode "mu4e:view"
|
|
||||||
"Major mode for viewing an e-mail message in mu4e.
|
|
||||||
\\{mu4e-view-mode-map}."
|
|
||||||
(use-local-map mu4e-view-mode-map)
|
|
||||||
|
|
||||||
|
(defun mu4e~view-mode-body ()
|
||||||
|
"Body of the mode-function."
|
||||||
|
(use-local-map mu4e-view-mode-map)
|
||||||
;; show context in mode-string
|
;; show context in mode-string
|
||||||
(make-local-variable 'global-mode-string)
|
(make-local-variable 'global-mode-string)
|
||||||
(add-to-list 'global-mode-string '(:eval (mu4e-context-label)))
|
(add-to-list 'global-mode-string '(:eval (mu4e-context-label)))
|
||||||
|
|
||||||
(setq buffer-undo-list t);; don't record undo info
|
(setq buffer-undo-list t);; don't record undo info
|
||||||
|
|
||||||
;; autopair mode gives error when pressing RET
|
;; autopair mode gives error when pressing RET
|
||||||
;; turn it off
|
;; turn it off
|
||||||
(when (boundp 'autopair-dont-activate)
|
(when (boundp 'autopair-dont-activate)
|
||||||
(setq autopair-dont-activate t)))
|
(setq autopair-dont-activate t)))
|
||||||
|
|
||||||
|
(if mu4e-view-use-gnus
|
||||||
|
(define-derived-mode mu4e-view-mode gnus-article-mode "mu4e:view/g"
|
||||||
|
;; remove some gnus stuff that does not apply
|
||||||
|
(define-key mu4e-view-mode-map [menu-bar Treatment] nil)
|
||||||
|
(define-key mu4e-view-mode-map [menu-bar Article] nil)
|
||||||
|
(define-key mu4e-view-mode-map [menu-bar post] nil)
|
||||||
|
"Major mode for viewing an e-mail message in mu4e, based on Gnus."
|
||||||
|
(mu4e~view-mode-body))
|
||||||
|
(define-derived-mode mu4e-view-mode special-mode "mu4e:view"
|
||||||
|
"Major mode for viewing an e-mail message in mu4e, using the
|
||||||
|
mu4e-specific view."
|
||||||
|
(mu4e~view-mode-body)))
|
||||||
|
|
||||||
(defun mu4e~view-mark-as-read-maybe (msg)
|
(defun mu4e~view-mark-as-read-maybe (msg)
|
||||||
"Clear the message MSG New/Unread status and set it to Seen.
|
"Clear the message MSG New/Unread status and set it to Seen.
|
||||||
If the message is not New/Unread, do nothing. Evaluates to t if it
|
If the message is not New/Unread, do nothing. Evaluates to t if it
|
||||||
|
@ -887,7 +934,6 @@ If the url is mailto link, start writing an email to that address."
|
||||||
mu4e-view-image-max-width
|
mu4e-view-image-max-width
|
||||||
mu4e-view-image-max-height)))))))))
|
mu4e-view-image-max-height)))))))))
|
||||||
|
|
||||||
|
|
||||||
(defvar mu4e~view-beginning-of-url-regexp
|
(defvar mu4e~view-beginning-of-url-regexp
|
||||||
"https?\\://\\|mailto:"
|
"https?\\://\\|mailto:"
|
||||||
"Regexp that matches the beginning of http:/https:/mailto:
|
"Regexp that matches the beginning of http:/https:/mailto:
|
||||||
|
|
Loading…
Reference in New Issue