diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/Makefile dgnus/Makefile *** pub/dgnus/Makefile Sat Apr 29 01:40:05 1995 --- dgnus/Makefile Sat Apr 29 22:40:42 1995 *************** *** 3,9 **** all: elc info elc: ! cd lisp; make EMACS=$(EMACS) elc info: cd texi; makeinfo -o gnus gnus.texi --- 3,9 ---- all: elc info elc: ! cd lisp; $(MAKE) EMACS=$(EMACS) elc info: cd texi; makeinfo -o gnus gnus.texi diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/ChangeLog dgnus/lisp/ChangeLog *** pub/dgnus/lisp/ChangeLog Sat Apr 29 01:40:05 1995 --- dgnus/lisp/ChangeLog Sun Apr 30 22:39:43 1995 *************** *** 1,3 **** --- 1,60 ---- + Sun Apr 30 04:11:31 1995 Lars Ingebrigtsen + + * gnus.el (gnus-sorted-complement): Would reverse the result given + a nil list. + (gnus-summary-refer-article): Would not let you refer expunged + articles. + (gnus-summary-goto-article): Give a return value. + + * gnus.el: Changes here and there to use the cache. + + * gnus-cache.el: New file. + + * gnus.el (gnus-article-de-quoted-unreadable): Have interactive + calls force un-quoting. + (gnus-article-date-ut): Would choke on distant dates. + (gnus-summary-respool-article): Use the current backend as a + default prompt. + (gnus-summary-respool-article): Behave grafully on nil input. + (gnus-get-unread-articles): Would barf on virtual servers. + (gnus-use-cache): New variable. + + Sun Apr 30 01:29:34 1995 Lars Magne Ingebrigtsen + + * gnus.el (gnus-summary-raise-thread): Would incorrectly not stay + on the same line when that was required. + (gnus-article-date-ut): Required arguments. + + * gnus-score.el (gnus-score-load-file): Would reset + gnus-adaptive-score-alist. + + Sat Apr 29 22:27:46 1995 Lars Magne Ingebrigtsen + + * gnus-uu.el (gnus-uu-post-news): Work in mail buffers as + well. General cleanup. + + * nntp.el (nntp-default-sentinel): Ignore servers that do not + exist. + + * gnus-score.el (gnus-score-add-followups): Used exact match + instead of substring. + + Sat Apr 29 17:58:42 1995 Lars Ingebrigtsen + + * gnus.el (gnus-gnus-to-quick-newsrc-format): Inhibit quitting in + a particularly tricky spot. + (gnus-read-newsrc-el-file): The same. + (gnus-server-edit-server): New layout. + (gnus-server-read-server): Wrong interactive spec and returned to + the wrong buffer. + (gnus-group-browse-foreign-server): Also allow browsing of + servers. + + * nnml.el (nnml-request-list): Did not set nnml-group-alist. + + * gnus.el (gnus-summary-respool-article): Would not let you + respool. + Sat Apr 29 00:35:17 1995 Lars Magne Ingebrigtsen * gnus-score.el (gnus-score-add-followups): Did not work. *************** *** 5,10 **** --- 62,69 ---- * nntp.el (nntp-request-article): Would fetch articles even if async-fetched. (nntp-async-fetch-articles): Would re-fetch the first article. + + * gnus.el: 0.62 is released Fri Apr 28 00:24:34 1995 Lars Magne Ingebrigtsen diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-score.el dgnus/lisp/gnus-score.el *** pub/dgnus/lisp/gnus-score.el Sat Apr 29 01:39:51 1995 --- dgnus/lisp/gnus-score.el Sun Apr 30 01:31:22 1995 *************** *** 671,677 **** ((equal adapt '(ignore)) nil) ((consp adapt) ! adapt))) (setq gnus-summary-mark-below (or mark mark-and-expunge gnus-summary-mark-below)) (setq gnus-summary-expunge-below --- 671,679 ---- ((equal adapt '(ignore)) nil) ((consp adapt) ! adapt) ! (t ! gnus-default-adaptive-score-alist))) (setq gnus-summary-mark-below (or mark mark-and-expunge gnus-summary-mark-below)) (setq gnus-summary-expunge-below *************** *** 1219,1225 **** (save-excursion (set-buffer gnus-summary-buffer) (gnus-summary-score-entry ! "references" (header-id header) 'e score (current-time-string) nil t))) --- 1221,1227 ---- (save-excursion (set-buffer gnus-summary-buffer) (gnus-summary-score-entry ! "references" (header-id header) 's score (current-time-string) nil t))) *************** *** 1389,1395 **** (while elem (gnus-summary-score-entry (nth 1 (car elem)) (funcall (car (car elem)) headers) ! 'e (nth 2 (car elem)) date nil t) (setq elem (cdr elem)))) (forward-line 1))))) --- 1391,1397 ---- (while elem (gnus-summary-score-entry (nth 1 (car elem)) (funcall (car (car elem)) headers) ! 's (nth 2 (car elem)) date nil t) (setq elem (cdr elem)))) (forward-line 1))))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-uu.el dgnus/lisp/gnus-uu.el *** pub/dgnus/lisp/gnus-uu.el Sat Apr 29 01:39:51 1995 --- dgnus/lisp/gnus-uu.el Sat Apr 29 23:52:55 1995 *************** *** 1457,1464 **** (add-hook 'gnus-exit-group-hook 'gnus-uu-clean-up) (add-hook 'gnus-exit-group-hook 'gnus-uu-check-for-generated-files) ! ;; Major mode for posting encoded articles. (require 'sendmail) (require 'rnews) --- 1457,1467 ---- (add-hook 'gnus-exit-group-hook 'gnus-uu-clean-up) (add-hook 'gnus-exit-group-hook 'gnus-uu-check-for-generated-files) + ! ;;; ! ;;; uuencoded posting ! ;;; (require 'sendmail) (require 'rnews) *************** *** 1504,1632 **** (defvar gnus-uu-post-inserted-file-name nil) (defvar gnus-uu-winconf-post-news nil) - ;; The following map and mode was taken from rnewspost.el and edited - ;; somewhat. - (defvar gnus-uu-post-reply-mode-map nil) - (if gnus-uu-post-reply-mode-map - () - (setq gnus-uu-post-reply-mode-map (make-keymap)) - (define-key gnus-uu-post-reply-mode-map "\C-c?" 'describe-mode) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-f\C-d" - 'news-reply-distribution) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-f\C-k" - 'news-reply-keywords) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-f\C-n" - 'news-reply-newsgroups) - - (define-key gnus-uu-post-reply-mode-map "\C-c\C-f\C-f" - 'news-reply-followup-to) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-f\C-s" 'mail-subject) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-f\C-a" - 'gnus-uu-post-reply-summary) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-r" - 'news-caesar-buffer-body) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-w" 'news-reply-signature) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-y" - 'news-reply-yank-original) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-q" - 'mail-fill-yanked-message) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-c" - 'gnus-uu-post-news-inews) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-s" - 'gnus-uu-post-news-inews) - (define-key gnus-uu-post-reply-mode-map "\C-c\C-i" - 'gnus-uu-post-insert-binary-in-article) - ) - - ;; This mode was taken from rnewspost.el and modified slightly. - (defun gnus-uu-post-reply-mode () - "Major mode for editing binary news to be posted on USENET. - First-time posters are asked to please read the articles in newsgroup: - news.announce.newusers . - - Like news-reply-mode, which is like Text Mode, but with these - additional commands: - - \\\\[gnus-uu-post-news-inews] post the message. - C-c C-f move to a header field (and create it if there isn't): - C-c C-f C-n move to Newsgroups: C-c C-f C-s move to Subj: - C-c C-f C-f move to Followup-To: C-c C-f C-k move to Keywords: - C-c C-f C-d move to Distribution: C-c C-f C-a move to Summary: - C-c C-y news-reply-yank-original (insert current message, in NEWS). - C-c C-q mail-fill-yanked-message (fill what was yanked). - C-c C-r caesar rotate all letters by 13 places in the article's body (rot13). - \\[gnus-uu-post-insert-binary-in-article] encode and include a file in this article. - - This mode is almost identical to news-reply-mode, but has some - additional commands for treating encoded binary articles. In - particular, \\[gnus-uu-post-news-inews] will ask for a file to include, if - one hasn't been included already. It will post, first, the message - composed, and then it will post as many additional articles it takes - to post the entire encoded files. - - Relevant Variables - - `gnus-uu-post-encode-method' - There are three functions supplied with gnus-uu for encoding files: - `gnus-uu-post-encode-uuencode', which does straight uuencoding; - `gnus-uu-post-encode-mime', which encodes with base64 and adds MIME - headers; and `gnus-uu-post-encode-mime-uuencode', which encodes with - uuencode and adds MIME headers. - - `gnus-uu-post-include-before-composing' - Non-nil means that gnus-uu will ask for a file to encode before you - compose the article. If this variable is t, you can either include - an encoded file with `C-c C-i' or have one included for you when you - post the article. - - `gnus-uu-post-length' - Maximum length of an article. The encoded file will be split into how - many articles it takes to post the entire file. - - `gnus-uu-post-separate-description' - Non-nil means that the description will be posted in a separate - article. The first article will typically be numbered (0/x). If - this variable is nil, the description the user enters will be - included at the beginning of the first article, which will be - numbered (1/x). Default is t. - - `gnus-uu-post-threaded' - Non-nil means that gnus-uu will post the encoded file in a thread. - This may not be smart, as no other decoder I have seen are able to - follow threads when collecting uuencoded articles. (Well, I have seen - one package that does that - gnus-uu, but somehow, I don't think that - counts...) Default is nil. - " - (interactive) - ;; require... - (or (fboundp 'mail-setup) (load "sendmail")) - (kill-all-local-variables) - (make-local-variable 'mail-reply-buffer) - (setq mail-reply-buffer nil) - (set-syntax-table text-mode-syntax-table) - (use-local-map gnus-uu-post-reply-mode-map) - (setq local-abbrev-table text-mode-abbrev-table) - (setq major-mode 'gnus-uu-post-reply-mode) - (setq mode-name "Gnus UU News") - (make-local-variable 'paragraph-separate) - (make-local-variable 'paragraph-start) - (setq paragraph-start (concat "^" (regexp-quote mail-header-separator) - "$\\|" paragraph-start)) - (setq paragraph-separate (concat "^" (regexp-quote mail-header-separator) - "$\\|" paragraph-separate)) - (run-hooks 'text-mode-hook 'gnus-uu-post-reply-mode-hook)) - (defun gnus-uu-post-news () "Compose an article and post an encoded file." (interactive) (setq gnus-uu-post-inserted-file-name nil) (setq gnus-uu-winconf-post-news (current-window-configuration)) ! (let (news-reply-mode) ! (fset 'news-reply-mode 'gnus-uu-post-reply-mode) ! (gnus-summary-post-news) ! (if gnus-uu-post-include-before-composing ! (save-excursion (setq gnus-uu-post-inserted-file-name ! (gnus-uu-post-insert-binary)))))) (defun gnus-uu-post-insert-binary-in-article () "Inserts an encoded file in the buffer. --- 1507,1530 ---- (defvar gnus-uu-post-inserted-file-name nil) (defvar gnus-uu-winconf-post-news nil) (defun gnus-uu-post-news () "Compose an article and post an encoded file." (interactive) (setq gnus-uu-post-inserted-file-name nil) (setq gnus-uu-winconf-post-news (current-window-configuration)) ! ! (gnus-summary-post-news) ! ! (use-local-map (copy-keymap (current-local-map))) ! (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done) ! (local-set-key "\C-c\C-f\C-a" 'gnus-uu-post-reply-summary) ! (local-set-key "\C-c\C-c" 'gnus-uu-post-news-inews) ! (local-set-key "\C-c\C-s" 'gnus-uu-post-news-inews) ! (local-set-key "\C-c\C-i" 'gnus-uu-post-insert-binary-in-article) ! ! (if gnus-uu-post-include-before-composing ! (save-excursion (setq gnus-uu-post-inserted-file-name ! (gnus-uu-post-insert-binary))))) (defun gnus-uu-post-insert-binary-in-article () "Inserts an encoded file in the buffer. diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-vis.el dgnus/lisp/gnus-vis.el *** pub/dgnus/lisp/gnus-vis.el Sat Apr 29 01:39:51 1995 --- dgnus/lisp/gnus-vis.el Sun Apr 30 22:39:44 1995 *************** *** 120,125 **** --- 120,126 ---- gnus-group-mode-map "" '("Misc" + ["Send a bug report" gnus-bug t] ["Check for new news" gnus-group-get-new-news t] ["Delete bogus groups" gnus-group-check-bogus-groups t] ["Find new newsgroups" gnus-find-new-newsgroups t] diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus.el dgnus/lisp/gnus.el *** pub/dgnus/lisp/gnus.el Sat Apr 29 01:39:54 1995 --- dgnus/lisp/gnus.el Sun Apr 30 22:42:53 1995 *************** *** 356,361 **** --- 356,364 ---- (defvar gnus-use-adaptive-scoring nil "*If non-nil, use some adaptive scoring scheme.") + (defvar gnus-use-cache nil + "*If non-nil, Gnus will cache (some) articles locally.") + (defvar gnus-fetch-old-headers nil "*Non-nil means that Gnus will try to build threads by grabbing old headers. If an unread article in the group refers to an older, already read (or *************** *** 1314,1320 **** (defconst gnus-maintainer "Lars Magne Ingebrigtsen " "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.62" "Version number for this version of Gnus.") (defvar gnus-info-nodes --- 1317,1323 ---- (defconst gnus-maintainer "Lars Magne Ingebrigtsen " "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.63" "Version number for this version of Gnus.") (defvar gnus-info-nodes *************** *** 1572,1577 **** --- 1575,1588 ---- (autoload 'gnus-execute "gnus-kill") (autoload 'gnus-expunge "gnus-kill") + (autoload 'gnus-cache-possibly-enter-article "gnus-cache") + (autoload 'gnus-cache-save-buffers "gnus-cache") + (autoload 'gnus-cache-possibly-remove-article "gnus-cache") + (autoload 'gnus-cache-request-article "gnus-cache") + (autoload 'gnus-cache-retrieve-headers "gnus-cache") + (autoload 'gnus-cache-possibly-alter-active "gnus-cache") + (autoload 'gnus-jog-cache "gnus-cache" nil t) + (autoload 'pp "pp") (autoload 'pp-to-string "pp") (autoload 'mail-extract-address-components "mail-extr") *************** *** 1718,1725 **** "Return the value of the header FIELD of current article." (save-excursion (save-restriction ! (gnus-narrow-to-headers) ! (mail-fetch-field field)))) (defun gnus-goto-colon () (beginning-of-line) --- 1729,1737 ---- "Return the value of the header FIELD of current article." (save-excursion (save-restriction ! (let ((case-fold-search t)) ! (gnus-narrow-to-headers) ! (mail-fetch-field field))))) (defun gnus-goto-colon () (beginning-of-line) *************** *** 2211,2216 **** --- 2223,2230 ---- (and gnus-current-startup-file (get-file-buffer gnus-current-startup-file) (kill-buffer (get-file-buffer gnus-current-startup-file))) + ;; Save any cache buffers. + (and gnus-use-cache (gnus-cache-save-buffers)) ;; Clear the dribble buffer. (gnus-dribble-clear) ;; Kill global KILL file buffer. *************** *** 2557,2573 **** "Return a list of elements of LIST1 that do not appear in LIST2. Both lists have to be sorted over <." (let (out) ! (while (and list1 list2) ! (cond ((= (car list1) (car list2)) ! (setq list1 (cdr list1) ! list2 (cdr list2))) ! ((< (car list1) (car list2)) ! (setq out (cons (car list1) out)) ! (setq list1 (cdr list1))) ! (t ! (setq out (cons (car list2) out)) ! (setq list2 (cdr list2))))) ! (nreverse (append (or list1 list2) out)))) (defun gnus-intersection (list1 list2) (let ((result nil)) --- 2571,2589 ---- "Return a list of elements of LIST1 that do not appear in LIST2. Both lists have to be sorted over <." (let (out) ! (if (or (null list1) (null list2)) ! (or list1 list2) ! (while (and list1 list2) ! (cond ((= (car list1) (car list2)) ! (setq list1 (cdr list1) ! list2 (cdr list2))) ! ((< (car list1) (car list2)) ! (setq out (cons (car list1) out)) ! (setq list1 (cdr list1))) ! (t ! (setq out (cons (car list2) out)) ! (setq list2 (cdr list2))))) ! (nconc (nreverse out) (or list1 list2))))) (defun gnus-intersection (list1 list2) (let ((result nil)) *************** *** 2822,2827 **** --- 2838,2844 ---- (if gnus-xemacs [button2] [mouse-2]) 'gnus-mouse-pick-group) (define-key gnus-group-mode-map "<" 'beginning-of-buffer) (define-key gnus-group-mode-map ">" 'end-of-buffer) + (define-key gnus-group-mode-map "\C-c\C-b" 'gnus-bug) (define-prefix-command 'gnus-group-make-map) (define-key gnus-group-mode-map "M" 'gnus-group-make-map) *************** *** 4324,4337 **** If not, METHOD should be a list where the first element is the method and the second element is the address." (interactive ! (list (list (intern (completing-read ! "Which backend: " ! gnus-valid-select-methods nil t "nntp")) ! ;; Suggested by mapjph@bath.ac.uk. ! (completing-read ! "Address: " ! (mapcar (lambda (server) (list server)) ! gnus-secondary-servers))))) (gnus-browse-foreign-server method)) --- 4341,4361 ---- If not, METHOD should be a list where the first element is the method and the second element is the address." (interactive ! (list (let ((how (completing-read ! "Which backend: " ! (append gnus-valid-select-methods gnus-server-alist) ! nil t "nntp"))) ! ;; We either got a backend name or a virtual server name. ! ;; If the first, we also need an address. ! (if (assoc how gnus-valid-select-methods) ! (list (intern how) ! ;; Suggested by mapjph@bath.ac.uk. ! (completing-read ! "Address: " ! (mapcar (lambda (server) (list server)) ! gnus-secondary-servers))) ! ;; We got a server name, so we find the method. ! (gnus-server-to-method how))))) (gnus-browse-foreign-server method)) *************** *** 7188,7203 **** (mapcar (lambda (headers) (list (int-to-string (header-number headers)))) gnus-newsgroup-headers) nil 'require-match)))) ! (if (gnus-summary-goto-subject article) ! (gnus-summary-display-article article all-headers)) ! (gnus-summary-position-cursor)) (defun gnus-summary-goto-last-article () "Go to the last article." (interactive) ! (if gnus-last-article ! (gnus-summary-goto-article gnus-last-article)) ! (gnus-summary-position-cursor)) (defun gnus-summary-pop-article (number) "Pop one article off the history and go to the previous. --- 7212,7229 ---- (mapcar (lambda (headers) (list (int-to-string (header-number headers)))) gnus-newsgroup-headers) nil 'require-match)))) ! (prog1 ! (and (gnus-summary-goto-subject article) ! (gnus-summary-display-article article all-headers)) ! (gnus-summary-position-cursor))) (defun gnus-summary-goto-last-article () "Go to the last article." (interactive) ! (prog1 ! (and gnus-last-article ! (gnus-summary-goto-article gnus-last-article)) ! (gnus-summary-position-cursor))) (defun gnus-summary-pop-article (number) "Pop one article off the history and go to the previous. *************** *** 7248,7254 **** (let ((header (car (gnus-gethash (downcase message-id) gnus-newsgroup-dependencies)))) (if header ! (gnus-summary-goto-article (header-number header)) (let ((gnus-override-method gnus-refer-article-method)) (and gnus-refer-article-method (or (gnus-server-opened gnus-refer-article-method) --- 7274,7288 ---- (let ((header (car (gnus-gethash (downcase message-id) gnus-newsgroup-dependencies)))) (if header ! (or (gnus-summary-goto-article (header-number header)) ! ;; The header has been read, but the article had been ! ;; expunged, so we insert it again. ! (progn ! (gnus-summary-insert-line ! nil header 0 nil gnus-read-mark nil nil ! (header-subject header)) ! (forward-line -1) ! (header-number header))) (let ((gnus-override-method gnus-refer-article-method)) (and gnus-refer-article-method (or (gnus-server-opened gnus-refer-article-method) *************** *** 7541,7547 **** gnus-newsgroup-name)) ; Server (list 'gnus-request-accept-article (if select-method ! (quote select-method) to-newsgroup) (not (cdr articles))) ; Accept form (not (cdr articles)))) ; Only save nov last time --- 7575,7581 ---- gnus-newsgroup-name)) ; Server (list 'gnus-request-accept-article (if select-method ! (list 'quote select-method) to-newsgroup) (not (cdr articles))) ; Accept form (not (cdr articles)))) ; Only save nov last time *************** *** 7603,7619 **** latter case, they will be copied into the relevant groups." (interactive "P") (gnus-set-global-variables) ! (let ((respool-methods (gnus-methods-using 'respool))) (or respool-method (setq respool-method (completing-read "What method do you want to use when respooling? " ! respool-methods nil t))) ! (if (assoc (symbol-name ! (car (gnus-find-method-for-group gnus-newsgroup-name))) ! respool-methods) ! (gnus-summary-move-article n nil (intern respool-method))) ! (gnus-summary-copy-article n nil (intern respool-method)))) ;; Suggested by gregj@unidata.com (Gregory J. Grubbs). (defun gnus-summary-copy-article (n &optional to-newsgroup select-method) --- 7637,7656 ---- latter case, they will be copied into the relevant groups." (interactive "P") (gnus-set-global-variables) ! (let ((respool-methods (gnus-methods-using 'respool)) ! (methname ! (symbol-name (car (gnus-find-method-for-group gnus-newsgroup-name))))) (or respool-method (setq respool-method (completing-read "What method do you want to use when respooling? " ! respool-methods nil t methname))) ! (or (string= respool-method "") ! (if (assoc (symbol-name ! (car (gnus-find-method-for-group gnus-newsgroup-name))) ! respool-methods) ! (gnus-summary-move-article n nil (intern respool-method)) ! (gnus-summary-copy-article n nil (intern respool-method)))))) ;; Suggested by gregj@unidata.com (Gregory J. Grubbs). (defun gnus-summary-copy-article (n &optional to-newsgroup select-method) *************** *** 7848,7855 **** (> (gnus-summary-thread-level) level)) (gnus-summary-raise-score score)) (setq e (point)))) ! (or (zerop (gnus-summary-next-subject 1 t)) ! (goto-char e))) (gnus-summary-recenter) (gnus-summary-position-cursor) (gnus-set-mode-line 'summary)) --- 7885,7893 ---- (> (gnus-summary-thread-level) level)) (gnus-summary-raise-score score)) (setq e (point)))) ! (let ((gnus-summary-check-current t)) ! (or (zerop (gnus-summary-next-subject 1 t)) ! (goto-char e)))) (gnus-summary-recenter) (gnus-summary-position-cursor) (gnus-set-mode-line 'summary)) *************** *** 8096,8111 **** (= mark gnus-low-score-mark) (= mark gnus-read-mark)))) (setq mark gnus-expirable-mark)) ! (let* ((buffer-read-only nil) ! (mark (or (and (stringp mark) (aref mark 0)) mark gnus-del-mark)) (article (or article (gnus-summary-article-number)))) (if (or (= mark gnus-unread-mark) (= mark gnus-ticked-mark) (= mark gnus-dormant-mark)) (gnus-mark-article-as-unread article mark) (gnus-mark-article-as-read article mark)) (if (gnus-summary-goto-subject article) ! (progn (gnus-summary-show-thread) (beginning-of-line) (and (eq (gnus-summary-article-mark) ?Z) --- 8134,8159 ---- (= mark gnus-low-score-mark) (= mark gnus-read-mark)))) (setq mark gnus-expirable-mark)) ! (let* ((mark (or (and (stringp mark) (aref mark 0)) mark gnus-del-mark)) (article (or article (gnus-summary-article-number)))) (if (or (= mark gnus-unread-mark) (= mark gnus-ticked-mark) (= mark gnus-dormant-mark)) (gnus-mark-article-as-unread article mark) (gnus-mark-article-as-read article mark)) + + ;; See whether the article is to be put in the cache. + (and gnus-use-cache + (save-excursion + (gnus-summary-select-article) + (gnus-cache-possibly-enter-article + gnus-newsgroup-name article + (gnus-get-header-by-number article) + (= mark gnus-ticked-mark) + (= mark gnus-dormant-mark) (= mark gnus-unread-mark)))) + (if (gnus-summary-goto-subject article) ! (let ((buffer-read-only nil)) (gnus-summary-show-thread) (beginning-of-line) (and (eq (gnus-summary-article-mark) ?Z) *************** *** 9183,9189 **** (gnus-add-current-to-buffer-list) (gnus-article-mode)))) ! (defun gnus-request-article-this-buffer (article &optional group) "Get an article and insert it into this buffer." (setq group (or group gnus-newsgroup-name)) ;; Using `gnus-request-article' directly will insert the article into --- 9231,9237 ---- (gnus-add-current-to-buffer-list) (gnus-article-mode)))) ! (defun gnus-request-article-this-buffer (article group) "Get an article and insert it into this buffer." (setq group (or group gnus-newsgroup-name)) ;; Using `gnus-request-article' directly will insert the article into *************** *** 9210,9224 **** ;; It is an extracted pseudo-article. (setq article nil) (gnus-request-pseudo-article header))))) ! ;; Get the article and into the article buffer. ! (if article ! (progn ! (erase-buffer) ! (let ((gnus-override-method ! (and (stringp article) gnus-refer-article-method))) ! (and (gnus-request-article article group (current-buffer)) ! 'article))) ! 'pseudo)) (defun gnus-read-header (id) "Read the headers of article ID and enter them into the Gnus system." --- 9258,9278 ---- ;; It is an extracted pseudo-article. (setq article nil) (gnus-request-pseudo-article header))))) ! ! ;; Check the cache. ! (if (and gnus-use-cache ! (numberp article) ! (gnus-cache-request-article article group)) ! 'article ! ;; Get the article and into the article buffer. ! (if article ! (progn ! (erase-buffer) ! (let ((gnus-override-method ! (and (stringp article) gnus-refer-article-method))) ! (and (gnus-request-article article group (current-buffer)) ! 'article))) ! 'pseudo))) (defun gnus-read-header (id) "Read the headers of article ID and enter them into the Gnus system." *************** *** 9323,9329 **** ;; Set the global newsgroup variables here. ;; Suggested by Jim Sisolak ;; . ! (gnus-set-global-variables))) ;; gnus-have-all-headers must be either T or NIL. (setq gnus-have-all-headers (not (not (or all-headers gnus-show-all-headers)))) --- 9377,9390 ---- ;; Set the global newsgroup variables here. ;; Suggested by Jim Sisolak ;; . ! (gnus-set-global-variables) ! (and gnus-use-cache ! (gnus-cache-possibly-enter-article ! group article ! (gnus-get-header-by-number article) ! (memq article gnus-newsgroup-marked) ! (memq article gnus-newsgroup-dormant) ! (memq article gnus-newsgroup-unreads))))) ;; gnus-have-all-headers must be either T or NIL. (setq gnus-have-all-headers (not (not (or all-headers gnus-show-all-headers)))) *************** *** 9552,9557 **** --- 9613,9635 ---- (process-send-eof process)) (error "Couldn't start process")))))))) + (defun gnus-article-de-quoted-unreadable (&optional force) + "Do a naïve translation of a quoted-printable-encoded article. + This is in no way, shape or form meant as a replacement for real MIME + processing, but is simply a stop-gap measure until MIME support is + written. + If FORCE, decode the article whether it is marked as quoted-printable + or not." + (interactive (list 'force)) + (save-excursion + (set-buffer gnus-article-buffer) + (let ((case-fold-search t) + (type (gnus-fetch-field "content-transfer-encoding"))) + (if (or force (and type (string-match "quoted-printable" type))) + (progn + (goto-char (point-min)) + (search-forward "\n\n" nil 'move) + (gnus-mime-decode-quoted-printable (point) (point-max))))))) (defun gnus-mime-decode-quoted-printable (from to) ;; Decode quoted-printable from region between FROM and TO. *************** *** 9568,9599 **** (delete-char 2)) ((message "Malformed MIME quoted-printable message")))))) - (defun gnus-article-de-quoted-unreadable () - "Do a naive translation of a quoted-printable-encoded article. - This is in no way, shape or form meant as a replacement for real MIME - processing, but is simply a stop-gap measure until MIME support is - written." - ;; Unquote quoted-printable from news articles. - (interactive) - (save-excursion - (set-buffer gnus-article-buffer) - (let ((case-fold-search t) - (type (gnus-fetch-field "content-transfer-encoding"))) - (cond ((and (stringp type) (string-match "quoted-printable" type)) - (goto-char (point-min)) - (search-forward "\n\n" nil 'move) - (message "MIME Unquoting printable...") - (gnus-mime-decode-quoted-printable (point) (point-max)) - (message "MIME Unquoting printable...done"))) - (set-buffer gnus-summary-buffer)))) ! (defun gnus-article-date-ut (date type) "Convert DATE date to universal time in the current article. If TYPE is `local', convert to local time; if it is `lapsed', output how much time has lapsed since DATE." ! (interactive (list (header-date gnus-current-headers) 'ut)) ! (if (not date) ! () (save-excursion (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) --- 9646,9660 ---- (delete-char 2)) ((message "Malformed MIME quoted-printable message")))))) ! (defun gnus-article-date-ut (&optional type) "Convert DATE date to universal time in the current article. If TYPE is `local', convert to local time; if it is `lapsed', output how much time has lapsed since DATE." ! (interactive (list 'ut)) ! (let ((date (header-date (or gnus-current-headers ! (gnus-get-header-by-number ! (gnus-summary-article-number)))))) (save-excursion (set-buffer gnus-article-buffer) (let ((buffer-read-only nil)) *************** *** 9612,9618 **** ((eq type 'lapsed) (let* ((sec (- (gnus-seconds-since-epoch (current-time-string)) (gnus-seconds-since-epoch date))) ! (units (list (cons 'year (* 1.0 365 24 60 60)) (cons 'week (* 7 24 60 60)) (cons 'day (* 24 60 60)) (cons 'hour (* 60 60)) --- 9673,9679 ---- ((eq type 'lapsed) (let* ((sec (- (gnus-seconds-since-epoch (current-time-string)) (gnus-seconds-since-epoch date))) ! (units (list (cons 'year (* 365.25 24 60 60)) (cons 'week (* 7 24 60 60)) (cons 'day (* 24 60 60)) (cons 'hour (* 60 60)) *************** *** 9623,9633 **** "X-Sent: " (mapconcat (lambda (unit) ! (if (zerop (setq num (floor (/ sec (cdr unit))))) "" (setq sec (- sec (* num (cdr unit)))) (prog1 ! (concat (if prev ", " "") (int-to-string num) " " (symbol-name (car unit)) (if (> num 1) "s" "")) (setq prev t)))) --- 9684,9694 ---- "X-Sent: " (mapconcat (lambda (unit) ! (if (zerop (setq num (ffloor (/ sec (cdr unit))))) "" (setq sec (- sec (* num (cdr unit)))) (prog1 ! (concat (if prev ", " "") (int-to-string (floor num)) " " (symbol-name (car unit)) (if (> num 1) "s" "")) (setq prev t)))) *************** *** 9636,9650 **** (t (error "Unknown conversion type: %s" type)))))))) ! (defun gnus-article-date-local (date) "Convert the current article date to the local timezone." ! (interactive (list (header-date gnus-current-headers))) ! (gnus-article-date-ut date 'local)) ! (defun gnus-article-date-lapsed (date) "Convert the current article date to time lapsed since it was sent." ! (interactive (list (header-date gnus-current-headers))) ! (gnus-article-date-ut date 'lapsed)) ;; Article savers. --- 9697,9711 ---- (t (error "Unknown conversion type: %s" type)))))))) ! (defun gnus-article-date-local () "Convert the current article date to the local timezone." ! (interactive) ! (gnus-article-date-ut 'local)) ! (defun gnus-article-date-lapsed () "Convert the current article date to time lapsed since it was sent." ! (interactive) ! (gnus-article-date-ut 'lapsed)) ;; Article savers. *************** *** 10401,10408 **** (defun gnus-retrieve-headers (articles group) (let ((method (gnus-find-method-for-group group))) ! (funcall (gnus-get-function method 'retrieve-headers) ! articles (gnus-group-real-name group) (nth 1 method)))) (defun gnus-retrieve-groups (groups method) (funcall (gnus-get-function method 'retrieve-groups) groups (nth 1 method))) --- 10462,10471 ---- (defun gnus-retrieve-headers (articles group) (let ((method (gnus-find-method-for-group group))) ! (if gnus-use-cache ! (gnus-cache-retrieve-headers articles group) ! (funcall (gnus-get-function method 'retrieve-headers) ! articles (gnus-group-real-name group) (nth 1 method))))) (defun gnus-retrieve-groups (groups method) (funcall (gnus-get-function method 'retrieve-groups) groups (nth 1 method))) *************** *** 10739,10745 **** (setq groups (cdr groups))) (gnus-group-make-help-group) (and gnus-novice-user ! (message (substitute-command-keys "\\\\[gnus-group-list-killed] to list killed groups"))))))) ;; `gnus-group-change-level' is the fundamental function for changing ;; subscription levels of newsgroups. This might mean just changing --- 10802,10808 ---- (setq groups (cdr groups))) (gnus-group-make-help-group) (and gnus-novice-user ! (message "`G k' to list killed groups")))))) ;; `gnus-group-change-level' is the fundamental function for changing ;; subscription levels of newsgroups. This might mean just changing *************** *** 10905,10911 **** (defun gnus-get-unread-articles (&optional level) (let ((newsrc (cdr gnus-newsrc-alist)) (level (or level (1+ gnus-level-subscribed))) ! info group active virtuals) (message "Checking new news...") (while newsrc (setq info (car newsrc)) --- 10968,10974 ---- (defun gnus-get-unread-articles (&optional level) (let ((newsrc (cdr gnus-newsrc-alist)) (level (or level (1+ gnus-level-subscribed))) ! info group active virtuals method) (message "Checking new news...") (while newsrc (setq info (car newsrc)) *************** *** 10917,10929 **** ;; be reached) we just set the number of unread articles in this ;; newsgroup to t. This means that Gnus thinks that there are ;; unread articles, but it has no idea how many. ! (if (nth 4 info) (if (or (and gnus-activate-foreign-newsgroups (not (numberp gnus-activate-foreign-newsgroups))) (and (numberp gnus-activate-foreign-newsgroups) (<= (nth 1 info) gnus-activate-foreign-newsgroups) (<= (nth 1 info) level))) ! (if (eq (car (nth 4 info)) 'nnvirtual) (setq virtuals (cons info virtuals)) (setq active (gnus-activate-newsgroup (car info))))) (if (and (not gnus-read-active-file) --- 10980,10994 ---- ;; be reached) we just set the number of unread articles in this ;; newsgroup to t. This means that Gnus thinks that there are ;; unread articles, but it has no idea how many. ! (if (setq method (nth 4 info)) (if (or (and gnus-activate-foreign-newsgroups (not (numberp gnus-activate-foreign-newsgroups))) (and (numberp gnus-activate-foreign-newsgroups) (<= (nth 1 info) gnus-activate-foreign-newsgroups) (<= (nth 1 info) level))) ! (if (eq (car (if (stringp method) ! (gnus-server-to-method method) ! (nth 4 info))) 'nnvirtual) (setq virtuals (cons info virtuals)) (setq active (gnus-activate-newsgroup (car info))))) (if (and (not gnus-read-active-file) *************** *** 10983,10988 **** --- 11048,11056 ---- (num 0) (marked (nth 3 info)) srange lowest group highest) + ;; If a cache is present, we may have to alter the active info. + (and gnus-use-cache + (gnus-cache-possibly-alter-active (car info) active)) ;; Modify the list of read articles according to what articles ;; are available; then tally the unread articles and add the ;; number to the group hash table entry. *************** *** 11359,11365 **** (load ding-file t t t) (error nil)) (and gnus-newsrc-assoc (setq gnus-newsrc-alist gnus-newsrc-assoc))) ! (gnus-uncompress-newsrc-assoc) (gnus-make-hashtable-from-newsrc-alist) (if (not (file-newer-than-file-p file ding-file)) () --- 11427,11434 ---- (load ding-file t t t) (error nil)) (and gnus-newsrc-assoc (setq gnus-newsrc-alist gnus-newsrc-assoc))) ! (let ((inhibit-quit t)) ! (gnus-uncompress-newsrc-assoc)) (gnus-make-hashtable-from-newsrc-alist) (if (not (file-newer-than-file-p file ding-file)) () *************** *** 11710,11715 **** --- 11779,11785 ---- (insert ";; Never delete this file - touch .newsrc instead to force Gnus\n") (insert ";; to read .newsrc.\n") (let ((variables gnus-variable-list) + (inhibit-quit t) (gnus-newsrc-alist (cdr gnus-newsrc-alist)) variable) ;; insert lisp expressions. *************** *** 11844,11849 **** --- 11914,11920 ---- (setq gnus-server-mode-map (make-sparse-keymap)) (suppress-keymap gnus-server-mode-map) (define-key gnus-server-mode-map " " 'gnus-server-read-server) + (define-key gnus-server-mode-map "\r" 'gnus-server-read-server) (define-key gnus-server-mode-map "q" 'gnus-server-exit) (define-key gnus-server-mode-map "l" 'gnus-server-list-servers) (define-key gnus-server-mode-map "k" 'gnus-server-kill-server) *************** *** 11944,11953 **** (gnus-server-insert-server-line nil (car entry) (cdr entry)) (gnus-server-position-cursor)))))) ! (defun gnus-server-set-info (info) ;; Enter a select method into the virtual server alist. (gnus-dribble-enter ! (concat "(gnus-server-set-info '" (prin1-to-string info) ")")) (let* ((server (nth 1 info)) (entry (assoc server gnus-server-alist))) --- 12015,12024 ---- (gnus-server-insert-server-line nil (car entry) (cdr entry)) (gnus-server-position-cursor)))))) ! (defun gnus-server-set-info (server info) ;; Enter a select method into the virtual server alist. (gnus-dribble-enter ! (concat "(gnus-server-set-info \"" server "\" '" (prin1-to-string info) ")")) (let* ((server (nth 1 info)) (entry (assoc server gnus-server-alist))) *************** *** 12099,12115 **** (gnus-add-current-to-buffer-list) (emacs-lisp-mode) (use-local-map (copy-keymap (current-local-map))) ! (local-set-key "\C-c\C-c" 'gnus-server-edit-server-done) (erase-buffer) (insert ";; Type `C-c C-c' after you have edited the server.\n\n") ! (insert "(gnus-server-set-info \n " ! (pp-to-string (list 'quote (cdr (assoc server gnus-server-alist)))) ! " )\n")) ! (defun gnus-server-edit-server-done () (interactive) (set-buffer (get-buffer-create gnus-server-edit-buffer)) ! (eval-current-buffer) (kill-buffer (current-buffer)) (and gnus-winconf-edit-server (set-window-configuration gnus-winconf-edit-server)) --- 12170,12191 ---- (gnus-add-current-to-buffer-list) (emacs-lisp-mode) (use-local-map (copy-keymap (current-local-map))) ! (let ((done-func '(lambda () ! "Exit editing mode and update the information." ! (interactive) ! (gnus-server-edit-server-done 'group)))) ! (setcar (cdr (nth 4 done-func)) server) ! (local-set-key "\C-c\C-c" done-func)) (erase-buffer) (insert ";; Type `C-c C-c' after you have edited the server.\n\n") ! (insert (pp-to-string (cdr (assoc server gnus-server-alist))))) ! (defun gnus-server-edit-server-done (server) (interactive) (set-buffer (get-buffer-create gnus-server-edit-buffer)) ! (goto-char (point-min)) ! (let ((form (read (current-buffer)))) ! (gnus-server-set-info server form)) (kill-buffer (current-buffer)) (and gnus-winconf-edit-server (set-window-configuration gnus-winconf-edit-server)) *************** *** 12120,12127 **** (defun gnus-server-read-server (server) "Browse a server." ! (interactive (gnus-server-server-name)) ! (gnus-browse-foreign-server (gnus-server-to-method server))) ;;; Gnus score functions. --- 12196,12203 ---- (defun gnus-server-read-server (server) "Browse a server." ! (interactive (list (gnus-server-server-name))) ! (gnus-browse-foreign-server (gnus-server-to-method server) (current-buffer))) ;;; Gnus score functions. diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnbabyl.el dgnus/lisp/nnbabyl.el *** pub/dgnus/lisp/nnbabyl.el Sat Apr 29 01:39:55 1995 --- dgnus/lisp/nnbabyl.el Sun Apr 30 22:39:46 1995 *************** *** 204,210 **** (defun nnbabyl-request-list (&optional server) (if server (nnbabyl-get-new-mail)) ! (nnmail-find-file nnbabyl-active-file)) (defun nnbabyl-request-newgroups (date &optional server) (nnbabyl-request-list server)) --- 204,215 ---- (defun nnbabyl-request-list (&optional server) (if server (nnbabyl-get-new-mail)) ! (save-excursion ! (or (nnmail-find-file nnbabyl-active-file) ! (progn ! (setq nnbabyl-group-alist (nnmail-get-active)) ! (nnmail-save-active nnbabyl-group-alist nnbabyl-active-file) ! (nnmail-find-file nnbabyl-active-file))))) (defun nnbabyl-request-newgroups (date &optional server) (nnbabyl-request-list server)) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nndigest.el dgnus/lisp/nndigest.el *** pub/dgnus/lisp/nndigest.el Sat Apr 29 01:39:55 1995 --- dgnus/lisp/nndigest.el Sun Apr 30 22:39:46 1995 *************** *** 38,52 **** (defvar nndigest-group-alist nil) ! (defconst nndigest-separator "------------------------------[\n \t]*\n[^ ]+: ") ;;; Interface functions. (defun nndigest-retrieve-headers (sequence &optional newsgroup server) - "Retrieve the headers for the articles in SEQUENCE. - Newsgroup must be selected before calling this function." (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) --- 38,51 ---- (defvar nndigest-group-alist nil) ! (defconst nndigest-separator ! "^------------------------------[\n \t]*\n[^ ]+: ") ;;; Interface functions. (defun nndigest-retrieve-headers (sequence &optional newsgroup server) (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) *************** *** 81,105 **** 'headers))) (defun nndigest-open-server (host &optional service) - "Open news server on HOST." (setq nndigest-status-string "") (nnheader-init-server-buffer)) (defun nndigest-close-server (&optional server) - "Close news server." t) (defun nndigest-server-opened (&optional server) - "Return server process status, T or NIL." (and nntp-server-buffer (get-buffer nntp-server-buffer))) (defun nndigest-status-message () - "Return server status response as string." nndigest-status-string) (defun nndigest-request-article (id &optional newsgroup server buffer) - "Select article by message ID (or number)." (nndigest-possibly-change-buffer newsgroup) (let ((range (nndigest-narrow-to-article id))) (and range --- 80,99 ---- *************** *** 111,117 **** t)))) (defun nndigest-request-group (group &optional server dont-check) - "Select news GROUP." (let ((entry (assoc group nndigest-group-alist))) (and entry (setq nndigest-group-alist (delq entry nndigest-group-alist)))) (let ((buffer (get-buffer-create (concat " *nndigest " group "*")))) --- 105,110 ---- *************** *** 143,170 **** t) (defun nndigest-request-list (&optional server) - "List active newsgoups." (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) t)) (defun nndigest-request-newgroups (date &optional server) - "List groups created after DATE." (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) t)) (defun nndigest-request-list-newsgroups (&optional server) - "List newsgroups (defined in NNTP2)." (save-excursion (set-buffer nntp-server-buffer) (erase-buffer) t)) (defun nndigest-request-post (&optional server) - "Post a new news in current buffer." (mail-send-and-exit nil)) (fset 'nndigest-request-post-buffer 'nnmail-request-post-buffer) --- 136,159 ---- diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnfolder.el dgnus/lisp/nnfolder.el *** pub/dgnus/lisp/nnfolder.el Sat Apr 29 01:39:55 1995 --- dgnus/lisp/nnfolder.el Sun Apr 30 22:39:47 1995 *************** *** 256,273 **** (defun nnfolder-request-list (&optional server) (if server (nnfolder-get-new-mail)) ! (or nnfolder-group-alist ! (nnmail-find-file nnfolder-active-file) ! (progn ! (setq nnfolder-group-alist (nnmail-get-active)) ! (nnmail-save-active nnfolder-group-alist nnfolder-active-file) ! (nnmail-find-file nnfolder-active-file)))) (defun nnfolder-request-newgroups (date &optional server) (nnfolder-request-list server)) (defun nnfolder-request-list-newsgroups (&optional server) ! (nnmail-find-file nnfolder-newsgroups-file)) (defun nnfolder-request-post (&optional server) (mail-send-and-exit nil)) --- 256,275 ---- (defun nnfolder-request-list (&optional server) (if server (nnfolder-get-new-mail)) ! (save-excursion ! (or nnfolder-group-alist ! (nnmail-find-file nnfolder-active-file) ! (progn ! (setq nnfolder-group-alist (nnmail-get-active)) ! (nnmail-save-active nnfolder-group-alist nnfolder-active-file) ! (nnmail-find-file nnfolder-active-file))))) (defun nnfolder-request-newgroups (date &optional server) (nnfolder-request-list server)) (defun nnfolder-request-list-newsgroups (&optional server) ! (save-excursion ! (nnmail-find-file nnfolder-newsgroups-file))) (defun nnfolder-request-post (&optional server) (mail-send-and-exit nil)) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmail.el dgnus/lisp/nnmail.el *** pub/dgnus/lisp/nnmail.el Sat Apr 29 01:39:55 1995 --- dgnus/lisp/nnmail.el Sat Apr 29 23:52:57 1995 *************** *** 129,135 **** (defun nnmail-request-post-buffer (post group subject header article-buffer info follow-to respect-poster) (let ((method-address (cdr (assq 'to-address (nth 5 info)))) ! from subject date to reply-to message-of references message-id sender cc sendto elt) (setq method-address (if (and (stringp method-address) --- 129,135 ---- (defun nnmail-request-post-buffer (post group subject header article-buffer info follow-to respect-poster) (let ((method-address (cdr (assq 'to-address (nth 5 info)))) ! from date to reply-to message-of references message-id sender cc sendto elt) (setq method-address (if (and (stringp method-address) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmbox.el dgnus/lisp/nnmbox.el *** pub/dgnus/lisp/nnmbox.el Sat Apr 29 01:39:55 1995 --- dgnus/lisp/nnmbox.el Sun Apr 30 22:39:47 1995 *************** *** 201,211 **** (defun nnmbox-request-list (&optional server) (if server (nnmbox-get-new-mail)) ! (or (nnmail-find-file nnmbox-active-file) ! (progn ! (setq nnmbox-group-alist (nnmail-get-active)) ! (nnmail-save-active nnmbox-group-alist nnmbox-active-file) ! (nnmail-find-file nnmbox-active-file)))) (defun nnmbox-request-newgroups (date &optional server) (nnmbox-request-list server)) --- 201,212 ---- (defun nnmbox-request-list (&optional server) (if server (nnmbox-get-new-mail)) ! (save-excursion ! (or (nnmail-find-file nnmbox-active-file) ! (progn ! (setq nnmbox-group-alist (nnmail-get-active)) ! (nnmail-save-active nnmbox-group-alist nnmbox-active-file) ! (nnmail-find-file nnmbox-active-file))))) (defun nnmbox-request-newgroups (date &optional server) (nnmbox-request-list server)) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnml.el dgnus/lisp/nnml.el *** pub/dgnus/lisp/nnml.el Sat Apr 29 01:39:55 1995 --- dgnus/lisp/nnml.el Sat Apr 29 22:17:11 1995 *************** *** 208,213 **** --- 208,218 ---- (defun nnml-close-group (group &optional server) t) + (defun nnml-request-close () + (setq nnml-current-server nil) + (setq nnml-server-alist nil) + t) + (defun nnml-request-create-group (group &optional server) (nnml-request-list) (setq nnml-group-alist (nnmail-get-active)) *************** *** 232,238 **** (defun nnml-request-list (&optional server) (if server (nnml-get-new-mail)) (save-excursion ! (nnmail-find-file nnml-active-file))) (defun nnml-request-newgroups (date &optional server) (nnml-request-list server)) --- 237,244 ---- (defun nnml-request-list (&optional server) (if server (nnml-get-new-mail)) (save-excursion ! (nnmail-find-file nnml-active-file) ! (setq nnml-group-alist (nnmail-get-active)))) (defun nnml-request-newgroups (date &optional server) (nnml-request-list server)) *************** *** 592,598 **** (progn (setq nnml-group-alist nil) (list nnml-directory))) ! (nnml-open-server (system-name)) (let ((dirs (directory-files dir t nil t))) (while dirs (if (and (not (string-match "/\\.\\.$" (car dirs))) --- 598,604 ---- (progn (setq nnml-group-alist nil) (list nnml-directory))) ! (nnml-open-server (or nnml-current-server "")) (let ((dirs (directory-files dir t nil t))) (while dirs (if (and (not (string-match "/\\.\\.$" (car dirs))) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nntp.el dgnus/lisp/nntp.el *** pub/dgnus/lisp/nntp.el Sat Apr 29 01:39:56 1995 --- dgnus/lisp/nntp.el Sat Apr 29 23:52:57 1995 *************** *** 684,691 **** (car servers)))))) (setq servers (cdr servers))) (setq server (car (car servers)))) ! (message "nntp: Connection closed to server %s" (or server "(none)")) ! (ding))) (defun nntp-kill-connection (server) (let ((proc (nth 1 (assq 'nntp-server-process --- 684,693 ---- (car servers)))))) (setq servers (cdr servers))) (setq server (car (car servers)))) ! (and server ! (progn ! (message "nntp: Connection closed to server %s" server) ! (ding))))) (defun nntp-kill-connection (server) (let ((proc (nth 1 (assq 'nntp-server-process diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/texi/gnus.texi dgnus/texi/gnus.texi *** pub/dgnus/texi/gnus.texi Sat Apr 29 01:40:11 1995 --- dgnus/texi/gnus.texi Sun Apr 30 22:39:49 1995 *************** *** 330,344 **** I could steal code from @code{Mew}, the @sc{mime} mail reader for Emacs, but I'm not quite sure what the status of that project is. (ding) might support @sc{mime} quite soon, and it might not. - @item - Some form of caching would come in handy. Not only for those with - extremely slow @sc{nntp} connections, but as a more general way of - saving articles in a simple fashion. (You'd basically just mark an - article as @dfn{cached}. Gnus would put it in some local directory, and - each time you request that article from that group, Gnus would fetch the - local copy instead.) Lots of quite interesting stuff to be considered - (caching @sc{nov} headers or not?) before jumping into it. It would - require much twiddling of Gnus internals to make it work transparently. @item When the user references the parent of an article, some sort of re-threading should be done to build a proper tree. The same goes for --- 330,335 ---- *************** *** 2341,2346 **** --- 2332,2338 ---- * Ticking and Marking:: Marking articles as read, expirable, etc. * Threading:: How threads are made. * Asynchronous Fetching:: Gnus might be able to pre-fetch articles. + * Article Caching:: You may store articles in a cache. * Exiting the Summary Buffer:: Returning to the Group buffer. * Process/Prefix:: A convention used by many treatment commands. * Saving Articles:: Ways of customizing article saving. *************** *** 3733,3738 **** --- 3725,3780 ---- alist where the keys are the article numbers. Your function should return an alist where the articles you are not interested in have been removed. You could also do sorting on article score and the like. + + @node Article Caching + @section Article Caching + @cindex article caching + @cindex caching + + If you have an @emph{extremely} slow @sc{nntp} connection, you may + consider turning article caching on. Each article will then be stored + locally under your home directory. As you may surmise, this could + potentially use @emph{huge} amounts of disk space, as well as eat up all + your inodes so fast it will make your head swim. In vodka. + + Used carefully, though, it could be just an easier way to save articles. + + @vindex gnus-use-long-file-name + @vindex gnus-cache-directory + @vindex gnus-use-cache + To turn caching on, set @code{gnus-use-cache} to @code{t}. By default, + all articles that are ticked or marked as dormant will then be copied + over to your local cache (@code{gnus-cache-directory}). Whether this + cache is flat or hierarchal is controlled by the + @code{gnus-use-long-file-name} variable, as usual. + + When re-select a ticked or dormant article, it will be fetched from the + cache instead of from the server. As articles in your cache will never + expire, this might serve as a method of saving articles while still + keeping them where they belong. Just mark all articles you want to save + as dormant, and don't worry. + + When an article is marked as read, is it removed from the cache. + + @vindex gnus-cache-remove-articles + @vindex gnus-cache-enter-articles + The entering/removal of articles from the cache is controlled by the + @code{gnus-cache-enter-articles} and @code{gnus-cache-remove-articles} + variables. Both are lists of symbols. The first is @code{(ticked + dormant)} by default, meaning that ticked and dormant articles will be + put in the cache. The latter is @code{(read)} by default, meaning that + articles that are marked as read are removed from the cache. Possibly + symbols in these two lists are @code{ticked}, @code{dormant}, + @code{unread} and @code{read}. + + @findex gnus-jog-cache + So where does the massive article-fetching and storing come into the + picture? The @code{gnus-jog-cache} command will go through all + subscribed newsgroups, request all unread articles, and store them in + the cache. You should only ever, ever ever ever, use this command if 1) + your connetion to the @sc{nntp} server is really, really, really slow + and 2) you have a really, really, really huge disk. Seriously. + @node Exiting the Summary Buffer @section Exiting the Summary Buffer