*** pub/qgnus/lisp/gnus-art.el Fri Jun 26 04:26:35 1998 --- qgnus/lisp/gnus-art.el Fri Jun 26 15:54:53 1998 *************** *** 3101,3114 **** (match-string 3 address) "nntp"))))))) - (defun gnus-split-string (string pattern) - "Return a list of substrings of STRING which are separated by PATTERN." - (let (parts (start 0)) - (while (string-match pattern string start) - (setq parts (cons (substring string start (match-beginning 0)) parts) - start (match-end 0))) - (nreverse (cons (substring string start) parts)))) - (defun gnus-url-parse-query-string (query &optional downcase) (let (retval pairs cur key val) (setq pairs (gnus-split-string query "&")) --- 3101,3106 ---- *** pub/qgnus/lisp/gnus-demon.el Mon Jun 1 04:30:17 1998 --- qgnus/lisp/gnus-demon.el Fri Jun 26 15:54:53 1998 *************** *** 97,105 **** (defun gnus-demon-remove-handler (function &optional no-init) "Remove the handler FUNCTION from the list of handlers." ! (setq gnus-demon-handlers ! (delq (assq function gnus-demon-handlers) ! gnus-demon-handlers)) (unless no-init (gnus-demon-init))) --- 97,103 ---- (defun gnus-demon-remove-handler (function &optional no-init) "Remove the handler FUNCTION from the list of handlers." ! (gnus-pull function gnus-demon-handlers) (unless no-init (gnus-demon-init))) *** pub/qgnus/lisp/gnus-ems.el Wed Jun 3 04:02:09 1998 --- qgnus/lisp/gnus-ems.el Fri Jun 26 15:54:53 1998 *************** *** 258,263 **** --- 258,273 ---- (goto-char (point-min)) (sit-for 0)))))) + (if (fboundp 'split-string) + (fset 'gnus-split-string 'split-string) + (defun gnus-split-string (string pattern) + "Return a list of substrings of STRING which are separated by PATTERN." + (let (parts (start 0)) + (while (string-match pattern string start) + (setq parts (cons (substring string start (match-beginning 0)) parts) + start (match-end 0))) + (nreverse (cons (substring string start) parts))))) + (provide 'gnus-ems) ;; Local Variables: *** pub/qgnus/lisp/gnus-group.el Wed Jun 3 04:02:11 1998 --- qgnus/lisp/gnus-group.el Fri Jun 26 15:54:54 1998 *************** *** 3333,3339 **** (if force (if (null articles) (setcar (nthcdr 3 info) ! (delq (assq type (car marked)) (car marked))) (setcdr m (gnus-compress-sequence articles t))) (setcdr m (gnus-compress-sequence (sort (nconc (gnus-uncompress-range (cdr m)) --- 3333,3339 ---- (if force (if (null articles) (setcar (nthcdr 3 info) ! (gnus-delete-alist type (car marked))) (setcdr m (gnus-compress-sequence articles t))) (setcdr m (gnus-compress-sequence (sort (nconc (gnus-uncompress-range (cdr m)) *** pub/qgnus/lisp/gnus-score.el Fri Jun 26 04:26:38 1998 --- qgnus/lisp/gnus-score.el Fri Jun 26 15:54:54 1998 *************** *** 1089,1097 **** found) (while a ;; Downcase all header names. ! (when (stringp (caar a)) (setcar (car a) (downcase (caar a))) (setq found t)) (pop a)) ;; If there are actual scores in the alist, we add it to the ;; return value of this function. --- 1089,1101 ---- found) (while a ;; Downcase all header names. ! (cond ! ((stringp (caar a)) (setcar (car a) (downcase (caar a))) (setq found t)) + ;; Advanced scoring. + ((consp (caar a)) + (setq found t))) (pop a)) ;; If there are actual scores in the alist, we add it to the ;; return value of this function. *************** *** 1307,1313 **** (and (file-exists-p file) (not (file-writable-p file)))) () ! (setq score (setcdr entry (delq (assq 'touched score) score))) (erase-buffer) (let (emacs-lisp-mode-hook) (if (string-match --- 1311,1317 ---- (and (file-exists-p file) (not (file-writable-p file)))) () ! (setq score (setcdr entry (gnus-delete-alist 'touched score))) (erase-buffer) (let (emacs-lisp-mode-hook) (if (string-match *************** *** 1861,1867 **** (while (setq art (pop articles)) (setq this (aref (car art) gnus-score-index)) (if simplify ! (setq this (gnus-map-function gnus-simplify-subject-functions this))) (if (equal last this) ;; O(N*H) cons-cells used here, where H is the number of ;; headers. --- 1865,1871 ---- (while (setq art (pop articles)) (setq this (aref (car art) gnus-score-index)) (if simplify ! (setq this (gnus-map-function gnus-simplify-subject-functions this))) (if (equal last this) ;; O(N*H) cons-cells used here, where H is the number of ;; headers. *************** *** 1894,1900 **** (mt (aref (symbol-name type) 0)) (case-fold-search (not (memq mt '(?R ?S ?E ?F)))) (dmt (downcase mt)) ! ; Assume user already simplified regexp and fuzzies (match (if (and simplify (not (memq dmt '(?f ?r)))) (gnus-map-function gnus-simplify-subject-functions --- 1898,1904 ---- (mt (aref (symbol-name type) 0)) (case-fold-search (not (memq mt '(?R ?S ?E ?F)))) (dmt (downcase mt)) ! ; Assume user already simplified regexp and fuzzies (match (if (and simplify (not (memq dmt '(?f ?r)))) (gnus-map-function gnus-simplify-subject-functions *************** *** 1908,1917 **** (cond ;; Fuzzy matches. We save these for later. ((= dmt ?f) ! (push (cons entries alist) fuzzies)) ;; Word matches. Save these for even later. ((= dmt ?w) ! (push (cons entries alist) words)) ;; Exact matches. ((= dmt ?e) ;; Do exact matching. --- 1912,1923 ---- (cond ;; Fuzzy matches. We save these for later. ((= dmt ?f) ! (push (cons entries alist) fuzzies) ! (setq entries (cdr entries))) ;; Word matches. Save these for even later. ((= dmt ?w) ! (push (cons entries alist) words) ! (setq entries (cdr entries))) ;; Exact matches. ((= dmt ?e) ;; Do exact matching. *************** *** 1936,1942 **** gnus-score-trace)) (while (setq art (pop arts)) (setcdr art (+ score (cdr art))))))) ! (forward-line 1))) ;; Regexp and substring matching. (t (goto-char (point-min)) --- 1942,1967 ---- gnus-score-trace)) (while (setq art (pop arts)) (setcdr art (+ score (cdr art))))))) ! (forward-line 1)) ! ;; Update expiry date ! (if trace ! (setq entries (cdr entries)) ! (cond ! ;; Permanent entry. ! ((null date) ! (setq entries (cdr entries))) ! ;; We have a match, so we update the date. ! ((and found gnus-update-score-entry-dates) ! (gnus-score-set 'touched '(t) alist) ! (setcar (nthcdr 2 kill) now) ! (setq entries (cdr entries))) ! ;; This entry has expired, so we remove it. ! ((and expire (< date expire)) ! (gnus-score-set 'touched '(t) alist) ! (setcdr entries (cddr entries))) ! ;; No match; go to next entry. ! (t ! (setq entries (cdr entries)))))) ;; Regexp and substring matching. (t (goto-char (point-min)) *************** *** 1955,1980 **** gnus-score-trace)) (while (setq art (pop arts)) (setcdr art (+ score (cdr art))))) ! (forward-line 1)))) ! ;; Update expiry date ! (if trace ! (setq entries (cdr entries)) ! (cond ! ;; Permanent entry. ! ((null date) ! (setq entries (cdr entries))) ! ;; We have a match, so we update the date. ! ((and found gnus-update-score-entry-dates) ! (gnus-score-set 'touched '(t) alist) ! (setcar (nthcdr 2 kill) now) ! (setq entries (cdr entries))) ! ;; This entry has expired, so we remove it. ! ((and expire (< date expire)) ! (gnus-score-set 'touched '(t) alist) ! (setcdr entries (cddr entries))) ! ;; No match; go to next entry. ! (t ! (setq entries (cdr entries)))))))) ;; Find fuzzy matches. (when fuzzies --- 1980,2005 ---- gnus-score-trace)) (while (setq art (pop arts)) (setcdr art (+ score (cdr art))))) ! (forward-line 1)) ! ;; Update expiry date ! (if trace ! (setq entries (cdr entries)) ! (cond ! ;; Permanent entry. ! ((null date) ! (setq entries (cdr entries))) ! ;; We have a match, so we update the date. ! ((and found gnus-update-score-entry-dates) ! (gnus-score-set 'touched '(t) alist) ! (setcar (nthcdr 2 kill) now) ! (setq entries (cdr entries))) ! ;; This entry has expired, so we remove it. ! ((and expire (< date expire)) ! (gnus-score-set 'touched '(t) alist) ! (setcdr entries (cddr entries))) ! ;; No match; go to next entry. ! (t ! (setq entries (cdr entries)))))))))) ;; Find fuzzy matches. (when fuzzies *************** *** 2006,2023 **** (setcdr art (+ score (cdr art)))))) (forward-line 1)) ;; Update expiry date ! (cond ! ;; Permanent. ! ((null date) ! ) ! ;; Match, update date. ! ((and found gnus-update-score-entry-dates) ! (gnus-score-set 'touched '(t) (cdar fuzzies)) ! (setcar (nthcdr 2 kill) now)) ! ;; Old entry, remove. ! ((and expire (< date expire)) ! (gnus-score-set 'touched '(t) (cdar fuzzies)) ! (setcdr (caar fuzzies) (cddaar fuzzies)))) (setq fuzzies (cdr fuzzies))))) (when words --- 2031,2049 ---- (setcdr art (+ score (cdr art)))))) (forward-line 1)) ;; Update expiry date ! (if (not trace) ! (cond ! ;; Permanent. ! ((null date) ! ) ! ;; Match, update date. ! ((and found gnus-update-score-entry-dates) ! (gnus-score-set 'touched '(t) (cdar fuzzies)) ! (setcar (nthcdr 2 kill) now)) ! ;; Old entry, remove. ! ((and expire (< date expire)) ! (gnus-score-set 'touched '(t) (cdar fuzzies)) ! (setcdr (caar fuzzies) (cddaar fuzzies))))) (setq fuzzies (cdr fuzzies))))) (when words *************** *** 2043,2060 **** (while (setq art (pop arts)) (setcdr art (+ score (cdr art)))))) ;; Update expiry date ! (cond ! ;; Permanent. ! ((null date) ! ) ! ;; Match, update date. ! ((and found gnus-update-score-entry-dates) ! (gnus-score-set 'touched '(t) (cdar words)) ! (setcar (nthcdr 2 kill) now)) ! ;; Old entry, remove. ! ((and expire (< date expire)) ! (gnus-score-set 'touched '(t) (cdar words)) ! (setcdr (caar words) (cddaar words)))) (setq words (cdr words)))))) nil)) --- 2069,2087 ---- (while (setq art (pop arts)) (setcdr art (+ score (cdr art)))))) ;; Update expiry date ! (if (not trace) ! (cond ! ;; Permanent. ! ((null date) ! ) ! ;; Match, update date. ! ((and found gnus-update-score-entry-dates) ! (gnus-score-set 'touched '(t) (cdar words)) ! (setcar (nthcdr 2 kill) now)) ! ;; Old entry, remove. ! ((and expire (< date expire)) ! (gnus-score-set 'touched '(t) (cdar words)) ! (setcdr (caar words) (cddaar words))))) (setq words (cdr words)))))) nil)) *** pub/qgnus/lisp/gnus-sum.el Fri Jun 26 04:26:42 1998 --- qgnus/lisp/gnus-sum.el Fri Jun 26 15:54:55 1998 *************** *** 509,514 **** --- 509,515 ---- %G Group name %p Unprefixed group name %A Current article number + %z Current article score %V Gnus version %U Number of unread articles in the group %e Number of unselected articles in the group *************** *** 864,869 **** --- 865,871 ---- (?d (length gnus-newsgroup-dormant) ?d) (?t (length gnus-newsgroup-marked) ?d) (?r (length gnus-newsgroup-reads) ?d) + (?z (gnus-summary-article-score gnus-tmp-article-number) ?d) (?E gnus-newsgroup-expunged-tally ?d) (?s (gnus-current-score-file-nondirectory) ?s))) *************** *** 4076,4082 **** (defun gnus-update-marks () "Enter the various lists of marked articles into the newsgroup info list." ! (let ((types gnus-article-mark-lists) (info (gnus-get-info gnus-newsgroup-name)) (uncompressed '(score bookmark killed)) type list newmarked symbol) --- 4078,4085 ---- (defun gnus-update-marks () "Enter the various lists of marked articles into the newsgroup info list." ! (let ((types (gnus-delete-alist 'cached ! (copy-sequence gnus-article-mark-lists))) (info (gnus-get-info gnus-newsgroup-name)) (uncompressed '(score bookmark killed)) type list newmarked symbol) *************** *** 4349,4355 **** (subst-char-in-region (point-min) (point-max) ?\t ? t) (gnus-run-hooks 'gnus-parse-headers-hook) (let ((case-fold-search t) ! in-reply-to header p lines) (goto-char (point-min)) ;; Search to the beginning of the next header. Error messages ;; do not begin with 2 or 3. --- 4352,4358 ---- (subst-char-in-region (point-min) (point-max) ?\t ? t) (gnus-run-hooks 'gnus-parse-headers-hook) (let ((case-fold-search t) ! in-reply-to header p lines chars) (goto-char (point-min)) ;; Search to the beginning of the next header. Error messages ;; do not begin with 2 or 3. *************** *** 4438,4444 **** (setq ref ref2)))) (setq ref nil)))) ;; Chars. ! 0 ;; Lines. (progn (goto-char p) --- 4441,4452 ---- (setq ref ref2)))) (setq ref nil)))) ;; Chars. ! (progn ! (goto-char p) ! (if (search-forward "\nchars: " nil t) ! (if (numberp (setq chars (ignore-errors (read cur)))) ! chars 0) ! 0)) ;; Lines. (progn (goto-char p) *************** *** 7613,7621 **** (push article gnus-newsgroup-dormant)) (t (push article gnus-newsgroup-unreads))) ! (setq gnus-newsgroup-reads ! (delq (assq article gnus-newsgroup-reads) ! gnus-newsgroup-reads)) ;; See whether the article is to be put in the cache. (and gnus-use-cache --- 7621,7627 ---- (push article gnus-newsgroup-dormant)) (t (push article gnus-newsgroup-unreads))) ! (gnus-pull article gnus-newsgroup-reads) ;; See whether the article is to be put in the cache. (and gnus-use-cache *************** *** 7756,7764 **** (push article gnus-newsgroup-dormant)) (t (push article gnus-newsgroup-unreads))) ! (setq gnus-newsgroup-reads ! (delq (assq article gnus-newsgroup-reads) ! gnus-newsgroup-reads)) t))) (defalias 'gnus-summary-mark-as-unread-forward --- 7762,7768 ---- (push article gnus-newsgroup-dormant)) (t (push article gnus-newsgroup-unreads))) ! (gnus-pull article gnus-newsgroup-reads) t))) (defalias 'gnus-summary-mark-as-unread-forward *** pub/qgnus/lisp/gnus-topic.el Wed Jun 24 07:55:06 1998 --- qgnus/lisp/gnus-topic.el Fri Jun 26 15:54:55 1998 *************** *** 348,354 **** (when (atom param) (setq param (cons param t))) ;; Override any old versions of this param. ! (setq out (delq (assq (car param) out) out)) (push param out))) ;; Return the resulting parameter list. out)) --- 348,354 ---- (when (atom param) (setq param (cons param t))) ;; Override any old versions of this param. ! (gnus-pull (car param) out) (push param out))) ;; Return the resulting parameter list. out)) *** pub/qgnus/lisp/gnus-util.el Wed Jun 3 04:02:22 1998 --- qgnus/lisp/gnus-util.el Fri Jun 26 15:54:56 1998 *************** *** 603,616 **** ;; Write the buffer. (write-region (point-min) (point-max) file nil 'quietly)) - (defmacro gnus-delete-assq (key list) - `(let ((listval (eval ,list))) - (setq ,list (delq (assq ,key listval) listval)))) - - (defmacro gnus-delete-assoc (key list) - `(let ((listval ,list)) - (setq ,list (delq (assoc ,key listval) listval)))) - (defun gnus-delete-file (file) "Delete FILE if it exists." (when (file-exists-p file) --- 603,608 ---- *************** *** 930,935 **** --- 922,956 ---- (set-buffer gnus-group-buffer) (eq major-mode 'gnus-group-mode)))) + (defun gnus-remove-duplicates (list) + (let (new (tail list)) + (while tail + (or (member (car tail) new) + (setq new (cons (car tail) new))) + (setq tail (cdr tail))) + (nreverse new))) + + (defun gnus-delete-if (predicate list) + "Delete elements from LIST that satisfy PREDICATE." + (let (out) + (while list + (when (funcall predicate (car list)) + (push (car list) out)) + (pop list)) + (nreverse out))) + + (defun gnus-delete-alist (key alist) + "Delete all entries in ALIST that have a key eq to KEY." + (let (entry) + (while (setq entry (assq key alist)) + (setq alist (delq entry alist))) + alist)) + + (defmacro gnus-pull (key alist) + "Modify ALIST to be without KEY." + (unless (symbolp alist) + (error "Not a symbol: %s" alist)) + `(setq ,alist (delq (assq ,key ,alist) ,alist))) (provide 'gnus-util) *** pub/qgnus/lisp/gnus.el Fri Jun 26 04:26:44 1998 --- qgnus/lisp/gnus.el Fri Jun 26 15:54:56 1998 *************** *** 250,256 **** :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "5.6.15" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) --- 250,256 ---- :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) ! (defconst gnus-version-number "5.6.16" "Version number for this version of Gnus.") (defconst gnus-version (format "Gnus v%s" gnus-version-number) *************** *** 2461,2467 **** (when params (setq params (delq name params)) (while (assq name params) ! (setq params (delq (assq name params) params))) (gnus-info-set-params info params)))))) (defun gnus-group-add-score (group &optional score) --- 2461,2467 ---- (when params (setq params (delq name params)) (while (assq name params) ! (gnus-pull name params)) (gnus-info-set-params info params)))))) (defun gnus-group-add-score (group &optional score) *** pub/qgnus/lisp/lpath.el Mon Apr 27 00:25:08 1998 --- qgnus/lisp/lpath.el Fri Jun 26 15:54:56 1998 *************** *** 29,35 **** make-char-table set-char-table-range font-create-object x-color-values widget-make-intangible error-message-string w3-form-encode-xwfu gnus-mule-get-coding-system ! decode-coding-string)) (maybe-bind '(global-face-data mark-active transient-mark-mode mouse-selection-click-count mouse-selection-click-count-buffer buffer-display-table --- 29,35 ---- make-char-table set-char-table-range font-create-object x-color-values widget-make-intangible error-message-string w3-form-encode-xwfu gnus-mule-get-coding-system ! decode-coding-string mail-aliases-setup)) (maybe-bind '(global-face-data mark-active transient-mark-mode mouse-selection-click-count mouse-selection-click-count-buffer buffer-display-table *************** *** 52,58 **** set-glyph-property event-glyph glyph-property event-point device-on-window-system-p make-gui-button Info-goto-node pp-to-string color-name ! gnus-mule-get-coding-system decode-coding-string))) (setq load-path (cons "." load-path)) (require 'custom) --- 52,59 ---- set-glyph-property event-glyph glyph-property event-point device-on-window-system-p make-gui-button Info-goto-node pp-to-string color-name ! gnus-mule-get-coding-system decode-coding-string ! mail-aliases-setup))) (setq load-path (cons "." load-path)) (require 'custom) *** pub/qgnus/lisp/message.el Fri Jun 26 04:26:46 1998 --- qgnus/lisp/message.el Fri Jun 26 15:54:57 1998 *************** *** 1229,1235 **** ["Spellcheck" ispell-message t] "----" ["Send Message" message-send-and-exit t] ! ["Abort Message" message-dont-send t])) (easy-menu-define message-mode-field-menu message-mode-map "" --- 1229,1236 ---- ["Spellcheck" ispell-message t] "----" ["Send Message" message-send-and-exit t] ! ["Abort Message" message-dont-send t] ! ["Kill Message" message-kill-buffer t])) (easy-menu-define message-mode-field-menu message-mode-map "" *************** *** 1302,1320 **** facemenu-remove-face-function t) (make-local-variable 'paragraph-separate) (make-local-variable 'paragraph-start) (setq paragraph-start (concat (regexp-quote mail-header-separator) ! "$\\|[ \t]*[-_][-_][-_]+$\\|" ! "-- $\\|" ;;!!! Uhm... shurely this can't be right? ! "[> " (regexp-quote message-yank-prefix) "]+$\\|" ! paragraph-start)) ! (setq paragraph-separate ! (concat (regexp-quote mail-header-separator) ! "$\\|[ \t]*[-_][-_][-_]+$\\|" ! "-- $\\|" ! "[> " (regexp-quote message-yank-prefix) "]+$\\|" ! paragraph-separate)) (make-local-variable 'message-reply-headers) (setq message-reply-headers nil) (make-local-variable 'message-newsreader) --- 1303,1320 ---- facemenu-remove-face-function t) (make-local-variable 'paragraph-separate) (make-local-variable 'paragraph-start) + ;; `-- ' precedes the signature. `-----' appears at the start of the + ;; lines that delimit forwarded messages. + ;; Lines containing just >= 3 dashes, perhaps after whitespace, + ;; are also sometimes used and should be separators. (setq paragraph-start (concat (regexp-quote mail-header-separator) ! "$\\|[ \t]*[a-z0-9A-Z]*>+[ \t]*$\\|[ \t]*$\\|" ! "-- $\\|---+$\\|" ! page-delimiter ;;!!! Uhm... shurely this can't be right? ! "[> " (regexp-quote message-yank-prefix) "]+$\\|")) ! (setq paragraph-separate paragraph-start) (make-local-variable 'message-reply-headers) (setq message-reply-headers nil) (make-local-variable 'message-newsreader) *************** *** 1334,1340 **** (when (eq message-mail-alias-type 'abbrev) (if (fboundp 'mail-abbrevs-setup) (mail-abbrevs-setup) ! (funcall (intern "mail-aliases-setup")))) (message-set-auto-save-file-name) (unless (string-match "XEmacs" emacs-version) (set (make-local-variable 'font-lock-defaults) --- 1334,1340 ---- (when (eq message-mail-alias-type 'abbrev) (if (fboundp 'mail-abbrevs-setup) (mail-abbrevs-setup) ! (mail-aliases-setup))) (message-set-auto-save-file-name) (unless (string-match "XEmacs" emacs-version) (set (make-local-variable 'font-lock-defaults) *** pub/qgnus/lisp/nndoc.el Mon Jun 1 04:30:40 1998 --- qgnus/lisp/nndoc.el Fri Jun 26 15:54:57 1998 *************** *** 616,624 **** first definition, and if any other symbol, add after that symbol in the alist." ;; First remove any old instances. ! (setq nndoc-type-alist ! (delq (assq (car definition) nndoc-type-alist) ! nndoc-type-alist)) ;; Then enter the new definition in the proper place. (cond ((or (null position) (eq position 'last)) --- 616,622 ---- first definition, and if any other symbol, add after that symbol in the alist." ;; First remove any old instances. ! (gnus-pull (car definition) nndoc-type-alist) ;; Then enter the new definition in the proper place. (cond ((or (null position) (eq position 'last)) *** pub/qgnus/lisp/nnmail.el Fri Jun 26 04:26:49 1998 --- qgnus/lisp/nnmail.el Fri Jun 26 15:54:57 1998 *************** *** 25,31 **** ;;; Code: ! (require 'cl) (require 'nnheader) (require 'timezone) --- 25,31 ---- ;;; Code: ! (eval-when-compile (require 'cl)) (require 'nnheader) (require 'timezone) *************** *** 1096,1102 **** "Error in `nnmail-split-methods'; using `bogus' mail group") (sit-for 1) '("bogus"))))) ! (setq split (remove-duplicates split :test 'equal)) ;; The article may be "cross-posted" to `junk'. What ;; to do? Just remove the `junk' spec. Don't really ;; see anything else to do... --- 1096,1102 ---- "Error in `nnmail-split-methods'; using `bogus' mail group") (sit-for 1) '("bogus"))))) ! (setq split (gnus-remove-duplicates split)) ;; The article may be "cross-posted" to `junk'. What ;; to do? Just remove the `junk' spec. Don't really ;; see anything else to do... *************** *** 1758,1765 **** (let ((history nnmail-split-history) prev) (while history ! (setcar history (delete-if (lambda (e) (string= (car e) group)) ! (car history))) (pop history)) (setq nnmail-split-history (delq nil nnmail-split-history)))) --- 1758,1765 ---- (let ((history nnmail-split-history) prev) (while history ! (setcar history (gnus-delete-if (lambda (e) (string= (car e) group)) ! (car history))) (pop history)) (setq nnmail-split-history (delq nil nnmail-split-history)))) *** pub/qgnus/lisp/nnweb.el Mon Jun 1 04:30:47 1998 --- qgnus/lisp/nnweb.el Fri Jun 26 15:54:57 1998 *************** *** 206,212 **** (deffoo nnweb-request-delete-group (group &optional force server) (nnweb-possibly-change-server group server) ! (gnus-delete-assoc group nnweb-group-alist) (gnus-delete-file (nnweb-overview-file group)) t) --- 206,212 ---- (deffoo nnweb-request-delete-group (group &optional force server) (nnweb-possibly-change-server group server) ! (gnus-pull group nnweb-group-alist) (gnus-delete-file (nnweb-overview-file group)) t) *** pub/qgnus/lisp/ChangeLog Fri Jun 26 04:26:33 1998 --- qgnus/lisp/ChangeLog Fri Jun 26 15:54:52 1998 *************** *** 1,3 **** --- 1,64 ---- + Fri Jun 26 15:46:05 1998 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.6.16 is released. + + Fri Jun 26 15:36:25 1998 Lars Magne Ingebrigtsen + + * gnus-util.el (gnus-delete-assq): Removed. + (gnus-delete-assoc): Ditto. + + * gnus.el: Use throughout. + + * gnus-util.el (gnus-pull): New macro. + + 1998-06-26 Simon Josefsson + + * gnus-sum.el (gnus-get-newsgroup-headers): parse Chars: headers + + Fri Jun 26 13:45:24 1998 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-update-marks): Use it. + + * gnus-util.el (gnus-delete-alist): New function. + + * gnus-sum.el (gnus-update-marks): Don't save list of cached + articles. + + * message.el (message-mode-menu): Include kill-buffer. + + * nnmail.el (nnmail-purge-split-history): Use it. + + * gnus-util.el (gnus-delete-if): New function. + + * nnmail.el (nnmail-article-group): Use gnus-remove-duplicates. + + Fri Jun 26 13:45:09 1998 Richard Stallman + + * gnus-util.el (gnus-remove-duplicates): New function. + + Fri Jun 26 13:30:42 1998 Kevin Christian + + * gnus-score.el (gnus-score-string): Do updating of scores after + fuzzies. + + Fri Jun 26 07:26:03 1998 Lars Magne Ingebrigtsen + + * message.el (message-mode): Don't do the intern dance. + + Fri Jun 26 07:13:49 1998 Richard Stallman + + * message.el (message-mode): Adaptive fill changes. + + Fri Jun 26 04:29:44 1998 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-mode-line-format-alist): Allow article + score. + + * gnus-score.el (gnus-score-load-file): Would ignore all score + files without un-advanced rules. + + * gnus-ems.el ((fboundp 'split-string)): Use it where it exists. + Fri Jun 26 04:23:12 1998 Lars Magne Ingebrigtsen * gnus.el: Gnus v5.6.15 is released. *** pub/qgnus/texi/gnus.texi Fri Jun 26 04:26:58 1998 --- qgnus/texi/gnus.texi Fri Jun 26 15:54:59 1998 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Gnus 5.6.15 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename gnus ! @settitle Gnus 5.6.16 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 316,322 **** @tex @titlepage ! @title Gnus 5.6.15 Manual @author by Lars Magne Ingebrigtsen @page --- 316,322 ---- @tex @titlepage ! @title Gnus 5.6.16 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 352,358 **** spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Gnus 5.6.15. @end ifinfo --- 352,358 ---- spool or your mbox file. All at the same time, if you want to push your luck. ! This manual corresponds to Gnus 5.6.16. @end ifinfo *************** *** 1248,1254 **** @vindex gnus-group-mode-line-format The mode line can be changed by setting ! @code{gnus-group-mode-line-format} (@pxref{Formatting Variables}). It doesn't understand that many format specifiers: @table @samp --- 1248,1254 ---- @vindex gnus-group-mode-line-format The mode line can be changed by setting ! @code{gnus-group-mode-line-format} (@pxref{Mode Line Formatting}). It doesn't understand that many format specifiers: @table @samp *************** *** 3279,3285 **** @vindex gnus-summary-zcore-fuzz Zcore, @samp{+} if above the default level and @samp{-} if below the default level. If the difference between ! @code{gnus-summary-default-level} and the score is less than @code{gnus-summary-zcore-fuzz}, this spec will not be used. @item V Total thread score. --- 3279,3285 ---- @vindex gnus-summary-zcore-fuzz Zcore, @samp{+} if above the default level and @samp{-} if below the default level. If the difference between ! @code{gnus-summary-default-score} and the score is less than @code{gnus-summary-zcore-fuzz}, this spec will not be used. @item V Total thread score. *************** *** 3331,3339 **** @subsection Summary Buffer Mode Line @vindex gnus-summary-mode-line-format ! You can also change the format of the summary mode bar. Set ! @code{gnus-summary-mode-line-format} to whatever you like. The default ! is @samp{Gnus: %%b [%A] %Z}. Here are the elements you can play with: --- 3331,3339 ---- @subsection Summary Buffer Mode Line @vindex gnus-summary-mode-line-format ! You can also change the format of the summary mode bar (@pxref{Mode Line ! Formatting}). Set @code{gnus-summary-mode-line-format} to whatever you ! like. The default is @samp{Gnus: %%b [%A] %Z}. Here are the elements you can play with: *************** *** 3344,3349 **** --- 3344,3351 ---- Unprefixed group name. @item A Current article number. + @item z + Current article score. @item V Gnus version. @item U *************** *** 6314,6320 **** @kindex W l (Summary) @findex gnus-summary-stop-page-breaking Remove page breaks from the current article ! (@code{gnus-summary-stop-page-breaking}). @item W r @kindex W r (Summary) --- 6316,6323 ---- @kindex W l (Summary) @findex gnus-summary-stop-page-breaking Remove page breaks from the current article ! (@code{gnus-summary-stop-page-breaking}). @xref{Misc Article} for page ! delimiters. @item W r @kindex W r (Summary) *************** *** 6993,7001 **** @item gnus-tree-mode-line-format @vindex gnus-tree-mode-line-format ! A format string for the mode bar in the tree mode buffers. The default ! is @samp{Gnus: %%b %S %Z}. For a list of valid specs, @pxref{Summary ! Buffer Mode Line}. @item gnus-selected-tree-face @vindex gnus-selected-tree-face --- 6996,7004 ---- @item gnus-tree-mode-line-format @vindex gnus-tree-mode-line-format ! A format string for the mode bar in the tree mode buffers (@pxref{Mode ! Line Formatting}). The default is @samp{Gnus: %%b %S %Z}. For a list ! of valid specs, @pxref{Summary Buffer Mode Line}. @item gnus-selected-tree-face @vindex gnus-selected-tree-face *************** *** 7982,7989 **** @vindex gnus-article-mode-line-format @item gnus-article-mode-line-format This variable is a format string along the same lines as ! @code{gnus-summary-mode-line-format}. It accepts the same ! format specifications as that variable, with one extension: @table @samp @item w --- 7985,7993 ---- @vindex gnus-article-mode-line-format @item gnus-article-mode-line-format This variable is a format string along the same lines as ! @code{gnus-summary-mode-line-format} (@pxref{Mode Line Formatting}). It ! accepts the same format specifications as that variable, with one ! extension: @table @samp @item w *************** *** 8563,8570 **** @vindex gnus-server-mode-line-format The mode line can also be customized by using the ! @code{gnus-server-mode-line-format} variable. The following specs are ! understood: @table @samp @item S --- 8567,8574 ---- @vindex gnus-server-mode-line-format The mode line can also be customized by using the ! @code{gnus-server-mode-line-format} variable (@pxref{Mode Line ! Formatting}). The following specs are understood: @table @samp @item S *************** *** 11528,11534 **** @item gnus-category-mode-line-format @vindex gnus-category-mode-line-format ! Format of the category mode line. @item gnus-agent-short-article @vindex gnus-agent-short-article --- 11532,11538 ---- @item gnus-category-mode-line-format @vindex gnus-category-mode-line-format ! Format of the category mode line (@pxref{Mode Line Formatting}). @item gnus-agent-short-article @vindex gnus-agent-short-article *************** *** 12344,12354 **** @item Lines, Chars These two headers use different match types: @code{<}, @code{>}, ! @code{=}, @code{>=} and @code{<=}. When matching on @code{Lines}, be ! careful because some backends (like @code{nndir}) do not generate ! @code{Lines} header, so every article ends up being marked as having 0 ! lines. This can lead to strange results if you happen to lower score of ! the articles with few lines. @item Date For the Date header we have three kinda silly match types: --- 12348,12378 ---- @item Lines, Chars These two headers use different match types: @code{<}, @code{>}, ! @code{=}, @code{>=} and @code{<=}. ! ! These predicates are true if ! ! @example ! (PREDICATE HEADER MATCH) ! @end example ! ! evaluates to non-@code{nil}. For instance, the advanced match ! @code{("lines" 4 <)} (@pxref{Advanced Scoring}) will result in the ! following form: ! ! @lisp ! (< header-value 4) ! @end lisp ! ! Or to put it another way: When using @code{<} on @code{Lines} with 4 as ! the match, we get the score added if the article has less than 4 lines. ! (It's easy to get confused and think it's the other way around. But ! it's not. I think.) ! ! When matching on @code{Lines}, be careful because some backends (like ! @code{nndir}) do not generate @code{Lines} header, so every article ends ! up being marked as having 0 lines. This can lead to strange results if ! you happen to lower score of the articles with few lines. @item Date For the Date header we have three kinda silly match types: *************** *** 13643,13649 **** @section Formatting Variables @cindex formatting variables ! Throughout this manual you've probably noticed lots of variables called things like @code{gnus-group-line-format} and @code{gnus-summary-mode-line-format}. These control how Gnus is to output lines in the various buffers. There's quite a lot of them. Fortunately, they all use the same syntax, so there's not that much to --- 13667,13674 ---- @section Formatting Variables @cindex formatting variables ! Throughout this manual you've probably noticed lots of variables called ! things like @code{gnus-group-line-format} and @code{gnus-summary-mode-line-format}. These control how Gnus is to output lines in the various buffers. There's quite a lot of them. Fortunately, they all use the same syntax, so there's not that much to *************** *** 13655,13660 **** --- 13680,13686 ---- @menu * Formatting Basics:: A formatting variable is basically a format string. + * Mode Line Formatting:: Some rules about mode line formatting varsables. * Advanced Formatting:: Modifying output in various ways. * User-Defined Specs:: Having Gnus call your own functions. * Formatting Fonts:: Making the formatting look colorful and nice. *************** *** 13701,13706 **** --- 13727,13757 ---- less than 4 characters wide. + @node Mode Line Formatting + @subsection Mode Line Formatting + + Mode line formatting variables (e.g., + @code{gnus-summary-mode-line-format}) follow the same rules as other, + buffer line oriented formatting variables (@pxref{Formatting Basics}) + with the following two differences: + + @enumerate + + @item + There must be no newline (@samp{\n}) at the end. + + @item + The special @samp{%%b} spec can be used to display the buffer name. + Well, it's no spec at all, really---@samp{%%} is just a way to quote + @samp{%} to allow it to pass through the formatting machinery unmangled, + so that Emacs receives @samp{%b}, which is something the Emacs mode line + display interprets to mean ``show the buffer name''. For a full list of + mode line specs Emacs understands, see the documentation of the + @code{mode-line-format} variable. + + @end enumerate + + @node Advanced Formatting @subsection Advanced Formatting *************** *** 15775,15781 **** * ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus. * September Gnus:: The Thing Formally Known As Gnus 5.3/5.3. * Red Gnus:: Third time best---Gnus 5.4/5.5. ! * Quassia Gnus:: Two times two is four, or Gnus 5.6.15. @end menu These lists are, of course, just @emph{short} overviews of the --- 15826,15832 ---- * ding Gnus:: New things in Gnus 5.0/5.1, the first new Gnus. * September Gnus:: The Thing Formally Known As Gnus 5.3/5.3. * Red Gnus:: Third time best---Gnus 5.4/5.5. ! * Quassia Gnus:: Two times two is four, or Gnus 5.6.16. @end menu These lists are, of course, just @emph{short} overviews of the *************** *** 16310,16316 **** @node Quassia Gnus @subsubsection Quassia Gnus ! New features in Gnus 5.6.15: @itemize @bullet --- 16361,16367 ---- @node Quassia Gnus @subsubsection Quassia Gnus ! New features in Gnus 5.6.16: @itemize @bullet *** pub/qgnus/texi/message.texi Fri Jun 26 04:26:58 1998 --- qgnus/texi/message.texi Fri Jun 26 15:54:59 1998 *************** *** 1,7 **** \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 5.6.15 Manual @synindex fn cp @synindex vr cp @synindex pg cp --- 1,7 ---- \input texinfo @c -*-texinfo-*- @setfilename message ! @settitle Message 5.6.16 Manual @synindex fn cp @synindex vr cp @synindex pg cp *************** *** 42,48 **** @tex @titlepage ! @title Message 5.6.15 Manual @author by Lars Magne Ingebrigtsen @page --- 42,48 ---- @tex @titlepage ! @title Message 5.6.16 Manual @author by Lars Magne Ingebrigtsen @page *************** *** 83,89 **** * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 5.6.15. Message is distributed with the Gnus distribution bearing the same version number as this manual has. --- 83,89 ---- * Key Index:: List of Message mode keys. @end menu ! This manual corresponds to Message 5.6.16. Message is distributed with the Gnus distribution bearing the same version number as this manual has. *** pub/qgnus/texi/ChangeLog Fri Jun 26 04:26:58 1998 --- qgnus/texi/ChangeLog Fri Jun 26 15:54:59 1998 *************** *** 1,3 **** --- 1,17 ---- + 1998-06-26 Simon Josefsson + + * gnus-sum.el (gnus-get-newsgroup-headers): parse Chars: headers + + Fri Jun 26 13:33:00 1998 Yoshiki Hayashi + + * gnus.texi (Summary Buffer Lines): Typo fix. + + Fri Jun 26 05:53:22 1998 Lars Magne Ingebrigtsen + + * gnus.texi (Score File Format): Addition. + (Mode Line Formatting): New. + (Summary Buffer Mode Line): Addition. + Thu Jun 25 11:24:14 1998 Lars Magne Ingebrigtsen * gnus.texi (Summary Score Commands): Deletia.