diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/ChangeLog dgnus/lisp/ChangeLog *** pub/dgnus/lisp/ChangeLog Wed Mar 29 10:21:24 1995 --- dgnus/lisp/ChangeLog Sun Apr 2 12:21:44 1995 *************** *** 1,3 **** --- 1,75 ---- + Sun Apr 2 12:11:17 1995 Lars Magne Ingebrigtsen + + * nnmh.el (nnmh-article-pathname): Wouldn't find groups that were + located in directories that had "." in the directory names. + + * gnus.el (gnus-score-load-file): Changing score alists would have + no effect. + + Sat Apr 1 16:45:14 1995 Lars Ingebrigtsen + + * gnus-visual.el (gnus-visual-highlight-selected-summary): Would + mess up selected face when no mouse highlights were used. + + * nnml.el (nnml-request-create-group): Really create groups that + are created. + + * gnus.el (gnus-setup-news): If the local server can't be + contacted, just ignore it and offer to continue. + (gnus-group-post-news): Set newsgroup name to nil before offering + to post. + (gnus-summary-read-group): Summary buffer wouldn't be killed when + `n'-ing to a group that had all its articles expired. + + * nntp.el (nntp-open-server): Allow quitting when setting up + connection to a server. + + * gnus.el (gnus-articles-to-read): Ticked articles would become + read when newsgroups were entered with C-u SPC. + (gnus-inews-check-post): Check outgoing post for long lines. + (gnus-score-load-score-alist): Ignore empty score files. + (gnus-score-check-syntax): Check score file syntax. + + Sat Apr 1 10:41:11 1995 Lars Magne Ingebrigtsen + + * gnus.el (gnus-summary-move-article): Did not remove ticked and + dormant articles from relevant lists. + + Fri Mar 31 11:49:44 1995 Lars Magne Ingebrigtsen + + * gnus-kill.el (gnus-apply-kill-file-internal): Did not add kill + buffers to the buffer list for later killing. + + * nnml.el (nnml-request-expire-articles): Would bug out on empty + groups. + + Wed Mar 29 13:34:45 1995 Lars Ingebrigtsen + + * nnspool.el (nnspool-request-newgroups): Use floats instead of + fudging. + + * gnus.el (gnus-adjust-marked-articles): Remove expired reply + marks. + + * nnvirtual.el (nnvirtual-create-mapping): Ignore marks on + articles that are expired. + + * gnus.el (gnus-gather-threads): Allow fuzzy comparisons. + (gnus-simplify-subject-fuzzy): New function. + + * nnml.el (nnml-request-create-group): New function. + + * gnus.el (gnus-group-make-group): Create nnml groups when + requested. + (gnus-request-create-group): New function. + + * nntp.el (nntp-request-article): Avoid obsolete concating of + numbers-as-strings. + + Wed Mar 29 10:21:00 1995 Lars Magne Ingebrigtsen + + * gnus.el: 0.46 is released. + Wed Mar 29 09:55:15 1995 Lars Magne Ingebrigtsen * gnus.el (gnus-score-load-file): Use different method for diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-kill.el dgnus/lisp/gnus-kill.el *** pub/dgnus/lisp/gnus-kill.el Wed Mar 29 10:21:13 1995 --- dgnus/lisp/gnus-kill.el Fri Mar 31 12:59:39 1995 *************** *** 362,367 **** --- 362,368 ---- (message "Processing kill file %s..." (car kill-files)) (find-file (car kill-files)) (gnus-kill-file-mode) + (gnus-add-current-to-buffer-list) (goto-char (point-min)) (while (progn (setq beg (point)) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/gnus-visual.el dgnus/lisp/gnus-visual.el *** pub/dgnus/lisp/gnus-visual.el Wed Mar 29 10:21:15 1995 --- dgnus/lisp/gnus-visual.el Sun Apr 2 11:44:09 1995 *************** *** 28,55 **** (require 'easymenu) (defvar gnus-summary-selected-face 'underline ! "Face used for highlighting the selected article in the Summary buffer.") (defvar gnus-visual-summary-highlight '(((> score default) . bold) ((< score default) . italic)) ! "Alist of (FORM . FACE). Summary lines are highlighted with the FACE for the first FORM which ! evaluate to non-nil. ! When FORM is evaluated point will be at the beginning of the line, and ! the following free variable can be used for convenience: ! score: (gnus-summary-interest) ! default: gnus-summary-default-interest below: gnus-summary-mark-below ! To check for marks, e.g. to underline replied articles, use `looking-at': ! ((looking-at \".R\") . underline) ! ! This will match all lines where the second character is `R'. ! The `.' will match any character.") (eval-and-compile (autoload 'nnkiboze-generate-groups "nnkiboze")) --- 28,53 ---- (require 'easymenu) (defvar gnus-summary-selected-face 'underline ! "Face used for highlighting the current article in the Summary buffer.") (defvar gnus-visual-summary-highlight '(((> score default) . bold) ((< score default) . italic)) ! "Alist of `(FORM . FACE)'. Summary lines are highlighted with the FACE for the first FORM which ! evaluate to a non-nil value. ! Point will be at the beginning of the line when FORM is evaluated. ! The following can be used for convenience: ! score: (gnus-summary-article-score) ! default: gnus-summary-default-score below: gnus-summary-mark-below ! To check for marks, e.g. to underline replied articles, use ! `gnus-summary-article-mark': ! ((= (gnus-summary-article-mark) gnus-replied-mark) . underline)") (eval-and-compile (autoload 'nnkiboze-generate-groups "nnkiboze")) *************** *** 385,395 **** (save-excursion (let* ((beg (progn (beginning-of-line) (point))) (end (progn (end-of-line) (point))) ! (from (or ! (next-single-property-change beg 'mouse-face nil end) ! beg)) ! (to (or (next-single-property-change from 'mouse-face nil end) ! end))) (if gnus-newsgroup-selected-overlay (move-overlay gnus-newsgroup-selected-overlay from to (current-buffer)) --- 383,390 ---- (save-excursion (let* ((beg (progn (beginning-of-line) (point))) (end (progn (end-of-line) (point))) ! (to (previous-single-property-change end 'mouse-face nil beg)) ! (from (previous-single-property-change to 'mouse-face nil beg))) (if gnus-newsgroup-selected-overlay (move-overlay gnus-newsgroup-selected-overlay from to (current-buffer)) 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 Wed Mar 29 10:21:16 1995 --- dgnus/lisp/gnus.el Sun Apr 2 12:12:44 1995 *************** *** 136,142 **** If a file with the .el or .elc suffixes exist, it will be read instead.") ! (defvar gnus-group-faq-directory "/anonymous@rtfm.mit.edu:/pub/usenet-by-group/" "Directory where the group FAQs are stored. This will most commonly be on a remote machine, and the file will be fetched by ange-ftp.") --- 136,143 ---- If a file with the .el or .elc suffixes exist, it will be read instead.") ! (defvar gnus-group-faq-directory ! "/anonymous@rtfm.mit.edu:/pub/usenet-by-group/" "Directory where the group FAQs are stored. This will most commonly be on a remote machine, and the file will be fetched by ange-ftp.") *************** *** 347,353 **** number will help gather threads that have been corrupted by newsreaders chopping off subject lines, but it might also mean that unrelated articles that have subject that happen to begin with the ! same few characters will be incorrectly gathered.") ;; Added by Per Abrahamsen . (defvar gnus-summary-same-subject "" --- 348,357 ---- number will help gather threads that have been corrupted by newsreaders chopping off subject lines, but it might also mean that unrelated articles that have subject that happen to begin with the ! same few characters will be incorrectly gathered. ! ! If this variable is `fuzzy', Gnus will use a fuzzy algortihm when ! comparing subjects.") ;; Added by Per Abrahamsen . (defvar gnus-summary-same-subject "" *************** *** 1208,1214 **** (defconst gnus-maintainer "Lars Magne Ingebrigtsen " "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.46" "Version number for this version of Gnus.") (defvar gnus-info-nodes --- 1212,1218 ---- (defconst gnus-maintainer "Lars Magne Ingebrigtsen " "The mail address of the Gnus maintainer.") ! (defconst gnus-version "(ding) Gnus v0.47" "Version number for this version of Gnus.") (defvar gnus-info-nodes *************** *** 1932,1939 **** (while (string-match "[ \t\n]*([^()]*)[ \t\n]*\\'" subject) (setq subject (substring subject 0 (match-beginning 0))))) ;; Return subject string. ! subject ! )) (defun gnus-add-current-to-buffer-list () (setq gnus-buffer-list (cons (current-buffer) gnus-buffer-list))) --- 1936,1957 ---- (while (string-match "[ \t\n]*([^()]*)[ \t\n]*\\'" subject) (setq subject (substring subject 0 (match-beginning 0))))) ;; Return subject string. ! subject)) ! ! (defun gnus-simplify-subject-fuzzy (subject) ! (let ((case-fold-search t)) ! (and (string-match "^re:[ \t]*" subject) ! (setq subject (substring subject (match-end 0)))) ! (while (string-match "[ \t\n]*([^()]*)[ \t\n]*\\'" subject) ! (setq subject (substring subject 0 (match-beginning 0)))) ! (let ((beg 0) ! (osubject "")) ! (while (string-match "[ \t]+" subject beg) ! (setq osubject ! (concat osubject (substring ! subject beg (match-beginning 0)) " ") ! beg (match-end 0))) ! (setq osubject (concat osubject (substring subject beg)))))) (defun gnus-add-current-to-buffer-list () (setq gnus-buffer-list (cons (current-buffer) gnus-buffer-list))) *************** *** 2316,2322 **** (t (setq out (cons (car list2) out)) (setq list2 (cdr list2))))) ! (append (or list1 list2) out))) (defun gnus-intersection (list1 list2) (let ((result nil)) --- 2334,2340 ---- (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)) *************** *** 2338,2344 **** (setq list1 (cdr list1))) (t (setq list2 (cdr list2))))) ! out)) (defun gnus-set-sorted-intersection (list1 list2) ;; LIST1 and LIST2 have to be sorted over <. --- 2356,2362 ---- (setq list1 (cdr list1))) (t (setq list2 (cdr list2))))) ! (nreverse out))) (defun gnus-set-sorted-intersection (list1 list2) ;; LIST1 and LIST2 have to be sorted over <. *************** *** 2705,2719 **** (gnus-group-get-new-news)) (gnus-clear-system) (gnus-read-init-file) ! (let ((level (and arg (numberp arg) (> arg 0) arg))) (unwind-protect (progn (switch-to-buffer (get-buffer-create gnus-group-buffer)) (gnus-add-current-to-buffer-list) (gnus-group-mode) ! (or dont-connect (gnus-start-news-server (and arg (not level))))) (if (and (not dont-connect) ! (not (gnus-server-opened gnus-select-method))) (gnus-group-quit) (run-hooks 'gnus-startup-hook) ;; NNTP server is successfully open. --- 2723,2740 ---- (gnus-group-get-new-news)) (gnus-clear-system) (gnus-read-init-file) ! (let ((level (and arg (numberp arg) (> arg 0) arg)) ! did-connect) (unwind-protect (progn (switch-to-buffer (get-buffer-create gnus-group-buffer)) (gnus-add-current-to-buffer-list) (gnus-group-mode) ! (or dont-connect ! (setq did-connect ! (gnus-start-news-server (and arg (not level)))))) (if (and (not dont-connect) ! (not did-connect)) (gnus-group-quit) (run-hooks 'gnus-startup-hook) ;; NNTP server is successfully open. *************** *** 3282,3288 **** (gnus-sethash nname '(0 . 0) gnus-active-hashtb) (gnus-dribble-enter (concat "(gnus-group-set-info '" (prin1-to-string (cdr info)) ")")) ! (gnus-group-insert-group-line-info nname))) (defun gnus-group-edit-group (group) (interactive (list (gnus-group-group-name))) --- 3303,3312 ---- (gnus-sethash nname '(0 . 0) gnus-active-hashtb) (gnus-dribble-enter (concat "(gnus-group-set-info '" (prin1-to-string (cdr info)) ")")) ! (gnus-group-insert-group-line-info nname) ! ! (and (gnus-check-backend-function 'request-create-group nname) ! (gnus-request-create-group nname)))) (defun gnus-group-edit-group (group) (interactive (list (gnus-group-group-name))) *************** *** 3695,3701 **** (gnus-get-unread-articles (or arg 6))) (let ((gnus-read-active-file nil)) (gnus-get-unread-articles (or arg 6)))) ! (gnus-group-list-groups (or arg 5) gnus-have-all-newsgroups)) (defun gnus-group-get-new-news-this-group (n) "Check for newly arrived news in the current group (and the N-1 next groups). --- 3719,3725 ---- (gnus-get-unread-articles (or arg 6))) (let ((gnus-read-active-file nil)) (gnus-get-unread-articles (or arg 6)))) ! (gnus-group-list-groups 5 gnus-have-all-newsgroups)) (defun gnus-group-get-new-news-this-group (n) "Check for newly arrived news in the current group (and the N-1 next groups). *************** *** 4801,4807 **** (progn ;; This newsgroup is empty. (gnus-summary-catchup-and-exit nil t) ;Without confirmations. ! (message "No unread news")) (save-excursion (if kill-buffer (let ((gnus-summary-buffer kill-buffer)) --- 4825,4835 ---- (progn ;; This newsgroup is empty. (gnus-summary-catchup-and-exit nil t) ;Without confirmations. ! (message "No unread news") ! (and kill-buffer ! (get-buffer kill-buffer) ! (buffer-name (get-buffer kill-buffer)) ! (kill-buffer kill-buffer))) (save-excursion (if kill-buffer (let ((gnus-summary-buffer kill-buffer)) *************** *** 4865,4873 **** (setq subject (header-subject (car (car threads))) whole-subject subject) (and gnus-summary-gather-subject-limit ! (> (length subject) gnus-summary-gather-subject-limit) ! (setq subject ! (substring subject 0 gnus-summary-gather-subject-limit))) (if (setq hthread (gnus-gethash (setq unre-subject (gnus-simplify-subject-re subject)) --- 4893,4905 ---- (setq subject (header-subject (car (car threads))) whole-subject subject) (and gnus-summary-gather-subject-limit ! (or (and (numberp gnus-summary-gather-subject-limit) ! (> (length subject) gnus-summary-gather-subject-limit) ! (setq subject ! (substring subject 0 ! gnus-summary-gather-subject-limit))) ! (and (eq 'fuzzy gnus-summary-gather-subject-limit) ! (setq subject (gnus-simplify-subject-fuzzy subject))))) (if (setq hthread (gnus-gethash (setq unre-subject (gnus-simplify-subject-re subject)) *************** *** 5397,5404 **** (setq articles (nthcdr (- number select) articles)))) (setq gnus-newsgroup-unselected (gnus-sorted-intersection ! gnus-newsgroup-unselected ! (gnus-sorted-complement articles total-articles))) articles))) (defun gnus-killed-articles (killed articles) --- 5429,5436 ---- (setq articles (nthcdr (- number select) articles)))) (setq gnus-newsgroup-unselected (gnus-sorted-intersection ! gnus-newsgroup-unreads ! (gnus-sorted-complement gnus-newsgroup-unreads articles))) articles))) (defun gnus-killed-articles (killed articles) *************** *** 5414,5421 **** (let ((marked-lists (nth 3 info)) (active (or active (gnus-gethash (car info) gnus-active-hashtb))) marked m prev) ! ;; There are four types of marked articles - ticked, replied, ! ;; expirable and dormant. (while marked-lists (setq m (cdr (setq prev (car marked-lists)))) (cond ((or (eq 'tick (car prev)) (eq 'dormant (car prev))) --- 5446,5452 ---- (let ((marked-lists (nth 3 info)) (active (or active (gnus-gethash (car info) gnus-active-hashtb))) marked m prev) ! ;; There are many types of marked articles. (while marked-lists (setq m (cdr (setq prev (car marked-lists)))) (cond ((or (eq 'tick (car prev)) (eq 'dormant (car prev))) *************** *** 5454,5461 **** (if (and m (< (or (and (numberp (car m)) (car m)) (car (car m))) (car active))) ! (setcar (and (numberp (car m)) m (car m)) (car active)))) ! ((or (eq 'reply (car marked)) (eq 'expire (car marked))) ;; The replied and expirable articles have to be articles ;; that are active. (while m --- 5485,5492 ---- (if (and m (< (or (and (numberp (car m)) (car m)) (car (car m))) (car active))) ! (setcar (if (numberp (car m)) m (car m)) (car active)))) ! ((or (eq 'reply (car prev)) (eq 'expire (car prev))) ;; The replied and expirable articles have to be articles ;; that are active. (while m *************** *** 5480,5487 **** ;; Finally, if there are no marked lists at all left, and if there ;; are no elements after the lists in the info list, we just chop ;; the info list off before the marked lists. ! (if (and (null marked-lists) (not (nthcdr 4 info))) ! (setcdr (nthcdr 2 info) nil))) info) (defun gnus-set-marked-articles --- 5511,5519 ---- ;; Finally, if there are no marked lists at all left, and if there ;; are no elements after the lists in the info list, we just chop ;; the info list off before the marked lists. ! (and (null marked-lists) ! (not (nthcdr 4 info)) ! (setcdr (nthcdr 2 info) nil))) info) (defun gnus-set-marked-articles *************** *** 7151,7157 **** (if (memq article (symbol-value (cdr (car marks)))) (gnus-add-marked-articles (car info) (car (car marks)) (list to-article) info)) ! (setq marks (cdr marks))))) (message "Couldn't move article %s" (car articles))) (gnus-summary-remove-process-mark (car articles)) (setq articles (cdr articles))))) --- 7183,7192 ---- (if (memq article (symbol-value (cdr (car marks)))) (gnus-add-marked-articles (car info) (car (car marks)) (list to-article) info)) ! (setq marks (cdr marks)))) ! (setq gnus-newsgroup-marked (delq article gnus-newsgroup-marked)) ! (setq gnus-newsgroup-dormant ! (delq article gnus-newsgroup-dormant))) (message "Couldn't move article %s" (car articles))) (gnus-summary-remove-process-mark (car articles)) (setq articles (cdr articles))))) *************** *** 9691,9697 **** lists alist) (if cached ;; The score file was already loaded. ! (setq gnus-score-alist (cdr cached)) ;; We load the score file. (setq gnus-score-alist nil) (setq alist (gnus-score-load-score-alist file)) --- 9726,9732 ---- lists alist) (if cached ;; The score file was already loaded. ! (setq alist (cdr cached)) ;; We load the score file. (setq gnus-score-alist nil) (setq alist (gnus-score-load-score-alist file)) *************** *** 9759,9776 **** (erase-buffer) (insert-file-contents file) (goto-char (point-min)) ! (setq alist ! (condition-case () ! (read (current-buffer)) ! (error ! (progn ! (message "Problem with score file %s" file) ! (ding) ! nil))))) (if (eq (car alist) 'setq) ! (setq gnus-score-alist ! (gnus-score-transform-old-to-new alist)) ! (setq gnus-score-alist alist)))))) (defun gnus-score-transform-old-to-new (alist) (let* ((alist (nth 2 alist)) --- 9794,9843 ---- (erase-buffer) (insert-file-contents file) (goto-char (point-min)) ! ;; Only do the loading if the score file isn't empty. ! (if (save-excursion (re-search-forward "[()0-9a-zA-Z]" nil t)) ! (setq alist ! (condition-case () ! (read (current-buffer)) ! (error ! (progn ! (message "Problem with score file %s" file) ! (ding) ! (sit-for 2) ! nil)))))) (if (eq (car alist) 'setq) ! (setq gnus-score-alist (gnus-score-transform-old-to-new alist)) ! (setq gnus-score-alist alist)) ! (setq gnus-score-alist ! (gnus-score-check-syntax gnus-score-alist))) ! (setq gnus-score-alist nil)))) ! ! (defun gnus-score-check-syntax (alist) ! (cond ! ((null alist) ! nil) ! ((not (consp alist)) ! (message "Score file is not a list: %s" alist) ! (ding) ! nil) ! (t ! (let ((a alist) ! err) ! (while (and a (not err)) ! (cond ((not (listp (car a))) ! (message "Illegal score element: %s" (car a)) ! (setq err t)) ! ((and (stringp (car (car a))) ! (not (consp (nth 1 (car a))))) ! (message "Illegal header match: %s" (nth 1 (car a))) ! (setq err t)) ! (t ! (setq a (cdr a))))) ! (if err ! (progn ! (ding) ! nil) ! alist))))) (defun gnus-score-transform-old-to-new (alist) (let* ((alist (nth 2 alist)) *************** *** 10208,10222 **** (gnus-set-global-variables) ;; Save window configuration. (setq gnus-winconf-post-news (current-window-configuration)) ! ;; Fix by Sudish Joseph . ! (or gnus-newsgroup-name (setq gnus-newsgroup-name (gnus-group-group-name))) ! (unwind-protect ! (gnus-post-news 'post) ! (or (and (eq (current-buffer) (get-buffer gnus-post-news-buffer)) ! (not (zerop (buffer-size)))) ! ;; Restore last window configuration. ! (and gnus-winconf-post-news ! (set-window-configuration gnus-winconf-post-news)))) ;; We don't want to return to summary buffer nor article buffer later. (setq gnus-winconf-post-news nil) (if (get-buffer gnus-summary-buffer) --- 10275,10288 ---- (gnus-set-global-variables) ;; Save window configuration. (setq gnus-winconf-post-news (current-window-configuration)) ! (let ((gnus-newsgroup-name nil)) ! (unwind-protect ! (gnus-post-news 'post) ! (or (and (eq (current-buffer) (get-buffer gnus-post-news-buffer)) ! (not (zerop (buffer-size)))) ! ;; Restore last window configuration. ! (and gnus-winconf-post-news ! (set-window-configuration gnus-winconf-post-news))))) ;; We don't want to return to summary buffer nor article buffer later. (setq gnus-winconf-post-news nil) (if (get-buffer gnus-summary-buffer) *************** *** 10633,10638 **** --- 10699,10705 ---- (format "The article contains a %s command. Really post? " (buffer-substring (match-beginning 0) (match-end 0)))) t))) + ;; Check the From header. (save-excursion (save-restriction (goto-char (point-min)) *************** *** 10646,10651 **** --- 10713,10733 ---- (format "The domain looks strange: \"%s\". Really post? " from)) t)))) + ;; Check for long lines. + (save-excursion + (save-restriction + (goto-char (point-min)) + (narrow-to-region (point) (search-forward mail-header-separator)) + (while + (and + (progn + (end-of-line) + (< (current-column) 80)) + (zerop (forward-line 1)))) + (or (eobp) + (gnus-yes-or-no-p + (format + "You have lines longer than 79 characters. Really post? "))))) ;; Use the (size . checksum) variable to see whether the ;; article is empty or has only quoted text. (if (and (= (buffer-size) (car gnus-article-check-size)) *************** *** 11454,11459 **** --- 11536,11546 ---- ;; to update any tables (nov buffers, etc) that it maintains after ;; replacing the article. ;; + ;; `choke-request-create-group GROUP &optional SERVER' + ;; Create GROUP on SERVER. This might be a new, empty group, or it + ;; might be a group that already exists, but hasn't been registered + ;; yet. + ;; ;; All these functions must return nil if they couldn't service the ;; request. If the optional arguments are not supplied, some "current" ;; or "default" values should be used. In short, one should emulate an *************** *** 11516,11525 **** ;; gnus-open-server-hook might have opened it (gnus-server-opened gnus-select-method) (gnus-open-server gnus-select-method) ! (error "%s" (gnus-nntp-message ! (format "Cannot open NNTP server on %s" ! where)))) ! gnus-select-method))) (defun gnus-check-news-server (method) "If the news server is down, start it up again." --- 11603,11616 ---- ;; gnus-open-server-hook might have opened it (gnus-server-opened gnus-select-method) (gnus-open-server gnus-select-method) ! (gnus-y-or-n-p ! (format ! "%s server on %s can't be opened. Continue? " ! (car gnus-select-method) (nth 1 gnus-select-method))) ! (progn ! (message "Couldn't open server on %s" (nth 1 gnus-select-method)) ! (ding) ! nil))))) (defun gnus-check-news-server (method) "If the news server is down, start it up again." *************** *** 11663,11668 **** --- 11754,11765 ---- (funcall (intern (format "%s-request-replace-article" func)) article (gnus-group-real-name group) buffer))) + (defun gnus-request-create-group (group) + (let ((method (gnus-find-method-for-group group))) + (funcall (gnus-get-function method 'request-create-group) + (gnus-group-real-name group) (nth 1 method)))) + + (defun gnus-find-method-for-group (group) (or gnus-override-method (and (not group) *************** *** 11733,11739 **** ;; If `gnus-read-active-file' is nil, then we just create an empty ;; hash table. The partial filling out of the hash table will be ;; done in `gnus-get-unread-articles'. ! (if (and gnus-read-active-file (not level)) (gnus-read-active-file) (setq gnus-active-hashtb (make-vector 4095 0))) --- 11830,11838 ---- ;; If `gnus-read-active-file' is nil, then we just create an empty ;; hash table. The partial filling out of the hash table will be ;; done in `gnus-get-unread-articles'. ! (if (and gnus-read-active-file ! (not level) ! (gnus-server-opened gnus-select-method)) (gnus-read-active-file) (setq gnus-active-hashtb (make-vector 4095 0))) *************** *** 11742,11751 **** ;; Find the number of unread articles in each non-dead group. (gnus-get-unread-articles (or level 6)) ;; Find new newsgroups and treat them. ! (if (and init gnus-check-new-newsgroups gnus-read-active-file (not level)) (gnus-find-new-newsgroups)) (if (and init gnus-check-bogus-newsgroups ! gnus-read-active-file (not level)) (gnus-check-bogus-newsgroups)))) (defun gnus-find-new-newsgroups () --- 11841,11852 ---- ;; Find the number of unread articles in each non-dead group. (gnus-get-unread-articles (or level 6)) ;; Find new newsgroups and treat them. ! (if (and init gnus-check-new-newsgroups gnus-read-active-file (not level) ! (gnus-server-opened gnus-select-method)) (gnus-find-new-newsgroups)) (if (and init gnus-check-bogus-newsgroups ! gnus-read-active-file (not level) ! (gnus-server-opened gnus-select-method)) (gnus-check-bogus-newsgroups)))) (defun gnus-find-new-newsgroups () *************** *** 12127,12133 **** ((not (listp (cdr range))) ;; Fix a single (num . num) range according to the ;; active hash table. ! (and (< (cdr range) (car active)) (setcdr range (car active))) (and (> (cdr range) (cdr active)) (setcdr range (cdr active))) ;; Compute number of unread articles. (setq num (max 0 (- (cdr active) --- 12228,12235 ---- ((not (listp (cdr range))) ;; Fix a single (num . num) range according to the ;; active hash table. ! ;; Fix by Carsten Bormann . ! (and (< (cdr range) (car active)) (setcdr range (1- (car active)))) (and (> (cdr range) (cdr active)) (setcdr range (cdr active))) ;; Compute number of unread articles. (setq num (max 0 (- (cdr active) *************** *** 12154,12160 **** ;; Adjust the first element to be the same as the lower limit. (if (and (not (atom (car range))) (< (cdr (car range)) (car active))) ! (setcdr (car range) (car active))) ;; Then we want to peel off any elements that are higher ;; than the upper active limit. (let ((srange range)) --- 12256,12262 ---- ;; Adjust the first element to be the same as the lower limit. (if (and (not (atom (car range))) (< (cdr (car range)) (car active))) ! (setcdr (car range) (1- (car active)))) ;; Then we want to peel off any elements that are higher ;; than the upper active limit. (let ((srange range)) 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 Wed Mar 29 10:21:17 1995 --- dgnus/lisp/nnfolder.el Sun Apr 2 11:44:12 1995 *************** *** 437,443 **** (setq nnfolder-buffer-alist (delq (car bufs) nnfolder-buffer-alist)) (set-buffer (nth 1 (car bufs))) ! (save-buffer)) (setq bufs (cdr bufs))))) ;; (if incoming (delete-file incoming)) )) --- 437,444 ---- (setq nnfolder-buffer-alist (delq (car bufs) nnfolder-buffer-alist)) (set-buffer (nth 1 (car bufs))) ! (and (buffer-modified-p) ! (save-buffer))) (setq bufs (cdr bufs))))) ;; (if incoming (delete-file incoming)) )) diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnmh.el dgnus/lisp/nnmh.el *** pub/dgnus/lisp/nnmh.el Wed Mar 29 10:21:17 1995 --- dgnus/lisp/nnmh.el Sun Apr 2 11:44:12 1995 *************** *** 129,135 **** (defun nnmh-request-group (group &optional server dont-check) (and nnmh-get-new-mail (or dont-check (nnmh-get-new-mail))) ! (let ((pathname (nnmail-article-pathname group nnmh-directory)) dir) (if (file-directory-p pathname) (progn --- 129,135 ---- (defun nnmh-request-group (group &optional server dont-check) (and nnmh-get-new-mail (or dont-check (nnmh-get-new-mail))) ! (let ((pathname (nnmh-article-pathname group nnmh-directory)) dir) (if (file-directory-p pathname) (progn *************** *** 281,287 **** (defun nnmh-possibly-change-directory (newsgroup) (if newsgroup ! (let ((pathname (nnmail-article-pathname newsgroup nnmh-directory))) (if (file-directory-p pathname) (setq nnmh-current-directory pathname) (error "No such newsgroup: %s" newsgroup))))) --- 281,287 ---- (defun nnmh-possibly-change-directory (newsgroup) (if newsgroup ! (let ((pathname (nnmh-article-pathname newsgroup nnmh-directory))) (if (file-directory-p pathname) (setq nnmh-current-directory pathname) (error "No such newsgroup: %s" newsgroup))))) *************** *** 290,296 **** (let ((methods nnmail-split-methods) dir dirs) (while methods ! (setq dir (nnmail-article-pathname (car (car methods)) nnmh-directory)) (while (not (file-directory-p dir)) (setq dirs (cons dir dirs)) (setq dir (file-name-directory (directory-file-name dir)))) --- 290,296 ---- (let ((methods nnmail-split-methods) dir dirs) (while methods ! (setq dir (nnmh-article-pathname (car (car methods)) nnmh-directory)) (while (not (file-directory-p dir)) (setq dirs (cons dir dirs)) (setq dir (file-name-directory (directory-file-name dir)))) *************** *** 315,321 **** (let ((ga group-art) first) (while ga ! (let ((file (concat (nnmail-article-pathname (car (car ga)) nnmh-directory) (int-to-string (cdr (car ga)))))) (if first --- 315,321 ---- (let ((ga group-art) first) (while ga ! (let ((file (concat (nnmh-article-pathname (car (car ga)) nnmh-directory) (int-to-string (cdr (car ga)))))) (if first *************** *** 333,343 **** (setcdr active (1+ (cdr active))) (let (file) (while (file-exists-p ! (setq file (concat (nnmail-article-pathname group nnmh-directory) (int-to-string (cdr active))))) (setcdr active (1+ (cdr active))))) (cdr active))) (defun nnmh-get-new-mail () "Read new incoming mail." --- 333,350 ---- (setcdr active (1+ (cdr active))) (let (file) (while (file-exists-p ! (setq file (concat (nnmh-article-pathname group nnmh-directory) (int-to-string (cdr active))))) (setcdr active (1+ (cdr active))))) (cdr active))) + + (defun nnmh-article-pathname (group mail-dir) + "Make pathname for GROUP." + (let ((mail-dir (file-name-as-directory (expand-file-name mail-dir)))) + (if (file-directory-p (concat mail-dir group)) + (concat mail-dir group "/") + (concat mail-dir (nnmail-replace-chars-in-string group ?. ?/) "/")))) (defun nnmh-get-new-mail () "Read new incoming mail." 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 Wed Mar 29 10:21:17 1995 --- dgnus/lisp/nnml.el Sun Apr 2 11:44:13 1995 *************** *** 176,181 **** --- 176,202 ---- (defun nnml-close-group (group &optional server) t) + (defun nnml-request-create-group (group &optional server) + (nnml-request-list) + (setq nnml-group-alist (nnmail-get-active)) + (or (assoc group nnml-group-alist) + (let (active) + (setq nnml-group-alist (cons (list group (setq active (cons 0 0))) + nnml-group-alist)) + (nnml-create-directories) + (nnml-possibly-change-directory group) + (let ((articles (mapcar + (lambda (file) + (int-to-string file)) + (directory-files + nnml-current-directory nil "^[0-9]+$")))) + (and articles + (progn + (setcar active (apply 'min articles)) + (setcdr active (apply 'max articles))))) + (nnmail-save-active nnml-group-alist nnml-active-file))) + t) + (defun nnml-request-list (&optional server) (if server (nnml-get-new-mail)) (save-excursion *************** *** 204,216 **** (lambda (name) (string-to-int name))) (directory-files nnml-current-directory nil "^[0-9]+$" t))) ! (max-article (apply 'max active-articles)) article rest mod-time) (while articles (setq article (concat nnml-current-directory (int-to-string (car articles)))) (if (setq mod-time (nth 5 (file-attributes article))) (if (and (or (not nnmail-keep-last-article) (not (= (car articles) max-article))) (or force (> (nnmail-days-between --- 225,238 ---- (lambda (name) (string-to-int name))) (directory-files nnml-current-directory nil "^[0-9]+$" t))) ! (max-article (and active-articles (apply 'max active-articles))) article rest mod-time) (while articles (setq article (concat nnml-current-directory (int-to-string (car articles)))) (if (setq mod-time (nth 5 (file-attributes article))) (if (and (or (not nnmail-keep-last-article) + (not max-article) (not (= (car articles) max-article))) (or force (> (nnmail-days-between *************** *** 227,233 **** (setq rest (cons (car articles) rest)))) (setq articles (cdr articles))) (let ((active (nth 1 (assoc newsgroup nnml-group-alist)))) ! (setcar active (apply 'min active-articles)) (nnmail-save-active nnml-group-alist nnml-active-file)) (nnml-save-nov) rest)) --- 249,256 ---- (setq rest (cons (car articles) rest)))) (setq articles (cdr articles))) (let ((active (nth 1 (assoc newsgroup nnml-group-alist)))) ! (setcar active (or (and active-articles (apply 'min active-articles)) ! 0)) (nnmail-save-active nnml-group-alist nnml-active-file)) (nnml-save-nov) rest)) *************** *** 332,346 **** (if (not (eobp)) (delete-region (point) (point-max))) t))))) ! (defun nnml-possibly-change-directory (newsgroup) (if newsgroup (let ((pathname (nnmail-article-pathname newsgroup nnml-directory))) ! (and (file-directory-p pathname) (setq nnml-current-directory pathname))) t)) (defun nnml-create-directories () ! (let ((methods nnmail-split-methods) dir dirs) (while methods (setq dir (nnmail-article-pathname (car (car methods)) nnml-directory)) --- 355,369 ---- (if (not (eobp)) (delete-region (point) (point-max))) t))))) ! (defun nnml-possibly-change-directory (newsgroup &optional force) (if newsgroup (let ((pathname (nnmail-article-pathname newsgroup nnml-directory))) ! (and (or force (file-directory-p pathname)) (setq nnml-current-directory pathname))) t)) (defun nnml-create-directories () ! (let ((methods (append nnmail-split-methods nnml-group-alist)) dir dirs) (while methods (setq dir (nnmail-article-pathname (car (car methods)) nnml-directory)) *************** *** 406,416 **** (defun nnml-get-new-mail () "Read new incoming mail." (let (incoming) - (nnml-create-directories) (if (and nnml-get-new-mail nnmail-spool-file (file-exists-p nnmail-spool-file) (> (nth 7 (file-attributes nnmail-spool-file)) 0)) (progn (and gnus-verbose-backends (message "nnml: Reading incoming mail...")) (setq incoming --- 429,439 ---- (defun nnml-get-new-mail () "Read new incoming mail." (let (incoming) (if (and nnml-get-new-mail nnmail-spool-file (file-exists-p nnmail-spool-file) (> (nth 7 (file-attributes nnmail-spool-file)) 0)) (progn + (nnml-create-directories) (and gnus-verbose-backends (message "nnml: Reading incoming mail...")) (setq incoming diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnspool.el dgnus/lisp/nnspool.el *** pub/dgnus/lisp/nnspool.el Wed Mar 29 10:21:17 1995 --- dgnus/lisp/nnspool.el Thu Mar 30 05:05:33 1995 *************** *** 252,270 **** (while (and (not (looking-at "\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] ")) (zerop (forward-line -1)))) ! (let ((seconds (nnspool-date-to-seconds date)) groups) ! ;; Go through lines and add groups that are recent to a list. ! (while (and (looking-at "\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] ") ! ;; We ignore the last three digits in the number ! ;; of seconds. This is quite naughty, but large ! ;; numbers are so tiresome to deal with. Perhaps ! ;; one could switch to floats instead? ! (> (save-restriction ! (goto-char (match-beginning 2)) ! (narrow-to-region (point) (match-end 2)) ! (read (current-buffer))) ! seconds) (setq groups (cons (buffer-substring (match-beginning 1) (match-end 1)) groups)) --- 252,271 ---- (while (and (not (looking-at "\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] ")) (zerop (forward-line -1)))) ! (let ((seconds (nnspool-seconds-since-epoch)) groups) ! ;; Go through lines and add the latest groups to a list. ! (while (and (looking-at "\\([^ ]+\\) +[0-9]+ ") ! (progn ! ;; We insert a .0 to make the list reader ! ;; interpret the number as a float. It is far ! ;; too big to be stored in a lisp integer. ! (goto-char (1- (match-end 0))) ! (insert ".0") ! (> (progn ! (goto-char (match-end 1)) ! (read (current-buffer))) ! seconds)) (setq groups (cons (buffer-substring (match-beginning 1) (match-end 1)) groups)) *************** *** 416,435 **** (setcar num (/ (car num) 10)) (nnspool-number-base-10 num (1- pos)))))))) ! (defun nnspool-days-between (date1 date2) ! ;; Return the number of days between date1 and date2. ! (let ((d1 (mapcar (lambda (s) (and s (string-to-int s))) ! (timezone-parse-date date1))) ! (d2 (mapcar (lambda (s) (and s (string-to-int s))) ! (timezone-parse-date date2)))) ! (- (timezone-absolute-from-gregorian ! (nth 1 d1) (nth 2 d1) (car d1)) ! (timezone-absolute-from-gregorian ! (nth 1 d2) (nth 2 d2) (car d2))))) ! ! (defun nnspool-date-to-seconds (string) ! (let ((days (nnspool-days-between string "Jan 1 00:00:00 1970"))) ! (* days 86))) (provide 'nnspool) --- 417,426 ---- (setcar num (/ (car num) 10)) (nnspool-number-base-10 num (1- pos)))))))) ! (defun nnspool-seconds-since-epoch () ! (let ((time (current-time))) ! (+ (* 1.0 (car time) 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2) ! (nth 1 time)))) (provide 'nnspool) 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 Wed Mar 29 10:21:17 1995 --- dgnus/lisp/nntp.el Sun Apr 2 11:44:13 1995 *************** *** 188,193 **** --- 188,194 ---- "Open SERVER. If SERVER is nil, use value of environment variable `NNTPSERVER'. If SERVICE, this this as the port number." + (debug) (let ((server (or server (getenv "NNTPSERVER"))) (status nil) (timer *************** *** 198,206 **** (message "nntp: Connecting to server on %s..." server) (cond ((and server (nntp-open-server-internal server service)) (setq nntp-current-server server) ! (condition-case nil ! (setq status (nntp-wait-for-response "^[23].*\r$")) ! (error (setq status nil))) (or status (nntp-close-server-internal server)) (and nntp-server-process (progn --- 199,209 ---- (message "nntp: Connecting to server on %s..." server) (cond ((and server (nntp-open-server-internal server service)) (setq nntp-current-server server) ! (setq status ! (condition-case nil ! (nntp-wait-for-response "^[23].*\r$") ! (error nil) ! (quit nil))) (or status (nntp-close-server-internal server)) (and nntp-server-process (progn *************** *** 256,262 **** (unwind-protect (progn (if buffer (set-process-buffer nntp-server-process buffer)) ! (let ((nntp-server-buffer (or buffer nntp-server-buffer))) ;; If NEmacs, end of message may look like: "\256\215" (".^M") (prog1 (nntp-send-command "^\\.\r$" "ARTICLE" id) --- 259,266 ---- (unwind-protect (progn (if buffer (set-process-buffer nntp-server-process buffer)) ! (let ((nntp-server-buffer (or buffer nntp-server-buffer)) ! (id (or (and (numberp id) (int-to-string id)) id))) ;; If NEmacs, end of message may look like: "\256\215" (".^M") (prog1 (nntp-send-command "^\\.\r$" "ARTICLE" id) *************** *** 268,287 **** (nntp-possibly-change-server newsgroup server) (prog1 ;; If NEmacs, end of message may look like: "\256\215" (".^M") ! (nntp-send-command "^\\.\r$" "BODY" id) (nntp-decode-text))) (defun nntp-request-head (id &optional newsgroup server) "Request head of article ID (message-id or number)." (nntp-possibly-change-server newsgroup server) (prog1 ! (nntp-send-command "^\\.\r$" "HEAD" id) (nntp-decode-text))) (defun nntp-request-stat (id &optional newsgroup server) "Request STAT of article ID (message-id or number)." (nntp-possibly-change-server newsgroup server) ! (nntp-send-command "^[23].*\r$" "STAT" id)) (defun nntp-request-group (group &optional server dont-check) "Select GROUP." --- 272,294 ---- (nntp-possibly-change-server newsgroup server) (prog1 ;; If NEmacs, end of message may look like: "\256\215" (".^M") ! (nntp-send-command ! "^\\.\r$" "BODY" (or (and (numberp id) (int-to-string id)) id)) (nntp-decode-text))) (defun nntp-request-head (id &optional newsgroup server) "Request head of article ID (message-id or number)." (nntp-possibly-change-server newsgroup server) (prog1 ! (nntp-send-command ! "^\\.\r$" "HEAD" (or (and (numberp id) (int-to-string id)) id)) (nntp-decode-text))) (defun nntp-request-stat (id &optional newsgroup server) "Request STAT of article ID (message-id or number)." (nntp-possibly-change-server newsgroup server) ! (nntp-send-command ! "^[23].*\r$" "STAT" (or (and (numberp id) (int-to-string id)) id))) (defun nntp-request-group (group &optional server dont-check) "Select GROUP." diff --exclude=*.elc --exclude=*~ --exclude=*-[0-9] --exclude=gnus --exclude=readme --context --recursive pub/dgnus/lisp/nnvirtual.el dgnus/lisp/nnvirtual.el *** pub/dgnus/lisp/nnvirtual.el Wed Mar 29 10:21:17 1995 --- dgnus/lisp/nnvirtual.el Thu Mar 30 05:05:33 1995 *************** *** 351,357 **** (nconc (mapcar (lambda (art) (if (numberp art) ! (+ (- art active) offset) (cons (+ (- (car art) active) offset) (cdr art)))) (cdr (assq (car m) marked))) --- 351,358 ---- (nconc (mapcar (lambda (art) (if (numberp art) ! (if (< art active) ! 0 (+ (- art active) offset)) (cons (+ (- (car art) active) offset) (cdr art)))) (cdr (assq (car m) marked))) 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 Wed Mar 29 10:21:29 1995 --- dgnus/texi/gnus.texi Fri Mar 31 12:59:38 1995 *************** *** 1094,1099 **** --- 1094,1106 ---- @kindex M h (Group) @findex gnus-group-make-help-group Make the (ding) Gnus help group (@code{gnus-group-make-help-group}). + @item M a + @kindex M a (Group) + @findex gnus-group-make-archive-group + @vindex gnus-group-archive-directory + Make the (ding) Gnus archive group + (@code{gnus-group-make-archive-group}). The archive group will be + fetched from @code{gnus-group-archive-directory}. @item M k @kindex M k (Group) @findex gnus-group-make-kiboze-group *************** *** 1169,1182 **** @quotation Te Deum ! @sp 2 Not because of victories @* I sing,@* having none,@* but for the common sunshine,@* the breeze,@* the largess of the spring. ! @sp 2 Not for victory@* but for the day's work done@* as well as I was able;@* --- 1176,1189 ---- @quotation Te Deum ! @sp 1 Not because of victories @* I sing,@* having none,@* but for the common sunshine,@* the breeze,@* the largess of the spring. ! @sp 1 Not for victory@* but for the day's work done@* as well as I was able;@* *************** *** 3058,3063 **** --- 3065,3074 ---- first 20 characters of the subjects have to match. If you set this variable to a real low number, you'll find that Gnus will gather everything in sight into one thread, which isn't very helpful. + + @cindex fuzzy article gathering + If you set this variable to the special value @code{fuzzy}, Gnus will + use a fuzzy string comparison algorithm on the subjects. @item gnus-summary-make-false-root @vindex gnus-summary-make-false-root