From: yamaoka Date: Mon, 1 Feb 1999 22:43:12 +0000 (+0000) Subject: Importing Pterodactyl Gnus v0.75. X-Git-Tag: pgnus-0_75~1 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8b80f5e0d65bb647ba87b4afa8eb74128139f7a;p=elisp%2Fgnus.git- Importing Pterodactyl Gnus v0.75. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ead5bb5..5fb51b3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,80 @@ +Mon Feb 1 21:18:00 1999 Lars Magne Ingebrigtsen + + * gnus.el: Pterodactyl Gnus v0.75 is released. + +1999-02-01 21:54:26 Lars Magne Ingebrigtsen + + * gnus-art.el (article-display-x-face): Don't narrow to head. + +1999-02-01 21:48:39 Michael Cook + + * gnus-cite.el (gnus-cited-lines-visible): Accept a cons. + +1999-02-01 20:59:38 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-fetch-directory): Ignore + directories. + + * gnus-cus.el (gnus-group-parameters): Addition. + + * gnus-art.el (article-strip-banner): Do symbolic banners. + (article-strip-banner): New keystroke. + +1999-02-01 20:54:32 Michael Cook + + * gnus-art.el (article-strip-banner): New command. + +1999-02-01 20:53:45 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-treat-strip-banners): New variable. + +1999-01-28 05:34:56 Katsumi Yamaoka + + * mail-source.el (mail-source-read-passwd): Use `read-passwd' if it + has been exist. + +Thu Jan 28 01:38:34 1999 Shenghuo ZHU + + * message.el (message-draft-coding-system): Check coding-system. + * mm-util.el (mm-text-coding-system): Ditto. + +1999-01-28 12:11:31 Katsumi Yamaoka + + * mail-source.el (mail-source-fetch-pop): Save excursion. + +1999-01-28 08:14:21 Lars Magne Ingebrigtsen + + * mail-source.el (mail-source-movemail-args): Not constant. + (mail-source-movemail-args): Removed. + (mail-source-fetch-with-program): New function. + (mail-source-fetch-pop): Use program and function. + (mail-source-movemail-program): Removed. + + * gnus-art.el (gnus-treat-date-iso8601): New variable. + (gnus-treat-date-user-defined): New variable. + +1999-01-28 08:07:12 Per Abrahamsen + + * nnmail.el (nnmail-fix-eudora-headers): New function. + +1999-01-28 08:05:19 Lars Magne Ingebrigtsen + + * mm-bodies.el (mm-encode-body): Use mail-parse-charset. + +1999-01-27 08:06:38 Lars Magne Ingebrigtsen + + * smiley.el (smiley-deformed-regexp-alist): Removed =>. + (smiley-nosey-regexp-alist): Ditto. + + * gnus-art.el (gnus-treatment-function-alist): Do + gnus-article-add-buttons-to-head later. + (gnus-treat-capitalize-sentences): New variable. + (article-capitalize-sentences): New command and keystroke. + + * gnus-group.el (gnus-group-catchup-current): Do group. + + * message.el (message-default-charset): Add group. + Wed Jan 27 05:24:53 1999 Lars Magne Ingebrigtsen * gnus.el: Pterodactyl Gnus v0.74 is released. diff --git a/lisp/base64.el b/lisp/base64.el index 6cf78e0..6766e6f 100644 --- a/lisp/base64.el +++ b/lisp/base64.el @@ -94,9 +94,8 @@ base64-encoder-program.") (setq errstring (buffer-string)) (kill-buffer nil) (cons status errstring))))) - (condition-case () - (delete-file tempfile) - (error nil))))) + (ignore-errors + (delete-file tempfile))))) (if (string-match "XEmacs" emacs-version) (defalias 'base64-insert-char 'insert-char) diff --git a/lisp/binhex.el b/lisp/binhex.el index 2dadfb6..9611fd7 100644 --- a/lisp/binhex.el +++ b/lisp/binhex.el @@ -3,7 +3,7 @@ ;; Author: Shenghuo Zhu ;; Create Date: Oct 1, 1998 -;; $Revision: 1.1.1.8 $ +;; $Revision: 1.1.1.9 $ ;; Time-stamp: ;; Keywords: binhex @@ -299,10 +299,8 @@ If HEADER-ONLY is non-nil only decode header and return filename." (insert-file-contents-literally file-name))) (error "Can not binhex"))) (and work-buffer (kill-buffer work-buffer)) - (condition-case () - (if file-name (delete-file file-name)) - (error)) - ))) + (ignore-errors + (if file-name (delete-file file-name)))))) (provide 'binhex) diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index fc6b49b..164fbed 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -674,6 +674,12 @@ on parts -- for instance, adding Vcard info to a database." :group 'gnus-article-treat :type gnus-article-treat-custom) +(defcustom gnus-treat-strip-banner t + "Strip banners from articles. +The banner to be stripped is specified in the `banner' group parameter." + :group 'gnus-article-treat + :type gnus-article-treat-custom) + (defcustom gnus-treat-highlight-headers 'head "Highlight the headers." :group 'gnus-article-treat @@ -704,6 +710,17 @@ on parts -- for instance, adding Vcard info to a database." :group 'gnus-article-treat :type gnus-article-treat-custom) +(defcustom gnus-treat-date-iso8601 nil + "Display the date in the ISO8601 format." + :group 'gnus-article-treat + :type gnus-article-treat-custom) + +(defcustom gnus-treat-date-user-defined nil + "Display the date in a user-defined format. +The format is defined by the `gnus-article-time-format' variable." + :group 'gnus-article-treat + :type gnus-article-treat-custom) + (defcustom gnus-treat-strip-trailing-blank-lines nil "Strip trailing blank lines." :group 'gnus-article-treat @@ -747,16 +764,27 @@ on parts -- for instance, adding Vcard info to a database." :group 'gnus-article-treat :type gnus-article-treat-custom) +(defcustom gnus-treat-capitalize-sentences nil + "Capitalize sentence-starting words." + :group 'gnus-article-treat + :type gnus-article-treat-custom) + +(defcustom gnus-treat-fill-long-lines nil + "Fill long lines." + :group 'gnus-article-treat + :type gnus-article-treat-custom) + ;;; Internal variables (defvar article-goto-body-goes-to-point-min-p nil) (defvar gnus-article-mime-handle-alist-1 nil) (defvar gnus-treatment-function-alist - '((gnus-treat-highlight-signature gnus-article-highlight-signature) + '((gnus-treat-strip-banner gnus-article-strip-banner) + (gnus-treat-highlight-signature gnus-article-highlight-signature) (gnus-treat-buttonize gnus-article-add-buttons) - (gnus-treat-buttonize-head gnus-article-add-buttons-to-head) (gnus-treat-fill-article gnus-article-fill-cited-article) + (gnus-treat-fill-long-lines gnus-article-fill-long-lines) (gnus-treat-strip-cr gnus-article-remove-cr) (gnus-treat-hide-headers gnus-article-hide-headers) (gnus-treat-hide-boring-headers gnus-article-hide-boring-headers) @@ -772,6 +800,8 @@ on parts -- for instance, adding Vcard info to a database." (gnus-treat-date-local gnus-article-date-local) (gnus-treat-date-lapsed gnus-article-date-lapsed) (gnus-treat-date-original gnus-article-date-original) + (gnus-treat-date-user-defined gnus-article-date-user) + (gnus-treat-date-iso8601 gnus-article-date-iso8601) (gnus-treat-strip-trailing-blank-lines gnus-article-remove-trailing-blank-lines) (gnus-treat-strip-leading-blank-lines @@ -780,6 +810,7 @@ on parts -- for instance, adding Vcard info to a database." gnus-article-strip-multiple-blank-lines) (gnus-treat-strip-blank-lines gnus-article-strip-blank-lines) (gnus-treat-overstrike gnus-article-treat-overstrike) + (gnus-treat-buttonize-head gnus-article-add-buttons-to-head) (gnus-treat-display-xface gnus-article-display-x-face) (gnus-treat-display-smileys gnus-smiley-display) (gnus-treat-display-picons gnus-article-display-picons))) @@ -1181,6 +1212,17 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")." (widen)) (forward-line 1))))))) +(defun article-capitalize-sentences () + "Capitalize the first word in each sentence." + (interactive) + (save-excursion + (let ((buffer-read-only nil) + (paragraph-start "^[\n\^L]")) + (article-goto-body) + (while (not (eobp)) + (capitalize-word 1) + (forward-sentence))))) + (defun article-remove-cr () "Translate CRLF pairs into LF, and then CR into LF.." (interactive) @@ -1221,7 +1263,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")." (case-fold-search t) from last) (save-restriction - (nnheader-narrow-to-headers) + (goto-char (point-min)) (setq from (message-fetch-field "from")) (goto-char (point-min)) (while (and gnus-article-x-face-command @@ -1281,9 +1323,8 @@ If PROMPT (the prefix), prompt for a coding system to use." (case-fold-search t) (ct (message-fetch-field "Content-Type" t)) (cte (message-fetch-field "Content-Transfer-Encoding" t)) - (ctl (and ct (condition-case () - (mail-header-parse-content-type ct) - (error nil)))) + (ctl (and ct (ignore-errors + (mail-header-parse-content-type ct)))) (charset (cond (prompt (mm-read-coding-system "Charset to decode: ")) @@ -1396,6 +1437,27 @@ always hide." (gnus-article-hide-text-type (match-beginning 0) (match-end 0) 'pem)))))) +(defun article-strip-banner () + "Strip the banner specified by the `banner' group parameter." + (interactive) + (save-excursion + (save-restriction + (let ((inhibit-point-motion-hooks t) + (banner (gnus-group-get-parameter gnus-newsgroup-name 'banner)) + (gnus-signature-limit nil) + buffer-read-only beg end) + (when banner + (article-goto-body) + (cond + ((eq banner 'signature) + (when (gnus-article-narrow-to-signature) + (widen) + (forward-line -1) + (delete-region (point) (point-max)))) + ((stringp banner) + (while (re-search-forward banner nil t) + (delete-region (match-beginning 0) (match-end 0)))))))))) + (defun article-hide-signature (&optional arg) "Hide the signature in the current article. If given a negative prefix, always show; if given a positive prefix, @@ -1424,6 +1486,8 @@ always hide." "Place point at the start of the body." (goto-char (point-min)) (cond + ;; This variable is only bound when dealing with separate + ;; MIME body parts. (article-goto-body-goes-to-point-min-p t) ((search-forward "\n\n" nil t) @@ -2167,11 +2231,13 @@ If variable `gnus-use-long-file-name' is non-nil, it is article-hide-boring-headers article-treat-overstrike article-fill-long-lines + article-capitalize-sentences article-remove-cr article-display-x-face article-de-quoted-unreadable article-mime-decode-quoted-printable article-hide-pgp + article-strip-banner article-hide-pem article-hide-signature article-remove-trailing-blank-lines diff --git a/lisp/gnus-cite.el b/lisp/gnus-cite.el index 8845d19..7916ce2 100644 --- a/lisp/gnus-cite.el +++ b/lisp/gnus-cite.el @@ -58,10 +58,13 @@ article has citations." :type 'string) (defcustom gnus-cited-lines-visible nil - "The number of lines of hidden cited text to remain visible." + "The number of lines of hidden cited text to remain visible. +Or a pair (cons) of numbers which are the number of lines at the top +and bottom of the text, respectively, to remain visible." :group 'gnus-cite :type '(choice (const :tag "none" nil) - integer)) + integer + (cons :tag "Top and Bottom" integer integer))) (defcustom gnus-cite-parse-max-size 25000 "Maximum article size (in bytes) where parsing citations is allowed. @@ -486,10 +489,18 @@ always hide." ;; Skip past lines we want to leave visible. (when (and beg end gnus-cited-lines-visible) (goto-char beg) - (forward-line gnus-cited-lines-visible) + (forward-line (if (consp gnus-cited-lines-visible) + (car gnus-cited-lines-visible) + gnus-cited-lines-visible)) (if (>= (point) end) (setq beg nil) - (setq beg (point-marker)))) + (setq beg (point-marker)) + (when (consp gnus-cited-lines-visible) + (goto-char end) + (forward-line (- (cdr gnus-cited-lines-visible))) + (if (<= (point) beg) + (setq beg nil) + (setq end (point-marker)))))) (when (and beg end) ;; We use markers for the end-points to facilitate later ;; wrapping and mangling of text. diff --git a/lisp/gnus-cus.el b/lisp/gnus-cus.el index 4a63495..a560e2a 100644 --- a/lisp/gnus-cus.el +++ b/lisp/gnus-cus.el @@ -104,6 +104,11 @@ is present and a string, this string will be inserted literally as a `gcc' header (this symbol takes precedence over any default `Gcc' rules as described later).") + (banner (choice :tag "Banner" + (const signature) + string ) "\ +Banner to be removed from articles.") +a (auto-expire (const :tag "Automatic Expire" t) "\ All articles that are read will be marked as expirable.") diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 2c9bb99..0af00bd 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -2461,7 +2461,7 @@ up is returned." (car groups) (format "these %d groups" (length groups))))))) n - (while (setq groups (pop groups)) + (while (setq group (pop groups)) ;; Virtual groups have to be given special treatment. (let ((method (gnus-find-method-for-group group))) (when (eq 'nnvirtual (car method)) diff --git a/lisp/gnus-kill.el b/lisp/gnus-kill.el index d0cbe27..6121552 100644 --- a/lisp/gnus-kill.el +++ b/lisp/gnus-kill.el @@ -702,9 +702,8 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score" (and (car entry) (or (eq (car entry) t) (not (zerop (car entry)))))) - (condition-case () - (gnus-summary-read-group group nil t nil t) - (error nil)) + (ignore-errors + (gnus-summary-read-group group nil t nil t)) (when (eq (current-buffer) (get-buffer gnus-summary-buffer)) (gnus-summary-exit)))) ;; Exit Emacs. diff --git a/lisp/gnus-srvr.el b/lisp/gnus-srvr.el index 34c8e98..4c65009 100644 --- a/lisp/gnus-srvr.el +++ b/lisp/gnus-srvr.el @@ -592,11 +592,10 @@ The following commands are available: (while (re-search-forward "\\(^[^ \t]+\\)[ \t]+[0-9]+[ \t]+[0-9]+" nil t) (goto-char (match-end 1)) - (condition-case () - (push (cons (match-string 1) - (max 0 (- (1+ (read cur)) (read cur)))) - groups) - (error nil))))) + (ignore-errors + (push (cons (match-string 1) + (max 0 (- (1+ (read cur)) (read cur)))) + groups))))) (setq groups (sort groups (lambda (l1 l2) (string< (car l1) (car l2))))) diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index b46aac0..bcd0148 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -47,11 +47,10 @@ If a file with the `.el' or `.elc' suffixes exists, it will be read instead." :type 'file) (defcustom gnus-site-init-file - (condition-case nil - (concat (file-name-directory - (directory-file-name installation-directory)) - "site-lisp/gnus-init") - (error nil)) + (ignore-errors + (concat (file-name-directory + (directory-file-name installation-directory)) + "site-lisp/gnus-init")) "*The site-wide Gnus Emacs-Lisp startup file name, or nil if none. If a file with the `.el' or `.elc' suffixes exists, it will be read instead." :group 'gnus-start diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 82d9d65..8a33d84 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1445,6 +1445,7 @@ increase the score of each group you read." "e" gnus-article-emphasize "w" gnus-article-fill-cited-article "Q" gnus-article-fill-long-lines + "C" gnus-article-capitalize-sentences "c" gnus-article-remove-cr "q" gnus-article-de-quoted-unreadable "f" gnus-article-display-x-face @@ -1463,6 +1464,7 @@ increase the score of each group you read." "c" gnus-article-hide-citation "C" gnus-article-hide-citation-in-followups "p" gnus-article-hide-pgp + "B" gnus-article-strip-banner "P" gnus-article-hide-pem "\C-c" gnus-article-hide-citation-maybe) @@ -1582,6 +1584,7 @@ increase the score of each group you read." ["Signature" gnus-article-hide-signature t] ["Citation" gnus-article-hide-citation t] ["PGP" gnus-article-hide-pgp t] + ["Banner" gnus-article-strip-banner t] ["Boring headers" gnus-article-hide-boring-headers t]) ("Highlight" ["All" gnus-article-highlight t] @@ -1614,6 +1617,7 @@ increase the score of each group you read." ["Emphasis" gnus-article-emphasize t] ["Word wrap" gnus-article-fill-cited-article t] ["Fill long lines" gnus-article-fill-long-lines t] + ["Capitalize sentences" gnus-article-capitalize-sentences t] ["CR" gnus-article-remove-cr t] ["Show X-Face" gnus-article-display-x-face t] ["Quoted-Printable" gnus-article-de-quoted-unreadable t] @@ -1992,9 +1996,8 @@ The following commands are available: (defun gnus-summary-make-local-variables () "Make all the local summary buffer variables." - (let ((locals gnus-summary-local-variables) - global local) - (while (setq local (pop locals)) + (let (global) + (dolist (local gnus-summary-local-variables) (if (consp local) (progn (if (eq (cdr local) 'global) @@ -2002,11 +2005,9 @@ The following commands are available: (setq global (symbol-value (car local))) ;; Use the value from the list. (setq global (eval (cdr local)))) - (make-local-variable (car local)) - (set (car local) global)) + (set (make-local-variable (car local)) global)) ;; Simple nil-valued local variable. - (make-local-variable local) - (set local nil))))) + (set (make-local-variable local) nil))))) (defun gnus-summary-clear-local-variables () (let ((locals gnus-summary-local-variables)) @@ -6946,7 +6947,7 @@ article. If BACKWARD (the prefix) is non-nil, search backward instead." If N is negative, print the N previous articles. If N is nil and articles have been marked with the process mark, print these instead. -If the optional second argument FILENAME is nil, send the image to the +If the optional first argument FILENAME is nil, send the image to the printer. If FILENAME is a string, save the PostScript image in a file with that name. If FILENAME is a number, prompt the user for the name of the file to save in." @@ -8643,10 +8644,9 @@ The variable `gnus-default-article-saver' specifies the saver function." (save-buffer (save-excursion (nnheader-set-temp-buffer " *Gnus Save*"))) (num (length articles)) - header article file) - (while articles - (setq header (gnus-summary-article-header - (setq article (pop articles)))) + header file) + (dolist (article articles) + (setq header (gnus-summary-article-header article)) (if (not (vectorp header)) ;; This is a pseudo-article. (if (assq 'name header) diff --git a/lisp/gnus-vm.el b/lisp/gnus-vm.el index 6fe4b26..c611582 100644 --- a/lisp/gnus-vm.el +++ b/lisp/gnus-vm.el @@ -36,6 +36,7 @@ (require 'gnus-msg) (eval-when-compile + (require 'cl) (autoload 'vm-mode "vm") (autoload 'vm-save-message "vm") (autoload 'vm-forward-message "vm") @@ -46,11 +47,10 @@ "Inhibit loading `win-vm' if using a window-system. Has to be set before gnus-vm is loaded.") -(or gnus-vm-inhibit-window-system - (condition-case nil - (when window-system - (require 'win-vm)) - (error nil))) +(unless gnus-vm-inhibit-window-system + (ignore-errors + (when window-system + (require 'win-vm)))) (when (not (featurep 'vm)) (load "vm")) diff --git a/lisp/gnus.el b/lisp/gnus.el index d008715..395cba4 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -259,7 +259,7 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "0.74" +(defconst gnus-version-number "0.75" "Version number for this version of Gnus.") (defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number) @@ -865,11 +865,10 @@ used to 899, you would say something along these lines: (kill-buffer (current-buffer)))))))) (defcustom gnus-select-method - (condition-case nil + (ignore-errors (nconc - (list 'nntp (or (condition-case nil - (gnus-getenv-nntpserver) - (error nil)) + (list 'nntp (or (ignore-errors + (gnus-getenv-nntpserver)) (when (and gnus-default-nntp-server (not (string= gnus-default-nntp-server ""))) gnus-default-nntp-server) @@ -877,8 +876,7 @@ used to 899, you would say something along these lines: (if (or (null gnus-nntp-service) (equal gnus-nntp-service "nntp")) nil - (list gnus-nntp-service))) - (error nil)) + (list gnus-nntp-service)))) "*Default method for selecting a newsgroup. This variable should be a list, where the first element is how the news is to be fetched, the second is the address. diff --git a/lisp/mail-source.el b/lisp/mail-source.el index 7c39528..ed23bab 100644 --- a/lisp/mail-source.el +++ b/lisp/mail-source.el @@ -33,24 +33,6 @@ "The mail-fetching library." :group 'gnus) -(defcustom mail-source-movemail-program "movemail" - "*A command to be executed to move mail from the inbox. -The default is \"movemail\". - -This can also be a function. In that case, the function will be -called with two parameters -- the name of the INBOX file, and the file -to be moved to." - :group 'mail-source - :type '(choice string - function)) - -(defcustom mail-source-movemail-args nil - "*Extra arguments to give to `mail-source-movemail-program' to move mail from the inbox. -The default is nil." - :group 'mail-source - :type '(choice string - (constant nil))) - (defcustom mail-source-crash-box "~/.emacs-mail-crash-box" "File where mail will be stored while processing it." :group 'mail-source @@ -88,6 +70,9 @@ The default is nil." (:server (getenv "MAILHOST")) (:port "pop3") (:user (or (user-login-name) (getenv "LOGNAME") (getenv "USER"))) + (:program) + (:args) + (:function) (:password)) (maildir (:path))) @@ -168,16 +153,17 @@ of the `let' form." CALLBACK will be called with the name of the file where (some of) the mail from SOURCE is put. Return the number of files that were found." - (let ((function (cadr (assq (car source) mail-source-fetcher-alist))) - (found 0)) - (unless function - (error "%S is an invalid mail source specification" source)) - ;; If there's anything in the crash box, we do it first. - (when (file-exists-p mail-source-crash-box) - (message "Processing mail from %s..." mail-source-crash-box) - (setq found (mail-source-callback - callback mail-source-crash-box))) - (+ found (funcall function source callback)))) + (save-excursion + (let ((function (cadr (assq (car source) mail-source-fetcher-alist))) + (found 0)) + (unless function + (error "%S is an invalid mail source specification" source)) + ;; If there's anything in the crash box, we do it first. + (when (file-exists-p mail-source-crash-box) + (message "Processing mail from %s..." mail-source-crash-box) + (setq found (mail-source-callback + callback mail-source-crash-box))) + (+ found (funcall function source callback))))) (defun mail-source-make-complex-temp-name (prefix) (let ((newname (make-temp-name prefix)) @@ -197,16 +183,17 @@ Pass INFO on to CALLBACK." (delete-file mail-source-crash-box)) 0) (funcall callback mail-source-crash-box info) - (if mail-source-delete-incoming - (when (file-exists-p mail-source-crash-box) - (delete-file mail-source-crash-box)) - (let ((incoming - (mail-source-make-complex-temp-name - (expand-file-name - "Incoming" mail-source-directory)))) - (unless (file-exists-p (file-name-directory incoming)) - (make-directory (file-name-directory incoming) t)) - (rename-file mail-source-crash-box incoming t))) + (when (file-exists-p mail-source-crash-box) + ;; Delete or move the incoming mail out of the way. + (if mail-source-delete-incoming + (delete-file mail-source-crash-box) + (let ((incoming + (mail-source-make-complex-temp-name + (expand-file-name + "Incoming" mail-source-directory)))) + (unless (file-exists-p (file-name-directory incoming)) + (make-directory (file-name-directory incoming) t)) + (rename-file mail-source-crash-box incoming t)))) 1)) (defun mail-source-movemail (from to) @@ -236,28 +223,14 @@ Pass INFO on to CALLBACK." (unwind-protect (save-excursion (setq errors (generate-new-buffer " *mail source loss*")) - (buffer-disable-undo errors) - (if (functionp mail-source-movemail-program) - (condition-case err - (progn - (funcall mail-source-movemail-program from to) - (setq result 0)) - (error - (save-excursion - (set-buffer errors) - (insert (prin1-to-string err)) - (setq result 255)))) - (let ((default-directory "/")) - (setq result - (apply - 'call-process - (append - (list - (expand-file-name - mail-source-movemail-program exec-directory) - nil errors nil from to) - (when mail-source-movemail-args - mail-source-movemail-args)))))) + (let ((default-directory "/")) + (setq result + (apply + 'call-process + (append + (list + (expand-file-name "movemail" exec-directory) + nil errors nil from to))))) (when (file-exists-p to) (set-file-modes to mail-source-default-file-modes)) (if (and (not (buffer-modified-p errors)) @@ -298,13 +271,21 @@ If ARGS, PROMPT is used as an argument to `format'." (apply 'format prompt args) prompt))) (unless mail-source-read-passwd - (if (load "passwd" t) + (if (or (fboundp 'read-passwd) (load "passwd" t)) (setq mail-source-read-passwd 'read-passwd) (unless (fboundp 'ange-ftp-read-passwd) (autoload 'ange-ftp-read-passwd "ange-ftp")) (setq mail-source-read-passwd 'ange-ftp-read-passwd))) (funcall mail-source-read-passwd prompt))) +(defun mail-source-fetch-with-program (program args to) + (zerop (apply 'call-process program nil nil nil + (append (split-string args) (list to))))) + +;;; +;;; Different fetchers +;;; + (defun mail-source-fetch-file (source callback) "Fetcher for single-file sources." (mail-source-bind (file source) @@ -316,14 +297,12 @@ If ARGS, PROMPT is used as an argument to `format'." (defun mail-source-fetch-directory (source callback) "Fetcher for directory sources." (mail-source-bind (directory source) - (let ((files (directory-files - path t - (concat (regexp-quote suffix) "$"))) - (found 0) - (mail-source-string (format "directory:%s" path)) - file) - (while (setq file (pop files)) - (when (mail-source-movemail file mail-source-crash-box) + (let ((found 0) + (mail-source-string (format "directory:%s" path))) + (dolist (file (directory-files + path t (concat (regexp-quote suffix) "$"))) + (when (and (file-regular-p file) + (mail-source-movemail file mail-source-crash-box)) (incf found (mail-source-callback callback file)))) found))) @@ -339,17 +318,29 @@ If ARGS, PROMPT is used as an argument to `format'." (format "Password for %s at %s: " user server)))) (unless (assoc from mail-source-password-cache) (push (cons from password) mail-source-password-cache)) - (let ((pop3-password password) - (pop3-maildrop user) - (pop3-mailhost server)) - (if (pop3-movemail mail-source-crash-box) - (mail-source-callback callback server) - ;; We nix out the password in case the error - ;; was because of a wrong password being given. - (setq mail-source-password-cache - (delq (assoc from mail-source-password-cache) - mail-source-password-cache)) - 0))))) + (when server + (setenv "MAILHOST" server)) + (if (cond + (program + (when (listp args) + (setq args (eval args))) + (mail-source-fetch-with-program + program args mail-source-crash-box)) + (function + (funcall function mail-source-crash-box)) + ;; The default is to use pop3.el. + (t + (let ((pop3-password password) + (pop3-maildrop user) + (pop3-mailhost server)) + (save-excursion (pop3-movemail mail-source-crash-box))))) + (mail-source-callback callback server) + ;; We nix out the password in case the error + ;; was because of a wrong password being given. + (setq mail-source-password-cache + (delq (assoc from mail-source-password-cache) + mail-source-password-cache)) + 0)))) (provide 'mail-source) diff --git a/lisp/message.el b/lisp/message.el index 517a0e2..5a84b91 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -624,11 +624,10 @@ actually occur." ;; Ignore errors in case this is used in Emacs 19. ;; Don't use ignore-errors because this is copied into loaddefs.el. ;;;###autoload -(condition-case nil - (define-mail-user-agent 'message-user-agent - 'message-mail 'message-send-and-exit - 'message-kill-buffer 'message-send-hook) - (error nil)) +(ignore-errors + (define-mail-user-agent 'message-user-agent + 'message-mail 'message-send-and-exit + 'message-kill-buffer 'message-send-hook)) (defvar message-mh-deletable-headers '(Message-ID Date Lines Sender) "If non-nil, delete the deletable headers before feeding to mh.") @@ -667,7 +666,9 @@ Valid valued are `unique' and `unsent'." (const :tag "unsent" unsent))) (defcustom message-default-charset nil - "Default charset used in non-MULE XEmacsen.") + "Default charset used in non-MULE XEmacsen." + :group 'message + :type 'symbol) ;;; Internal variables. ;;; Well, not really internal. @@ -884,7 +885,7 @@ The cdr of ech entry is a function for applying the face to a region.") (cond ((not (fboundp 'coding-system-p)) nil) ((coding-system-p 'emacs-mule) 'emacs-mule) - ((coding-system-p 'escape-quoted) 'escape-quoted) + ((memq 'escape-quoted (mm-get-coding-system-list)) 'escape-quoted) ((coding-system-p 'no-conversion) 'no-conversion) (t nil)) "Coding system to compose mail.") diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index b41d5de..c9b24b5 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -51,7 +51,8 @@ If no encoding was done, nil is returned." (save-excursion (goto-char (point-min)) (if (re-search-forward "[^\x0-\x7f]" nil t) - (mm-read-charset "Charset used in the article: ") + (or mail-parse-charset + (mm-read-charset "Charset used in the article: ")) ;; The logic in `mml-generate-mime-1' confirms that it's OK ;; to return nil here. nil)) diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index 7ff1433..79fcadb 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -143,8 +143,7 @@ (when (or no-strict-mime (mail-fetch-field "mime-version")) (setq ct (mail-fetch-field "content-type") - ctl (condition-case () (mail-header-parse-content-type ct) - (error nil)) + ctl (ignore-errors (mail-header-parse-content-type ct)) cte (mail-fetch-field "content-transfer-encoding") cd (mail-fetch-field "content-disposition") description (mail-fetch-field "content-description") @@ -153,9 +152,7 @@ (not (string-match "/" (car ctl)))) (mm-dissect-singlepart '("text/plain") nil no-strict-mime - (and cd (condition-case () - (mail-header-parse-content-disposition cd) - (error nil))) + (and cd (ignore-errors (mail-header-parse-content-disposition cd))) description) (setq type (split-string (car ctl) "/")) (setq subtype (cadr type) @@ -172,9 +169,7 @@ (mail-header-remove-comments cte))))) no-strict-mime - (and cd (condition-case () - (mail-header-parse-content-disposition cd) - (error nil))) + (and cd (ignore-errors (mail-header-parse-content-disposition cd))) description id)))) (when id (when (string-match " *<\\(.*\\)> *" id) @@ -368,30 +363,23 @@ external if displayed external." "Remove the displayed MIME part represented by HANDLE." (when (listp handle) (let ((object (mm-handle-undisplayer handle))) - (condition-case () - (cond - ;; Internally displayed part. - ((mm-annotationp object) - (delete-annotation object)) - ((or (functionp object) - (and (listp object) - (eq (car object) 'lambda))) - (funcall object)) - ;; Externally displayed part. - ((consp object) - (condition-case () - (delete-file (car object)) - (error nil)) - (condition-case () - (delete-directory (file-name-directory (car object))) - (error nil)) - (condition-case () - (kill-buffer (cdr object)) - (error nil))) - ((bufferp object) - (when (buffer-live-p object) - (kill-buffer object)))) - (error nil)) + (ignore-errors + (cond + ;; Internally displayed part. + ((mm-annotationp object) + (delete-annotation object)) + ((or (functionp object) + (and (listp object) + (eq (car object) 'lambda))) + (funcall object)) + ;; Externally displayed part. + ((consp object) + (ignore-errors (delete-file (car object))) + (ignore-errors (delete-directory (file-name-directory (car object)))) + (ignore-errors (kill-buffer (cdr object)))) + ((bufferp object) + (when (buffer-live-p object) + (kill-buffer object))))) (mm-handle-set-undisplayer handle nil)))) (defun mm-display-inline (handle) diff --git a/lisp/mm-encode.el b/lisp/mm-encode.el index b5a4b3b..0846d92 100644 --- a/lisp/mm-encode.el +++ b/lisp/mm-encode.el @@ -75,14 +75,8 @@ ) ((null encoding) ) - ;;((eq encoding 'x-uuencode) - ;; (condition-case () - ;; (uudecode-encode-region (point-min) (point-max)) - ;; (error nil))) ((functionp encoding) - (condition-case () - (funcall encoding (point-min) (point-max)) - (error nil))) + (ignore-errors (funcall encoding (point-min) (point-max)))) (t (message "Unknown encoding %s; defaulting to 8bit" encoding)))) diff --git a/lisp/mm-util.el b/lisp/mm-util.el index 80f1989..6c597db 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -39,7 +39,7 @@ (cond ((not (fboundp 'coding-system-p)) nil) (mm-running-xemacs ;; XEmacs - (and (coding-system-p 'no-conversion) 'no-conversion)) + 'no-conversion) (mm-running-ntemacs ;; NTEmacs (and (coding-system-p 'raw-text-dos) 'raw-text-dos)) ((coding-system-p 'raw-text) 'raw-text) ;; Emacs diff --git a/lisp/mm-uu.el b/lisp/mm-uu.el index c520774..a412fdf 100644 --- a/lisp/mm-uu.el +++ b/lisp/mm-uu.el @@ -2,7 +2,7 @@ ;; Copyright (c) 1998 by Shenghuo Zhu ;; Author: Shenghuo Zhu -;; $Revision: 1.1.1.12 $ +;; $Revision: 1.1.1.13 $ ;; Keywords: news postscript uudecode binhex shar ;; This file is not part of GNU Emacs, but the same permissions @@ -84,8 +84,7 @@ This can be either \"inline\" or \"attachment\".") (when (and (mail-fetch-field "mime-version") (setq ct (mail-fetch-field "content-type"))) (setq cte (message-fetch-field "content-transfer-encoding" t) - ctl (condition-case () (mail-header-parse-content-type ct) - (error nil)) + ctl (ignore-errors (mail-header-parse-content-type ct)) charset (and ctl (mail-content-type-get ctl 'charset))) (if (stringp cte) (setq cte (intern (downcase (mail-header-remove-whitespace @@ -117,9 +116,8 @@ This can be either \"inline\" or \"attachment\".") (setq end-char (point)) (when (or (not (eq type 'binhex)) (setq file-name - (condition-case nil - (binhex-decode-region start-char end-char t) - (error nil)))) + (ignore-errors + (binhex-decode-region start-char end-char t)))) (if (> start-char text-start) (push (mm-make-handle (mm-uu-copy-to-buffer text-start start-char) diff --git a/lisp/nnmail.el b/lisp/nnmail.el index c7e37c2..fa88651 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -1000,6 +1000,15 @@ Return the number of characters in the body." "Translate TAB characters into SPACE characters." (subst-char-in-region (point-min) (point-max) ?\t ? t)) +(defun nnmail-fix-eudora-headers () + "Eudora has a broken References line, but an OK In-Reply-To." + (goto-char (point-min)) + (when (re-search-forward "^X-Mailer:.*Eudora" nil t) + (goto-char (point-min)) + (when (re-search-forward "^References:" nil t) + (beginning-of-line) + (insert "X-Gnus-Broken-Eudora-")))) + ;;; Utility functions (defun nnmail-split-fancy () @@ -1359,9 +1368,7 @@ See the documentation for the variable `nnmail-split-fancy' for documentation." ((numberp days) (setq days (days-to-time days)) ;; Compare the time with the current time. - (condition-case () - (time-less-p days (time-since time)) - (error nil))))))) + (ignore-errors (time-less-p days (time-since time)))))))) (defun nnmail-check-syntax () "Check (and modify) the syntax of the message in the current buffer." diff --git a/lisp/nnml.el b/lisp/nnml.el index 5304865..ed3e365 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -142,9 +142,7 @@ all. This may very well take some time.") (deffoo nnml-open-server (server &optional defs) (nnoo-change-server 'nnml server defs) (when (not (file-exists-p nnml-directory)) - (condition-case () - (make-directory nnml-directory t) - (error))) + (ignore-errors (make-directory nnml-directory t))) (cond ((not (file-exists-p nnml-directory)) (nnml-close-server) @@ -368,16 +366,14 @@ all. This may very well take some time.") (let ((chars (nnmail-insert-lines)) (art (concat (int-to-string article) "\t")) headers) - (when (condition-case () - (progn - (nnmail-write-region - (point-min) (point-max) - (or (nnml-article-to-file article) - (concat nnml-current-directory - (int-to-string article))) - nil (if (nnheader-be-verbose 5) nil 'nomesg)) - t) - (error nil)) + (when (ignore-errors + (nnmail-write-region + (point-min) (point-max) + (or (nnml-article-to-file article) + (concat nnml-current-directory + (int-to-string article))) + nil (if (nnheader-be-verbose 5) nil 'nomesg)) + t) (setq headers (nnml-parse-head chars article)) ;; Replace the NOV line in the NOV file. (save-excursion @@ -418,9 +414,7 @@ all. This may very well take some time.") (nnheader-message 5 "Deleting article %s in %s..." article group) (funcall nnmail-delete-file-function article)))) ;; Try to delete the directory itself. - (condition-case () - (delete-directory nnml-current-directory) - (error nil))) + (ignore-errors (delete-directory nnml-current-directory))) ;; Remove the group from all structures. (setq nnml-group-alist (delq (assoc group nnml-group-alist) nnml-group-alist) @@ -434,11 +428,9 @@ all. This may very well take some time.") (nnml-possibly-change-directory group server) (let ((new-dir (nnmail-group-pathname new-name nnml-directory)) (old-dir (nnmail-group-pathname group nnml-directory))) - (when (condition-case () - (progn - (make-directory new-dir t) - t) - (error nil)) + (when (ignore-errors + (make-directory new-dir t) + t) ;; We move the articles file by file instead of renaming ;; the directory -- there may be subgroups in this group. ;; One might be more clever, I guess. @@ -453,9 +445,7 @@ all. This may very well take some time.") (when (file-exists-p overview) (rename-file overview (concat new-dir nnml-nov-file-name)))) (when (<= (length (directory-files old-dir)) 2) - (condition-case () - (delete-directory old-dir) - (error nil))) + (ignore-errors (delete-directory old-dir))) ;; That went ok, so we change the internal structures. (let ((entry (assoc group nnml-group-alist))) (when entry @@ -541,9 +531,7 @@ all. This may very well take some time.") (setq found t) ;; We return the article number. (setq number - (condition-case () - (read (current-buffer)) - (error nil))))) + (ignore-errors (read (current-buffer)))))) number))) (defun nnml-retrieve-headers-with-nov (articles &optional fetch-old) diff --git a/lisp/smiley.el b/lisp/smiley.el index cabebf0..d227e26 100644 --- a/lisp/smiley.el +++ b/lisp/smiley.el @@ -63,7 +63,7 @@ ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm") ("\\(:-*D\\)\\W" 1 "FaceGrinning.xpm") ("\\(:-*[)>}»]+\\)\\W" 1 "FaceHappy.xpm") - ("\\(=[)>»]+\\)\\W" 1 "FaceHappy.xpm") + ("\\(=[)»]+\\)\\W" 1 "FaceHappy.xpm") ("\\(:-*[/\\\"]\\)[^/]\\W" 1 "FaceIronic.xpm") ("\\([8|]-*[|Oo%]\\)\\W" 1 "FaceKOed.xpm") ("\\([:|]-*#+\\)\\W" 1 "FaceNyah.xpm") @@ -88,7 +88,7 @@ ("\\(:-+D\\)\\W" 1 "FaceGrinning.xpm") ("\\(:-+[}»]+\\)\\W" 1 "FaceHappy.xpm") ("\\(:-*)+\\)\\W" 1 "FaceHappy.xpm") - ("\\(=[)>]+\\)\\W" 1 "FaceHappy.xpm") + ("\\(=[)]+\\)\\W" 1 "FaceHappy.xpm") ("\\(:-+[/\\\"]+\\)\\W" 1 "FaceIronic.xpm") ("\\([8|]-+[|Oo%]\\)\\W" 1 "FaceKOed.xpm") ("\\([:|]-+#+\\)\\W" 1 "FaceNyah.xpm") diff --git a/lisp/uudecode.el b/lisp/uudecode.el index 653113a..ea58b84 100644 --- a/lisp/uudecode.el +++ b/lisp/uudecode.el @@ -104,10 +104,7 @@ If FILE-NAME is non-nil, save the result to FILE-NAME." (insert-file-contents-literally tempfile))) (message "Can not uudecode"))) (and work-buffer (kill-buffer work-buffer)) - (condition-case () - (or file-name (delete-file tempfile)) - (error)) - ))) + (ignore-errors (or file-name (delete-file tempfile)))))) (if (string-match "XEmacs" emacs-version) (defalias 'uudecode-insert-char 'insert-char) diff --git a/texi/ChangeLog b/texi/ChangeLog index 9b5937d..eb96ea0 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,15 @@ +1999-02-01 21:05:18 Lars Magne Ingebrigtsen + + * gnus.texi (Article Hiding): Addition. + +1999-01-28 08:08:28 Lars Magne Ingebrigtsen + + * gnus.texi (Washing Mail): Addition. + +1999-01-27 14:30:39 Lars Magne Ingebrigtsen + + * gnus.texi (Article Washing): Addition. + 1999-01-25 04:24:01 Lars Magne Ingebrigtsen * message.texi (MIME): New. diff --git a/texi/gnus.texi b/texi/gnus.texi index b5a4c3b..38c5bbb 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename gnus -@settitle Pterodactyl Gnus 0.74 Manual +@settitle Pterodactyl Gnus 0.75 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -318,7 +318,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Pterodactyl Gnus 0.74 Manual +@title Pterodactyl Gnus 0.75 Manual @author by Lars Magne Ingebrigtsen @page @@ -354,7 +354,7 @@ can be gotten by any nefarious means you can think of---@sc{nntp}, local spool or your mbox file. All at the same time, if you want to push your luck. -This manual corresponds to Pterodactyl Gnus 0.74. +This manual corresponds to Pterodactyl Gnus 0.75. @end ifinfo @@ -6460,6 +6460,19 @@ articles that have signatures in them do: Hide @sc{pem} (privacy enhanced messages) cruft (@code{gnus-article-hide-pem}). +@item W W B +@kindex W W B (Summary) +@findex gnus-article-strip-banner +Strip the banner specified by the @code{banner} group parameter +(@code{gnus-article-strip-banner}). This is mainly used to hide those +annoying banners and/or signatures that some mailing lists and moderated +groups adds to all the messages. The way to use this function is to add +the @code{banner} group parameter (@pxref{Group Parameters}) to the +group you want banners stripped from. The parameter either be a string, +which will be interpreted as a regulax expression matching text to be +removed, or the symbol @code{signature}, meaning that the (last) +signature should be removed. + @item W W c @kindex W W c (Summary) @findex gnus-article-hide-citation @@ -6612,6 +6625,12 @@ when filling. @findex gnus-article-fill-long-lines Fill long lines (@code{gnus-article-fill-long-lines}). +@item W C +@kindex W C (Summary) +@findex gnus-article-capitalize-sentencse +Capitalize the first word in each sentence +(@code{gnus-article-capitalize-sentences}). + @item W c @kindex W c (Summary) @findex gnus-article-remove-cr @@ -9972,8 +9991,45 @@ name. @item :password The password to give to the POP server. If not specified, the user is prompted. + +@item :program +The program to use to fetch mail from the POP server. + +@item :args +The arguments to give to the program. If this is a string, it is used +as such. If this is a list, it is @code{eval}ed first, and the result +is used. + +@item :function +The function to use to fetch mail from the POP server. The function is +called with one parameter---the name of the file where the mail should +be moved to. @end table +If the @code{:program} and @code{:function} keywords aren't specified, +@code{pop3-movemail} will be used. + +Here are some examples. Fetch from the default POP server, using the +default user name, and default fetcher: + +@lisp +(pop) +@end lisp + +Fetch from a named server with a named user and password: + +@lisp +(pop :server "my.pop.server" + :user "user-name" :password "secret") +@end lisp + +Use @samp{movemail} to move the mail: + +@lisp +(pop :program "movemail" + :args (format "po:%s %s %s" user mail-source-crash-box password)) +@end lisp + @end table @@ -10483,6 +10539,13 @@ For instance, if you want to remove the @samp{(idm)} and the @findex nnmail-remove-tabs Translate all @samp{TAB} characters into @samp{SPACE} characters. +@item nnmail-fix-eudora-headers +@findex nnmail-fix-eudora-headers +@cindex Eudora +Eudora produces broken @code{References} headers, but OK +@code{In-Reply-To} headers. This function will get rid of the +@code{References} headers. + @end table @item nnmail-prepare-incoming-message-hook @@ -16287,11 +16350,12 @@ We do have some breaches to this one. @table @emph @item X-Newsreader -This is considered to be a ``vanity header'', while I consider it to be -consumer information. After seeing so many badly formatted articles -coming from @code{tin} and @code{Netscape} I know not to use either of -those for posting articles. I would not have known that if it wasn't -for the @code{X-Newsreader} header. +@itemx User-Agent +These are considered to be ``vanity headers'', while I consider them +to be consumer information. After seeing so many badly formatted +articles coming from @code{tin} and @code{Netscape} I know not to use +either of those for posting articles. I would not have known that if +it wasn't for the @code{X-Newsreader} header. @end table @item USEFOR diff --git a/texi/message.texi b/texi/message.texi index 87d633c..4006158 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename message -@settitle Pterodactyl Message 0.74 Manual +@settitle Pterodactyl Message 0.75 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -42,7 +42,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Pterodactyl Message 0.74 Manual +@title Pterodactyl Message 0.75 Manual @author by Lars Magne Ingebrigtsen @page @@ -83,7 +83,7 @@ Message mode buffers. * Key Index:: List of Message mode keys. @end menu -This manual corresponds to Pterodactyl Message 0.74. Message is +This manual corresponds to Pterodactyl Message 0.75. Message is distributed with the Gnus distribution bearing the same version number as this manual.