;;; mm-decode.el --- Functions for decoding MIME things
-;; Copyright (C) 1998-2014 Free Software Foundation, Inc.
+;; Copyright (C) 1998-2015 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
;;; Code:
-;; For Emacs <22.2 and XEmacs.
-(eval-and-compile
- (unless (fboundp 'declare-function) (defmacro declare-function (&rest r))))
-
(require 'mail-parse)
(require 'mm-bodies)
(eval-when-compile (require 'cl))
(autoload 'gnus-replace-in-string "gnus-util")
(autoload 'gnus-read-shell-command "gnus-util")
+(autoload 'gnus-overlays-at "gnus")
+(autoload 'gnus-overlay-put "gnus")
+
(autoload 'mm-inline-partial "mm-partial")
(autoload 'mm-inline-external-body "mm-extern")
(autoload 'mm-extern-cache-contents "mm-extern")
(unless from
(setq from (mail-fetch-field "from")))
;; FIXME: In some circumstances, this code is running within
- ;; an unibyte macro. mail-extract-address-components
+ ;; a unibyte macro. mail-extract-address-components
;; creates unibyte buffers. This `if', though not a perfect
;; solution, avoids most of them.
(if from
'inline)
((and (mm-inlinable-p ehandle)
(mm-inlined-p ehandle))
- (forward-line 1)
(mm-display-inline handle)
'inline)
((or method
'inline)
(setq external
(and method ;; If nil, we always use "save".
- (stringp method) ;; 'mailcap-save-binary-file
(or (eq mm-enable-external t)
(and (eq mm-enable-external 'ask)
(y-or-n-p
(concat
"Display part (" type
- ") using external program"
- ;; Can non-string method ever happen?
+ ") "
(if (stringp method)
(concat
- " \"" (format method filename) "\"")
- "")
+ "using external program \""
+ (format method filename) "\"")
+ (format
+ "by calling `%s' on the contents)" method))
"? "))))))
(if external
(mm-display-external
(mm-handle-media-type handle) t))))
(unwind-protect
(if method
- (funcall method)
+ (progn
+ (when (and (boundp 'gnus-summary-buffer)
+ (bufferp gnus-summary-buffer)
+ (buffer-name gnus-summary-buffer))
+ ;; So that we pop back to the right place, sort of.
+ (switch-to-buffer gnus-summary-buffer)
+ (switch-to-buffer mm))
+ (delete-other-windows)
+ (funcall method))
(mm-save-part handle))
(when (and (not non-viewer)
method)
(start end &optional base-url))
(declare-function shr-insert-document "shr" (dom))
(defvar shr-blocked-images)
+(defvar shr-use-fonts)
(defvar gnus-inhibit-images)
(autoload 'gnus-blocked-images "gnus-art")
;; Require since we bind its variables.
(require 'shr)
(let ((article-buffer (current-buffer))
+ (shr-width (if (and (boundp 'shr-use-fonts)
+ shr-use-fonts)
+ nil
+ fill-column))
(shr-content-function (lambda (id)
(let ((handle (mm-get-content-id id)))
(when handle
handle
`(lambda ()
(let ((inhibit-read-only t))
- (delete-region ,(point-min-marker)
+ (delete-region ,(copy-marker (point-min) t)
,(point-max-marker))))))))
(defvar shr-map)
:keymap shr-map
(get-text-property start 'shr-url))
(put-text-property start end 'local-map nil)
+ (dolist (overlay (gnus-overlays-at start))
+ (gnus-overlay-put overlay 'face nil))
(setq start end)))))
(defun mm-handle-filename (handle)