2001-01-16 Katsumi Yamaoka <yamaoka@jpl.org>
[gnus] / lisp / gnus-art.el
index c2d3159..43c03ec 100644 (file)
@@ -227,25 +227,25 @@ asynchronously.    The compressed face will be piped to this command."
 
 (defcustom gnus-article-banner-alist nil
   "Banner alist for stripping.
-For example, 
+For example,
      ((egroups . \"^[ \\t\\n]*-------------------+\\\\( eGroups Sponsor -+\\\\)?....\\n\\\\(.+\\n\\\\)+\"))"
   :version "21.1"
   :type '(repeat (cons symbol regexp))
   :group 'gnus-article-washing)
 
-(gnus-define-group-parameter 
+(gnus-define-group-parameter
  banner
  :variable-document
  "Alist of regexps (to match group names) and banner."
  :variable-group gnus-article-washing
- :parameter-type 
+ :parameter-type
  '(choice :tag "Banner"
          :value nil
          (const :tag "Remove signature" signature)
          (symbol :tag "Item in `gnus-article-banner-alist'" none)
          regexp
          (const :tag "None" nil))
- :parameter-document 
+ :parameter-document
  "If non-nil, specify how to remove `banners' from articles.
 
 Symbol `signature' means to remove signatures delimited by
@@ -470,6 +470,13 @@ The following additional specs are available:
   :type 'hook
   :group 'gnus-article-various)
 
+(when (featurep 'xemacs)
+  ;; Extracted from gnus-xmas-define in order to preserve user settings
+  (when (fboundp 'turn-off-scroll-in-place)
+    (add-hook 'gnus-article-mode-hook 'turn-off-scroll-in-place))
+  ;; Extracted from gnus-xmas-redefine in order to preserve user settings
+  (add-hook 'gnus-article-mode-hook 'gnus-xmas-article-menu-add))
+
 (defcustom gnus-article-menu-hook nil
   "*Hook run after the creation of the article mode menu."
   :type 'hook
@@ -677,17 +684,17 @@ be added below it (otherwise)."
 (defcustom gnus-article-mime-match-handle-function 'undisplayed-alternative
   "Function called with a MIME handle as the argument.
 This is meant for people who want to view first matched part.
-For `undisplayed-alternative' (default), the first undisplayed 
-part or alternative part is used.  For `undisplayed', the first 
-undisplayed part is used.  For a function, the first part which 
+For `undisplayed-alternative' (default), the first undisplayed
+part or alternative part is used.  For `undisplayed', the first
+undisplayed part is used.  For a function, the first part which
 the function return `t' is used.  For `nil', the first part is
 used."
   :version "21.1"
   :group 'gnus-article-mime
-  :type '(choice 
+  :type '(choice
          (item :tag "first" :value nil)
          (item :tag "undisplayed" :value undisplayed)
-         (item :tag "undisplayed or alternative" 
+         (item :tag "undisplayed or alternative"
                :value undisplayed-alternative)
          (function)))
 
@@ -772,7 +779,7 @@ See the manual for details."
   :type gnus-article-treat-head-custom)
 (put 'gnus-treat-buttonize-head 'highlight t)
 
-(defcustom gnus-treat-emphasize 
+(defcustom gnus-treat-emphasize
   (and (or window-system
           (featurep 'xemacs)
           (>= (string-to-number emacs-version) 21))
@@ -974,7 +981,7 @@ See the manual for details."
   :type gnus-article-treat-custom)
 (put 'gnus-treat-overstrike 'highlight t)
 
-(defcustom gnus-treat-display-xface 
+(defcustom gnus-treat-display-xface
   (and (or (and (fboundp 'image-type-available-p)
                (image-type-available-p 'xbm)
                (string-match "^0x" (shell-command-to-string "uncompface")))
@@ -987,7 +994,7 @@ See the manual for details."
   :type gnus-article-treat-head-custom)
 (put 'gnus-treat-display-xface 'highlight t)
 
-(defcustom gnus-treat-display-smileys 
+(defcustom gnus-treat-display-smileys
   (if (or (and (featurep 'xemacs)
               (featurep 'xpm))
          (and (fboundp 'image-type-available-p)
@@ -1119,7 +1126,7 @@ It is a string, such as \"PGP\". If nil, ask user."
 (defvar gnus-article-mode-syntax-table
   (let ((table (copy-syntax-table text-mode-syntax-table)))
     ;; This causes the citation match run O(2^n).
-    ;; (modify-syntax-entry ?- "w" table) 
+    ;; (modify-syntax-entry ?- "w" table)
     (modify-syntax-entry ?> ")" table)
     (modify-syntax-entry ?< "(" table)
     table)
@@ -1536,11 +1543,26 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
       (delete-process "article-x-face"))
     (let ((inhibit-point-motion-hooks t)
          (case-fold-search t)
+         (x-faces "")
          from last)
+      (when (gnus-buffer-live-p gnus-original-article-buffer)
+       (with-current-buffer gnus-original-article-buffer
+         (save-restriction
+           (article-narrow-to-head)
+           (while (re-search-forward "^X-Face:" nil t)
+             (setq x-faces
+                   (concat
+                    x-faces
+                    (buffer-substring (match-beginning 0)
+                                      (1- (re-search-forward
+                                           "^\\($\\|[^ \t]\\)" nil t)))))))))
       (save-restriction
        (article-narrow-to-head)
-       (goto-char (point-min))
        (setq from (message-fetch-field "from"))
+       (when (gnus-buffer-live-p gnus-original-article-buffer)
+         (message-remove-header "X-Face")
+         (goto-char (point-min))
+         (insert x-faces))
        (goto-char (point-min))
        (while (and gnus-article-x-face-command
                    (not last)
@@ -1551,7 +1573,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
                             (not (string-match gnus-article-x-face-too-ugly
                                                from))))
                    ;; Has to be present.
-                   (re-search-forward "^X-Face: " nil t))
+                   (re-search-forward "^X-Face:[\t ]*" nil t))
          ;; This used to try to do multiple faces (`while' instead of
          ;; `when' above), but (a) sending multiple EOFs to xv doesn't
          ;; work (b) it can crash some versions of Emacs (c) are
@@ -1586,7 +1608,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
     (let ((inhibit-point-motion-hooks t)
          buffer-read-only
          (mail-parse-charset gnus-newsgroup-charset)
-         (mail-parse-ignored-charsets 
+         (mail-parse-ignored-charsets
           (save-excursion (set-buffer gnus-summary-buffer)
                           gnus-newsgroup-ignored-charsets)))
       (mail-decode-encoded-word-region (point-min) (point-max)))))
@@ -1598,7 +1620,7 @@ If PROMPT (the prefix), prompt for a coding system to use."
   (let ((inhibit-point-motion-hooks t) (case-fold-search t)
        buffer-read-only
        (mail-parse-charset gnus-newsgroup-charset)
-       (mail-parse-ignored-charsets 
+       (mail-parse-ignored-charsets
         (save-excursion (condition-case nil
                             (set-buffer gnus-summary-buffer)
                           (error))
@@ -1619,7 +1641,7 @@ If PROMPT (the prefix), prompt for a coding system to use."
            format (and ctl (mail-content-type-get ctl 'format)))
       (when cte
        (setq cte (mail-header-strip cte)))
-      (if (and ctl (not (string-match "/" (car ctl)))) 
+      (if (and ctl (not (string-match "/" (car ctl))))
          (setq ctl nil))
       (goto-char (point-max)))
     (forward-line 1)
@@ -1641,7 +1663,7 @@ If PROMPT (the prefix), prompt for a coding system to use."
   "Remove encoded-word encoding from headers."
   (let ((inhibit-point-motion-hooks t)
        (mail-parse-charset gnus-newsgroup-charset)
-       (mail-parse-ignored-charsets 
+       (mail-parse-ignored-charsets
         (save-excursion (condition-case nil
                             (set-buffer gnus-summary-buffer)
                           (error))
@@ -1663,14 +1685,14 @@ or not."
            (setq type
                  (gnus-fetch-field "content-transfer-encoding"))
            (let* ((ct (gnus-fetch-field "content-type"))
-                  (ctl (and ct 
+                  (ctl (and ct
                             (ignore-errors
                               (mail-header-parse-content-type ct)))))
              (setq charset (and ctl
                                 (mail-content-type-get ctl 'charset)))
              (if (stringp charset)
                  (setq charset (intern (downcase charset)))))))
-      (unless charset 
+      (unless charset
        (setq charset gnus-newsgroup-charset))
       (when (or force
                (and type (let ((case-fold-search t))
@@ -1690,14 +1712,14 @@ If FORCE, decode the article whether it is marked as base64 not."
            (setq type
                  (gnus-fetch-field "content-transfer-encoding"))
            (let* ((ct (gnus-fetch-field "content-type"))
-                  (ctl (and ct 
+                  (ctl (and ct
                             (ignore-errors
                               (mail-header-parse-content-type ct)))))
              (setq charset (and ctl
                                 (mail-content-type-get ctl 'charset)))
              (if (stringp charset)
                  (setq charset (intern (downcase charset)))))))
-      (unless charset 
+      (unless charset
        (setq charset gnus-newsgroup-charset))
       (when (or force
                (and type (let ((case-fold-search t))
@@ -1729,14 +1751,14 @@ If FORCE, decode the article whether it is marked as base64 not."
       (if (gnus-buffer-live-p gnus-original-article-buffer)
          (with-current-buffer gnus-original-article-buffer
            (let* ((ct (gnus-fetch-field "content-type"))
-                  (ctl (and ct 
+                  (ctl (and ct
                             (ignore-errors
                               (mail-header-parse-content-type ct)))))
              (setq charset (and ctl
                                 (mail-content-type-get ctl 'charset)))
              (if (stringp charset)
                  (setq charset (intern (downcase charset)))))))
-      (unless charset 
+      (unless charset
        (setq charset gnus-newsgroup-charset))
       (article-goto-body)
       (save-window-excursion
@@ -1763,7 +1785,7 @@ The `gnus-list-identifiers' variable specifies what to do."
          (when regexp
            (goto-char (point-min))
            (when (re-search-forward
-                  (concat "^Subject: +\\(\\(\\(Re: +\\)?\\(" regexp 
+                  (concat "^Subject: +\\(\\(\\(Re: +\\)?\\(" regexp
                           " *\\)\\)+\\(Re: +\\)?\\)")
                   nil t)
              (let ((s (or (match-string 3) (match-string 5))))
@@ -2076,9 +2098,9 @@ means show, 0 means toggle."
 Originally it is hide instead of DUMMY."
   (let ((buffer-read-only nil)
        (inhibit-point-motion-hooks t))
-    (gnus-remove-text-properties-when 
+    (gnus-remove-text-properties-when
      'article-type type
-     (point-min) (point-max) 
+     (point-min) (point-max)
      (cons 'article-type (cons type
                               gnus-hidden-properties)))))
 
@@ -2166,7 +2188,7 @@ should replace the \"Date:\" one, or should be added below it."
      ((eq type 'local)
       (let ((tz (car (current-time-zone time))))
        (format "Date: %s %s%02d%02d" (current-time-string time)
-               (if (> tz 0) "+" "-") (/ (abs tz) 3600) 
+               (if (> tz 0) "+" "-") (/ (abs tz) 3600)
                (/ (% (abs tz) 3600) 60))))
      ;; Convert to Universal Time.
      ((eq type 'ut)
@@ -2199,7 +2221,7 @@ should replace the \"Date:\" one, or should be added below it."
         "Date: "
         (format-time-string "%Y%m%dT%H%M%S" time)
         (format "%s%02d%02d"
-                (if (> tz 0) "+" "-") (/ (abs tz) 3600) 
+                (if (> tz 0) "+" "-") (/ (abs tz) 3600)
                 (/ (% (abs tz) 3600) 60)))))
      ;; Do an X-Sent lapsed format.
      ((eq type 'lapsed)
@@ -2252,6 +2274,7 @@ should replace the \"Date:\" one, or should be added below it."
         (number-to-string (nth 3 dtime))
         (let ((digit (% (nth 3 dtime) 10)))
           (cond
+           ((memq (nth 3 dtime) '(11 12 13)) "th")
            ((= digit 1) "st")
            ((= digit 2) "nd")
            ((= digit 3) "rd")
@@ -2344,10 +2367,10 @@ This format is defined by the `gnus-article-time-format' variable."
   (interactive (gnus-article-hidden-arg))
   (unless (gnus-article-check-hidden-text 'emphasis arg)
     (save-excursion
-      (let ((alist (or 
+      (let ((alist (or
                    (condition-case nil
-                       (with-current-buffer gnus-summary-buffer 
-                         gnus-article-emphasis-alist) 
+                       (with-current-buffer gnus-summary-buffer
+                         gnus-article-emphasis-alist)
                      (error))
                    gnus-emphasis-alist))
            (buffer-read-only nil)
@@ -2379,8 +2402,8 @@ This format is defined by the `gnus-article-time-format' variable."
     (let ((name (and gnus-newsgroup-name
                     (gnus-group-real-name gnus-newsgroup-name))))
       (make-local-variable 'gnus-article-emphasis-alist)
-      (setq gnus-article-emphasis-alist 
-           (nconc 
+      (setq gnus-article-emphasis-alist
+           (nconc
             (let ((alist gnus-group-highlight-words-alist) elem highlight)
               (while (setq elem (pop alist))
                 (when (and name (string-match (car elem) name))
@@ -2389,7 +2412,7 @@ This format is defined by the `gnus-article-time-format' variable."
               highlight)
             (copy-sequence highlight-words)
             (if gnus-newsgroup-name
-                (copy-sequence (gnus-group-find-parameter 
+                (copy-sequence (gnus-group-find-parameter
                                 gnus-newsgroup-name 'highlight-words t)))
             gnus-emphasis-alist)))))
 
@@ -2679,7 +2702,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
       (let ((sig (with-current-buffer gnus-original-article-buffer
                   (gnus-fetch-field "X-PGP-Sig")))
            items info headers)
-       (when (and sig 
+       (when (and sig
                   mml2015-use
                   (mml2015-clear-verify-function))
          (with-temp-buffer
@@ -2690,7 +2713,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
                  (case-fold-search t))
              ;; Don't verify multiple headers.
              (setq headers (mapconcat (lambda (header)
-                                        (concat header ": " 
+                                        (concat header ": "
                                                 (mail-fetch-field header) "\n"))
                                       (split-string (nth 1 items) ",") "")))
            (delete-region (point-min) (point-max))
@@ -2712,10 +2735,10 @@ If variable `gnus-use-long-file-name' is non-nil, it is
              (let ((coding-system-for-write (or gnus-newsgroup-charset
                                                 'iso-8859-1)))
                (funcall (mml2015-clear-verify-function)))
-             (setq info 
-                   (or (mm-handle-multipart-ctl-parameter 
+             (setq info
+                   (or (mm-handle-multipart-ctl-parameter
                         mm-security-handle 'gnus-details)
-                       (mm-handle-multipart-ctl-parameter 
+                       (mm-handle-multipart-ctl-parameter
                         mm-security-handle 'gnus-info)))))
          (when info
            (let (buffer-read-only bface eface)
@@ -2840,7 +2863,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
 (substitute-key-definition
  'undefined 'gnus-article-read-summary-keys gnus-article-mode-map)
 
-(eval-when-compile 
+(eval-when-compile
   (defvar gnus-article-commands-menu))
 
 (defun gnus-article-make-menu-bar ()
@@ -2959,7 +2982,7 @@ commands:
            (mm-destroy-parts gnus-article-mime-handles)
            (setq gnus-article-mime-handles nil))
          ;; Set it to nil in article-buffer!
-         (setq gnus-article-mime-handle-alist nil) 
+         (setq gnus-article-mime-handle-alist nil)
          (buffer-disable-undo)
          (setq buffer-read-only t)
          (unless (eq major-mode 'gnus-article-mode)
@@ -3188,7 +3211,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
     (set-buffer gnus-article-buffer)
     (let ((handles (or handles gnus-article-mime-handles))
          (mail-parse-charset gnus-newsgroup-charset)
-         (mail-parse-ignored-charsets 
+         (mail-parse-ignored-charsets
           (with-current-buffer gnus-summary-buffer
             gnus-newsgroup-ignored-charsets)))
       (when handles
@@ -3203,7 +3226,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
   "Save the MIME part under point then replace it with an external body."
   (interactive)
   (gnus-article-check-buffer)
-  (let* ((data (get-text-property (point) 'gnus-data)) 
+  (let* ((data (get-text-property (point) 'gnus-data))
         (file (and data (mm-save-part data)))
         param)
     (when file
@@ -3217,17 +3240,17 @@ If ALL-HEADERS is non-nil, no headers are hidden."
        (insert "Content-Transfer-Encoding: binary\n")
        (insert "\n"))
       (setcdr data
-             (cdr (mm-make-handle nil 
+             (cdr (mm-make-handle nil
                                   `("message/external-body"
                                     (access-type . "LOCAL-FILE")
                                     (name . ,file)))))
       (set-buffer gnus-summary-buffer)
       (gnus-article-edit-article
-       `(lambda () 
+       `(lambda ()
           (erase-buffer)
-          (let ((mail-parse-charset (or gnus-article-charset 
+          (let ((mail-parse-charset (or gnus-article-charset
                                         ',gnus-newsgroup-charset))
-                (mail-parse-ignored-charsets 
+                (mail-parse-ignored-charsets
                  (or gnus-article-ignored-charsets
                      ',gnus-newsgroup-ignored-charsets))
                 (mbl mml-buffer-list))
@@ -3245,17 +3268,17 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                                        ',gnus-newsgroup-charset))
                (message-options message-options)
                (message-options-set-recipient)
-               (mail-parse-ignored-charsets  
+               (mail-parse-ignored-charsets
                 (or gnus-article-ignored-charsets
                     ',gnus-newsgroup-ignored-charsets)))
           (mml-to-mime)
           (mml-destroy-buffers)
-          (remove-hook 'kill-buffer-hook 
+          (remove-hook 'kill-buffer-hook
                        'mml-destroy-buffers t)
           (kill-local-variable 'mml-buffer-list))
          (gnus-summary-edit-article-done
           ,(or (mail-header-references gnus-current-headers) "")
-          ,(gnus-group-read-only-p) 
+          ,(gnus-group-read-only-p)
           ,gnus-summary-buffer no-highlight))))))
 
 (defun gnus-mime-save-part ()
@@ -3321,7 +3344,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
   (gnus-article-check-buffer)
   (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
         (contents (and handle (mm-get-part handle)))
-        (base (and handle 
+        (base (and handle
                    (file-name-nondirectory
                     (or
                      (mail-content-type-get (mm-handle-type handle) 'name)
@@ -3361,13 +3384,13 @@ If ALL-HEADERS is non-nil, no headers are hidden."
          (if (mm-handle-undisplayer handle)
              (mm-remove-part handle))
          (setq charset
-               (or (cdr (assq arg 
+               (or (cdr (assq arg
                               gnus-summary-show-article-charset-alist))
                    (read-coding-system "Charset: ")))))
        (forward-line 2)
        (mm-insert-inline handle
-                         (if (and charset 
-                                  (setq charset (mm-charset-to-coding-system 
+                         (if (and charset
+                                  (setq charset (mm-charset-to-coding-system
                                                  charset))
                                   (not (eq charset 'ascii)))
                              (mm-decode-coding-string contents charset)
@@ -3386,7 +3409,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
       (if (mm-handle-undisplayer handle)
          (mm-remove-part handle))
       (let ((gnus-newsgroup-charset
-            (or (cdr (assq arg 
+            (or (cdr (assq arg
                            gnus-summary-show-article-charset-alist))
                 (read-coding-system "Charset: ")))
          (gnus-newsgroup-ignored-charsets 'gnus-all))
@@ -3400,7 +3423,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
         (mm-user-display-methods nil)
         (mm-inlined-types nil)
         (mail-parse-charset gnus-newsgroup-charset)
-        (mail-parse-ignored-charsets 
+        (mail-parse-ignored-charsets
          (save-excursion (set-buffer gnus-summary-buffer)
                          gnus-newsgroup-ignored-charsets)))
     (when handle
@@ -3417,7 +3440,7 @@ In no internal viewer is available, use an external viewer."
         (mm-inlined-types '(".*"))
         (mm-inline-large-images t)
         (mail-parse-charset gnus-newsgroup-charset)
-        (mail-parse-ignored-charsets 
+        (mail-parse-ignored-charsets
          (save-excursion (set-buffer gnus-summary-buffer)
                          gnus-newsgroup-ignored-charsets)))
     (when handle
@@ -3482,10 +3505,10 @@ In no internal viewer is available, use an external viewer."
   (if condition
       (let ((alist gnus-article-mime-handle-alist) ihandle n)
        (while (setq ihandle (pop alist))
-         (if (and (cond 
+         (if (and (cond
                    ((functionp condition)
                     (funcall condition (cdr ihandle)))
-                   ((eq condition 'undisplayed) 
+                   ((eq condition 'undisplayed)
                     (not (or (mm-handle-undisplayer (cdr ihandle))
                              (equal (mm-handle-media-type (cdr ihandle))
                                     "multipart/alternative"))))
@@ -3503,7 +3526,7 @@ In no internal viewer is available, use an external viewer."
   (interactive "P")
   (save-current-buffer
     (set-buffer gnus-article-buffer)
-    (or (numberp n) (setq n (gnus-article-mime-match-handle-first 
+    (or (numberp n) (setq n (gnus-article-mime-match-handle-first
                             gnus-article-mime-match-handle-function)))
     (when (> n (length gnus-article-mime-handle-alist))
       (error "No such part"))
@@ -3528,7 +3551,7 @@ In no internal viewer is available, use an external viewer."
     (prog1
        (let ((window (selected-window))
              (mail-parse-charset gnus-newsgroup-charset)
-             (mail-parse-ignored-charsets 
+             (mail-parse-ignored-charsets
               (save-excursion (set-buffer gnus-summary-buffer)
                               gnus-newsgroup-ignored-charsets)))
          (save-excursion
@@ -3601,7 +3624,7 @@ In no internal viewer is available, use an external viewer."
      gnus-mime-button-line-format gnus-mime-button-line-format-alist
      `(keymap ,gnus-mime-button-map
              ,@(if (>= (string-to-number emacs-version) 21)
-                   nil 
+                   nil
                  (list 'local-map gnus-mime-button-map))
              gnus-callback gnus-mm-display-part
              gnus-part ,gnus-tmp-id
@@ -3710,7 +3733,7 @@ In no internal viewer is available, use an external viewer."
     ;;;!!!to the first part.
     ;;(gnus-mime-display-part (cadr handle))
     ;;;!!! Most multipart/related is an HTML message plus images.
-    ;;;!!! Unfortunately we are unable to let W3 display those 
+    ;;;!!! Unfortunately we are unable to let W3 display those
     ;;;!!! included images, so we just display it as a mixed multipart.
     ;;(gnus-mime-display-mixed (cdr handle))
     ;;;!!! No, w3 can display everything just fine.
@@ -3766,8 +3789,8 @@ In no internal viewer is available, use an external viewer."
            ;(gnus-article-insert-newline)
            (gnus-insert-mime-button
             handle id (list (or display (and not-attachment text))))
-           (gnus-article-insert-newline) 
-           ;(gnus-article-insert-newline) 
+           (gnus-article-insert-newline)
+           ;(gnus-article-insert-newline)
            ;; Remember modify the number of forward lines.
            (setq move t))
          (setq beg (point))
@@ -3777,7 +3800,7 @@ In no internal viewer is available, use an external viewer."
              (forward-line -1)
              (setq beg (point)))
            (let ((mail-parse-charset gnus-newsgroup-charset)
-                 (mail-parse-ignored-charsets 
+                 (mail-parse-ignored-charsets
                   (save-excursion (condition-case ()
                                       (set-buffer gnus-summary-buffer)
                                     (error))
@@ -3796,7 +3819,7 @@ In no internal viewer is available, use an external viewer."
            (save-restriction
              (narrow-to-region beg (point))
              (gnus-treat-article
-              nil id 
+              nil id
               (gnus-article-mime-total-parts)
               (mm-handle-media-type handle)))))))))
 
@@ -3894,7 +3917,7 @@ In no internal viewer is available, use an external viewer."
          (if (stringp (car preferred))
              (gnus-display-mime preferred)
            (let ((mail-parse-charset gnus-newsgroup-charset)
-                 (mail-parse-ignored-charsets 
+                 (mail-parse-ignored-charsets
                   (save-excursion (set-buffer gnus-summary-buffer)
                                   gnus-newsgroup-ignored-charsets)))
              (mm-display-part preferred)
@@ -4133,7 +4156,7 @@ Argument LINES specifies lines to be scrolled down."
         (setq keys (if (featurep 'xemacs)
                       (events-to-keys (read-key-sequence nil))
                     (read-key-sequence nil)))))
-                    
+
     (message "")
 
     (if (or (member keys nosaves)
@@ -4339,7 +4362,7 @@ If given a prefix, show the hidden text instead."
           ((or (stringp article)
                (numberp article))
            (let ((gnus-override-method gnus-override-method)
-                 (methods (and (stringp article) 
+                 (methods (and (stringp article)
                                gnus-refer-article-method))
                  result
                  (buffer-read-only nil))
@@ -4359,7 +4382,7 @@ If given a prefix, show the hidden text instead."
                  (gnus-check-group-server))
                (when (gnus-request-article article group (current-buffer))
                  (when (numberp article)
-                   (gnus-async-prefetch-next group article 
+                   (gnus-async-prefetch-next group article
                                              gnus-summary-buffer)
                    (when gnus-keep-backlog
                      (gnus-backlog-enter-article
@@ -5181,11 +5204,11 @@ For example:
 
 (defun gnus-article-encrypt-body (protocol &optional n)
   "Encrypt the article body."
-  (interactive 
+  (interactive
    (list
     (or gnus-article-encrypt-protocol
        (completing-read "Encrypt protocol: "
-                        gnus-article-encrypt-protocol-alist 
+                        gnus-article-encrypt-protocol-alist
                         nil t))
     current-prefix-arg))
   (let ((func (cdr (assoc protocol gnus-article-encrypt-protocol-alist))))
@@ -5212,7 +5235,7 @@ For example:
          (let* ((buffer-read-only nil)
                 (headers
                  (mapcar (lambda (field)
-                           (and (save-restriction 
+                           (and (save-restriction
                                   (message-narrow-to-head)
                                   (goto-char (point-min))
                                   (search-forward field nil t))
@@ -5290,7 +5313,7 @@ For example:
   (mm-remove-parts (cdr handle))
   (let ((region (mm-handle-multipart-ctl-parameter handle 'gnus-region))
        buffer-read-only)
-    (when region 
+    (when region
       (delete-region (car region) (cdr region))
       (set-marker (car region) nil)
       (set-marker (cdr region) nil)))
@@ -5311,7 +5334,7 @@ For example:
     (if details
        (if gnus-mime-security-show-details-inline
            (let ((gnus-mime-security-button-pressed t)
-                 (gnus-mime-security-button-line-format 
+                 (gnus-mime-security-button-line-format
                   (get-text-property (point) 'gnus-line-format))
                buffer-read-only)
              (forward-char -1)
@@ -5320,9 +5343,9 @@ For example:
                (forward-char -1))
              (forward-char)
              (delete-region (point)
-                            (or (text-property-not-all 
+                            (or (text-property-not-all
                                  (point) (point-max)
-                               'gnus-line-format   
+                               'gnus-line-format
                                gnus-mime-security-button-line-format)
                                 (point-max)))
              (gnus-insert-mime-security-button handle))
@@ -5346,7 +5369,7 @@ For example:
 (defun gnus-insert-mime-security-button (handle &optional displayed)
   (let* ((protocol (mm-handle-multipart-ctl-parameter handle 'protocol))
         (gnus-tmp-type
-         (concat 
+         (concat
           (or (nth 2 (assoc protocol mm-verify-function-alist))
               (nth 2 (assoc protocol mm-decrypt-function-alist))
               "Unknown")
@@ -5363,20 +5386,20 @@ For example:
     (setq gnus-tmp-details
          (if gnus-tmp-details
              (concat "\n" gnus-tmp-details) ""))
-    (setq gnus-tmp-pressed-details 
+    (setq gnus-tmp-pressed-details
          (if gnus-mime-security-button-pressed gnus-tmp-details ""))
     (unless (bolp)
       (insert "\n"))
     (setq b (point))
     (gnus-eval-format
-     gnus-mime-security-button-line-format 
+     gnus-mime-security-button-line-format
      gnus-mime-security-button-line-format-alist
      `(keymap ,gnus-mime-security-button-map
              ,@(if (>= (string-to-number emacs-version) 21)
                    nil ;; XEmacs doesn't care
                  (list 'local-map gnus-mime-security-button-map))
              gnus-callback gnus-mime-security-press-button
-             gnus-line-format ,gnus-mime-security-button-line-format 
+             gnus-line-format ,gnus-mime-security-button-line-format
              article-type annotation
              gnus-data ,handle))
     (setq e (point))
@@ -5402,11 +5425,11 @@ For example:
     (gnus-mime-display-mixed (cdr handle))
     (unless (bolp)
       (insert "\n"))
-    (let ((gnus-mime-security-button-line-format 
+    (let ((gnus-mime-security-button-line-format
           gnus-mime-security-button-end-line-format))
       (gnus-insert-mime-security-button handle))
     (mm-set-handle-multipart-parameter
-     handle 'gnus-region 
+     handle 'gnus-region
      (cons (set-marker (make-marker) (point-min))
           (set-marker (make-marker) (point-max))))))