Update copyright year to 2016
[gnus] / lisp / gnus-uu.el
index 9595996..83f817f 100644 (file)
@@ -1,7 +1,7 @@
 ;;; gnus-uu.el --- extract (uu)encoded files in Gnus
 
-;; Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998,
-;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 1985-1987, 1993-1998, 2000-2016 Free Software
+;; Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Created: 2 Oct 1993
@@ -9,10 +9,10 @@
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,9 +20,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -35,6 +33,7 @@
 (require 'message)
 (require 'gnus-msg)
 (require 'mm-decode)
+(require 'yenc)
 
 (defgroup gnus-extract nil
   "Extracting encoded files."
@@ -42,7 +41,7 @@
   :group 'gnus)
 
 (defgroup gnus-extract-view nil
-  "Viewwing extracted files."
+  "Viewing extracted files."
   :group 'gnus-extract)
 
 (defgroup gnus-extract-archive nil
     ("\\.\\(tar\\|arj\\|zip\\|zoo\\|arc\\|gz\\|Z\\|lzh\\|ar\\|lha\\)$"
      "gnus-uu-archive"))
   "*Default actions to be taken when the user asks to view a file.
-To change the behaviour, you can either edit this variable or set
+To change the behavior, you can either edit this variable or set
 `gnus-uu-user-view-rules' to something useful.
 
 For example:
 
-To make gnus-uu use 'xli' to display JPEG and GIF files, put the
+To make gnus-uu use `xli' to display JPEG and GIF files, put the
 following in your .emacs file:
 
-  (setq gnus-uu-user-view-rules '((\"jpg$\\\\|gif$\" \"xli\")))
+  (setq gnus-uu-user-view-rules \\='((\"jpg$\\\\|gif$\" \"xli\")))
 
 Both these variables are lists of lists with two string elements.  The
 first string is a regular expression.  If the file name matches this
@@ -95,7 +94,7 @@ at that point in the command string.  If there's no \"%s\" in the
 command string, the file name will be appended to the command string
 before executing.
 
-There are several user variables to tailor the behaviour of gnus-uu to
+There are several user variables to tailor the behavior of gnus-uu to
 your needs.  First we have `gnus-uu-user-view-rules', which is the
 variable gnus-uu first consults when trying to decide how to view a
 file.  If this variable contains no matches, gnus-uu examines the
@@ -141,10 +140,10 @@ details."
 
 (defcustom gnus-uu-user-archive-rules nil
   "A list that can be set to override the default archive unpacking commands.
-To use, for instance, 'untar' to unpack tar files and 'zip -x' to
+To use, for instance, `untar' to unpack tar files and `zip -x' to
 unpack zip files, say the following:
   (setq gnus-uu-user-archive-rules
-    '((\"\\\\.tar$\" \"untar\")
+    \\='((\"\\\\.tar$\" \"untar\")
       (\"\\\\.zip$\" \"zip -x\")))"
   :group 'gnus-extract-archive
   :type '(repeat (group regexp (string :tag "Command"))))
@@ -336,7 +335,6 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 
 (defvar gnus-uu-shar-begin-string "^#! */bin/sh")
 
-(defvar gnus-uu-shar-file-name nil)
 (defvar gnus-uu-shar-name-marker
   "begin 0?[0-7][0-7][0-7][ \t]+\\(\\(\\w\\|[.\\:]\\)*\\b\\)")
 
@@ -346,6 +344,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 (defvar gnus-uu-file-name nil)
 (defvar gnus-uu-uudecode-process nil)
 (defvar gnus-uu-binhex-article-name nil)
+(defvar gnus-uu-yenc-article-name nil)
 
 (defvar gnus-uu-work-dir nil)
 
@@ -367,7 +366,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   (interactive
    (list current-prefix-arg
         (file-name-as-directory
-         (read-file-name "Uudecode and save in dir: "
+         (read-directory-name "Uudecode and save in dir: "
                          gnus-uu-default-dir
                          gnus-uu-default-dir t))))
   (gnus-uu-decode-with-method 'gnus-uu-uustrip-article n dir nil nil t))
@@ -382,7 +381,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   (interactive
    (list current-prefix-arg
         (file-name-as-directory
-         (read-file-name "Unshar and save in dir: "
+         (read-directory-name "Unshar and save in dir: "
                          gnus-uu-default-dir
                          gnus-uu-default-dir t))))
   (gnus-uu-decode-with-method 'gnus-uu-unshar-article n dir nil 'scan t))
@@ -391,12 +390,11 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   "Saves the current article."
   (interactive
    (list current-prefix-arg
-        (read-file-name
-         (if gnus-uu-save-separate-articles
-             "Save articles in dir: "
-           "Save articles in file: ")
-         gnus-uu-default-dir
-         gnus-uu-default-dir)))
+        (if gnus-uu-save-separate-articles
+            (read-directory-name
+             "Save articles in dir: " gnus-uu-default-dir gnus-uu-default-dir)
+          (read-file-name
+           "Save article in file: " gnus-uu-default-dir gnus-uu-default-dir))))
   (setq gnus-uu-saved-article-name file)
   (gnus-uu-decode-with-method 'gnus-uu-save-article n nil t))
 
@@ -405,13 +403,25 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   (interactive
    (list current-prefix-arg
         (file-name-as-directory
-         (read-file-name "Unbinhex and save in dir: "
+         (read-directory-name "Unbinhex and save in dir: "
                          gnus-uu-default-dir
                          gnus-uu-default-dir))))
+  (gnus-uu-initialize)
   (setq gnus-uu-binhex-article-name
        (mm-make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
   (gnus-uu-decode-with-method 'gnus-uu-binhex-article n dir))
 
+(defun gnus-uu-decode-yenc (n dir)
+  "Decode the yEnc-encoded current article."
+  (interactive
+   (list current-prefix-arg
+        (file-name-as-directory
+         (read-directory-name "yEnc decode and save in dir: "
+                         gnus-uu-default-dir
+                         gnus-uu-default-dir))))
+  (setq gnus-uu-yenc-article-name nil)
+  (gnus-uu-decode-with-method 'gnus-uu-yenc-article n dir nil t))
+
 (defun gnus-uu-decode-uu-view (&optional n)
   "Uudecodes and views the current article."
   (interactive "P")
@@ -448,10 +458,11 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   "Saves and views the current article."
   (interactive
    (list current-prefix-arg
-        (read-file-name  (if gnus-uu-save-separate-articles
-                             "Save articles is dir: "
-                           "Save articles in file: ")
-                         gnus-uu-default-dir gnus-uu-default-dir)))
+        (if gnus-uu-save-separate-articles
+            (read-directory-name "Save articles in dir: "
+                                 gnus-uu-default-dir gnus-uu-default-dir)
+          (read-file-name "Save articles in file: "
+                          gnus-uu-default-dir gnus-uu-default-dir))))
   (let ((gnus-view-pseudos (or gnus-view-pseudos 'automatic)))
     (gnus-uu-decode-save n file)))
 
@@ -461,6 +472,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
    (list current-prefix-arg
         (read-file-name "Unbinhex, view and save in dir: "
                         gnus-uu-default-dir gnus-uu-default-dir)))
+  (gnus-uu-initialize)
   (setq gnus-uu-binhex-article-name
        (mm-make-temp-file (expand-file-name "binhex" gnus-uu-work-dir)))
   (let ((gnus-view-pseudos (or gnus-view-pseudos 'automatic)))
@@ -472,8 +484,9 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 (defun gnus-uu-digest-mail-forward (&optional n post)
   "Digests and forwards all articles in this series."
   (interactive "P")
+  (gnus-uu-initialize)
   (let ((gnus-uu-save-in-digest t)
-       (file (mm-make-temp-file (nnheader-concat gnus-uu-tmp-dir "forward")))
+       (file (mm-make-temp-file (nnheader-concat gnus-uu-work-dir "forward")))
        (message-forward-as-mime message-forward-as-mime)
        (mail-parse-charset gnus-newsgroup-charset)
        (mail-parse-ignored-charsets gnus-newsgroup-ignored-charsets)
@@ -630,7 +643,7 @@ When called interactively, prompt for REGEXP."
     (let ((level (gnus-summary-thread-level)))
       (while (and (gnus-summary-set-process-mark
                   (gnus-summary-article-number))
-                 (zerop (gnus-summary-next-subject 1 nil t))
+                 (zerop (forward-line 1))
                  (> (gnus-summary-thread-level) level)))))
   (gnus-summary-position-point))
 
@@ -640,7 +653,7 @@ When called interactively, prompt for REGEXP."
   (let ((level (gnus-summary-thread-level)))
     (while (and (gnus-summary-remove-process-mark
                 (gnus-summary-article-number))
-               (zerop (gnus-summary-next-subject 1))
+               (zerop (forward-line 1))
                (> (gnus-summary-thread-level) level))))
   (gnus-summary-position-point))
 
@@ -717,7 +730,7 @@ When called interactively, prompt for REGEXP."
 ;; All PostScript functions written by Erik Selberg <speed@cs.washington.edu>.
 
 (defun gnus-uu-decode-postscript (&optional n)
-  "Gets postscript of the current article."
+  "Gets PostScript of the current article."
   (interactive "P")
   (gnus-uu-decode-with-method 'gnus-uu-decode-postscript-article n))
 
@@ -728,11 +741,11 @@ When called interactively, prompt for REGEXP."
     (gnus-uu-decode-postscript n)))
 
 (defun gnus-uu-decode-postscript-and-save (n dir)
-  "Extracts postscript and saves the current article."
+  "Extracts PostScript and saves the current article."
   (interactive
    (list current-prefix-arg
         (file-name-as-directory
-         (read-file-name "Save in dir: "
+         (read-directory-name "Save in dir: "
                          gnus-uu-default-dir
                          gnus-uu-default-dir t))))
   (gnus-uu-decode-with-method 'gnus-uu-decode-postscript-article
@@ -816,8 +829,7 @@ When called interactively, prompt for REGEXP."
 (defun gnus-uu-save-article (buffer in-state)
   (cond
    (gnus-uu-save-separate-articles
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (let ((coding-system-for-write mm-text-coding-system))
        (gnus-write-buffer
         (concat gnus-uu-saved-article-name gnus-current-article)))
@@ -827,8 +839,7 @@ When called interactively, prompt for REGEXP."
            ((eq in-state 'last) (list 'end))
            (t (list 'middle)))))
    ((not gnus-uu-save-in-digest)
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (write-region (point-min) (point-max) gnus-uu-saved-article-name t)
       (cond ((eq in-state 'first) (list gnus-uu-saved-article-name 'begin))
            ((eq in-state 'first-and-last) (list gnus-uu-saved-article-name
@@ -846,11 +857,9 @@ When called interactively, prompt for REGEXP."
              (eq in-state 'first-and-last))
          (progn
            (setq state (list 'begin))
-           (save-excursion
-             (set-buffer (gnus-get-buffer-create "*gnus-uu-body*"))
+           (with-current-buffer (gnus-get-buffer-create "*gnus-uu-body*")
              (erase-buffer))
-           (save-excursion
-             (set-buffer (gnus-get-buffer-create "*gnus-uu-pre*"))
+           (with-current-buffer (gnus-get-buffer-create "*gnus-uu-pre*")
              (erase-buffer)
              (insert (format
                       "Date: %s\nFrom: %s\nSubject: %s Digest\n\n"
@@ -862,13 +871,11 @@ When called interactively, prompt for REGEXP."
              (insert "Topics:\n")))
        (when (not (eq in-state 'end))
          (setq state (list 'middle))))
-      (save-excursion
-       (set-buffer "*gnus-uu-body*")
+      (with-current-buffer "*gnus-uu-body*"
        (goto-char (setq beg (point-max)))
-       (save-excursion
+       (with-current-buffer buffer
          (save-restriction
-           (set-buffer buffer)
-           (let (buffer-read-only)
+           (let ((inhibit-read-only t))
              (set-text-properties (point-min) (point-max) nil)
              ;; These two are necessary for XEmacs 19.12 fascism.
              (put-text-property (point-min) (point-max) 'invisible nil)
@@ -902,8 +909,7 @@ When called interactively, prompt for REGEXP."
                                 (match-beginning 0)
                                 (or (and (re-search-forward "^[^ \t]" nil t)
                                          (1- (point)))
-                                    (progn (forward-line 1) (point)))))))))
-           (widen)))
+                                    (progn (forward-line 1) (point)))))))))))
        (if (and message-forward-as-mime gnus-uu-digest-buffer)
          (if message-forward-show-mml
              (progn
@@ -929,8 +935,7 @@ When called interactively, prompt for REGEXP."
        (when (re-search-forward "^Subject: \\(.*\\)$" nil t)
          (setq subj (buffer-substring (match-beginning 1) (match-end 1))))
        (when subj
-         (save-excursion
-           (set-buffer "*gnus-uu-pre*")
+         (with-current-buffer "*gnus-uu-pre*"
            (insert (format "   %s\n" subj)))))
       (when (or (eq in-state 'last)
                (eq in-state 'first-and-last))
@@ -940,8 +945,7 @@ When called interactively, prompt for REGEXP."
              (insert-buffer-substring "*gnus-uu-pre*")
              (goto-char (point-max))
              (insert-buffer-substring "*gnus-uu-body*"))
-         (save-excursion
-           (set-buffer "*gnus-uu-pre*")
+         (with-current-buffer "*gnus-uu-pre*"
            (insert (format "\n\n%s\n\n" (make-string 70 ?-)))
            (if gnus-uu-digest-buffer
                (with-current-buffer gnus-uu-digest-buffer
@@ -949,8 +953,7 @@ When called interactively, prompt for REGEXP."
                  (insert-buffer-substring "*gnus-uu-pre*"))
              (let ((coding-system-for-write mm-text-coding-system))
                (gnus-write-buffer gnus-uu-saved-article-name))))
-         (save-excursion
-           (set-buffer "*gnus-uu-body*")
+         (with-current-buffer "*gnus-uu-body*"
            (goto-char (point-max))
            (insert
             (concat (setq end-string (format "End of %s Digest" name))
@@ -982,8 +985,7 @@ When called interactively, prompt for REGEXP."
 
 (defun gnus-uu-binhex-article (buffer in-state)
   (let (state start-char)
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (widen)
       (goto-char (point-min))
       (when (not (re-search-forward gnus-uu-binhex-begin-line nil t))
@@ -1016,13 +1018,44 @@ When called interactively, prompt for REGEXP."
        (cons gnus-uu-binhex-article-name state)
       state)))
 
+;; yEnc
+
+(defun gnus-uu-yenc-article (buffer in-state)
+  (with-current-buffer gnus-original-article-buffer
+    (widen)
+    (let ((file-name (yenc-extract-filename))
+         state start-char)
+      (when (not file-name)
+       (setq state (list 'wrong-type)))
+
+      (if (memq 'wrong-type state)
+         ()
+       (when (yenc-first-part-p)
+         (setq gnus-uu-yenc-article-name
+               (expand-file-name file-name gnus-uu-work-dir))
+         (push 'begin state))
+       (when (yenc-last-part-p)
+         (push 'end state))
+       (unless state
+         (push 'middle state))
+       (mm-with-unibyte-buffer
+         (insert-buffer-substring gnus-original-article-buffer)
+         (yenc-decode-region (point-min) (point-max))
+         (when (and (member 'begin state)
+                    (file-exists-p gnus-uu-yenc-article-name))
+           (delete-file gnus-uu-yenc-article-name))
+         (mm-append-to-file (point-min) (point-max)
+                            gnus-uu-yenc-article-name)))
+      (if (memq 'begin state)
+         (cons file-name state)
+       state))))
+
 ;; PostScript
 
 (defun gnus-uu-decode-postscript-article (process-buffer in-state)
   (let ((state (list 'ok))
        start-char end-char file-name)
-    (save-excursion
-      (set-buffer process-buffer)
+    (with-current-buffer process-buffer
       (goto-char (point-min))
       (if (not (re-search-forward gnus-uu-postscript-begin-string nil t))
          (setq state (list 'wrong-type))
@@ -1084,8 +1117,7 @@ When called interactively, prompt for REGEXP."
   ;; replaces the last thing that looks like "2/3" with "[0-9]+/3"
   ;; or, if it can't find something like that, tries "2 of 3", then
   ;; finally just replaces the next to last number with "[0-9]+".
-  (save-excursion
-    (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
+  (with-current-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name)
     (buffer-disable-undo)
     (erase-buffer)
     (insert (regexp-quote string))
@@ -1106,7 +1138,7 @@ When called interactively, prompt for REGEXP."
                                nil t)
            (replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
 
-    (goto-char 1)
+    (goto-char (point-min))
     (while (re-search-forward "[ \t]+" nil t)
       (replace-match "[ \t]+" t t))
 
@@ -1184,8 +1216,7 @@ When called interactively, prompt for REGEXP."
   ;; decoded in.  Returns the list of expanded strings.
   (let ((out-list string-list)
        string)
-    (save-excursion
-      (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
+    (with-current-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name)
       (buffer-disable-undo)
       (while string-list
        (erase-buffer)
@@ -1207,7 +1238,7 @@ When called interactively, prompt for REGEXP."
             (format "%06d"
                     (string-to-number (buffer-substring
                                     (match-beginning 0) (match-end 0)))))))
-       (setq string (buffer-substring 1 (point-max)))
+       (setq string (buffer-substring (point-min) (point-max)))
        (setcar (car string-list) string)
        (setq string-list (cdr string-list))))
     out-list))
@@ -1260,6 +1291,7 @@ When called interactively, prompt for REGEXP."
 ;; the process-function has been successful and nil otherwise.
 (defun gnus-uu-grab-articles (articles process-function
                                       &optional sloppy limit no-errors)
+  (require 'gnus-async)
   (let ((state 'first)
        (gnus-asynchronous nil)
        (gnus-inhibit-treatment t)
@@ -1288,11 +1320,9 @@ When called interactively, prompt for REGEXP."
        (gnus-summary-display-article article)
 
        ;; Push the article to the processing function.
-       (save-excursion
-         (set-buffer gnus-original-article-buffer)
+       (with-current-buffer gnus-original-article-buffer
          (let ((buffer-read-only nil))
-           (save-excursion
-             (set-buffer gnus-summary-buffer)
+           (with-current-buffer gnus-summary-buffer
              (setq process-state
                    (funcall process-function
                             gnus-original-article-buffer state)))))
@@ -1433,8 +1463,7 @@ When called interactively, prompt for REGEXP."
 
 (defun gnus-uu-uustrip-article (process-buffer in-state)
   ;; Uudecodes a file asynchronously.
-  (save-excursion
-    (set-buffer process-buffer)
+  (with-current-buffer process-buffer
     (let ((state (list 'wrong-type))
          process-connection-type case-fold-search buffer-read-only
          files start-char)
@@ -1444,7 +1473,7 @@ When called interactively, prompt for REGEXP."
       (when gnus-uu-kill-carriage-return
        (save-excursion
          (while (search-forward "\r" nil t)
-           (delete-backward-char 1))))
+           (delete-char -1))))
 
       (while (or (re-search-forward gnus-uu-begin-string nil t)
                 (re-search-forward gnus-uu-body-line nil t))
@@ -1556,8 +1585,7 @@ Gnus might fail to display all of it.")
 (defun gnus-uu-unshar-article (process-buffer in-state)
   (let ((state (list 'ok))
        start-char)
-    (save-excursion
-      (set-buffer process-buffer)
+    (with-current-buffer process-buffer
       (goto-char (point-min))
       (if (not (re-search-forward gnus-uu-shar-begin-string nil t))
          (setq state (list 'wrong-type))
@@ -1588,16 +1616,6 @@ Gnus might fail to display all of it.")
                   gnus-shell-command-separator  " sh")))))
     state))
 
-;; Returns the name of what the shar file is going to unpack.
-(defun gnus-uu-find-name-in-shar ()
-  (let ((oldpoint (point))
-       res)
-    (goto-char (point-min))
-    (when (re-search-forward gnus-uu-shar-name-marker nil t)
-      (setq res (buffer-substring (match-beginning 1) (match-end 1))))
-    (goto-char oldpoint)
-    res))
-
 ;; `gnus-uu-choose-action' chooses what action to perform given the name
 ;; and `gnus-uu-file-action-list'.  Returns either nil if no action is
 ;; found, or the name of the command to run if such a rule is found.
@@ -1644,8 +1662,7 @@ Gnus might fail to display all of it.")
 
     (setq command (format "cd %s ; %s" dir (gnus-uu-command action file-path)))
 
-    (save-excursion
-      (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
+    (with-current-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name)
       (erase-buffer))
 
     (gnus-message 5 "Unpacking: %s..." (gnus-uu-command action file-path))
@@ -1820,8 +1837,8 @@ Gnus might fail to display all of it.")
 
 ;; Initializing
 
-(add-hook 'gnus-exit-group-hook 'gnus-uu-clean-up)
-(add-hook 'gnus-exit-group-hook        'gnus-uu-delete-work-dir)
+(add-hook 'gnus-summary-prepare-exit-hook 'gnus-uu-clean-up)
+(add-hook 'gnus-summary-prepare-exit-hook 'gnus-uu-delete-work-dir)
 
 \f
 
@@ -1995,9 +2012,8 @@ If no file has been included, the user will be asked for a file."
       (setq file-name file-path))
 
     (unwind-protect
-       (if (save-excursion
-             (set-buffer (setq uubuf
-                               (gnus-get-buffer-create uuencode-buffer-name)))
+       (if (with-current-buffer
+               (setq uubuf (gnus-get-buffer-create uuencode-buffer-name))
              (erase-buffer)
              (funcall gnus-uu-post-encode-method file-path file-name))
            (insert-buffer-substring uubuf)
@@ -2029,8 +2045,8 @@ If no file has been included, the user will be asked for a file."
     (setq beg-binary (point))
     (setq end-binary (point-max))
 
-    (save-excursion
-      (set-buffer (setq uubuf (gnus-get-buffer-create encoded-buffer-name)))
+    (with-current-buffer
+       (setq uubuf (gnus-get-buffer-create encoded-buffer-name))
       (erase-buffer)
       (insert-buffer-substring post-buf beg-binary end-binary)
       (goto-char (point-min))
@@ -2085,8 +2101,7 @@ If no file has been included, the user will be asked for a file."
          (insert (format " (%d/%d)" i parts)))
 
        (goto-char (point-max))
-       (save-excursion
-         (set-buffer uubuf)
+       (with-current-buffer uubuf
          (goto-char beg)
          (if (= i parts)
              (goto-char (point-max))
@@ -2126,5 +2141,4 @@ If no file has been included, the user will be asked for a file."
 
 (provide 'gnus-uu)
 
-;;; arch-tag: 05312384-0a83-4720-9a58-b3160b888853
 ;;; gnus-uu.el ends here