Synch with Oort Gnus.
authoryamaoka <yamaoka>
Fri, 14 Dec 2001 03:46:10 +0000 (03:46 +0000)
committeryamaoka <yamaoka>
Fri, 14 Dec 2001 03:46:10 +0000 (03:46 +0000)
lisp/ChangeLog
lisp/binhex.el
lisp/gnus-msg.el
lisp/gnus-uu.el
lisp/mm-uu.el
lisp/uudecode.el

index c545d4e..4aa25d6 100644 (file)
@@ -1,3 +1,24 @@
+2001-12-13 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-msg.el (gnus-summary-mail-forward): Forward all marked
+       messages. (A small patch with indentation)
+       From Sean Neakums <sneakums@zork.net>.
+
+       * gnus-uu.el (gnus-uu-grab-articles): Set gnus-current-article to
+       nil after shooting down the gnus-original-article-buffer.
+
+2001-12-13 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * uudecode.el (uudecode-use-external): New.
+       (uudecode-decode-region): Automatically detect external program.
+
+       * binhex.el (binhex-use-external): New.
+       (binhex-decode-region-internal): New.
+       (binhex-decode-region): Automatically detect external program.
+       
+       * mm-uu.el (mm-uu-decode-function): 
+       (mm-uu-binhex-decode-function): Use them.
+
 2001-12-12  Simon Josefsson  <jas@extundo.com>
 
        * nnvirtual.el (nnvirtual-always-rescan) 
index 6d8d434..120821f 100644 (file)
@@ -1,5 +1,5 @@
 ;;; binhex.el --- elisp native binhex decode
-;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (c) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: binhex news
@@ -25,6 +25,8 @@
 
 ;;; Code:
 
