Remove nnml-retrieve-groups that is unnecessary and somewhat problematic
[gnus] / lisp / mm-decode.el
index 3913ecc..327b0e6 100644 (file)
@@ -1,6 +1,6 @@
 ;;; 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>
@@ -788,6 +788,14 @@ MIME-Version header before proceeding."
 (autoload 'mailcap-parse-mailcaps "mailcap")
 (autoload 'mailcap-mime-info "mailcap")
 
+(defun mm-head-p (&optional point)
+  "Return non-nil if point is in the article header."
+  (let ((point (or point (point))))
+    (save-excursion
+      (goto-char point)
+      (and (not (re-search-backward "^$" nil t))
+          (re-search-forward "^$" nil t)))))
+
 (defun mm-display-part (handle &optional no-default force)
   "Display the MIME part represented by HANDLE.
 Returns nil if the part is removed; inline if displayed inline;
@@ -821,6 +829,10 @@ external if displayed external."
          'inline)
         ((and (mm-inlinable-p ehandle)
               (mm-inlined-p ehandle))
+         (when force
+           (if (mm-head-p)
+               (re-search-forward "^$" nil t)
+             (forward-line 1)))
          (mm-display-inline handle)
          'inline)
         ((or method
@@ -833,18 +845,18 @@ external if displayed external."
                '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) "\"")
+                                   (gnus-format-message
+                                    "by calling `%s' on the contents)" method))
                                  "? "))))))
            (if external
                (mm-display-external
@@ -885,7 +897,15 @@ external if displayed 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)
@@ -1399,7 +1419,7 @@ Return t if meta tag is added or replaced."
        (goto-char (point-min))
        (if (re-search-forward "\
 <meta\\s-+http-equiv=[\"']?content-type[\"']?\\s-+content=[\"']\
-text/\\(\\sw+\\)\\(?:\;\\s-*charset=\\([^\"'>]+\\)\\)?[^>]*>" nil t)
+text/\\(\\sw+\\)\\(?:;\\s-*charset=\\([^\"'>]+\\)\\)?[^>]*>" nil t)
            (if (and (not force-charset)
                     (match-beginning 2)
                     (string-match "\\`html\\'" (match-string 1)))
@@ -1804,9 +1824,10 @@ If RECURSIVE, search recursively."
              (not (mm-long-lines-p 76))))))
 
 (declare-function libxml-parse-html-region "xml.c"
-                 (start end &optional base-url))
+                 (start end &optional base-url discard-comments))
 (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")
 
@@ -1814,7 +1835,10 @@ If RECURSIVE, search recursively."
   ;; Require since we bind its variables.
   (require 'shr)
   (let ((article-buffer (current-buffer))
-       (shr-width fill-column)
+       (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
@@ -1868,7 +1892,7 @@ If RECURSIVE, search recursively."
        handle
        `(lambda ()
          (let ((inhibit-read-only t))
-           (delete-region ,(copy-marker (point-min) t)
+           (delete-region ,(point-min-marker)
                           ,(point-max-marker))))))))
 
 (defvar shr-map)
@@ -1888,6 +1912,8 @@ If RECURSIVE, search recursively."
         :keymap shr-map
         (get-text-property start 'shr-url))
        (put-text-property start end 'local-map nil)
+       (dolist (overlay (overlays-at start))
+         (overlay-put overlay 'face nil))
        (setq start end)))))
 
 (defun mm-handle-filename (handle)