diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2021-10-29 17:26:53 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2021-10-29 17:26:53 +0200 |
commit | 16995fa7c234bda25f9c19b7284842b1ea2febc6 (patch) | |
tree | 889aecc9bb1a24a8d566a2989ed5988d3be5eb4f | |
parent | 8ada213b878daff6a821f2d583bafe9e1819d895 (diff) | |
download | emacs-16995fa7c234bda25f9c19b7284842b1ea2febc6.tar.gz |
Make message/rfc822 on buttons work again in Gnus
* lisp/gnus/gnus-art.el (gnus-article-mode): Set
mm-inline-message-prepare-function buffer-locally so that it works
both when inlining rfc822 and hitting the MIME button (bug#51388).
(gnus-mime--inline-message): Factor out into own function.
(gnus-mime-display-single): From here.
-rw-r--r-- | lisp/gnus/gnus-art.el | 42 | ||||
-rw-r--r-- | lisp/gnus/mm-view.el | 4 |
2 files changed, 24 insertions, 22 deletions
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 930c739a735..6b33680871a 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -4506,6 +4506,10 @@ commands: (gnus-set-default-directory) (buffer-disable-undo) (setq show-trailing-whitespace nil) + ;; Arrange a callback from `mm-inline-message' if we're + ;; displaying a message/rfc822 part. + (setq-local mm-inline-message-prepare-function + #'gnus-mime--inline-message-function) (mm-enable-multibyte)) (defun gnus-article-setup-buffer () @@ -6041,31 +6045,29 @@ If nil, don't show those extra buttons." (defun gnus-mime-display-mixed (handles) (mapcar #'gnus-mime-display-part handles)) +(defun gnus-mime--inline-message-function (handle charset) + (let ((handles + (let (gnus-article-mime-handles + ;; disable prepare hook + gnus-article-prepare-hook + (gnus-newsgroup-charset + ;; mm-uu might set it. + (unless (eq charset 'gnus-decoded) + (or charset gnus-newsgroup-charset)))) + (let ((gnus-original-article-buffer + (mm-handle-buffer handle))) + (run-hooks 'gnus-article-decode-hook)) + (gnus-article-prepare-display) + gnus-article-mime-handles))) + (when handles + (setq gnus-article-mime-handles + (mm-merge-handles gnus-article-mime-handles handles))))) + (defun gnus-mime-display-single (handle) (let ((type (mm-handle-media-type handle)) (ignored gnus-ignored-mime-types) (mm-inline-font-lock (gnus-visual-p 'article-highlight 'highlight)) (not-attachment t) - ;; Arrange a callback from `mm-inline-message' if we're - ;; displaying a message/rfc822 part. - (mm-inline-message-prepare-function - (lambda (charset) - (let ((handles - (let (gnus-article-mime-handles - ;; disable prepare hook - gnus-article-prepare-hook - (gnus-newsgroup-charset - ;; mm-uu might set it. - (unless (eq charset 'gnus-decoded) - (or charset gnus-newsgroup-charset)))) - (let ((gnus-original-article-buffer - (mm-handle-buffer handle))) - (run-hooks 'gnus-article-decode-hook)) - (gnus-article-prepare-display) - gnus-article-mime-handles))) - (when handles - (setq gnus-article-mime-handles - (mm-merge-handles gnus-article-mime-handles handles)))))) display text gnus-displaying-mime) (catch 'ignored diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el index 56d05c8fa93..d2a6d2cf5d3 100644 --- a/lisp/gnus/mm-view.el +++ b/lisp/gnus/mm-view.el @@ -451,7 +451,7 @@ This is only used if `mm-inline-large-images' is set to (defvar mm-inline-message-prepare-function nil "Function called by `mm-inline-message' to do client specific setup. -It is called with one parameter -- the charset.") +It is called with two parameters -- the MIME handle and the charset.") (defun mm-inline-message (handle) "Insert HANDLE (a message/rfc822 part) into the current buffer. @@ -471,7 +471,7 @@ after inserting the part." (narrow-to-region b b) (mm-insert-part handle) (when mm-inline-message-prepare-function - (funcall mm-inline-message-prepare-function charset)) + (funcall mm-inline-message-prepare-function handle charset)) (goto-char (point-min)) (unless bolp (insert "\n")) |