From b14ba71ca00ad909b738bad1898f1908c0e6d2eb Mon Sep 17 00:00:00 2001 From: ichikawa Date: Sun, 11 Oct 1998 14:24:06 +0000 Subject: [PATCH] Sync up with pgnus-0.34 --- ChangeLog | 7 +++ GNUS-NEWS | 3 ++ Makefile.in | 2 +- README.ichikawa | 9 +++- lisp/ChangeLog | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++ lisp/Makefile.in | 11 ++--- lisp/gnus-agent.el | 12 +++-- lisp/gnus-art.el | 60 ++++++++++++++++++------ lisp/gnus-async.el | 12 +++-- lisp/gnus-cache.el | 2 + lisp/gnus-mailcap.el | 2 +- lisp/gnus-offline.el | 1 + lisp/gnus-score.el | 4 +- lisp/gnus-soup.el | 36 +++++++------- lisp/gnus-sum.el | 39 ++++++++++++---- lisp/gnus-uu.el | 5 +- lisp/gnus-xmas.el | 16 ------- lisp/gnus.el | 6 +-- lisp/message.el | 6 ++- lisp/mm-bodies.el | 18 +++++-- lisp/mm-decode.el | 32 +++++++++---- lisp/mm-util.el | 3 +- lisp/mm-view.el | 30 +++++++++--- lisp/nnbabyl.el | 2 +- lisp/nndraft.el | 13 ++---- lisp/nnmail.el | 6 +-- lisp/nnmbox.el | 4 +- lisp/nnml.el | 2 +- lisp/nnvirtual.el | 22 ++++++--- lisp/parse-time.el | 5 +- texi/ChangeLog | 9 ++++ texi/Makefile.in | 1 + texi/emacs-mime.texi | 4 +- texi/gnus.texi | 90 +++++++++++++++++++++++++++-------- texi/message.texi | 6 +-- 35 files changed, 450 insertions(+), 157 deletions(-) diff --git a/ChangeLog b/ChangeLog index bfae2b5..556ba9f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +1998-10-11 Tatsuya Ichikawa + + * lisp/gnus.el (gnus-version-number): Update to 6.10.023. + Add version information for SEMI-1.9/FLIM-1.10. + + * Sync up with Pterodactyl Gnus 0.34. + 1998-10-10 Katsumi Yamaoka * lisp/gnus-msg.el (gnus-message-make-user-agent): Fix typo in doc diff --git a/GNUS-NEWS b/GNUS-NEWS index 75306e1..a2ca24f 100644 --- a/GNUS-NEWS +++ b/GNUS-NEWS @@ -1,2 +1,5 @@ ** Gnus changes. +*** gnus-auto-select-first can now be a function to be +called to position point. + diff --git a/Makefile.in b/Makefile.in index 874e729..be6a403 100644 --- a/Makefile.in +++ b/Makefile.in @@ -44,7 +44,7 @@ distclean: make clean rm -rf *~ for i in lisp texi; do (cd $$i; make distclean); done - rm -f config.log config.status Makefile + rm -f config.log config.status config.cache Makefile osome: make EMACS=xemacs21 some diff --git a/README.ichikawa b/README.ichikawa index 61b2919..3b793b1 100644 --- a/README.ichikawa +++ b/README.ichikawa @@ -21,9 +21,14 @@ NEWS: Enable to get Multiple Pop server in POP and APOP using pop3-fma.el (pop3 For Multi Account). + And added many other features by "ELIPS" + * TODO + See TODO.ja + * T-gnus 6.8.17 is the last version Gnus 5.6 base. - After this , T-gnus 6.9 - this is based on pgnus. + After this , T-gnus 6.10 - this is based on pgnus. + + Latest T-gnus is T-gnus 6.10.023 (Based on pgnus-0.34). - T-gnus 6.9.0 - Based on pgnus-0.6 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0555050..7667891 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,130 @@ +Sun Oct 11 02:28:40 1998 Lars Magne Ingebrigtsen + + * gnus.el: Pterodactyl Gnus v0.34 is released. + +1998-10-11 02:15:41 Lars Magne Ingebrigtsen + + * mm-decode.el (mm-inline-media-tests): delivery-status. + + * mm-view.el (mm-inline-text): Provide default. + +1998-10-11 01:01:37 Lloyd Zusman + + * mailcap.el (mailcap-possible-viewers): Fix nils. + +1998-10-11 00:03:37 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-article-edit-exit): Don't do updates. + (article-update-date-lapsed): Record the buffer. + (article-update-date-lapsed): Do all windows that display article + buffers. + + * nnml.el (nnml-generate-nov-databases-1): Ditto. + + * gnus-score.el (gnus-score-score-files-1): Ignore dotted files. + + * gnus-art.el (gnus-insert-mime-button): Mark buttons as + annoations. + + * gnus-msg.el (gnus-summary-mail-forward): Decode properly. + +1998-10-10 22:07:03 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-category-add): Change default category to + 'false. + + * nnvirtual.el (nnvirtual-update-read-and-marked): Don't nix out + scores. + + * gnus-draft.el (gnus-draft-send): Check server more. + + * gnus-art.el (gnus-article-view-part): New command and keystroke. + (gnus-article-goto-part): New function. + + * mm-view.el (mm-inline-text): Insert richtext properly. + + * gnus-art.el (gnus-insert-mime-button): Store handle in alist. + +1998-10-03 15:04:27 Lars Magne Ingebrigtsen + + * parse-time.el (parse-time-rules): Accept dates far into the past + and the future, and parse single-digit numbers as years. + +1998-10-02 04:46:46 Lars Magne Ingebrigtsen + + * mm-decode.el (mm-display-external): Chop off directories. + +1998-10-01 07:33:35 Lars Magne Ingebrigtsen + + * uudecode.el (uu-decode-region-external): Use + insert-file-contents-literally. + + * gnus-cache.el (gnus-cache-generate-active): Translate _ to :. + +1998-10-01 07:02:11 Shenghuo ZHU + + * uudecode.el: New file. + + * mm-bodies.el (mm-decode-content-transfer-encoding): Do + x-uuencode. + +1998-10-01 05:19:35 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-mime-display-alternative): Set faces. + + * message.el (message-fetch-field): Unfold properly. + + * mm-bodies.el (mm-decode-content-transfer-encoding): Replace CRLF + in text/plain. + +1998-09-30 05:47:49 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-first-unread-subject): New command. + (gnus-auto-select-first): Removed. + (gnus-auto-select-first): Extended. + (gnus-summary-read-group-1): Use new value. + +1998-09-29 13:21:06 Lars Magne Ingebrigtsen + + * message.el (message-fix-before-sending): Space. + + * nnmail.el (nnmail-find-file): Don't erase. + +Wed Sep 30 23:49:03 1998 Shenghuo ZHU + + * gnus-agent.el (gnus-agent-fetch-headers): Do not decode headers. + +Wed Sep 30 23:46:29 1998 Shenghuo ZHU + + * gnus-soup.el (gnus-soup-add-article): Do not decode headers. + +Wed Sep 30 23:44:08 1998 Shenghuo ZHU + + * gnus-soup.el (gnus-soup-pack-packet): Pack only if necesary. + +Sat Sep 26 03:04:18 1998 Shenghuo ZHU + + * mm-util.el (mm-with-unibyte-buffer): Make it work in XEmacs + 20.4. + +1998-09-29 11:35:09 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-mime-view-all-parts): New command and + keystroke. + + * mm-decode.el (mm-display-external): Translate slashes. + + * nnmail.el (nnmail-find-file): Restrict auto-mode-alist. + + * nndraft.el (nndraft-retrieve-headers): Don't copy so much. + + * mm-decode.el (mm-quote-arg): Quote spaces. + (mm-display-external): Quote args. + +1998-09-24 22:27:55 Lars Magne Ingebrigtsen + + * mm-decode.el (mm-inlinable-part-p): New function. + Thu Sep 24 20:28:31 1998 Lars Magne Ingebrigtsen * gnus.el: Pterodactyl Gnus v0.33 is released. diff --git a/lisp/Makefile.in b/lisp/Makefile.in index d143e8f..108c6fa 100644 --- a/lisp/Makefile.in +++ b/lisp/Makefile.in @@ -12,22 +12,17 @@ INSTALL_DATA = @INSTALL_DATA@ SHELL = /bin/sh VPATH = @srcdir@ -total: - rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile - -all: +all total: rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile 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" -clever: - $(EMACS) $(FLAGS) -f dgnushack-compile - -some: +clever some: $(EMACS) $(FLAGS) -f dgnushack-compile install: clever + rm -f dgnushack.elc $(SHELL) $(top_srcdir)/mkinstalldirs $(lispdir) for p in *.elc; do \ echo " $(INSTALL_DATA) $$p $(lispdir)/$$p"; \ diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index cb1493d..022cab6 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -768,7 +768,8 @@ the actual number of articles toggled is returned." (gnus-uncompress-range (cons (1+ (caar (last gnus-agent-article-alist))) (cdr (gnus-active group))))) - (gnus-list-of-unread-articles group)))) + (gnus-list-of-unread-articles group))) + (gnus-decode-encoded-word-function 'identity)) ;; Fetch them. (when articles (gnus-message 7 "Fetching headers for %s..." group) @@ -931,9 +932,10 @@ the actual number of articles toggled is returned." (gnus-agent-false nil)))))) ;; No, we need to decide what we want. (setq score-param - (let ((score-method (or - (gnus-group-get-parameter group 'agent-score t) - (caddr category)))) + (let ((score-method + (or + (gnus-group-get-parameter group 'agent-score t) + (caddr category)))) (when score-method (require 'gnus-score) (if (eq score-method 'file) @@ -1197,7 +1199,7 @@ The following commands are available: (interactive "SCategory name: ") (when (assq category gnus-category-alist) (error "Category %s already exists" category)) - (push (list category 'true nil nil) + (push (list category 'false nil nil) gnus-category-alist) (gnus-category-write) (gnus-category-list)) diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 4c78cee..668f7b9 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -566,6 +566,7 @@ displayed by the first non-nil matching CONTENT face." ;;; Internal variables +(defvar gnus-article-mime-handle-alist nil) (defvar article-lapsed-timer nil) (defvar gnus-article-current-summary nil) @@ -1465,12 +1466,13 @@ function and want to see what the date was before converting." (let (deactivate-mark) (save-excursion (ignore-errors - (when (and (gnus-buffer-live-p gnus-article-buffer) - (get-buffer-window gnus-article-buffer)) - (set-buffer gnus-article-buffer) - (goto-char (point-min)) - (when (re-search-forward "^X-Sent:" nil t) - (article-date-lapsed t))))))) + (walk-windows + (lambda (w) + (set-buffer (window-buffer w)) + (when (eq major-mode 'gnus-article-mode) + (goto-char (point-min)) + (when (re-search-forward "^X-Sent:" nil t) + (article-date-lapsed t))))))))) (defun gnus-start-date-timer (&optional n) "Start a timer to update the X-Sent header in the article buffers. @@ -1895,8 +1897,6 @@ If variable `gnus-use-long-file-name' is non-nil, it is "\C-c\C-i" gnus-info-find-node "\C-c\C-b" gnus-bug - gnus-mouse-2 'widget-button-click - "\C-d" gnus-article-read-summary-keys "\M-*" gnus-article-read-summary-keys "\M-#" gnus-article-read-summary-keys @@ -1982,6 +1982,7 @@ commands: (substring name (match-end 0)))))) (setq gnus-article-buffer name) (setq gnus-original-article-buffer original) + (setq gnus-article-mime-handle-alist nil) ;; This might be a variable local to the summary buffer. (unless gnus-single-article-buffer (save-excursion @@ -2190,17 +2191,19 @@ If ALL-HEADERS is non-nil, no headers are hidden." ;;; Gnus MIME viewing functions ;;; -(defvar gnus-mime-button-line-format "%{%([%t%d%n]%)%}\n" +(defvar gnus-mime-button-line-format "%{%([%p. %t%d%n]%)%}\n" "The following specs can be used: %t The MIME type %n The `name' parameter %d The description, if any -%l The length of the encoded part") +%l The length of the encoded part +%p The part identifier") (defvar gnus-mime-button-line-format-alist '((?t gnus-tmp-type ?s) (?n gnus-tmp-name ?s) (?d gnus-tmp-description ?s) + (?p gnus-tmp-id ?s) (?l gnus-tmp-length ?d))) (defvar gnus-mime-button-map nil) @@ -2215,6 +2218,13 @@ If ALL-HEADERS is non-nil, no headers are hidden." (define-key gnus-mime-button-map "i" 'gnus-mime-inline-part) (define-key gnus-mime-button-map "|" 'gnus-mime-pipe-part)) +(defun gnus-mime-view-all-parts () + "View all the MIME parts." + (interactive) + (let ((handles gnus-article-mime-handles)) + (while handles + (mm-display-part (pop handles))))) + (defun gnus-mime-save-part () "Save the MIME part under point." (interactive) @@ -2257,6 +2267,21 @@ If ALL-HEADERS is non-nil, no headers are hidden." (mm-insert-inline data contents) (goto-char b)))) +(defun gnus-article-view-part (n) + "View MIME part N, which is the numerical prefix." + (interactive "p") + (save-current-buffer + (set-buffer gnus-article-buffer) + (when (> n (length gnus-article-mime-handle-alist)) + (error "No such part")) + (let ((handle (cdr (assq n gnus-article-mime-handle-alist)))) + (gnus-article-goto-part n) + (mm-display-part handle)))) + +(defun gnus-article-goto-part (n) + "Go to MIME part N." + (goto-char (text-property-any (point-min) (point-max) 'gnus-part n))) + (defun gnus-insert-mime-button (handle) (let ((gnus-tmp-name (mail-content-type-get (mm-handle-type handle) 'name)) (gnus-tmp-type (car (mm-handle-type handle))) @@ -2264,7 +2289,9 @@ If ALL-HEADERS is non-nil, no headers are hidden." (gnus-tmp-length (save-excursion (set-buffer (mm-handle-buffer handle)) (buffer-size))) + (gnus-tmp-id (1+ (length gnus-article-mime-handle-alist))) b e) + (push (cons gnus-tmp-id handle) gnus-article-mime-handle-alist) (setq gnus-tmp-name (if gnus-tmp-name (concat " (" gnus-tmp-name ")") @@ -2279,6 +2306,8 @@ If ALL-HEADERS is non-nil, no headers are hidden." `(local-map ,gnus-mime-button-map keymap ,gnus-mime-button-map gnus-callback mm-display-part + gnus-part ,gnus-tmp-id + gnus-type annotation gnus-data ,handle)) (setq e (point)) (widget-convert-button 'link from to :action 'gnus-widget-press-button @@ -2300,7 +2329,8 @@ If ALL-HEADERS is non-nil, no headers are hidden." (let* ((handles (mm-dissect-buffer)) handle name type b e) (mapcar 'mm-destroy-part gnus-article-mime-handles) - (setq gnus-article-mime-handles handles) + (setq gnus-article-mime-handles handles + gnus-article-mime-handle-alist nil) (when handles (goto-char (point-min)) (search-forward "\n\n" nil t) @@ -2311,6 +2341,7 @@ If ALL-HEADERS is non-nil, no headers are hidden." (insert "\n\n") (when (and (mm-automatic-display-p (car (mm-handle-type handle))) + (mm-inlinable-part-p (car (mm-handle-type handle))) (or (not (mm-handle-disposition handle)) (equal (car (mm-handle-disposition handle)) "inline"))) @@ -2338,6 +2369,8 @@ If ALL-HEADERS is non-nil, no headers are hidden." (car (mm-handle-type handle)))) (point)) `(local-map ,gnus-mime-button-map + ,gnus-mouse-face-prop ,gnus-article-mouse-face + face ,gnus-article-button-face keymap ,gnus-mime-button-map gnus-callback (lambda (handles) @@ -2905,11 +2938,10 @@ groups." (setq gnus-original-article nil))) (set-window-configuration winconf) ;; Tippy-toe some to make sure that point remains where it was. - (let ((buf (current-buffer))) + (save-current-buffer (set-buffer curbuf) (set-window-start (get-buffer-window (current-buffer)) window-start) - (goto-char p) - (set-buffer buf))))) + (goto-char p))))) (defun gnus-article-edit-full-stops () "Interactively repair spacing at end of sentences." diff --git a/lisp/gnus-async.el b/lisp/gnus-async.el index 8da43cc..870192f 100644 --- a/lisp/gnus-async.el +++ b/lisp/gnus-async.el @@ -213,11 +213,13 @@ It should return non-nil if the article is to be prefetched." (when arg (gnus-async-set-buffer) (gnus-async-with-semaphore - (push (list ',(intern (format "%s-%d" group article) - gnus-asynch-obarray) - ,mark (set-marker (make-marker) (point-max)) - ,group ,article) - gnus-async-article-alist))) + (setq + gnus-async-article-alist + (cons (list ',(intern (format "%s-%d" group article) + gnus-asynch-obarray) + ,mark (set-marker (make-marker) (point-max)) + ,group ,article) + gnus-async-article-alist)))) (if (not (gnus-buffer-live-p ,summary)) (gnus-async-with-semaphore (setq gnus-async-fetch-list nil)) diff --git a/lisp/gnus-cache.el b/lisp/gnus-cache.el index 70d51f2..33aad1f 100644 --- a/lisp/gnus-cache.el +++ b/lisp/gnus-cache.el @@ -647,6 +647,8 @@ If LOW, update the lower bound instead." (when top (gnus-message 5 "Generating the cache active file...") (setq gnus-cache-active-hashtb (gnus-make-hashtable 123))) + (when (string-match "^\\(nn[^_]+\\)_" group) + (setq group (replace-match "\\1:" t t group))) ;; Separate articles from all other files and directories. (while files (if (string-match "^[0-9]+$" (file-name-nondirectory (car files))) diff --git a/lisp/gnus-mailcap.el b/lisp/gnus-mailcap.el index c5249f3..7caa74f 100644 --- a/lisp/gnus-mailcap.el +++ b/lisp/gnus-mailcap.el @@ -469,7 +469,7 @@ If FORCE, re-parse even if already parsed." (cond ((equal (car (car major)) minor) (setq exact (cons (cdr (car major)) exact))) - ((string-match (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-offline.el b/lisp/gnus-offline.el index be74f65..cbc3b0b 100644 --- a/lisp/gnus-offline.el +++ b/lisp/gnus-offline.el @@ -177,6 +177,7 @@ If nil , use auto-dialup if required to connect the Internet." "*Hook to be run after the gnus-offline package has been loaded." :group 'gnus-offline :type 'hook) + (defcustom gnus-offline-before-online-hook nil "*Hook to be run before all online jobs." :group 'gnus-offline diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index 0ab923b..f5505be 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -2473,8 +2473,8 @@ SCORE is the score to add." seen out file) (while (setq file (pop files)) (cond - ;; Ignore "." and "..". - ((member (file-name-nondirectory file) '("." "..")) + ;; Ignore files that start with a dot. + ((string-match "^\\." (file-name-nondirectory file)) nil) ;; Add subtrees of directory to also be searched. ((and (file-directory-p file) diff --git a/lisp/gnus-soup.el b/lisp/gnus-soup.el index 7b7b50e..eaec7cd 100644 --- a/lisp/gnus-soup.el +++ b/lisp/gnus-soup.el @@ -140,21 +140,19 @@ move those articles instead." (buffer-disable-undo tmp-buf) (save-excursion (while articles - ;; Find the header of the article. - (set-buffer gnus-summary-buffer) - (when (setq headers (gnus-summary-article-header (car articles))) ;; Put the article in a buffer. - (set-buffer tmp-buf) - (when (gnus-request-article-this-buffer - (car articles) gnus-newsgroup-name) - (save-restriction - (message-narrow-to-head) - (message-remove-header gnus-soup-ignored-headers t)) - (gnus-soup-store gnus-soup-directory prefix headers - gnus-soup-encoding-type - gnus-soup-index-type) - (gnus-soup-area-set-number - area (1+ (or (gnus-soup-area-number area) 0))))) + (set-buffer tmp-buf) + (when (gnus-request-article-this-buffer + (car articles) gnus-newsgroup-name) + (setq headers (nnheader-parse-head t)) + (save-restriction + (message-narrow-to-head) + (message-remove-header gnus-soup-ignored-headers t)) + (gnus-soup-store gnus-soup-directory prefix headers + gnus-soup-encoding-type + gnus-soup-index-type) + (gnus-soup-area-set-number + area (1+ (or (gnus-soup-area-number area) 0)))) ;; Mark article as read. (set-buffer gnus-summary-buffer) (gnus-summary-remove-process-mark (car articles)) @@ -168,11 +166,11 @@ move those articles instead." "Make a SOUP packet from the SOUP areas." (interactive) (gnus-soup-read-areas) - (unless (file-exists-p gnus-soup-directory) - (message "No such directory: %s" gnus-soup-directory)) - (when (null (directory-files gnus-soup-directory nil "\\.MSG$")) - (message "No files to pack.")) - (gnus-soup-pack gnus-soup-directory gnus-soup-packer)) + (if (file-exists-p gnus-soup-directory) + (if (directory-files gnus-soup-directory nil "\\.MSG$") + (gnus-soup-pack gnus-soup-directory gnus-soup-packer) + (message "No files to pack.")) + (message "No such directory: %s" gnus-soup-directory))) (defun gnus-group-brew-soup (n) "Make a soup packet from the current group. diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 7425ad2..cf346a1 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -256,8 +256,12 @@ equal will be included." (defcustom gnus-auto-select-first t "*If nil, don't select the first unread article when entering a group. If this variable is `best', select the highest-scored unread article -in the group. If neither nil nor `best', select the first unread -article. +in the group. If t, select the first unread article. + +This variable can also be a function to place point on a likely +subject line. Useful values include `gnus-summary-first-unread-subject', +`gnus-summary-first-unread-article' and +`gnus-summary-best-unread-article'. If you want to prevent automatic selection of the first unread article in some newsgroups, set the variable to nil in @@ -265,7 +269,10 @@ in some newsgroups, set the variable to nil in :group 'gnus-group-select :type '(choice (const :tag "none" nil) (const best) - (sexp :menu-tag "first" t))) + (sexp :menu-tag "first" t) + (function-item gnus-summary-first-unread-subject) + (function-item gnus-summary-first-unread-article) + (function-item gnus-summary-best-unread-article))) (defcustom gnus-auto-select-next t "*If non-nil, offer to go to the next group from the end of the previous. @@ -1267,7 +1274,8 @@ increase the score of each group you read." "L" gnus-summary-lower-score "\M-i" gnus-symbolic-argument "h" gnus-summary-select-article-buffer - + "b" gnus-article-view-part + "V" gnus-summary-score-map "X" gnus-uu-extract-map "S" gnus-summary-send-map) @@ -2701,10 +2709,15 @@ If NO-DISPLAY, don't generate a summary buffer." (not no-display) gnus-newsgroup-unreads gnus-auto-select-first) - (unless (if (eq gnus-auto-select-first 'best) - (gnus-summary-best-unread-article) - (gnus-summary-first-unread-article)) - (gnus-configure-windows 'summary)) + (progn + (gnus-configure-windows 'summary) + (cond + ((eq gnus-auto-select-first 'best) + (gnus-summary-best-unread-article)) + ((eq gnus-auto-select-first t) + (gnus-summary-first-unread-article)) + ((gnus-functionp gnus-auto-select-first) + (funcall gnus-auto-select-first)))) ;; Don't select any articles, just move point to the first ;; article in the group. (goto-char (point-min)) @@ -5868,6 +5881,16 @@ Return nil if there are no unread articles." (gnus-summary-display-article (gnus-summary-article-number))) (gnus-summary-position-point))) +(defun gnus-summary-first-unread-subject () + "Place the point on the subject line of the first unread article. +Return nil if there are no unread articles." + (interactive) + (prog1 + (when (gnus-summary-first-subject t) + (gnus-summary-show-thread) + (gnus-summary-first-subject t)) + (gnus-summary-position-point))) + (defun gnus-summary-first-article () "Select the first article. Return nil if there are no articles." diff --git a/lisp/gnus-uu.el b/lisp/gnus-uu.el index 0cc00a6..ded0563 100644 --- a/lisp/gnus-uu.el +++ b/lisp/gnus-uu.el @@ -833,8 +833,9 @@ didn't work, and overwrite existing files. Otherwise, ask each time." (eq in-state 'first-and-last)) (progn (setq state (list 'begin)) - (save-excursion (set-buffer (gnus-get-buffer-create "*gnus-uu-body*")) - (erase-buffer)) + (save-excursion + (set-buffer (gnus-get-buffer-create "*gnus-uu-body*")) + (erase-buffer)) (save-excursion (set-buffer (gnus-get-buffer-create "*gnus-uu-pre*")) (erase-buffer) diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index 8ff098e..9658878 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -258,21 +258,6 @@ call it with the value of the `gnus-data' text property." (delete-extent extent) nil))) -;; Fixed by Christopher Davis . -(defun gnus-xmas-article-add-button (from to fun &optional data) - "Create a button between FROM and TO with callback FUN and data DATA." - (when gnus-article-button-face - (gnus-overlay-put (gnus-make-overlay from to) - 'face gnus-article-button-face)) - (gnus-add-text-properties - from to - (nconc - (and gnus-article-mouse-face - (list 'mouse-face gnus-article-mouse-face)) - (list 'gnus-callback fun) - (and data (list 'gnus-data data)) - (list 'highlight t)))) - (defun gnus-xmas-window-top-edge (&optional window) (nth 1 (window-pixel-edges window))) @@ -465,7 +450,6 @@ call it with the value of the `gnus-data' text property." (fset 'gnus-summary-recenter 'gnus-xmas-summary-recenter) (fset 'gnus-extent-start-open 'gnus-xmas-extent-start-open) (fset 'gnus-article-push-button 'gnus-xmas-article-push-button) - (fset 'gnus-article-add-button 'gnus-xmas-article-add-button) (fset 'gnus-window-top-edge 'gnus-xmas-window-top-edge) (fset 'gnus-read-event-char 'gnus-xmas-read-event-char) (fset 'gnus-group-startup-message 'gnus-xmas-group-startup-message) diff --git a/lisp/gnus.el b/lisp/gnus.el index 954a30b..948f33f 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -253,17 +253,17 @@ is restarted, and sometimes reloaded." (defconst gnus-product-name "T-gnus" "Product name of this version of gnus.") -(defconst gnus-version-number "6.10.022" +(defconst gnus-version-number "6.10.023" "Version number for this version of gnus.") -(defconst gnus-original-version-number "0.33" +(defconst gnus-original-version-number "0.34" "Version number for this version of Gnus.") (defconst gnus-original-product-name "Pterodactyl Gnus" "Version number for this version of Gnus.") (defconst gnus-version - (format "%s %s (based on %s %s ; for SEMI 1.8, FLIM 1.8/1.9)" + (format "%s %s (based on %s %s ; for SEMI 1.8/1.9, FLIM 1.8/1.9/1.10)" gnus-product-name gnus-version-number gnus-original-product-name gnus-original-version-number) "Version string for this version of gnus.") diff --git a/lisp/message.el b/lisp/message.el index 81e5052..ad81728 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -1145,7 +1145,9 @@ The cdr of ech entry is a function for applying the face to a region.") (let* ((inhibit-point-motion-hooks t) (value (mail-fetch-field header nil (not not-all)))) (when value - (nnheader-replace-chars-in-string value ?\n ? )))) + (while (string-match "\n[\t ]+" value) + (setq value (replace-match " " t t value))) + value))) (defun message-narrow-to-field () "Narrow the buffer to the header on the current line." @@ -2209,7 +2211,7 @@ the user from the mailer." (message-check 'invisible-text (when (text-property-any (point-min) (point-max) 'invisible t) (put-text-property (point-min) (point-max) 'invisible nil) - (unless (yes-or-no-p "Invisible text found and made visible; continue posting?") + (unless (yes-or-no-p "Invisible text found and made visible; continue posting? ") (error "Invisible text found and made visible"))))) (defun message-add-action (action &rest types) diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el index 135b974..044f52c 100644 --- a/lisp/mm-bodies.el +++ b/lisp/mm-bodies.el @@ -30,6 +30,7 @@ (require 'mm-util) (require 'rfc2047) (require 'qp) +(require 'uudecode) (defun mm-encode-body () "Encode a body. @@ -93,18 +94,27 @@ If no encoding was done, nil is returned." ;;; Functions for decoding ;;; -(defun mm-decode-content-transfer-encoding (encoding) +(defun mm-decode-content-transfer-encoding (encoding &optional type) (cond ((eq encoding 'quoted-printable) (quoted-printable-decode-region (point-min) (point-max))) ((eq encoding 'base64) - (condition-case () - (base64-decode-region (point-min) (point-max)) - (error nil))) + (prog1 + (condition-case () + (base64-decode-region (point-min) (point-max)) + (error nil)) + (when (equal type "text/plain") + (goto-char (point-min)) + (while (search-forward "\r\n" nil t) + (replace-match "\n" t t))))) ((memq encoding '(7bit 8bit binary)) ) ((null encoding) ) + ((eq encoding 'x-uuencode) + (condition-case () + (uu-decode-region (point-min) (point-max)) + (error nil))) (t (error "Can't decode encoding %s" encoding)))) diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index 7090855..617d331 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -40,6 +40,7 @@ ("text/enriched" mm-inline-text t) ("text/richtext" mm-inline-text t) ("text/html" mm-inline-text (featurep 'w3)) + ("message/delivery-status" mm-inline-text t) ("audio/wav" mm-inline-audio (and (or (featurep 'nas-sound) (featurep 'native-sound)) (device-sound-enabled-p))) @@ -177,6 +178,10 @@ (insert-buffer-substring obuf beg) (current-buffer)))) +(defun mm-inlinable-part-p (type) + "Say whether TYPE can be displayed inline." + (eq (mm-user-method type) 'inline)) + (defun mm-display-part (handle &optional no-default) "Display the MIME part represented by HANDLE." (save-excursion @@ -200,7 +205,8 @@ "Display HANDLE using METHOD." (mm-with-unibyte-buffer (insert-buffer-substring (mm-handle-buffer handle)) - (mm-decode-content-transfer-encoding (mm-handle-encoding handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) (car (mm-handle-type handle))) (if (functionp method) (let ((cur (current-buffer))) (switch-to-buffer (generate-new-buffer "*mm*")) @@ -220,7 +226,8 @@ (make-directory dir) (set-file-modes dir 448) (if filename - (setq file (expand-file-name (or filename "mm.") dir)) + (setq file (expand-file-name (file-name-nondirectory filename) + dir)) (setq file (make-temp-name (expand-file-name "mm." dir)))) (write-region (point-min) (point-max) file nil 'nomesg nil 'no-conversion) @@ -228,10 +235,13 @@ (if needsterm (start-process "*display*" nil "xterm" - "-e" (format method file)) + "-e" shell-file-name "-c" + (format method + (mm-quote-arg file))) (start-process "*display*" (generate-new-buffer "*mm*") shell-file-name - "-c" (format method file)))) + "-c" (format method + (mm-quote-arg file))))) (mm-handle-set-undisplayer handle (cons file process)) (message "Displaying %s..." (format method file)))))) @@ -318,7 +328,7 @@ This overrides entries in the mailcap file." "Return a version of ARG that is safe to evaluate in a shell." (let ((pos 0) new-pos accum) ;; *** bug: we don't handle newline characters properly - (while (setq new-pos (string-match "[!`\"$\\& \t{}]" arg pos)) + (while (setq new-pos (string-match "[!`\"$\\& \t{} ]" arg pos)) (push (substring arg pos new-pos) accum) (push "\\" accum) (push (list (aref arg new-pos)) accum) @@ -335,7 +345,9 @@ This overrides entries in the mailcap file." "Return the contents of HANDLE as a string." (mm-with-unibyte-buffer (insert-buffer-substring (mm-handle-buffer handle)) - (mm-decode-content-transfer-encoding (mm-handle-encoding handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) + (car (mm-handle-type handle))) (buffer-string))) (defvar mm-default-directory nil) @@ -356,7 +368,9 @@ This overrides entries in the mailcap file." (setq mm-default-directory (file-name-directory file)) (mm-with-unibyte-buffer (insert-buffer-substring (mm-handle-buffer handle)) - (mm-decode-content-transfer-encoding (mm-handle-encoding handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) + (car (mm-handle-type handle))) (when (or (not (file-exists-p file)) (yes-or-no-p (format "File %s already exists; overwrite? " file))) @@ -369,7 +383,9 @@ This overrides entries in the mailcap file." (read-string "Shell command on MIME part: " mm-last-shell-command))) (mm-with-unibyte-buffer (insert-buffer-substring (mm-handle-buffer handle)) - (mm-decode-content-transfer-encoding (mm-handle-encoding handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) + (car (mm-handle-type handle))) (shell-command-on-region (point-min) (point-max) command nil)))) (defun mm-interactively-view-part (handle) diff --git a/lisp/mm-util.el b/lisp/mm-util.el index 1db5d60..a24d3a8 100644 --- a/lisp/mm-util.el +++ b/lisp/mm-util.el @@ -206,7 +206,8 @@ See also `with-temp-file' and `with-output-to-string'." (get-buffer-create (generate-new-buffer-name " *temp*"))) (unwind-protect (with-current-buffer ,temp-buffer - ,@forms) + (let (buffer-file-coding-system) + ,@forms)) (and (buffer-name ,temp-buffer) (kill-buffer ,temp-buffer)) (setq-default enable-multibyte-characters ,multibyte)))))) diff --git a/lisp/mm-view.el b/lisp/mm-view.el index 10ab086..14ec63b 100644 --- a/lisp/mm-view.el +++ b/lisp/mm-view.el @@ -36,7 +36,9 @@ buffer-read-only image) (mm-with-unibyte-buffer (insert-buffer-substring (mm-handle-buffer handle)) - (mm-decode-content-transfer-encoding (mm-handle-encoding handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) + (car (mm-handle-type handle))) (setq image (make-image-specifier (vector (intern type) :data (buffer-string))))) (let ((annot (make-annotation image nil 'text))) @@ -52,7 +54,9 @@ ((equal type "plain") (with-temp-buffer (insert-buffer-substring (mm-handle-buffer handle)) - (mm-decode-content-transfer-encoding (mm-handle-encoding handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) + (car (mm-handle-type handle))) (setq text (buffer-string))) (let ((b (point))) (insert text) @@ -74,7 +78,9 @@ (w3-do-setup) (mm-with-unibyte-buffer (insert-buffer-substring (mm-handle-buffer handle)) - (mm-decode-content-transfer-encoding (mm-handle-encoding handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) + (car (mm-handle-type handle))) (require 'url) (save-window-excursion (w3-region (point-min) (point-max)) @@ -85,12 +91,22 @@ (save-excursion (mm-with-unibyte-buffer (insert-buffer-substring (mm-handle-buffer handle)) - (mm-decode-content-transfer-encoding (mm-handle-encoding handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) + (car (mm-handle-type handle))) (save-window-excursion (enriched-decode (point-min) (point-max)) - (setq text (buffer-string)))) - (mm-insert-inline handle text))) - ))) + (setq text (buffer-string))))) + (mm-insert-inline handle text)) + (t + (save-excursion + (mm-with-unibyte-buffer + (insert-buffer-substring (mm-handle-buffer handle)) + (mm-decode-content-transfer-encoding + (mm-handle-encoding handle) + (car (mm-handle-type handle))) + (setq text (buffer-string)))) + (mm-insert-inline handle text))))) (defun mm-insert-inline (handle text) "Insert TEXT inline from HANDLE." diff --git a/lisp/nnbabyl.el b/lisp/nnbabyl.el index 5615341..8bdae37 100644 --- a/lisp/nnbabyl.el +++ b/lisp/nnbabyl.el @@ -568,7 +568,7 @@ start end number) (set-buffer (setq nnbabyl-mbox-buffer (nnheader-find-file-noselect - nnbabyl-mbox-file nil 'raw))) + nnbabyl-mbox-file nil t))) ;; Save previous buffer mode. (setq nnbabyl-previous-buffer-mode (cons (cons (point-min) (point-max)) diff --git a/lisp/nndraft.el b/lisp/nndraft.el index c2736a7..52e2a01 100644 --- a/lisp/nndraft.el +++ b/lisp/nndraft.el @@ -77,15 +77,12 @@ (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) - (let* ((buf (get-buffer-create " *draft headers*")) - article) - (set-buffer buf) - (erase-buffer) + (let* (article) ;; We don't support fetching by Message-ID. (if (stringp (car articles)) 'headers (while articles - (set-buffer buf) + (narrow-to-region (point) (point)) (when (nndraft-request-article (setq article (pop articles)) group server (current-buffer)) (goto-char (point-min)) @@ -93,10 +90,10 @@ (forward-line -1) (goto-char (point-max))) (delete-region (point) (point-max)) - (set-buffer nntp-server-buffer) - (goto-char (point-max)) + (goto-char (point-min)) (insert (format "221 %d Article retrieved.\n" article)) - (insert-buffer-substring buf) + (widen) + (goto-char (point-max)) (insert ".\n"))) (nnheader-fold-continuation-lines) diff --git a/lisp/nnmail.el b/lisp/nnmail.el index d72b638..e93bcb7 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -487,11 +487,12 @@ parameter. It should return nil, `warn' or `delete'." (defun nnmail-find-file (file) "Insert FILE in server buffer safely." (set-buffer nntp-server-buffer) - (erase-buffer) + (delete-region (point-min) (point-max)) (let ((format-alist nil) (after-insert-file-functions nil)) (condition-case () (let ((coding-system-for-read nnmail-file-coding-system) + (auto-mode-alist (nnheader-auto-mode-alist)) (pathname-coding-system nnmail-file-coding-system)) (insert-file-contents file) t) @@ -1094,8 +1095,7 @@ FUNC will be called with the group name to determine the article number." ;; group twice. (not (assoc (car method) group-art))) (push (cons (if regrepp - (replace-match - (car method) nil nil (car method)) + (nnmail-expand-newtext (car method)) (car method)) (funcall func (car method))) group-art)) diff --git a/lisp/nnmbox.el b/lisp/nnmbox.el index 0f181fe..09d0daa 100644 --- a/lisp/nnmbox.el +++ b/lisp/nnmbox.el @@ -426,7 +426,7 @@ (save-excursion (set-buffer (setq nnmbox-mbox-buffer (nnheader-find-file-noselect - nnmbox-mbox-file nil 'raw))) + nnmbox-mbox-file nil t))) (buffer-disable-undo))) (when (not nnmbox-group-alist) (nnmail-activate 'nnmbox)) @@ -513,7 +513,7 @@ start end number) (set-buffer (setq nnmbox-mbox-buffer (nnheader-find-file-noselect - nnmbox-mbox-file nil 'raw))) + nnmbox-mbox-file nil t))) (buffer-disable-undo) ;; Go through the group alist and compare against diff --git a/lisp/nnml.el b/lisp/nnml.el index dd1c312..4f92163 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -731,7 +731,7 @@ all. This may very well take some time.") (let ((dirs (directory-files dir t nil t)) dir) (while (setq dir (pop dirs)) - (when (and (not (member (file-name-nondirectory dir) '("." ".."))) + (when (and (not (string-match "^\\." (file-name-nondirectory dir))) (file-directory-p dir)) (nnml-generate-nov-databases-1 dir seen)))) ;; Do this directory. diff --git a/lisp/nnvirtual.el b/lisp/nnvirtual.el index 4829341..a6e92f5 100644 --- a/lisp/nnvirtual.el +++ b/lisp/nnvirtual.el @@ -436,17 +436,21 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components." (nnvirtual-partition-sequence (gnus-list-of-unread-articles (nnvirtual-current-group))))) - (type-marks (mapcar (lambda (ml) - (cons (car ml) - (nnvirtual-partition-sequence (cdr ml)))) - (gnus-info-marks (gnus-get-info - (nnvirtual-current-group))))) + (type-marks + (delq nil + (mapcar (lambda (ml) + (if (eq (car ml) 'score) + nil + (cons (car ml) + (nnvirtual-partition-sequence (cdr ml))))) + (gnus-info-marks (gnus-get-info + (nnvirtual-current-group)))))) mark type groups carticles info entry) ;; Ok, atomically move all of the (un)read info, clear any old ;; marks, and move all of the current marks. This way if someone ;; hits C-g, you won't leave the component groups in a half-way state. - (gnus-atomic-progn + (progn ;; move (un)read (let ((gnus-newsgroup-active nil)) ;workaround guns-update-read-articles (while (setq entry (pop unreads)) @@ -457,7 +461,11 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components." (while groups (when (and (setq info (gnus-get-info (pop groups))) (gnus-info-marks info)) - (gnus-info-set-marks info nil))) + (gnus-info-set-marks + info + (if (assq 'score (gnus-info-marks info)) + (list (assq 'score (gnus-info-marks info))) + nil)))) ;; Ok, currently type-marks is an assq list with keys of a mark type, ;; with data of an assq list with keys of component group names diff --git a/lisp/parse-time.el b/lisp/parse-time.el index 038541c..f076aea 100644 --- a/lisp/parse-time.el +++ b/lisp/parse-time.el @@ -130,7 +130,7 @@ `(((6) parse-time-weekdays) ((3) (1 31)) ((4) parse-time-months) - ((5) (1970 2038)) + ((5) (100 4038)) ((2 1 0) ,#'(lambda () (and (stringp elt) (= (length elt) 8) @@ -167,7 +167,8 @@ (= (length elt) 7) (= (aref elt 1) ?:))) [0 1] [2 4] [5 7]) - ((5) (70 99) ,#'(lambda () (+ 1900 elt)))) + ((5) (50 99) ,#'(lambda () (+ 1900 elt))) + ((5) (0 49) ,#'(lambda () (+ 2000 elt)))) "(slots predicate extractor...)") (defun parse-time-string (string) diff --git a/texi/ChangeLog b/texi/ChangeLog index 2ff934b..3ae2982 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,12 @@ +1998-10-01 07:55:35 Lars Magne Ingebrigtsen + + * gnus.texi (Splitting Mail): Fix. + (Washing Mail): Fix. + +1998-09-30 05:54:45 Lars Magne Ingebrigtsen + + * gnus.texi (Selecting a Group): Addition. + 1998-09-13 08:58:56 Lars Magne Ingebrigtsen * dir (File): Updated. diff --git a/texi/Makefile.in b/texi/Makefile.in index 1ebe198..f4ac36f 100644 --- a/texi/Makefile.in +++ b/texi/Makefile.in @@ -114,6 +114,7 @@ distclean: make clean rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9] Makefile rm -f message message-[0-9] + rm -f emacs-mime install: $(SHELL) $(top_srcdir)/mkinstalldirs $(infodir) diff --git a/texi/emacs-mime.texi b/texi/emacs-mime.texi index f333fa5..8a09c30 100644 --- a/texi/emacs-mime.texi +++ b/texi/emacs-mime.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- -@setfilename message +@setfilename emacs-mime @settitle Emacs MIME Manual @synindex fn cp @synindex vr cp @@ -639,7 +639,7 @@ higher level. The main idea is to first analyze a @sc{mime} article, and then allow other programs to do things based on the list of @dfn{handles} that are -returned as a result of this analyzation. +returned as a result of this analysis. @menu * Dissection:: Analyzing a @sc{mime} message. diff --git a/texi/gnus.texi b/texi/gnus.texi index a8b1801..8d40135 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename gnus -@settitle Semi-gnus 6.10.022 Manual +@settitle Semi-gnus 6.10.023 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 Semi-gnus 6.10.022 Manual +@title Semi-gnus 6.10.023 Manual @author by Lars Magne Ingebrigtsen @page @@ -361,7 +361,7 @@ internationalization/localization and multiscript features based on MULE API. So Semi-gnus does not discriminate various language communities. Oh, if you are a Klingon, please wait Unicode Next Generation. -This manual corresponds to Semi-gnus 6.10.022. +This manual corresponds to Semi-gnus 6.10.023. @end ifinfo @@ -1505,8 +1505,26 @@ Select the first unread article when entering the group. @item best Select the highest scored article in the group when entering the group. + +@end table + +This variable can also be a function. In that case, that function will +be called to place point on a subject line, and/or select some article. +Useful functions include: + +@table @code +@item gnus-summary-first-unread-subject +Place point on the subject line of the first unread article, but +don't select the article. + +@item gnus-summary-first-unread-article +Select the first unread article. + +@item gnus-summary-best-unread-article +Select the highest-scored unread article. @end table + If you want to prevent automatic selection in some group (say, in a binary group with Huge articles) you can set this variable to @code{nil} in @code{gnus-select-group-hook}, which is called when a group is @@ -3257,8 +3275,13 @@ fast, and too simplistic solution; slower; and @code{std11-extract-address-components}, which works very nicely, but is slower. The default function will return the wrong answer in 5% of the cases. If this is unacceptable to you, use the -other function instead. - +other function instead: + +@lisp +(setq gnus-extract-address-components + 'mail-extract-address-components) +@end lisp + @vindex gnus-summary-same-subject @code{gnus-summary-same-subject} is a string indicating that the current article has the same subject as the previous. This string will be used @@ -4197,7 +4220,7 @@ answered) will be marked with an @samp{A} in the second column @item @vindex gnus-cached-mark Articles stored in the article cache will be marked with an @samp{*} in -the second column (@code{gnus-cached-mark}). @xref{Article Caching} +the second column (@code{gnus-cached-mark}). @xref{Article Caching}. @item @vindex gnus-saved-mark @@ -4254,7 +4277,7 @@ article as unread. @kindex M t (Summary) @findex gnus-summary-tick-article-forward Tick the current article (@code{gnus-summary-tick-article-forward}). -@xref{Article Caching} +@xref{Article Caching}. @item M ? @itemx ? @@ -4262,7 +4285,7 @@ Tick the current article (@code{gnus-summary-tick-article-forward}). @kindex M ? (Summary) @findex gnus-summary-mark-as-dormant Mark the current article as dormant -(@code{gnus-summary-mark-as-dormant}). @xref{Article Caching} +(@code{gnus-summary-mark-as-dormant}). @xref{Article Caching}. @item M d @itemx d @@ -6518,7 +6541,7 @@ last. @kindex W b (Summary) @findex gnus-article-add-buttons Add clickable buttons to the article (@code{gnus-article-add-buttons}). -@xref{Article Buttons} +@xref{Article Buttons}. @item W B @kindex W B (Summary) @@ -6808,6 +6831,11 @@ groups where people post using some common encoding (but do not include MIME headers), you can set the @code{charset} group/topic parameter to the required charset (@pxref{Group Parameters}). +@item W M v +@kindex W M v (Summary) +View all the @sc{mime} parts in the current article +(@code{gnus-mime-view-all-parts}). + @end table @@ -9508,7 +9536,7 @@ contain @samp{\\1} forms, like the ones used by @code{replace-match} to insert sub-expressions from the matched text. For instance: @lisp -("list.\\1" "From:.*\\(.*\\)-list@@majordomo.com") +("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com") @end lisp The second element can also be a function. In that case, it will be @@ -9627,11 +9655,6 @@ file, which is @file{~/.gnus-crash-box} by default. If this file already exists, it will always be read (and incorporated) before any other spool files. -@vindex nnmail-prepare-incoming-hook -@item nnmail-prepare-incoming-hook -This is run in a buffer that holds all the new incoming mail, and can be -used for, well, anything, really. - @vindex nnmail-split-hook @item nnmail-split-hook @findex article-decode-encoded-words @@ -10116,7 +10139,8 @@ various functions that can be put in these hooks. @item nnmail-prepare-incoming-hook @vindex nnmail-prepare-incoming-hook This hook is called before doing anything with the mail and is meant for -grand, sweeping gestures. Functions to be used include: +grand, sweeping gestures. It is called in a buffer that contains all +the new, incoming mail. Functions to be used include: @table @code @item nnheader-ms-strip-cr @@ -11472,6 +11496,7 @@ Of course, to use it as such, you have to learn a few new commands. * Agent Variables:: Customizing is fun. * Example Setup:: An example @file{.gnus.el} file for offline people. * Batching Agents:: How to fetch news from a @code{cron} job. +* Agent Caveats:: What you think it'll do and what it does. @end menu @@ -11534,7 +11559,7 @@ Agent (@pxref{Server Agent Commands}). This will typically be only the primary select method, which is listed on the bottom in the buffer. @item -Decide on download policy. @xref{Agent Categories} +Decide on download policy. @xref{Agent Categories}. @item Uhm... that's it. @@ -11740,7 +11765,6 @@ if it's to be specific to that group. In both of these places the @code{download score rule} can take one of three forms: -@table @code @enumerate @item Score rule @@ -11836,7 +11860,6 @@ Group Parameter specification @end lisp @end itemize @end enumerate -@end table @node The Category Buffer @subsubsection The Category Buffer @@ -11988,7 +12011,7 @@ Fetch all eligible articles in all groups @kindex J S (Agent Group) @findex gnus-group-send-drafts Send all sendable messages in the draft group -(@code{gnus-agent-fetch-session}). @xref{Drafts} +(@code{gnus-agent-fetch-session}). @xref{Drafts}. @item J a @kindex J a (Agent Group) @@ -12170,6 +12193,29 @@ emacs -batch -l ~/.emacs -f gnus-agent-batch >/dev/null @end example +@node Agent Caveats +@subsection Agent Caveats + +The Gnus Agent doesn't seem to work like most other offline +newsreaders. Here are some common questions that some imaginary people +may ask: + +@table @dfn +@item If I read an article while plugged, do they get entered into the +Agent? + +@strong{No.} + +@item If I read an article while plugged, and the article already exists +in the Agent, will it get downloaded once more? + +@strong{Yes.} + +@end table + +In short, when Gnus is unplugged, it only looks into the locally stored +articles; when it's plugged, it only talks to your ISP. + @node Scoring @chapter Scoring @@ -18137,6 +18183,10 @@ like. Bouncing articles should do MIME. @item +Crossposted articles should "inherit" the % or @ mark from the other +groups it has been crossposted to, or something. (Agent.) + +@item Solve the halting problem. @c TODO diff --git a/texi/message.texi b/texi/message.texi index 314bba7..bf39591 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename message -@settitle Pterodactyl Message 0.33 Manual +@settitle Pterodactyl Message 0.34 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.33 Manual +@title Pterodactyl Message 0.34 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.33. Message is +This manual corresponds to Pterodactyl Message 0.34. Message is distributed with the Gnus distribution bearing the same version number as this manual. -- 1.7.10.4