(gnus-summary-kill-thread): Allow universal prefix zero
[gnus] / lisp / mm-decode.el
index e632b99..598a722 100644 (file)
@@ -364,20 +364,34 @@ enables you to choose manually one of two types those mails include."
   :type 'boolean
   :group 'mime-display)
 
-(defvar mm-file-name-rewrite-functions
+(defcustom mm-file-name-rewrite-functions
   '(mm-file-name-delete-control mm-file-name-delete-gotchas)
-  "*List of functions used for rewriting file names of MIME parts.
+  "List of functions used for rewriting file names of MIME parts.
 Each function takes a file name as input and returns a file name.
 
-Ready-made functions include
-`mm-file-name-delete-control'
-`mm-file-name-delete-gotchas'
-`mm-file-name-delete-whitespace',
-`mm-file-name-trim-whitespace',
-`mm-file-name-collapse-whitespace',
-`mm-file-name-replace-whitespace',
-`capitalize', `downcase', `upcase', and
-`upcase-initials'.")
+Ready-made functions include `mm-file-name-delete-control',
+`mm-file-name-delete-gotchas' (you should not remove these two
+functions), `mm-file-name-delete-whitespace',
+`mm-file-name-trim-whitespace', `mm-file-name-collapse-whitespace',
+`mm-file-name-replace-whitespace', `capitalize', `downcase',
+`upcase', and `upcase-initials'."
+  :type '(list (set :inline t
+                   (const mm-file-name-delete-control)
+                   (const mm-file-name-delete-gotchas)
+                   (const mm-file-name-delete-whitespace)
+                   (const mm-file-name-trim-whitespace)
+                   (const mm-file-name-collapse-whitespace)
+                   (const mm-file-name-replace-whitespace)
+                   (const capitalize)
+                   (const downcase)
+                   (const upcase)
+                   (const upcase-initials)
+              (repeat :inline t
+                      :tag "Function"
+                      function)))
+  :version "23.0" ;; No Gnus
+  :group 'mime-display)
+
 
 (defvar mm-path-name-rewrite-functions nil
   "*List of functions for rewriting the full file names of MIME parts.
@@ -1134,16 +1148,26 @@ are ignored."
   "Insert the contents of HANDLE in the current buffer.
 If NO-CACHE is non-nil, cached contents of a message/external-body part
 are ignored."
-  (save-excursion
-    (insert
-     (cond ((eq (mail-content-type-get (mm-handle-type handle) 'charset)
-               'gnus-decoded)
-           (with-current-buffer (mm-handle-buffer handle)
-             (buffer-string)))
-          ((mm-multibyte-p)
-           (mm-string-to-multibyte (mm-get-part handle no-cache)))
-          (t
-           (mm-get-part handle no-cache))))))
+  (let ((text (cond ((eq (mail-content-type-get (mm-handle-type handle)
+                                               'charset)
+                        'gnus-decoded)
+                    (with-current-buffer (mm-handle-buffer handle)
+                      (buffer-string)))
+                   ((mm-multibyte-p)
+                    (mm-string-to-multibyte (mm-get-part handle no-cache)))
+                   (t
+                    (mm-get-part handle no-cache)))))
+    (save-restriction
+      (widen)
+      (goto-char
+       (prog1
+          (point)
+        (if (and (eq (get-char-property (max (point-min) (1- (point))) 'face)
+                     'mm-uu-extract)
+                 (eq (get-char-property 0 'face text) 'mm-uu-extract))
+            ;; Separate the extracted parts that have the same faces.
+            (insert "\n" text)
+          (insert text)))))))
 
 (defun mm-file-name-delete-whitespace (file-name)
   "Remove all whitespace characters from FILE-NAME."
@@ -1366,18 +1390,19 @@ be determined."
 (defun mm-image-fit-p (handle)
   "Say whether the image in HANDLE will fit the current window."
   (let ((image (mm-get-image handle)))
-    (if (fboundp 'glyph-width)
-       ;; XEmacs' glyphs can actually tell us about their width, so
-       ;; lets be nice and smart about them.
-       (or mm-inline-large-images
-           (and (<= (glyph-width image) (window-pixel-width))
-                (<= (glyph-height image) (window-pixel-height))))
-      (let* ((size (image-size image))
-            (w (car size))
-            (h (cdr size)))
-       (or mm-inline-large-images
-           (and (<= h (1- (window-height))) ; Don't include mode line.
-                (<= w (window-width))))))))
+    (or (not image)
+       (if (fboundp 'glyph-width)
+           ;; XEmacs' glyphs can actually tell us about their width, so
+           ;; lets be nice and smart about them.
+           (or mm-inline-large-images
+               (and (<= (glyph-width image) (window-pixel-width))
+                    (<= (glyph-height image) (window-pixel-height))))
+         (let* ((size (image-size image))
+                (w (car size))
+                (h (cdr size)))
+           (or mm-inline-large-images
+               (and (<= h (1- (window-height))) ; Don't include mode line.
+                    (<= w (window-width)))))))))
 
 (defun mm-valid-image-format-p (format)
   "Say whether FORMAT can be displayed natively by Emacs."