+(autoload 'executable-find "executable")
+
 (eval-when-compile (require 'cl))
 
 (eval-and-compile
        'char-int
       'identity)))
 
-(defvar binhex-decoder-program "hexbin"
+(defcustom binhex-decoder-program "hexbin"
   "*Non-nil value should be a string that names a uu decoder.
 The program should expect to read binhex data on its standard
-input and write the converted data to its standard output.")
+input and write the converted data to its standard output."
+  :type 'string
+  :group 'gnus-extract)
+
+(defcustom binhex-decoder-switches '("-d")
+  "*List of command line flags passed to the command named by binhex-decoder-program."
+  :group 'gnus-extract
+  :type '(repeat string))
 
-(defvar binhex-decoder-switches '("-d")
-  "*List of command line flags passed to the command named by binhex-decoder-program.")
+(defcustom binhex-use-external 
+  (executable-find binhex-decoder-program)
+  "*Use external binhex program."
+  :group 'gnus-extract
+  :type 'boolean)
 
 (defconst binhex-alphabet-decoding-alist
   '(( ?\! . 0) ( ?\" . 1) ( ?\# . 2) ( ?\$ . 3) ( ?\% . 4) ( ?\& . 5)
@@ -184,8 +196,9 @@ input and write the converted data to its standard output.")
    (t
     (binhex-insert-char (setq binhex-last-char char) 1 ignored buffer))))
 
-(defun binhex-decode-region (start end &optional header-only)
-  "Binhex decode region between START and END.
+;;;###autoload
+(defun binhex-decode-region-internal (start end &optional header-only)
+  "Binhex decode region between START and END without using an external program.
 If HEADER-ONLY is non-nil only decode header and return filename."
   (interactive "r")
   (let ((work-buffer nil)
@@ -258,12 +271,14 @@ If HEADER-ONLY is non-nil only decode header and return filename."
       (and work-buffer (kill-buffer work-buffer)))
     (if header (aref header 1))))
 
+;;;###autoload
 (defun binhex-decode-region-external (start end)
   "Binhex decode region between START and END using external decoder."
   (interactive "r")
   (let ((cbuf (current-buffer)) firstline work-buffer status
        (file-name (expand-file-name
-                   (concat (binhex-decode-region start end t) ".data")
+                   (concat (binhex-decode-region-internal start end t) 
+                           ".data")
                    binhex-temporary-file-directory)))
     (save-excursion
       (goto-char start)
@@ -296,6 +311,14 @@ If HEADER-ONLY is non-nil only decode header and return filename."
       (ignore-errors
        (if file-name (delete-file file-name))))))
 
+;;;###autoload
+(defun binhex-decode-region (start end)
+  "Binhex decode region between START and END."
+  (interactive "r")
+  (if binhex-use-external 
+      (binhex-decode-region-external start end)
+    (binhex-decode-region-internal start end)))
+
 (provide 'binhex)
 
 ;;; binhex.el ends here
index c23b14c..51d8a53 100644 (file)
@@ -1088,18 +1088,21 @@ The original article will be yanked."
    (gnus-summary-work-articles n) t (gnus-summary-work-articles n)))
 
 (defun gnus-summary-mail-forward (&optional full-headers post)
-  "Forward the current message to another user.
+  "Forward the current message(s) to another user.
+If process marks exist, forward all marked messages;
 If FULL-HEADERS (the prefix), include full headers when forwarding."
   (interactive "P")
-  (gnus-setup-message 'forward
-    (gnus-summary-select-article)
-    (let ((charset default-mime-charset))
-      (set-buffer gnus-original-article-buffer)
-      (make-local-variable 'default-mime-charset)
-      (setq default-mime-charset charset))
-    (let ((message-included-forward-headers
-          (if full-headers "" message-included-forward-headers)))
-      (message-forward post))))
+  (if (null (cdr (gnus-summary-work-articles nil)))
+      (gnus-setup-message 'forward
+       (gnus-summary-select-article)
+       (let ((charset default-mime-charset))
+         (set-buffer gnus-original-article-buffer)
+         (make-local-variable 'default-mime-charset)
+         (setq default-mime-charset charset))
+       (let ((message-included-forward-headers
+              (if full-headers "" message-included-forward-headers)))
+         (message-forward post)))
+    (gnus-summary-digest-mail-forward nil post)))
 
 (defun gnus-summary-digest-mail-forward (&optional n post)
   "Digests and forwards all articles in this series.
index bfce4bd..d539cd1 100644 (file)
@@ -1395,7 +1395,7 @@ When called interactively, prompt for REGEXP."
 
     ;; The original article buffer is hosed, shoot it down.
     (gnus-kill-buffer gnus-original-article-buffer)
-
+    (setq gnus-current-article nil)
     result-files))
 
 (defun gnus-uu-grab-view (file)
index 7c90203..92964d0 100644 (file)
 (require 'mm-decode)
 (require 'gnus-mailcap)
 (require 'mml2015)
-(require 'uudecode)
-(require 'binhex)
 
-;; This is not the right place for this.  uudecode.el should decide
-;; whether or not to use a program with a single interface, but I
-;; guess it's too late now.  Also the default should depend on a test
-;; for the program.  -- fx
+(autoload 'uudecode-decode-region "uudecode")
+(autoload 'uudecode-decode-region-external "uudecode")
+(autoload 'uudecode-decode-region-internal "uudecode")
+
+(autoload 'binhex-decode-region "binhex")
+(autoload 'binhex-decode-region-external "binhex")
+(autoload 'binhex-decode-region-internal "binhex")
+
 (defcustom mm-uu-decode-function 'uudecode-decode-region
   "*Function to uudecode.
 Internal function is done in Lisp by default, therefore decoding may
 appear to be horribly slow.  You can make Gnus use an external
 decoder, such as uudecode."
   :type '(choice
-         (function-item :tag "Internal" uudecode-decode-region)
+         (function-item :tag "Auto detect" uudecode-decode-region)
+         (function-item :tag "Internal" uudecode-decode-region-internal)
          (function-item :tag "External" uudecode-decode-region-external))
   :group 'gnus-article-mime)
 
@@ -53,8 +56,9 @@ decoder, such as uudecode."
 Internal function is done in elisp by default, therefore decoding may
 appear to be horribly slow . You can make Gnus use the external Unix
 decoder, such as hexbin."
-  :type '(choice (item :tag "internal" binhex-decode-region)
-                (item :tag "external" binhex-decode-region-external))
+  :type '(choice (function-item :tag "Auto detect" binhex-decode-region)
+                (function-item :tag "Internal" binhex-decode-region-internal)
+                (function-item :tag "External" binhex-decode-region-external))
   :group 'gnus-article-mime)
 
 (defvar mm-uu-pgp-beginning-signature
index efd4166..ba53154 100644 (file)
@@ -1,6 +1,6 @@
 ;;; uudecode.el -- elisp native uudecode
 
-;; Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (c) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
 ;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
 ;; Keywords: uudecode news
 
 ;;; Commentary:
 
-;;     Lots of codes are stolen from mm-decode.el, gnus-uu.el and
-;;     base64.el
-
 ;; This looks as though it could be made rather more efficient for
 ;; internal working.  Encoding could use a lookup table and decoding
 ;; should presumably use a vector or list buffer for partial results
 ;; rather than with-current-buffer.  -- fx
 
-;; Only `uudecode-decode-region' should be advertised, and whether or
-;; not that uses a program should be customizable, but I guess it's
-;; too late now.  -- fx
-
 ;;; Code:
 
+(autoload 'executable-find "executable")
+
 (eval-when-compile (require 'cl))
 
 (eval-and-compile
@@ -66,6 +61,12 @@ input and write the converted data to its standard output."
   :group 'gnus-extract
   :type '(repeat string))
 
+(defcustom uudecode-use-external 
+  (executable-find uudecode-decoder-program)
+  "*Use external uudecode program."
+  :group 'gnus-extract
+  :type 'boolean)
+
 (defconst uudecode-alphabet "\040-\140")
 
 (defconst uudecode-begin-line "^begin[ \t]+[0-7][0-7][0-7][ \t]+\\(.*\\)$")
@@ -135,7 +136,7 @@ used is specified by `uudecode-decoder-program'."
       (ignore-errors (or file-name (delete-file tempfile))))))
 
 ;;;###autoload
-(defun uudecode-decode-region (start end &optional file-name)
+(defun uudecode-decode-region-internal (start end &optional file-name)
   "Uudecode region between START and END without using an external program.
 If FILE-NAME is non-nil, save the result to FILE-NAME."
   (interactive "r\nP")
@@ -216,6 +217,14 @@ If FILE-NAME is non-nil, save the result to FILE-NAME."
              (delete-region (point) end))))
       (and work-buffer (kill-buffer work-buffer)))))
 
+;;;###autoload
+(defun uudecode-decode-region (start end &optional file-name)
+  "Uudecode region between START and END.
+If FILE-NAME is non-nil, save the result to FILE-NAME."
+  (if uudecode-use-external 
+      (uudecode-decode-region-external start end file-name)
+    (uudecode-decode-region-internal start end file-name)))
+
 (provide 'uudecode)
 
 ;;; uudecode.el ends here