+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)
;;; 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
;;; 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)
(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)
(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)
(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
(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.
;; 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)
(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)
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
;;; 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
: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]+\\(.*\\)$")
(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")
(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