From 8c38e845dfdda7201684fa5dbbe511e487dd5893 Mon Sep 17 00:00:00 2001 From: yamaoka Date: Tue, 6 Jul 1999 13:17:12 +0000 Subject: [PATCH] Sync up with Pterodactyl Gnus v0.92. --- ChangeLog | 18 ++++++++ README.T-gnus | 2 +- lisp/ChangeLog | 74 ++++++++++++++++++++++++++++++ lisp/Makefile.in | 2 + lisp/gnus-agent.el | 5 ++- lisp/gnus-art.el | 16 +++---- lisp/gnus-group.el | 3 +- lisp/gnus-mailcap.el | 4 +- lisp/gnus-start.el | 2 +- lisp/gnus-sum.el | 8 ++-- lisp/gnus-util.el | 8 +++- lisp/gnus-xmas.el | 3 +- lisp/gnus.el | 6 +-- lisp/message.el | 16 ++++++- lisp/mm-decode.el | 122 +++++++++++++++++++++++++++++++++----------------- lisp/mm-util.el | 12 +++-- lisp/mm-view.el | 20 +++++---- lisp/mml.el | 12 +++-- lisp/nndoc.el | 6 +++ lisp/nndraft.el | 9 +++- lisp/nnfolder.el | 4 ++ lisp/nnmail.el | 105 +++++++++++++++++++++++++++++-------------- lisp/nntp.el | 111 ++++++++++++++++++++++----------------------- texi/ChangeLog | 9 ++++ texi/emacs-mime.texi | 23 ++++++---- texi/gnus-ja.texi | 66 ++++++++++++++++++++++----- texi/gnus.texi | 91 ++++++++++++++++++++++++++----------- 27 files changed, 537 insertions(+), 220 deletions(-) diff --git a/ChangeLog b/ChangeLog index a321cc9..9366f60 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,23 @@ 1999-07-06 Katsumi Yamaoka + * lisp/gnus.el (gnus-version-number): Update to 6.11.06. + (gnus-revision-number): Fresh start from 00. + + * texi/{gnus-ja.texi,gnus.texi,emacs-mime.texi,ChangeLog}: Sync up + with Pterodactyl Gnus v0.92. + + * lisp/gnus-mlspl.el: New file copied from Pterodactyl Gnus v0.92. + + * lisp/{nntp.el,nnmail.el,nnfolder.el,nndraft.el,nndoc.el,mml.el, + mm-view.el,mm-util.el,mm-decode.el,message.el,gnus-xmas.el, + gnus-util.el,gnus-sum.el,gnus-start.el,gnus-mailcap.el, + gnus-group.el,gnus-art.el,gnus-agent.el,Makefile.in,ChangeLog}: + Sync up with Pterodactyl Gnus v0.92. + + * README.T-gnus: Update for T-gnus 6.11.06. + +1999-07-06 Katsumi Yamaoka + * lisp/gnus.el (gnus-revision-number): Increment to 01. * lisp/gnus-util.el (gnus-point-at-eol, gnus-point-at-bol): Use diff --git a/README.T-gnus b/README.T-gnus index 3b9a650..793696a 100644 --- a/README.T-gnus +++ b/README.T-gnus @@ -27,6 +27,6 @@ NEWS: * T-gnus 6.11 - this is based on Pterodactyl Gnus. - The latest T-gnus is T-gnus 6.11.05 (Based on pgnus-0.91). + The latest T-gnus is T-gnus 6.11.06 (Based on pgnus-0.92). It requires SEMI/WEMI-1.13, the latest FLIM-1.13, and the latest APEL (9.20 or later). diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9ce3a5b..2633f89 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,77 @@ +Tue Jul 6 10:59:24 1999 Lars Magne Ingebrigtsen + + * gnus.el: Pterodactyl Gnus v0.92 is released. + +1999-07-06 12:30:59 Johannes Weinert + + * gnus-sum.el (gnus-summary-catchup-and-exit): Doc fix. + +1999-07-06 07:41:07 Lars Magne Ingebrigtsen + + * nntp.el (nntp-retrieve-groups): Don't do anything when not + connected. + + * gnus-start.el (gnus-active-to-gnus-format): Only save active + when plugged. + + * mm-view.el (mm-inline-message): Ignore remove-spec. + + * gnus-agent.el (gnus-agent-write-active): Check whether orig sym + is bound. + + * gnus-msg.el (gnus-summary-mail-forward): Rename From_ lines. + + * nndoc.el (nndoc-guess-type): Remove blank lines at the start. + + * nnfolder.el (nnfolder-read-folder): Remove blank lines at the + start. + + * message.el (message-fill-yanked-message): Remove `t' arg. + + * gnus-group.el (gnus-group-kill-group): Message killing of + groups. + + * mm-util.el (mm-preferred-coding-system): New function. + (mm-mime-charset): Use it. + + * mml.el (mml-generate-mime-1): Charset-encode message parts. + +1999-07-06 07:03:31 Alexandre Oliva + + * gnus-mlsplt.el: New file. + +1999-07-06 05:47:57 Lars Magne Ingebrigtsen + + * mm-decode.el (mm-inline-Media-tests): Changed from forms to + functions. + (mm-attachment-override-p): Take a handle instead of a type. + (mm-inlined-p): Ditto. + (mm-automatic-display-p): Ditto, + (mm-inlinable-p): Ditto. + + * nndraft.el (nndraft-request-expire-articles): Delete backup + files. + + * mailcap.el (mailcap-parse-mailcap): Regexp-quote stuff. + + * gnus-sum.el (gnus-summary-limit-to-extra): Typo. + +1999-07-06 05:37:46 Alexandre Oliva + + * nnmail.el (nnmail-split-it): Allow .*. + +1999-07-05 05:04:57 Lars Magne Ingebrigtsen + + * mm-decode.el (mm-inline-large-images-p): Renamed. + + * gnus-art.el (article-date-ut): Always look in the current buffer + for the Date header. + + * mml.el (mml-validate): New command. + + * mailcap.el (mailcap-possible-viewers): Revert to string-match + since we are dealing with regexps. + Sun Jul 4 06:31:01 1999 Lars Magne Ingebrigtsen * gnus.el: Pterodactyl Gnus v0.91 is released. diff --git a/lisp/Makefile.in b/lisp/Makefile.in index 708d71b..cd53bd4 100644 --- a/lisp/Makefile.in +++ b/lisp/Makefile.in @@ -20,6 +20,8 @@ all total: warn: rm -f *.elc ; $(EMACS) $(FLAGS) --eval '(dgnushack-compile t)' 2>&1 | egrep -v "variable G|inhibit-point-motion-hooks|coding-system|temp-results|variable gnus|variable nn|scroll-in-place|deactivate-mark|filladapt-mode|byte-code-function-p|print-quoted|ps-right-header|ps-left-header|article-inhibit|print-escape|ssl-program-arguments|message-log-max" +# The "clever" rule is unsafe, since redefined macros are loaded from +# .elc files, and not the .el file. clever some: $(EMACS) $(FLAGS) -f dgnushack-compile diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index 1642fc9..e2a20a3 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -561,7 +561,7 @@ the actual number of articles toggled is returned." (defun gnus-agent-write-active (file new) (let ((orig (gnus-make-hashtable (count-lines (point-min) (point-max)))) (file (gnus-agent-lib-file "active")) - elem) + elem osym) (when (file-exists-p file) (with-temp-buffer (insert-file-contents-as-coding-system gnus-agent-file-coding-system @@ -570,7 +570,8 @@ the actual number of articles toggled is returned." (mapatoms (lambda (sym) (when (and sym (boundp sym)) - (if (setq elem (symbol-value (intern (symbol-name sym) orig))) + (if (and (boundp (setq osym (intern (symbol-name sym) orig))) + (setq elem (symbol-value osym))) (setcdr elem (cdr (symbol-value sym))) (set (intern (symbol-name sym) orig) (symbol-value sym))))) new)) diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 39a339e..2ab7476 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -595,9 +595,9 @@ displayed by the first non-nil matching CONTENT face." ("\221" "`") ("\222" "'") ("\223" "``") - ("\224" "''") + ("\224" "\"") ("\225" "*") - ("\226" "-") + ("\226" "---") ("\227" "-") ("\231" "(TM)") ("\233" ">") @@ -3086,7 +3086,7 @@ value of the variable `gnus-show-mime' is non-nil." (mm-pipe-part data))) (defun gnus-mime-view-part () - "Interactively choose a view method for the MIME part under point." + "Interactively choose a viewing method for the MIME part under point." (interactive) (gnus-article-check-buffer) (let ((data (get-text-property (point) 'gnus-data))) @@ -3136,7 +3136,7 @@ value of the variable `gnus-show-mime' is non-nil." (gnus-article-check-buffer) (let* ((handle (or handle (get-text-property (point) 'gnus-data))) (mm-user-display-methods nil) - (mm-all-images-fit t) + (mm-inline-large-images nil) (mail-parse-charset gnus-newsgroup-charset) (mail-parse-ignored-charsets (save-excursion (set-buffer gnus-summary-buffer) @@ -3151,7 +3151,7 @@ value of the variable `gnus-show-mime' is non-nil." (gnus-article-check-buffer) (let* ((handle (or handle (get-text-property (point) 'gnus-data))) (mm-user-display-methods '((".*" . inline))) - (mm-all-images-fit t) + (mm-inline-large-images t) (mail-parse-charset gnus-newsgroup-charset) (mail-parse-ignored-charsets (save-excursion (set-buffer gnus-summary-buffer) @@ -3417,9 +3417,9 @@ value of the variable `gnus-show-mime' is non-nil." (or (not (mm-handle-disposition handle)) (equal (car (mm-handle-disposition handle)) "inline") - (mm-attachment-override-p type))) - (mm-automatic-display-p type) - (or (mm-inlined-p type) + (mm-attachment-override-p handle))) + (mm-automatic-display-p handle) + (or (mm-inlined-p handle) (mm-automatic-external-display-p type))) (setq display t) (when (equal (car (split-string type "/")) diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index d9a7bb5..4e8f15f 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -2736,7 +2736,8 @@ of groups killed." (push (cons (car entry) (nth 2 entry)) gnus-list-of-killed-groups)) (gnus-group-change-level - (if entry entry group) gnus-level-killed (if entry nil level))) + (if entry entry group) gnus-level-killed (if entry nil level)) + (message "Killed group %s" group)) ;; If there are lots and lots of groups to be killed, we use ;; this thing instead. (let (entry) diff --git a/lisp/gnus-mailcap.el b/lisp/gnus-mailcap.el index b206be7..4c1fab9 100644 --- a/lisp/gnus-mailcap.el +++ b/lisp/gnus-mailcap.el @@ -376,7 +376,7 @@ If FORCE, re-parse even if already parsed." (cond ((eq ?* (or (char-after save-pos) 0)) ".*") ((= (point) save-pos) ".*") - (t (buffer-substring save-pos (point))))) + (t (regexp-quote (buffer-substring save-pos (point)))))) (skip-chars-forward "; \t\n") ;;; Got the major/minor chunks, now for the viewers/etc ;;; The first item _must_ be a viewer, according to the @@ -486,7 +486,7 @@ If FORCE, re-parse even if already parsed." (cond ((equal (car (car major)) minor) (setq exact (cons (cdr (car major)) exact))) - ((and minor (string= (car (car major)) minor)) + ((and minor (string-match (car (car major)) minor)) (setq wildcard (cons (cdr (car major)) wildcard)))) (setq major (cdr major))) (nconc (nreverse exact) (nreverse wildcard)))) diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index 69ce8dc..dc2a4e3 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -1765,7 +1765,7 @@ newsgroup." (insert ?\\)) ;; Let the Gnus agent save the active file. - (when (and gnus-agent real-active) + (when (and gnus-agent real-active gnus-plugged) (gnus-agent-save-active method)) ;; If these are groups from a foreign select method, we insert the diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index cae07eb..35dd853 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1478,7 +1478,6 @@ increase the score of each group you read." "t" gnus-article-toggle-headers "v" gnus-summary-verbose-headers "m" gnus-summary-toggle-mime - "h" gnus-article-treat-html "H" gnus-article-strip-headers-in-body "d" gnus-article-treat-dumbquotes) @@ -1637,7 +1636,6 @@ increase the score of each group you read." ["Capitalize sentences" gnus-article-capitalize-sentences t] ["CR" gnus-article-remove-cr t] ["Show X-Face" gnus-article-display-x-face t] - ["UnHTMLize" gnus-article-treat-html t] ["Rot 13" gnus-summary-caesar-message t] ["Unix pipe" gnus-summary-pipe-message t] ["Add buttons" gnus-article-add-buttons t] @@ -6203,7 +6201,7 @@ articles that are younger than AGE days." (intern (gnus-completing-read (symbol-name (car gnus-extra-headers)) - "Score extra header:" + "Limit extra header:" (mapcar (lambda (x) (cons (symbol-name x) x)) gnus-extra-headers) @@ -6756,7 +6754,7 @@ to guess what the document format is." (goto-char (point-min)) (or (search-forward "\n\n" nil t) (point))) (goto-char (point-min)) - (delete-matching-lines "^\\(Path\\):\\|^From ") + (delete-matching-lines "^Path:\\|^From ") (widen)) (unwind-protect (if (let ((gnus-newsgroup-ephemeral-charset gnus-newsgroup-charset) @@ -8355,7 +8353,7 @@ If ALL is non-nil, also mark ticked and dormant articles as read." (gnus-summary-catchup t quietly)) (defun gnus-summary-catchup-and-exit (&optional all quietly) - "Mark all articles not marked as unread in this newsgroup as read, then exit. + "Mark all unread articles in this group as read, then exit. If prefix argument ALL is non-nil, all articles are marked as read." (interactive "P") (when (gnus-summary-catchup all quietly nil 'fast) diff --git a/lisp/gnus-util.el b/lisp/gnus-util.el index 0b287cb..7adedd6 100644 --- a/lisp/gnus-util.el +++ b/lisp/gnus-util.el @@ -984,7 +984,9 @@ ARG is passed to the first function." (with-temp-file file (mapatoms (lambda (sym) - (when (and sym (boundp sym)) + (when (and sym + (boundp sym) + (symbol-value sym)) (insert (format "%s %d %d y\n" (symbol-name sym) (cdr (symbol-value sym)) (car (symbol-value sym)))))) @@ -994,7 +996,9 @@ ARG is passed to the first function." (with-temp-file file (mapatoms (lambda (sym) - (when (and sym (boundp sym)) + (when (and sym + (boundp sym) + (symbol-value sym)) (insert (format "%s %d %d y\n" (symbol-name sym) (cdr (symbol-value sym)) (car (symbol-value sym)))))) diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index 5e9a7ad..1446289 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -702,8 +702,7 @@ If it is non-nil, it must be a toolbar. The five valid values are [gnus-group-unsubscribe gnus-group-unsubscribe t "Unsubscribe group"] [gnus-group-subscribe gnus-group-subscribe t "Subscribe group"] [gnus-group-kill-group gnus-group-kill-group t "Kill group"] - [gnus-group-exit gnus-group-exit t "Exit Gnus"] - ) + [gnus-group-exit gnus-group-exit t "Exit Gnus"]) "The group buffer toolbar.") (defvar gnus-summary-toolbar diff --git a/lisp/gnus.el b/lisp/gnus.el index 50fb55d..2cb8c28 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -266,13 +266,13 @@ is restarted, and sometimes reloaded." (defconst gnus-product-name "ET-gnus" "Product name of this version of gnus.") -(defconst gnus-version-number "6.11.05" +(defconst gnus-version-number "6.11.06" "Version number for this version of gnus.") -(defconst gnus-revision-number "01" +(defconst gnus-revision-number "00" "Revision number for this version of gnus.") -(defconst gnus-original-version-number "0.91" +(defconst gnus-original-version-number "0.92" "Version number for this version of Gnus.") (provide 'running-pterodactyl-gnus-0_73-or-later) diff --git a/lisp/message.el b/lisp/message.el index d0db66a..83d83b1 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -203,7 +203,8 @@ Don't touch this variable unless you really know what you're doing. Checks include subject-cmsg multiple-headers sendsys message-id from long-lines control-chars size new-text redirected-followup signature approved sender empty empty-headers message-id from subject -shorten-followup-to existing-newsgroups buffer-file-name unchanged." +shorten-followup-to existing-newsgroups buffer-file-name unchanged +newsgroups." :group 'message-news) (defcustom message-required-news-headers @@ -1990,7 +1991,7 @@ Numeric argument means justify as well." (goto-char (point-min)) (search-forward (concat "\n" mail-header-separator "\n") nil t) (let ((fill-prefix message-yank-prefix)) - (fill-individual-paragraphs (point) (point-max) justifyp t)))) + (fill-individual-paragraphs (point) (point-max) justifyp)))) (defun message-indent-citation () "Modify text just inserted from a message to be cited. @@ -2364,6 +2365,8 @@ the user from the mailer." (car elem)))) (setq success (funcall (caddr elem) arg))))) (setq sent t)))) + (unless sent + (error "No methods specified to send by")) (prog1 (when (and success sent) (message-do-fcc) @@ -2807,6 +2810,15 @@ This sub function is for exclusive use of `message-send-news'." (defun message-check-news-header-syntax () (and + ;; Check Newsgroups header. + (message-check 'newsgroyps + (let ((group (message-fetch-field "newsgroups"))) + (or + (and group + (not (string-match "\\`[ \t]*\\'" group))) + (ignore + (message + "The newsgroups field is empty or missing. Posting is denied."))))) ;; Check the Subject header. (message-check 'subject (let* ((case-fold-search t) diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index 2c44713..3edcf57 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -57,32 +57,68 @@ ,disposition ,description ,cache ,id)) (defvar mm-inline-media-tests - '(("image/jpeg" mm-inline-image (mm-valid-and-fit-image-p 'jpeg handle)) - ("image/png" mm-inline-image (mm-valid-and-fit-image-p 'png handle)) - ("image/gif" mm-inline-image (mm-valid-and-fit-image-p 'gif handle)) - ("image/tiff" mm-inline-image (mm-valid-and-fit-image-p 'tiff handle)) - ("image/xbm" mm-inline-image (mm-valid-and-fit-image-p 'xbm handle)) - ("image/x-xbitmap" mm-inline-image (mm-valid-and-fit-image-p 'xbm handle)) - ("image/xpm" mm-inline-image (mm-valid-and-fit-image-p 'xpm handle)) - ("image/x-pixmap" mm-inline-image (mm-valid-and-fit-image-p 'xpm handle)) - ("image/bmp" mm-inline-image (mm-valid-and-fit-image-p 'bmp handle)) - ("text/plain" mm-inline-text t) - ("text/enriched" mm-inline-text t) - ("text/richtext" mm-inline-text t) - ("text/html" mm-inline-text (locate-library "w3")) - ("text/x-vcard" mm-inline-text (locate-library "vcard")) - ("message/delivery-status" mm-inline-text t) - ("message/rfc822" mm-inline-message t) - ("text/.*" mm-inline-text t) + '(("image/jpeg" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'jpeg handle))) + ("image/png" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'png handle))) + ("image/gif" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'gif handle))) + ("image/tiff" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'tiff handle)) ) + ("image/xbm" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'xbm handle))) + ("image/x-xbitmap" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'xbm handle))) + ("image/xpm" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'xpm handle))) + ("image/x-pixmap" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'xpm handle))) + ("image/bmp" + mm-inline-image + (lambda (handle) + (mm-valid-and-fit-image-p 'bmp handle))) + ("text/plain" mm-inline-text identity) + ("text/enriched" mm-inline-text identity) + ("text/richtext" mm-inline-text identity) + ("text/html" + mm-inline-text + (lambda (handle) + (locate-library "w3"))) + ("text/x-vcard" + mm-inline-text + (lambda (handle) + (locate-library "vcard"))) + ("message/delivery-status" mm-inline-text identity) + ("message/rfc822" mm-inline-message identity) + ("text/.*" mm-inline-text identity) ("audio/wav" mm-inline-audio - (and (or (featurep 'nas-sound) (featurep 'native-sound)) - (device-sound-enabled-p))) - ("audio/au" mm-inline-audio - (and (or (featurep 'nas-sound) (featurep 'native-sound)) - (device-sound-enabled-p))) - ("multipart/alternative" ignore t) - ("multipart/mixed" ignore t) - ("multipart/related" ignore t)) + (lambda (handle) + (and (or (featurep 'nas-sound) (featurep 'native-sound)) + (device-sound-enabled-p)))) + ("audio/au" + mm-inline-audio + (lambda (handle) + (and (or (featurep 'nas-sound) (featurep 'native-sound)) + (device-sound-enabled-p)))) + ("multipart/alternative" ignore identity) + ("multipart/mixed" ignore identity) + ("multipart/related" ignore identity)) "Alist of media types/test that say whether the media types can be displayed inline.") (defvar mm-inlined-types @@ -119,7 +155,7 @@ to: ("/tmp/")) "Where mm will store its temporary files.") -(defvar mm-all-images-fit nil +(defvar mm-inline-large-images nil "If non-nil, then all images fit in the buffer.") ;;; Internal variables. @@ -235,7 +271,7 @@ external if displayed external." (mm-remove-part handle) (let* ((type (car (mm-handle-type handle))) (method (mailcap-mime-info type))) - (if (mm-inlined-p type) + (if (mm-inlined-p handle) (progn (forward-line 1) (mm-display-inline handle) @@ -376,48 +412,52 @@ external if displayed external." (funcall function handle) (goto-char (point-min)))) -(defun mm-inlinable-p (type) - "Say whether TYPE can be displayed inline." +(defun mm-inlinable-p (handle) + "Say whether HANDLE can be displayed inline." (let ((alist mm-inline-media-tests) + (type (car (mm-handle-type handle))) test) (while alist (when (equal type (caar alist)) (setq test (caddar alist) alist nil) - (setq test (eval test))) + (setq test (funcall test handle))) (pop alist)) test)) -(defun mm-automatic-display-p (type) - "Say whether the user wants TYPE to be displayed automatically." +(defun mm-automatic-display-p (handle) + "Say whether the user wants HANDLE to be displayed automatically." (let ((methods mm-automatic-display) + (type (car (mm-handle-type handle))) method result) (while (setq method (pop methods)) (when (and (string-match method type) - (mm-inlinable-p type)) + (mm-inlinable-p handle)) (setq result t methods nil))) result)) -(defun mm-inlined-p (type) - "Say whether the user wants TYPE to be displayed automatically." +(defun mm-inlined-p (handle) + "Say whether the user wants HANDLE to be displayed automatically." (let ((methods mm-inlined-types) + (type (car (mm-handle-type handle))) method result) (while (setq method (pop methods)) (when (and (string-match method type) - (mm-inlinable-p type)) + (mm-inlinable-p handle)) (setq result t methods nil))) result)) -(defun mm-attachment-override-p (type) - "Say whether TYPE should have attachment behavior overridden." +(defun mm-attachment-override-p (handle) + "Say whether HANDLE should have attachment behavior overridden." (let ((types mm-attachment-override-types) + (type (car (mm-handle-type handle))) ty) (catch 'found (while (setq ty (pop types)) (when (and (string-match ty type) - (mm-inlinable-p type)) + (mm-inlinable-p handle)) (throw 'found t)))))) (defun mm-automatic-external-display-p (type) @@ -548,7 +588,7 @@ external if displayed external." (car (mm-handle-type (car h))))) (setq handle (car h)) (when (and (equal p type) - (mm-automatic-display-p type) + (mm-automatic-display-p (car h)) (or (stringp (caar h)) (not (mm-handle-disposition (car h))) (equal (car (mm-handle-disposition (car h))) @@ -615,7 +655,7 @@ external if displayed external." (defun mm-image-fit-p (handle) "Say whether the image in HANDLE will fit the current window." (let ((image (mm-get-image handle))) - (or mm-all-images-fit + (or mm-inline-large-images (and (< (glyph-width image) (window-pixel-width)) (< (glyph-height image) (window-pixel-height)))))) diff --git a/lisp/mm-util.el b/lisp/mm-util.el index 774e3b0..161d2ca 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -182,18 +182,22 @@ used as the line break code type of the coding system." (when (fboundp 'set-buffer-multibyte) (set-buffer-multibyte nil))) +(defun mm-preferred-coding-system (charset) + ;; A typo in some Emacs versions. + (or (get-charset-property charset 'prefered-coding-system) + (get-charset-property charset 'preffered-coding-system))) + (defun mm-mime-charset (charset) "Return the MIME charset corresponding to the MULE CHARSET." (if (fboundp 'coding-system-get) ;; This exists in Emacs 20. (or - (and (get-charset-property charset 'prefered-coding-system) + (and (mm-preferred-coding-system charset) (coding-system-get - (get-charset-property charset 'prefered-coding-system) - 'mime-charset)) + (mm-preferred-coding-system charset) 'mime-charset)) (and (eq charset 'ascii) 'us-ascii) - (get-charset-property charset 'prefered-coding-system) + (mm-preferred-coding-system charset) (mm-mule-charset-to-mime-charset charset)) ;; This is for XEmacs. (mm-mule-charset-to-mime-charset charset))) diff --git a/lisp/mm-view.el b/lisp/mm-view.el index 808c066..a4ef24e 100644 --- a/lisp/mm-view.el +++ b/lisp/mm-view.el @@ -101,7 +101,6 @@ (condition-case var (w3-region (point-min) (point-max)) (error))))) -;;; (narrow-to-region (1+ (point-min)) (point-max)) (mm-handle-set-undisplayer handle `(lambda () @@ -175,7 +174,8 @@ (goto-char (point-min))) (defun mm-inline-message (handle) - (let ((b (point)) gnus-displaying-mime handles) + (let ((b (point)) + gnus-displaying-mime handles) (save-excursion (save-restriction (narrow-to-region b b) @@ -184,17 +184,19 @@ (run-hooks 'gnus-article-decode-hook) (gnus-article-prepare-display) (setq handles gnus-article-mime-handles)) - (if handles - (setq gnus-article-mime-handles - (append gnus-article-mime-handles handles))) + (when handles + (setq gnus-article-mime-handles + (append gnus-article-mime-handles handles))) (mm-handle-set-undisplayer handle `(lambda () (let (buffer-read-only) - (mapc (lambda (prop) - (remove-specifier - (face-property 'default prop) (current-buffer))) - '(background background-pixmap foreground)) + (ignore-errors + ;; This is only valid on XEmacs. + (mapc (lambda (prop) + (remove-specifier + (face-property 'default prop) (current-buffer))) + '(background background-pixmap foreground))) (delete-region ,(point-min-marker) ,(point-max-marker))))))))) (provide 'mm-view) diff --git a/lisp/mml.el b/lisp/mml.el index a77c615..f70efc6 100644 --- a/lisp/mml.el +++ b/lisp/mml.el @@ -202,7 +202,7 @@ ((eq (car cont) 'part) (let (coded encoding charset filename type) (setq type (or (cdr (assq 'type cont)) "text/plain")) - (if (equal (car (split-string type "/")) "text") + (if (member (car (split-string type "/")) '("text" "message")) (with-temp-buffer (cond ((cdr (assq 'buffer cont)) @@ -511,7 +511,8 @@ ["Multipart" mml-insert-multipart t] ["Part" mml-insert-part t]) ["Quote" mml-quote-region t] - ["Validate" mml-validate t])) + ["Validate" mml-validate t] + ["Preview" mml-preview t])) (defvar mml-mode nil "Minor mode for editing MML.") @@ -689,7 +690,12 @@ If RAW, don't highlight the article." (fundamental-mode) (setq buffer-read-only t) (goto-char (point-min)))) - + +(defun mml-validate () + "Validate the current MML document." + (interactive) + (mml-parse)) + (provide 'mml) ;;; mml.el ends here diff --git a/lisp/nndoc.el b/lisp/nndoc.el index df172a6..8cd81b1 100644 --- a/lisp/nndoc.el +++ b/lisp/nndoc.el @@ -339,6 +339,9 @@ from the document.") (setq entry (pop alist))) (when (memq subtype (or (cdr (assq 'subtype entry)) '(guess))) (goto-char (point-min)) + ;; Remove blank lines. + (while (eq (following-char) ?\n) + (delete-char 1)) (when (numberp (setq result (funcall (intern (format "nndoc-%s-type-p" (car entry)))))) @@ -579,6 +582,9 @@ from the document.") (save-excursion (set-buffer nndoc-current-buffer) (goto-char (point-min)) + ;; Remove blank lines. + (while (eq (following-char) ?\n) + (delete-char 1)) ;; Find the beginning of the file. (when nndoc-file-begin (nndoc-search nndoc-file-begin)) diff --git a/lisp/nndraft.el b/lisp/nndraft.el index 33e0a66..2866da5 100644 --- a/lisp/nndraft.el +++ b/lisp/nndraft.el @@ -173,7 +173,14 @@ (let ((auto (nndraft-auto-save-file-name (nndraft-article-filename article)))) (when (file-exists-p auto) - (funcall nnmail-delete-file-function auto))))) + (funcall nnmail-delete-file-function auto))) + (dolist (backup + (let ((kept-new-versions 1) + (kept-old-versions 0)) + (cdr (find-backup-file-name + (nndraft-article-filename article))))) + (when (file-exists-p backup) + (funcall nnmail-delete-file-function backup))))) res)) (deffoo nndraft-request-accept-article (group &optional server last noinsert) diff --git a/lisp/nnfolder.el b/lisp/nnfolder.el index 1a5bcf8..c4f2416 100644 --- a/lisp/nnfolder.el +++ b/lisp/nnfolder.el @@ -712,6 +712,10 @@ deleted. Point is left where the deleted region was." (save-buffer)) ;; Parse the damn thing. (save-excursion + (goto-char (point-min)) + ;; Remove any blank lines at the start. + (while (eq (following-char) ?\n) + (delete-char 1)) (nnmail-activate 'nnfolder) ;; Read in the file. (let ((delim "^From ") diff --git a/lisp/nnmail.el b/lisp/nnmail.el index 9f1bfc6..2d5225f 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -292,8 +292,12 @@ the following: GROUP: Mail will be stored in GROUP (a string). -\(FIELD VALUE SPLIT): If the message field FIELD (a regexp) contains - VALUE (a regexp), store the messages as specified by SPLIT. +\(FIELD VALUE [- RESTRICT [- RESTRICT [...]]] SPLIT): If the message + field FIELD (a regexp) contains VALUE (a regexp), store the messages + as specified by SPLIT. If RESTRICT (a regexp) matches some string + after FIELD and before the end of the matched VALUE, return NIL, + otherwise process SPLIT. Multiple RESTRICTs add up, further + restricting the possibility of processing SPLIT. \(| SPLIT...): Process each SPLIT expression until one of them matches. A SPLIT expression is said to match if it will cause the mail @@ -305,6 +309,10 @@ GROUP: Mail will be stored in GROUP (a string). the buffer containing the message headers. The return value FUNCTION should be a split, which is then recursively processed. +\(! FUNCTION SPLIT): Call FUNCTION with the result of SPLIT. The + return value FUNCTION should be a split, which is then recursively + processed. + FIELD must match a complete field name. VALUE must match a complete word according to the `nnmail-split-fancy-syntax-table' syntax table. You can use \".*\" in the regexps to match partial field names or words. @@ -332,6 +340,13 @@ Example: ;; Other mailing lists... (any \"procmail@informatik\\\\.rwth-aachen\\\\.de\" \"procmail.list\") (any \"SmartList@informatik\\\\.rwth-aachen\\\\.de\" \"SmartList.list\") + ;; Both lists below have the same suffix, so prevent + ;; cross-posting to mkpkg.list of messages posted only to + ;; the bugs- list, but allow cross-posting when the + ;; message was really cross-posted. + (any \"bugs-mypackage@somewhere\" \"mypkg.bugs\") + (any \"mypackage@somewhere\" - \"bugs-mypackage\" \"mypkg.list\") + ;; ;; People... (any \"larsi@ifi\\\\.uio\\\\.no\" \"people.Lars Magne Ingebrigtsen\")) ;; Unmatched mail goes to the catch all group. @@ -1105,47 +1120,71 @@ See the documentation for the variable `nnmail-split-fancy' for documentation." ;; Check the cache for the regexp for this split. ((setq cached-pair (assq split nnmail-split-cache)) - (goto-char (point-max)) - ;; FIX FIX FIX problem with re-search-backward is that if you have - ;; a split: (from "foo-\\(bar\\|baz\\)@gnus.org "mail.foo.\\1") - ;; and someone mails a message with 'To: foo-bar@gnus.org' and - ;; 'CC: foo-baz@gnus.org', we'll pick 'mail.foo.baz' as the group - ;; if the cc line is a later header, even though the other choice - ;; is probably better. Also, this routine won't do a crosspost - ;; when there are two different matches. - ;; I guess you could just make this more determined, and it could - ;; look for still more matches prior to this one, and recurse - ;; on each of the multiple matches hit. Of course, then you'd - ;; want to make sure that nnmail-article-group or nnmail-split-fancy - ;; removed duplicates, since there might be more of those. - ;; I guess we could also remove duplicates in the & split case, since - ;; that's the only thing that can introduce them. - (when (re-search-backward (cdr cached-pair) nil t) + (let (split-result + (end-point (point-max)) + (value (nth 1 split))) + (if (symbolp value) + (setq value (cdr (assq value nnmail-split-abbrev-alist)))) + (while (and (goto-char end-point) + (re-search-backward (cdr cached-pair) nil t)) (when nnmail-split-tracing (push (cdr cached-pair) nnmail-split-trace)) - ;; Someone might want to do a \N sub on this match, so get the - ;; correct match positions. - (goto-char (match-end 0)) - (let ((value (nth 1 split))) - (re-search-backward (if (symbolp value) - (cdr (assq value nnmail-split-abbrev-alist)) - value) - (match-end 1))) - (nnmail-split-it (nth 2 split)))) + (let ((split-rest (cddr split)) + (end (match-end 0)) + ;; The searched regexp is \(\(FIELD\).*\)\(VALUE\). So, + ;; start-of-value is the the point just before the + ;; beginning of the value, whereas after-header-name is + ;; the point just after the field name. + (start-of-value (match-end 1)) + (after-header-name (match-end 2))) + ;; Start the next search just before the beginning of the + ;; VALUE match. + (setq end-point (1- start-of-value)) + ;; Handle - RESTRICTs + (while (eq (car split-rest) '-) + ;; RESTRICT must start after-header-name and + ;; end after start-of-value, so that, for + ;; (any "foo" - "x-foo" "foo.list") + ;; we do not exclude foo.list just because + ;; the header is: ``To: x-foo, foo'' + (goto-char end) + (if (and (re-search-backward (cadr split-rest) + after-header-name t) + (> (match-end 0) start-of-value)) + (setq split-rest nil) + (setq split-rest (cddr split-rest)))) + (when split-rest + (goto-char end) + (let ((value (nth 1 split))) + (if (symbolp value) + (setq value (cdr (assq value nnmail-split-abbrev-alist)))) + ;; Someone might want to do a \N sub on this match, so get the + ;; correct match positions. + (re-search-backward value start-of-value)) + (dolist (sp (nnmail-split-it (car split-rest))) + (unless (memq sp split-result) + (push sp split-result)))))) + split-result)) ;; Not in cache, compute a regexp for the field/value pair. (t (let* ((field (nth 0 split)) (value (nth 1 split)) - (regexp (concat "^\\(\\(" + partial regexp) + (if (symbolp value) + (setq value (cdr (assq value nnmail-split-abbrev-alist)))) + (if (string= ".*" (substring value 0 2)) + (setq value (substring value 2) + partial "")) + (setq regexp (concat "^\\(\\(" (if (symbolp field) (cdr (assq field nnmail-split-abbrev-alist)) field) - "\\):.*\\)\\<\\(" - (if (symbolp value) - (cdr (assq value nnmail-split-abbrev-alist)) - value) - "\\)\\>"))) + "\\):.*\\)" + (or partial "\\<") + "\\(" + value + "\\)\\>")) (push (cons split regexp) nnmail-split-cache) ;; Now that it's in the cache, just call nnmail-split-it again ;; on the same split, which will find it immediately in the cache. diff --git a/lisp/nntp.el b/lisp/nntp.el index e60dd86..f2bc3d9 100644 --- a/lisp/nntp.el +++ b/lisp/nntp.el @@ -480,64 +480,65 @@ noticing asynchronous data.") (deffoo nntp-retrieve-groups (groups &optional server) "Retrieve group info on GROUPS." (nntp-possibly-change-group nil server) - (save-excursion - (set-buffer (nntp-find-connection-buffer nntp-server-buffer)) - ;; The first time this is run, this variable is `try'. So we - ;; try. - (when (eq nntp-server-list-active-group 'try) - (nntp-try-list-active (car groups))) - (erase-buffer) - (let ((count 0) - (received 0) - (last-point (point-min)) - (nntp-inhibit-erase t) - (command (if nntp-server-list-active-group "LIST ACTIVE" "GROUP"))) - (while groups - ;; Send the command to the server. - (nntp-send-command nil command (pop groups)) - (incf count) - ;; Every 400 requests we have to read the stream in - ;; order to avoid deadlocks. - (when (or (null groups) ;All requests have been sent. - (zerop (% count nntp-maximum-request))) - (nntp-accept-response) - (while (progn - (goto-char last-point) - ;; Count replies. - (while (re-search-forward "^[0-9]" nil t) - (incf received)) - (setq last-point (point)) - (< received count)) - (nntp-accept-response)))) + (when (nntp-find-connection-buffer nntp-server-buffer) + (save-excursion + (set-buffer (nntp-find-connection-buffer nntp-server-buffer)) + ;; The first time this is run, this variable is `try'. So we + ;; try. + (when (eq nntp-server-list-active-group 'try) + (nntp-try-list-active (car groups))) + (erase-buffer) + (let ((count 0) + (received 0) + (last-point (point-min)) + (nntp-inhibit-erase t) + (command (if nntp-server-list-active-group "LIST ACTIVE" "GROUP"))) + (while groups + ;; Send the command to the server. + (nntp-send-command nil command (pop groups)) + (incf count) + ;; Every 400 requests we have to read the stream in + ;; order to avoid deadlocks. + (when (or (null groups) ;All requests have been sent. + (zerop (% count nntp-maximum-request))) + (nntp-accept-response) + (while (progn + (goto-char last-point) + ;; Count replies. + (while (re-search-forward "^[0-9]" nil t) + (incf received)) + (setq last-point (point)) + (< received count)) + (nntp-accept-response)))) - ;; Wait for the reply from the final command. - (goto-char (point-max)) - (re-search-backward "^[0-9]" nil t) - (when (looking-at "^[23]") - (while (progn - (goto-char (point-max)) - (if (not nntp-server-list-active-group) - (not (re-search-backward "\r?\n" (- (point) 3) t)) - (not (re-search-backward "^\\.\r?\n" (- (point) 4) t)))) - (nntp-accept-response))) - - ;; Now all replies are received. We remove CRs. - (goto-char (point-min)) - (while (search-forward "\r" nil t) - (replace-match "" t t)) + ;; Wait for the reply from the final command. + (goto-char (point-max)) + (re-search-backward "^[0-9]" nil t) + (when (looking-at "^[23]") + (while (progn + (goto-char (point-max)) + (if (not nntp-server-list-active-group) + (not (re-search-backward "\r?\n" (- (point) 3) t)) + (not (re-search-backward "^\\.\r?\n" (- (point) 4) t)))) + (nntp-accept-response))) - (if (not nntp-server-list-active-group) - (progn - (copy-to-buffer nntp-server-buffer (point-min) (point-max)) - 'group) - ;; We have read active entries, so we just delete the - ;; superfluous gunk. + ;; Now all replies are received. We remove CRs. (goto-char (point-min)) - (while (re-search-forward "^[.2-5]" nil t) - (delete-region (match-beginning 0) - (progn (forward-line 1) (point)))) - (copy-to-buffer nntp-server-buffer (point-min) (point-max)) - 'active)))) + (while (search-forward "\r" nil t) + (replace-match "" t t)) + + (if (not nntp-server-list-active-group) + (progn + (copy-to-buffer nntp-server-buffer (point-min) (point-max)) + 'group) + ;; We have read active entries, so we just delete the + ;; superfluous gunk. + (goto-char (point-min)) + (while (re-search-forward "^[.2-5]" nil t) + (delete-region (match-beginning 0) + (progn (forward-line 1) (point)))) + (copy-to-buffer nntp-server-buffer (point-min) (point-max)) + 'active))))) (deffoo nntp-retrieve-articles (articles &optional group server) (nntp-possibly-change-group group server) diff --git a/texi/ChangeLog b/texi/ChangeLog index 83731fa..82e9ed7 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,12 @@ +1999-07-06 11:41:59 Lars Magne Ingebrigtsen + + * gnus.texi (Mail Source Specifiers): Fix. + (Mail Source Customization): Deleted obsolete vars. + +1999-07-05 05:16:55 Laura Conrad + + * gnus.texi (Mail in a Newsreader): Rewrite. + 1999-07-04 04:33:50 Lars Magne Ingebrigtsen * gnus.texi (Posting Styles): Fix. diff --git a/texi/emacs-mime.texi b/texi/emacs-mime.texi index 5e805fa..93e1d6e 100644 --- a/texi/emacs-mime.texi +++ b/texi/emacs-mime.texi @@ -859,21 +859,21 @@ This variable specifies whether a part @emph{can} be displayed inline, and, if so, how to do it. It does not say whether parts are @emph{actually} displayed inline. -@item mm-inlines-types +@item mm-inlined-types This, on the other hand, says what types are to be displayed inline, if they satisfy the conditions set by the variable above. It's a list of @sc{mime} media types. @item mm-automatic-display This is a list of types that are to be displayed ``automatically'', but -only if the above variable allows it. That is, only inlinable parts are -usually displayed automatically, but in the end, this is up to the -display agent that's using the @sc{mime} library. +only if the above variable allows it. That is, only inlinable parts can +be displayed automatically. @item mm-attachment-override-types Some @sc{mime} agents create parts that have a content-disposition of @samp{attachment}. This variable allows overriding that disposition and -displaying the part inline. +displaying the part inline. (Note that the disposition is only +overridden if we are able to, and want to, display the part inline.) @item mm-discouraged-alternatives List of @sc{mime} types that are discouraged when viewing @@ -888,9 +888,16 @@ then the value of this variable should be set to: ("text/html" "text/richtext") @end lisp -@item mm-all-images-fit -If non-@code{nil}, all images will be deemed to fit into the buffer, -even when they don't. +@item mm-inline-large-images-p +When displaying inline images that are larger than the window, XEmacs +does not enable scrolling, which means that you cannot see the whole +image. To prevent this, the library tries to determine the image size +before displaying it inline, and if it doesn't fit the window, the +library will display it externally (e.g. with @samp{ImageMagick} or +@samp{xv}). Setting this variable to @code{t} disables this check and +makes the library display all inline images as inline, regardless of +their size. + @end table diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 27bb6dd..ea1622d 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -9264,17 +9264,26 @@ gnus $B$O$U$D$&F1$8H$7$F2<$5$$!#(B -$B$7$P$i$/%a!<%k$H%K%e!<%9$NN>J}$r;H$C$F$_$l$P!"G[Aw$N;EAH$_$N0c$$$,=EMW(B -$B$G$O$J$$$3$H$K5$$,IU$-$^$9!#Bg;v$J$N$O5-;v$rJ}$r;H$C$F$_$l$P!"5-;v$N.?M?t$KMxMQ$5$l$F$$$k%m!<%+%k(B -$B%K%e!<%9%0%k!<%W$r9VFI$7$F$$$^$9!#$=$l$i$O(B NNTP $B$GG[Aw$5$l$k!"%K%e!<%9!"(B -$B$G$9!#(B +$BG[Aw$5$l$k!"%a!<%k!"$G$9!#$=$l$i$N5-;v$r$H$F$bCm0U?<$/FI$s$G$$$k$K$b$+(B +$B$+$o$i$:!"2?=54V$bJV;v$,L5$$$3$H$,$"$k$G$7$g$&!#;d$?$A$O$=$&$$$&5-;v$r(B +$B%;!<%V$9$kI,MW$O$"$j$^$;$s!#$J$<$J$i$P!"$b$&0lEYFI$`I,MW$,@8$8$F$b!"$=(B +$B$l$i$O$I$3$+$KJ]B8$5$l$F$$$k$+$i$G$9!#(B + +$B$"$k?M$?$A$O>.?M?t$KMxMQ$5$l$F$$$k%m!<%+%k%K%e!<%9%0%k!<%W$r9VFI$7$F$$(B +$B$^$9!#$=$l$i$O(B NNTP $B$GG[Aw$5$l$k!"%K%e!<%9!"$G$9!#;d$?$A$O<+J,$N;E;v$K(B +$BLrN)$F$k$?$a$K!"$=$l$i$NKDBg$J5-;v$NCGJR$rFI$s$@$jJV;v$r$7$J$1$l$P$J$j(B +$B$^$;$s!#$=$7$F$=$l$i$OJ]B8$5$l$F$$$J$$$+$b$7$l$^$;$s$+$i!"6=L#$N$"$k5-(B +$B;v$r8D?M%a!<%k$HF1$8$h$&$KJ]B8$7$J$1$l$P$J$i$J$$$G$7$g$&!#(B + +$BG[Aw$N;EAH$_$N0c$$$O$I$&$G$b$h$$$3$H$G!"Bg;v$J$N$O$$$+$Kl9g$ ;; $BB>$N%a!<%j%s%0%j%9%H(B... (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list") (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list") + ;; Both lists below have the same suffix, so prevent + ;; cross-posting to mkpkg.list of messages posted only to + ;; the bugs- list, but allow cross-posting when the + ;; message was really cross-posted. + (any "bugs-mypackage@@somewhere" "mypkg.bugs") + (any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list") ;; $B?M!9(B... (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen")) ;; $B9gCW$7$J$+$C$?%a!<%k$OA4$F$rJa$^$($k%0%k!<%W$X9T$-$^$9!#(B @@ -15842,12 +15857,15 @@ Russ Allbery, Peter Arius, Matt Armstrong, Marc Auslander, +Miles Bader, +Alexei V. Barantsev, Frank Bennett, Robert Bihlmeyer, Chris Bone, Mark Borges, Mark Boyns, Lance A. Brown, +Rob Browning, Kees de Bruin, Martin Buchholz, Joe Buehler, @@ -15860,8 +15878,13 @@ Castor, David Charlap, Dan Christensen, Kevin Christian, +Jae-you Chung, @c ? +James H. Cloos, Jr., +Laura Conrad, Michael R. Cook, Glenn Coombs, +Andrew J. Cosgriff, +Neil Crellin, Frank D. Cringle, Geoffrey T. Dairiki, Andre Deparade, @@ -15872,12 +15895,16 @@ Joev Dubach, Michael Welsh Duggan, Dave Edmondson, Paul Eggert, +Mark W. Eichin, +Karl Eichwalder, Enami Tsugutomo, @c Enami Michael Ernst, Luc Van Eycken, Sam Falkner, Nelson Jose dos Santos Ferreira, Sigbjorn Finne, +Sven Fischer, +Paul Fisher, Decklin Foster, Gary D. Foster, Paul Franklin, @@ -15885,6 +15912,7 @@ Guy Geens, Arne Georg Gleditsch, David S. Goldberg, Michelangelo Grigni, +Dale Hagglund, D. Hall, Magnus Hammerin, Kenichi Handa, @c Handa @@ -15892,29 +15920,36 @@ Raja R. Harinath, Yoshiki Hayashi, @c ? P. E. Jareth Hein, Hisashige Kenji, @c Hisashige +Scott Hofmann, Marc Horowitz, Gunnar Horrigmo, Richard Hoskins, Brad Howes, +Miguel de Icaza, Fran,Ag(Bois Felix Ingrand, +Tatsuya Ichikawa, @c ? Ishikawa Ichiro, @c Ishikawa Lee Iverson, Iwamuro Motonori, @c Iwamuro Rajappa Iyer, Andreas Jaeger, +Adam P. Jenkins, Randell Jesup, Fred Johansen, Gareth Jones, Simon Josefsson, Greg Klanderman, Karl Kleinpaste, +Michael Klingbeil, Peter Skov Knudsen, Shuhei Kobayashi, @c Kobayashi +Petr Konecny, Koseki Yoshinori, @c Koseki Thor Kristoffersen, Jens Lautenbacher, Martin Larose, Seokchan Lee, @c Lee +Joerg Lenneis, Carsten Leonhardt, James LewisMoss, Christian Limpach, @@ -15941,11 +15976,13 @@ Alexandre Oliva, Ken Olstad, Masaharu Onishi, @c Onishi Hideki Ono, @c Ono +Ettore Perazzoli, William Perry, Stephen Peters, Jens-Ulrik Holger Petersen, Ulrich Pfeifer, Matt Pharr, +Andy Piper, John McClary Prevost, Bill Pringlemeir, Mike Pullen, @@ -15958,10 +15995,12 @@ Renaud Rioboo, Roland B. Roberts, Bart Robinson, Christian von Roques, +Markus Rost, Jason Rumney, Wolfgang Rupprecht, Jay Sachs, Dewey M. Sasser, +Conrad Sauerwald, Loren Schall, Dan Schmidt, Ralph Schleicher, @@ -15979,26 +16018,33 @@ Darren Stalder, Richard Stallman, Greg Stark, Sam Steingold, +Paul Stevenson, +Jonas Steverud, Paul Stodghill, +Kiyokazu Suto, @c Suto Kurt Swanson, Samuel Tardieu, Teddy, Chuck Thompson, +Tozawa Akihiko, @c Tozawa Philippe Troin, James Troup, Trung Tran-Duc, +Jack Twilley, Aaron M. Ucko, Aki Vehtari, Didier Verna, +Vladimir Volovich, Jan Vroonhof, Stefan Waldherr, Pete Ware, Barry A. Warsaw, Christoph Wedler, Joe Wells, -Katsumi Yamaoka, @c Yamaoka +Lee Willis, +Katsumi Yamaoka @c Yamaoka and -Shenghuo Zhu. @c Zhu +Lloyd Zusman. $B$=$l$>$l$N?M!9$,9T$C$?;v$N40A4$J354Q$rF@$k$?$a$K!"(BChangeLog $B$,(B Gnus $B$N%"(B $B%k%U%!G[I[$K$O4^$^$l$F$$$F!"K-IY$JFI$_J*$rM?$($k$G$7$g$&!#(B(550KB $B$H$$$/(B diff --git a/texi/gnus.texi b/texi/gnus.texi index 7b520f2..fdb7278 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -9923,7 +9923,7 @@ of a culture shock. Gnus does not behave like traditional mail readers. If you want to make it behave that way, you can, but it's an uphill battle. -Gnus, by default, handles all its group using the same approach. This +Gnus, by default, handles all its groups using the same approach. This approach is very newsreaderly---you enter a group, see the new/unread messages, and when you read the messages, they get marked as read, and you don't see them any more. (Unless you explicitly ask for them.) @@ -9940,18 +9940,28 @@ you. The expire process for mail is covered in depth in @pxref{Expiring Mail}. What many Gnus users find, after using it a while for both news and -mail, is that the transport becomes more and more irrelevant. What -becomes important is the size of the receiving audience. +mail, is that the transport mechanism has very little to do with how +they want to treat a message. Many people subscribe to several mailing lists. These are transported -via SMTP, and are therefore mail. Some people have local news groups -which have only a handful of readers. These are transported via NNTP, -and are therefore news. +via SMTP, and are therefore mail. But we might go for weeks without +answering, or even reading these messages very carefully. We may not +need to save them because if we should need to read one again, they are +archived somewhere else. + +Some people have local news groups which have only a handful of readers. +These are transported via NNTP, and are therefore news. But we may need +to read and answer a large fraction of the messages very carefully in +order to do our work. And there may not be an archive, so we may need +to save the interesting messages the same way we would personal mail. The important distinction turns out to be not the transport mechanism, -but whether the messages are @dfn{personal} or @dfn{public}. Many users -then subtly alter the behavior of Gnus according to these two -categories. +but other factors such as how interested we are in the subject matter, +or how easy it is to retrieve the message if we need to read it again. + +Gnus provides many options for sorting mail into ``groups'' which behave +like newsgroups, and for treating each group (whether mail or news) +differently. Some users never get comfortable using the Gnus (ahem) paradigm and wish that Gnus should grow up and be a male, er, mail reader. It is possible @@ -10111,8 +10121,8 @@ POP mail server, or from a procmail directory, for instance. @cindex mail spool @cindex mail source -You tell Gnus how to fetch mail by creating a @dfn{mail source -specifier}. +You tell Gnus how to fetch mail by setting @code{mail-sources} +(@pxref{Fetching Mail}) to a @dfn{mail source specifier}. Here's an example: @@ -10315,19 +10325,6 @@ fetched. You would normally not need to set or change any of these variables. @table @code -@item mail-source-movemail-program -@vindex mail-source-movemail-program -A command to be executed to move mail from the inbox. The default is -@samp{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. - -@item mail-source-movemail-args -@vindex mail-source-movemail-args -Extra arguments to give to the command described above. - @item mail-source-crash-box @vindex mail-source-crash-box File where mail will be stored while processing it. The default is @@ -10489,6 +10486,12 @@ Let's look at an example value of this variable first: ;; Other mailing lists... (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list") (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list") + ;; Both lists below have the same suffix, so prevent + ;; cross-posting to mkpkg.list of messages posted only to + ;; the bugs- list, but allow cross-posting when the + ;; message was really cross-posted. + (any "bugs-mypackage@@somewhere" "mypkg.bugs") + (any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list") ;; People... (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen")) ;; Unmatched mail goes to the catch all group. @@ -10507,9 +10510,12 @@ name. Normal regexp match expansion will be done. See below for examples. @item -@var{(FIELD VALUE SPLIT)}: If the split is a list, the first element of -which is a string, then store the message as specified by SPLIT, if -header FIELD (a regexp) contains VALUE (also a regexp). +@var{(FIELD VALUE [- RESTRICT [- RESTRICT [...]]] SPLIT)}: If the split +is a list, the first element of which is a string, then store the +message as specified by SPLIT, if header FIELD (a regexp) contains VALUE +(also a regexp). If RESTRICT (yet another regexp) matches some string +after FIELD and before the end of the matched VALUE, the SPLIT is +ignored. If none of the RESTRICT clauses match, SPLIT is processed. @item @var{(| SPLIT...)}: If the split is a list, and the first element is @@ -16972,12 +16978,14 @@ Peter Arius, Matt Armstrong, Marc Auslander, Miles Bader, +Alexei V. Barantsev, Frank Bennett, Robert Bihlmeyer, Chris Bone, Mark Borges, Mark Boyns, Lance A. Brown, +Rob Browning, Kees de Bruin, Martin Buchholz, Joe Buehler, @@ -16990,8 +16998,13 @@ Castor, David Charlap, Dan Christensen, Kevin Christian, +Jae-you Chung, @c ? +James H. Cloos, Jr., +Laura Conrad, Michael R. Cook, Glenn Coombs, +Andrew J. Cosgriff, +Neil Crellin, Frank D. Cringle, Geoffrey T. Dairiki, Andre Deparade, @@ -17002,6 +17015,7 @@ Joev Dubach, Michael Welsh Duggan, Dave Edmondson, Paul Eggert, +Mark W. Eichin, Karl Eichwalder, Enami Tsugutomo, @c Enami Michael Ernst, @@ -17009,6 +17023,7 @@ Luc Van Eycken, Sam Falkner, Nelson Jose dos Santos Ferreira, Sigbjorn Finne, +Sven Fischer, Paul Fisher, Decklin Foster, Gary D. Foster, @@ -17025,24 +17040,30 @@ Raja R. Harinath, Yoshiki Hayashi, @c ? P. E. Jareth Hein, Hisashige Kenji, @c Hisashige +Scott Hofmann, Marc Horowitz, Gunnar Horrigmo, Richard Hoskins, Brad Howes, +Miguel de Icaza, François Felix Ingrand, +Tatsuya Ichikawa, @c ? Ishikawa Ichiro, @c Ishikawa Lee Iverson, Iwamuro Motonori, @c Iwamuro Rajappa Iyer, Andreas Jaeger, +Adam P. Jenkins, Randell Jesup, Fred Johansen, Gareth Jones, Simon Josefsson, Greg Klanderman, Karl Kleinpaste, +Michael Klingbeil, Peter Skov Knudsen, Shuhei Kobayashi, @c Kobayashi +Petr Konecny, Koseki Yoshinori, @c Koseki Thor Kristoffersen, Jens Lautenbacher, @@ -17075,6 +17096,7 @@ Alexandre Oliva, Ken Olstad, Masaharu Onishi, @c Onishi Hideki Ono, @c Ono +Ettore Perazzoli, William Perry, Stephen Peters, Jens-Ulrik Holger Petersen, @@ -17116,18 +17138,23 @@ Darren Stalder, Richard Stallman, Greg Stark, Sam Steingold, +Paul Stevenson, Jonas Steverud, Paul Stodghill, +Kiyokazu Suto, @c Suto Kurt Swanson, Samuel Tardieu, Teddy, Chuck Thompson, +Tozawa Akihiko, @c Tozawa Philippe Troin, James Troup, Trung Tran-Duc, +Jack Twilley, Aaron M. Ucko, Aki Vehtari, Didier Verna, +Vladimir Volovich, Jan Vroonhof, Stefan Waldherr, Pete Ware, @@ -19063,6 +19090,16 @@ Under the subject "foo1", you wrote on 01.01.1999: Allow "orphan" scores in the Agent scoring. @item +@example + - Edit article's summary line. + - End edit + - Sort lines in buffer by subject + + --> the old subject line appears in Summary buffer, not the one that was + just changed to. +@end example + +@item Solve the halting problem. @c TODO -- 1.7.10.4