+Mon Jul 27 03:26:00 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.27 is released.
+
+1998-07-27 02:27:11 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-topic.el (gnus-topic-update-unreads): New function.
+
+ * gnus-sum.el (gnus-summary-limit): Update mode line.
+
+ * gnus-soup.el (gnus-soup-add-article): Update mode line.
+
+ * gnus-group.el (gnus-group-make-menu-bar): Bug.
+
+ * gnus-art.el (gnus-article-make-menu-bar): Menu.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Bug reports.
+
+ * gnus-topic.el (gnus-topic-mode-map): h -> H.
+
+1998-07-19 16:59 Simon Josefsson <jas@pdc.kth.se>
+
+ * gnus-util.el (gnus-netrc-syntax-table): @ is whitespace
+
+1998-07-17 Gordon Matzigkeit <gord@fig.org>
+
+ * gnus-uu.el (gnus-uu-reginize-string): Simplify by looking
+ from back to front for part numbers, rather than skipping
+ leading ``version numbers.''
+
+ (gnus-uu-part-number): Make consistent with
+ gnus-uu-reginize-string.
+
+1998-07-26 19:01:58 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-request-article-this-buffer): Pass along
+ header.
+
+ * gnus-sum.el (gnus-summary-update-article): Don't pass along
+ iheader to regeneration routine.
+
+1998-07-26 17:33:03 KOSEKI Yoshinori <kose@yk.NetLaputa.ne.jp>
+
+ * nnmail.el (nnmail-move-inbox): Nix out password on errors.
+
+Sat Jul 25 19:31:36 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.26 is released.
+
+1998-07-25 14:53:24 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-salt.el (gnus-pick-mouse-pick-region): Use
+ gnus-read-event-char.
+
+Sat Jul 25 02:43:35 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.25 is released.
+
+1998-07-25 00:03:24 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Ditto.
+
+ * gnus-sum.el (gnus-summary-read-group-1): Ditto.
+
+ * gnus-group.el (gnus-group-read-group): Accept article list.
+
+1998-07-24 14:35:02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-configure-posting-styles): Quote some.
+
+ * message.el (message-ignored-supersedes-headers): Added X-Trace
+ and X-Complaints-To.
+
+ * nnmail.el (gnus-util): Required.
+
+1998-07-21 23:03:13 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-news-group-p): Bogosity in params.
+
+1998-07-21 16:14:32 Robert Bihlmeyer <robbe@orcus.priv.at>
+
+ * gnus-util.el (gnus-globalify-regexp): New function.
+
+1998-07-18 21:49:01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-list-of-unread-articles): Peel off articles
+ outside active range.
+
+1998-07-15 10:47:39 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnvirtual.el (nnvirtual-request-type): Handle non-numerical
+ articles.
+
+ * gnus.el (gnus-news-group-p): Do something sensible with negative
+ articlies.
+
+Wed Jul 15 10:27:05 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-salt.el (gnus-tree-minimize-window): Allow numbers.
+
+Wed Jul 15 10:25:29 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-expire): Ignored ticks.
+
+Wed Jul 15 10:15:28 1998 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+
+ * nntp.el (nntp-send-authinfo): Message better and stuff.
+
+Wed Jul 15 10:10:07 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el (gnus-message-archive-group): Allow sexp.
+
+Wed Jul 15 09:56:47 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-select-newsgroup): Accept select-articles
+ para,
+
+1998-07-13 Mike McEwan <mike@lotusland.demon.co.uk>
+
+ * gnus-sum.el (gnus-select-newsgroup): Don't call the Agent to
+ mark articles as read until *all* headers have been retrieved.
+
+Wed Jul 15 09:06:18 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nndir.el (nndir): Use nnml to request article.
+
+1998-07-11 SL Baur <steve@altair.xemacs.org>
+
+ * gnus-topic.el (gnus-topic-mode-map): Use modern key syntax.
+
+Sun Jul 12 04:01:22 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-score.el (gnus-current-home-score-file): New function.
+
+1998-07-11 Mike McEwan <mike@lotusland.demon.co.uk>
+
+ * gnus-agent.el (gnus-agent-fetch-headers): Note last fetched
+ headers per sesion to aid expiry in `headers only' groups.
+
+ * gnus-agent.el (gnus-agent-expire): Update group info to add
+ expired articles to list of read articles and prevent
+ re-fetching.
+
+1998-07-12 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnmail.el (nnmail-active-file-coding-system): Changed to
+ binary.
+
+Sun Jul 12 03:16:18 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-score.el (gnus-score-load-file): Specify which alist to
+ decay.
+
+1998-07-12 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-startup-file-coding-system): New variable.
+ (gnus-read-newsrc-el-file): Use it.
+
Sat Jul 11 03:03:53 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Gnus v5.6.24 is released.
(gnus-make-directory (nnheader-translate-file-chars
(file-name-directory file)))
(write-region (point-min) (point-max) file nil 'silent)
- (gnus-agent-save-alist group articles nil))
- t))))
+ (gnus-agent-save-alist group articles nil)
+ (gnus-agent-enter-history "last-header-fetched-for-session"
+ (list (cons group (nth (- (length articles) 1) articles)))
+ (gnus-time-to-day (current-time)))
+ t)))))
(defsubst gnus-agent-copy-nov-line (article)
(let (b e)
info (gnus-get-info group)
unreads (ignore-errors (gnus-list-of-unread-articles group))
marked (nconc (gnus-uncompress-range
- (cdr (assq 'ticked (gnus-info-marks info))))
+ (cdr (assq 'tick (gnus-info-marks info))))
(gnus-uncompress-range
(cdr (assq 'dormant
(gnus-info-marks info)))))
(setcdr prev (setq alist (cdr alist)))
(setq prev alist
alist (cdr alist))))
- (setq gnus-agent-article-alist (cdr first)))
- (gnus-agent-save-alist group))
+ (setq gnus-agent-article-alist (cdr first))
+ ;;; Mark all articles up to the first article
+ ;;; in `gnus-article-alist' as read.
+ (setcar (nthcdr 2 info)
+ (gnus-range-add
+ (nth 2 info) (cons 1 (- (caar gnus-agent-article-alist) 1))))
+ (gnus-dribble-enter
+ (concat "(gnus-group-set-info '"
+ (gnus-prin1-to-string info)
+ ")"))
+ (gnus-agent-save-alist group)))
expiry-hashtb)
(set-buffer history)
(setq histories (nreverse (sort histories '<)))
["Scroll backwards" gnus-article-goto-prev-page t]
["Show summary" gnus-article-show-summary t]
["Fetch Message-ID at point" gnus-article-refer-article t]
- ["Mail to address at point" gnus-article-mail t]))
+ ["Mail to address at point" gnus-article-mail t]
+ ["Send a bug report" gnus-bug t]))
(easy-menu-define
gnus-article-treatment-menu gnus-article-mode-map ""
(defun gnus-request-article-this-buffer (article group)
"Get an article and insert it into this buffer."
- (let (do-update-line)
+ (let (do-update-line sparse-header)
(prog1
(save-excursion
(erase-buffer)
(setq do-update-line article)
(setq article (mail-header-id header))
(let ((gnus-override-method gnus-refer-article-method))
- (gnus-read-header article))
+ (setq sparse-header (gnus-read-header article)))
(setq gnus-newsgroup-sparse
(delq article gnus-newsgroup-sparse)))
((vectorp header)
(stringp article)))
(let ((buf (current-buffer)))
(set-buffer gnus-summary-buffer)
- (gnus-summary-update-article do-update-line)
+ (gnus-summary-update-article do-update-line sparse-header)
(gnus-summary-goto-subject do-update-line nil t)
(set-window-point (get-buffer-window (current-buffer) t)
(point))
["Read manual" gnus-info-find-node t]
["Flush score cache" gnus-score-flush-cache t]
["Toggle topics" gnus-topic-mode t]
+ ["Send a bug report" gnus-bug t]
["Exit from Gnus" gnus-group-exit t]
["Exit without saving" gnus-group-quit t]))
;; Selecting groups.
-(defun gnus-group-read-group (&optional all no-article group)
+(defun gnus-group-read-group (&optional all no-article group select-articles)
"Read news in this newsgroup.
If the prefix argument ALL is non-nil, already read articles become
readable. IF ALL is a number, fetch this number of articles. If the
(cdr (assq 'tick marked)))
(gnus-range-length
(cdr (assq 'dormant marked)))))))
- no-article nil no-display)))
+ no-article nil no-display nil select-articles)))
(defun gnus-group-select-group (&optional all)
"Select this newsgroup.
;; Enter a group that is not in the group buffer. Non-nil is returned
;; if selection was successful.
(defun gnus-group-read-ephemeral-group (group method &optional activate
- quit-config request-only)
+ quit-config request-only
+ select-articles)
"Read GROUP from METHOD as an ephemeral group.
If ACTIVATE, request the group first.
If QUIT-CONFIG, use that window configuration when exiting from the
ephemeral group.
If REQUEST-ONLY, don't actually read the group; just request it.
+If SELECT-ARTICLES, only select those articles.
Return the name of the group is selection was successful."
;; Transform the select method into a unique server.
(when (stringp method)
(setq method (gnus-server-to-method method)))
-;;; (let ((saddr (intern (format "%s-address" (car method)))))
-;;; (setq method (gnus-copy-sequence method))
-;;; (require (car method))
-;;; (when (boundp saddr)
-;;; (unless (assq saddr method)
-;;; (nconc method `((,saddr ,(cadr method))))
-;;; (setf (cadr method) (format "%s-%d" (cadr method)
-;;; (incf gnus-ephemeral-group-server))))))
(let ((group (if (gnus-group-foreign-p group) group
(gnus-group-prefixed-name group method))))
(gnus-sethash
(if request-only
group
(condition-case ()
- (when (gnus-group-read-group t t group)
+ (when (gnus-group-read-group t t group select-articles)
group)
;;(error nil)
(quit nil)))))
;; Dummy to avoid byte-compile warning.
(defvar nnspool-rejected-article-hook)
(defvar mule-version)
-(defvar xemacs-betaname)
+;; (defvar xemacs-betaname)
+(defvar emacs-beta-version)
(defvar xemacs-codename)
(defun gnus-extended-version ()
(if (featurep 'xemacs)
;; XEmacs
(concat
- (format " XEmacs/%d.%d%s" emacs-major-version emacs-minor-version
- (if (and (boundp 'xemacs-betaname) xemacs-betaname)
- (if (string-match "\\`(\\(.*\\))\\'" xemacs-betaname)
- (match-string 1 xemacs-betaname)
- "") ; unknown format
- "")) ; not beta
- (if (boundp 'xemacs-codename)
+ (format " XEmacs/%d.%d" emacs-major-version emacs-minor-version)
+ (if (and (boundp 'emacs-beta-version) emacs-beta-version)
+ (format "beta%d" emacs-beta-version)
+ "")
+ (if (and (boundp 'xemacs-codename) xemacs-codename)
(concat " (" xemacs-codename ")")
- "") ; no codename
+ "")
)
;; not XEmacs
(concat
(format " Emacs/%d.%d" emacs-major-version emacs-minor-version)
(if (and (boundp 'enable-multibyte-characters)
enable-multibyte-characters)
- ;; Should return " (multibyte)" ?
- ""
+ "" ; Should return " (multibyte)"?
" (unibyte)")
))
;; MULE[/VERSION]
;; This is a header to be added to the headers when
;; posting.
(when value-value
- (make-local-variable message-required-mail-headers)
- (make-local-variable message-required-news-headers)
+ (make-local-variable 'message-required-mail-headers)
+ (make-local-variable 'message-required-news-headers)
(push (cons (car attribute) value-value)
message-required-mail-headers)
(push (cons (car attribute) value-value)
(let (event end end-point last-end-point (end-of-range (point)))
(track-mouse
(while (progn
- (setq event (read-event))
+ (setq event (gnus-read-event-char))
(or (mouse-movement-p event)
(eq (car-safe event) 'switch-frame)))
(if (eq (car-safe event) 'switch-frame)
"If non-nil, minimize the tree buffer window.
If a number, never let the tree buffer grow taller than that number of
lines."
- :type 'boolean
+ :type '(choice boolean
+ integer)
:group 'gnus-summary-tree)
(defcustom gnus-selected-tree-face 'modeline
(or (not decay)
(gnus-decay-scores alist decay)))
(gnus-score-set 'touched '(t) alist)
- (gnus-score-set 'decay (list (gnus-time-to-day (current-time)))))
+ (gnus-score-set 'decay (list (gnus-time-to-day (current-time))) alist))
;; We do not respect eval and files atoms from global score
;; files.
(when (and files (not global))
(funcall elem group))
;; Regexp-file cons
((consp elem)
- (when (string-match (car elem) group)
- (cadr elem))))))
+ (when (string-match (gnus-globalify-regexp (car elem)) group)
+ (replace-match (cadr elem) t nil group ))))))
(when found
(nnheader-concat gnus-kill-files-directory found))))
(concat group (if (gnus-use-long-file-name 'not-score) "." "/")
gnus-adaptive-file-suffix)))
+(defun gnus-current-home-score-file (group)
+ "Return the \"current\" regular score file."
+ (car (nreverse (gnus-score-find-alist group))))
+
;;;
;;; Score decays
;;;
(gnus-summary-mark-as-read (car articles) gnus-souped-mark)
(setq articles (cdr articles)))
(kill-buffer tmp-buf))
- (gnus-soup-save-areas)))
+ (gnus-soup-save-areas)
+ (gnus-set-mode-line 'summary)))
(defun gnus-soup-pack-packet ()
"Make a SOUP packet from the SOUP areas."
:group 'gnus-newsrc
:type 'boolean)
+(defvar gnus-startup-file-coding-system 'binary
+ "*Coding system for startup file.")
+
;;; Internal variables
(defvar gnus-newsrc-file-version nil)
(gnus-message 5 "Reading %s..." ding-file)
(let (gnus-newsrc-assoc)
(condition-case nil
- (load ding-file t t t)
+ (let ((coding-system-for-read gnus-startup-file-coding-system))
+ (load ding-file t t t))
(error
(ding)
(unless (gnus-yes-or-no-p
["Edit local kill file" gnus-summary-edit-local-kill t]
["Edit main kill file" gnus-summary-edit-global-kill t]
["Edit group parameters" gnus-summary-edit-parameters t]
+ ["Send a bug report" gnus-bug t]
("Exit"
["Catchup and exit" gnus-summary-catchup-and-exit t]
["Catchup all and exit" gnus-summary-catchup-and-exit t]
(defun gnus-data-update-list (data offset)
"Add OFFSET to the POS of all data entries in DATA."
+ (setq gnus-newsgroup-data-reverse nil)
(while data
(setcar (nthcdr 2 (car data)) (+ offset (nth 2 (car data))))
(setq data (cdr data))))
(defun gnus-data-compute-positions ()
"Compute the positions of all articles."
+ (setq gnus-newsgroup-data-reverse nil)
(let ((data gnus-newsgroup-data)
pos)
(while data
(set (car elem) (eval (nth 1 elem))))))))
(defun gnus-summary-read-group (group &optional show-all no-article
- kill-buffer no-display backward)
+ kill-buffer no-display backward
+ select-article)
"Start reading news in newsgroup GROUP.
If SHOW-ALL is non-nil, already read articles are also listed.
If NO-ARTICLE is non-nil, no article is selected initially.
(or (gnus-summary-read-group-1
group show-all no-article
kill-buffer no-display)
- (setq show-all nil)))))
+ (setq show-all nil)
+ select-article))))
(eq gnus-auto-select-next 'quietly))
(set-buffer gnus-group-buffer)
;; The entry function called above goes to the next
result))
(defun gnus-summary-read-group-1 (group show-all no-article
- kill-buffer no-display)
+ kill-buffer no-display
+ &optional select-articles)
;; Killed foreign groups can't be entered.
(when (and (not (gnus-group-native-p group))
(not (gnus-gethash group gnus-newsrc-hashtb)))
(gnus-message 5 "Retrieving newsgroup: %s..." group)
(let* ((new-group (gnus-summary-setup-buffer group))
(quit-config (gnus-group-quit-config group))
- (did-select (and new-group (gnus-select-newsgroup group show-all))))
+ (did-select (and new-group (gnus-select-newsgroup
+ group show-all select-articles))))
(cond
;; This summary buffer exists already, so we just select it.
((not new-group)
(defun gnus-summary-update-article (article &optional iheader)
"Update ARTICLE in the summary buffer."
(set-buffer gnus-summary-buffer)
- (let* ((header (or iheader (gnus-summary-article-header article)))
+ (let* ((header (gnus-summary-article-header article))
(id (mail-header-id header))
(data (gnus-data-find article))
(thread (gnus-id-to-thread id))
(number (mail-header-number header))
pos)
(when thread
- ;; !!! Should this be in or not?
(unless iheader
- (setcar thread nil))
- (when parent
- (delq thread parent))
- (if (gnus-summary-insert-subject id header iheader)
+ (setcar thread nil)
+ (when parent
+ (delq thread parent)))
+ (if (gnus-summary-insert-subject id header)
;; Set the (possibly) new article number in the data structure.
(gnus-data-set-number data (gnus-id-to-article id))
(setcar thread old)
(cdr (assq number gnus-newsgroup-scored))
(memq number gnus-newsgroup-processable))))))
-(defun gnus-select-newsgroup (group &optional read-all)
+(defun gnus-select-newsgroup (group &optional read-all select-articles)
"Select newsgroup GROUP.
-If READ-ALL is non-nil, all articles in the group are selected."
+If READ-ALL is non-nil, all articles in the group are selected.
+If SELECT-ARTICLES, only select those articles from GROUP."
(let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
;;!!! Dirty hack; should be removed.
(gnus-summary-ignore-duplicates
(unless (gnus-ephemeral-group-p gnus-newsgroup-name)
(gnus-group-update-group group))
- (setq articles (gnus-articles-to-read group read-all))
+ (setq articles (or select-articles (gnus-articles-to-read group read-all)))
(cond
((null articles)
;; Removed marked articles that do not exist.
(gnus-update-missing-marks
(gnus-sorted-complement fetched-articles articles))
- ;; Let the Gnus agent mark articles as read.
- (when gnus-agent
- (gnus-agent-get-undownloaded-list))
;; We might want to build some more threads first.
(when (and gnus-fetch-old-headers
(eq gnus-headers-retrieved-by 'nov))
(if (eq gnus-fetch-old-headers 'invisible)
(gnus-build-all-threads)
(gnus-build-old-threads)))
+ ;; Let the Gnus agent mark articles as read.
+ (when gnus-agent
+ (gnus-agent-get-undownloaded-list))
;; Check whether auto-expire is to be done in this group.
(setq gnus-newsgroup-auto-expire
(gnus-group-auto-expirable-p group))
;; first unread article is the article after the last read
;; article. Sounds logical, doesn't it?
(if (not (listp (cdr read)))
- (setq first (1+ (cdr read)))
+ (setq first (max (car active) (1+ (cdr read))))
;; `read' is a list of ranges.
(when (/= (setq nlast (or (and (numberp (car read)) (car read))
(caar read)))
1)
- (setq first 1))
+ (setq first (car active)))
(while read
(when first
(while (< first nlast)
;; after the current one.
(goto-char (point-max))
(gnus-summary-find-prev))
+ (gnus-set-mode-line 'summary)
;; We return how many articles were removed from the summary
;; buffer as a result of the new limit.
(- total (length gnus-newsgroup-data))))
(defvar gnus-topic-active-topology nil)
(defvar gnus-topic-active-alist nil)
+(defvar gnus-topic-unreads nil)
(defvar gnus-topology-checked-p nil
"Whether the topology has been checked in this session.")
(defun gnus-topic-unread (topic)
"Return the number of unread articles in TOPIC."
- (or (save-excursion
- (and (gnus-topic-goto-topic topic)
- (gnus-group-topic-unread)))
+ (or (cdr (assoc topic gnus-topic-unreads))
0))
(defun gnus-group-topic-p ()
(car type) visiblep
(not (eq (nth 2 type) 'hidden))
level all-entries unread))
+ (gnus-topic-update-unreads (car type) unread)
(goto-char end)
unread))
(number-of-groups (length entries))
(active-topic (eq gnus-topic-alist gnus-topic-active-alist))
gnus-tmp-header)
+ (gnus-topic-update-unreads name unread)
(beginning-of-line)
;; Insert the text.
(gnus-add-text-properties
'gnus-active active-topic
'gnus-topic-visible visiblep))))
+(defun gnus-topic-update-unreads (topic unreads)
+ (setq gnus-topic-unreads (delq (assoc topic gnus-topic-unreads)
+ gnus-topic-unreads))
+ (push (cons topic unreads) gnus-topic-unreads))
+
(defun gnus-topic-update-topics-containing-group (group)
"Update all topics that have GROUP as a member."
(when (and (eq major-mode 'gnus-group-mode)
"#" gnus-topic-mark-topic
"\M-#" gnus-topic-unmark-topic
[tab] gnus-topic-indent
- [M-tab] gnus-topic-unindent
+ [(meta tab)] gnus-topic-unindent
gnus-mouse-2 gnus-mouse-pick-topic)
;; Define a new submap.
"r" gnus-topic-rename
"\177" gnus-topic-delete
[delete] gnus-topic-delete
- "h" gnus-topic-toggle-display-empty-topics)
+ "H" gnus-topic-toggle-display-empty-topics)
(gnus-define-keys (gnus-topic-sort-map "S" gnus-group-topic-map)
"s" gnus-topic-sort-groups
(defvar gnus-netrc-syntax-table
(let ((table (copy-syntax-table text-mode-syntax-table)))
+ (modify-syntax-entry ?@ "w" table)
(modify-syntax-entry ?- "w" table)
(modify-syntax-entry ?_ "w" table)
(modify-syntax-entry ?! "w" table)
(error "Not a symbol: %s" alist))
`(setq ,alist (delq (assq ,key ,alist) ,alist)))
+(defun gnus-globalify-regexp (re)
+ "Returns a regexp that matches a whole line, iff RE matches a part of it."
+ (concat (unless (string-match "^\\^" re) "^.*")
+ re
+ (unless (string-match "\\$$" re) ".*$")))
+
(provide 'gnus-util)
;;; gnus-util.el ends here
(defun gnus-uu-reginize-string (string)
;; Takes a string and puts a \ in front of every special character;
- ;; ignores any leading "version numbers" thingies that they use in
- ;; the comp.binaries groups, and either replaces anything that looks
- ;; like "2/3" with "[0-9]+/[0-9]+" or, if it can't find something
- ;; like that, replaces the last two numbers with "[0-9]+". This, in
- ;; my experience, should get most postings of a series.
- (let ((count 2)
- (vernum "v[0-9]+[a-z][0-9]+:")
- beg)
+ ;; replaces the last thing that looks like "2/3" with "[0-9]+/[0-9]+"
+ ;; or, if it can't find something like that, tries "2 of 3", then
+ ;; finally just replaces the last two numbers with "[0-9]+".
+ (let ((count 2))
(save-excursion
(set-buffer (get-buffer-create gnus-uu-output-buffer-name))
(buffer-disable-undo (current-buffer))
(erase-buffer)
(insert (regexp-quote string))
- (setq beg 1)
(setq case-fold-search nil)
- (goto-char (point-min))
- (when (looking-at vernum)
- (replace-match vernum t t)
- (setq beg (length vernum)))
- (goto-char beg)
- (if (re-search-forward "[ \t]*[0-9]+/[0-9]+" nil t)
- (replace-match " [0-9]+/[0-9]+")
+ (end-of-line)
+ (if (re-search-backward "\\([^0-9]\\)[0-9]+/[0-9]+" nil t)
+ (replace-match "\\1[0-9]+/[0-9]+")
- (goto-char beg)
- (if (re-search-forward "[0-9]+[ \t]*of[ \t]*[0-9]+" nil t)
- (replace-match "[0-9]+ of [0-9]+")
+ (end-of-line)
+ (if (re-search-backward "\\([^0-9]\\)[0-9]+[ \t]*of[ \t]*[0-9]+" nil t)
+ (replace-match "\\1[0-9]+ of [0-9]+")
(end-of-line)
(if (re-search-backward "\\([^0-9]\\)[0-9]+\\([^0-9]+\\)[0-9]+"
nil t)
(replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
- (goto-char beg)
+ (goto-char 1)
(while (re-search-forward "[ \t]+" nil t)
- (replace-match "[ \t]*" t t))
+ (replace-match "[ \t]+" t t))
(buffer-substring 1 (point-max)))))
(defun gnus-uu-part-number (article)
(let* ((header (gnus-summary-article-header article))
- (subject (and header (mail-header-subject header))))
- (if (and subject
- (string-match "[0-9]+ */[0-9]+\\|[0-9]+ * of *[0-9]+" subject))
- (match-string 0 subject)
- "")))
+ (subject (and header (mail-header-subject header)))
+ (part nil))
+ (if subject
+ (while (string-match "[0-9]+/[0-9]+\\|[0-9]+[ \t]+of[ \t]+[0-9]+"
+ subject)
+ (setq part (match-string 0 subject))
+ (setq subject (substring subject (match-end 0)))))
+ (or part
+ (while (string-match "\\([0-9]+\\)[^0-9]+\\([0-9]+\\)" subject)
+ (setq part (match-string 0 subject))
+ (setq subject (substring subject (match-end 0)))))
+ (or part "")))
(defun gnus-uu-uudecode-sentinel (process event)
(delete-process (get-process process)))
(defconst gnus-product-name "Shoe-gnus"
"Product name of this version of gnus.")
-(defconst gnus-version-number "6.8.2"
+(defconst gnus-version-number "6.8.3"
"Version number for this version of gnus.")
(defconst gnus-version
- (format "%s %s (based on Gnus 5.6.24; for SEMI 1.8, FLIM 1.8/1.9)"
+ (format "%s %s (based on Gnus 5.6.27; for SEMI 1.8, FLIM 1.8/1.9)"
gnus-product-name gnus-version-number)
"Version string for this version of gnus.")
\"nnml+private:mail.misc\", for instance."
:group 'gnus-message
:type '(choice (const :tag "none" nil)
+ sexp
string))
(defcustom gnus-secondary-servers nil
"Return non-nil if GROUP (and ARTICLE) come from a news server."
(or (gnus-member-of-valid 'post group) ; Ordinary news group.
(and (gnus-member-of-valid 'post-mail group) ; Combined group.
- (eq (gnus-request-type group article) 'news))))
+ (if (or (null article)
+ (not (< article 0)))
+ (eq (gnus-request-type group article) 'news)
+ (if (not (vectorp article))
+ nil
+ ;; It's a real article.
+ (eq (gnus-request-type group (mail-header-id article))
+ 'news))))))
;; Returns a list of writable groups.
(defun gnus-writable-groups ()
(setq header (car elem)))
(setq header elem))
(when (or (not (re-search-forward
- (concat "^" (downcase (symbol-name header)) ":")
+ (concat "^"
+ (regexp-quote
+ (downcase
+ (if (stringp header)
+ header
+ (symbol-name header))))
+ ":")
nil t))
(progn
;; The header was found. We insert a space after the
(progn
;; This header didn't exist, so we insert it.
(goto-char (point-max))
- (insert (symbol-name header) ": " value "\n")
+ (insert (if (stringp header) header (symbol-name header))
+ ": " value "\n")
(forward-line -1))
;; The value of this header was empty, so we clear
;; totally and insert the new value.
(t nil))))
(defun nnagent-request-type (group article)
- (let ((gnus-plugged t))
- (if (not (gnus-check-backend-function
- 'request-type (car gnus-command-method)))
- 'unknown
- (funcall (gnus-get-function gnus-command-method 'request-type)
- (gnus-group-real-name group) article))))
+ (unless (stringp article)
+ (let ((gnus-plugged t))
+ (if (not (gnus-check-backend-function
+ 'request-type (car gnus-command-method)))
+ 'unknown
+ (funcall (gnus-get-function gnus-command-method 'request-type)
+ (gnus-group-real-name group) article)))))
(deffoo nnagent-request-newgroups (date server)
nil)
(nnoo-map-functions nndir
(nnml-retrieve-headers 0 nndir-current-group 0 0)
- (nnmh-request-article 0 nndir-current-group 0 0)
+ (nnml-request-article 0 nndir-current-group 0 0)
(nnmh-request-group nndir-current-group 0 0)
(nnml-close-group nndir-current-group 0)
(nnmh-request-list (nnoo-current-server 'nndir) nndir-directory)
(require 'timezone)
(require 'message)
(require 'custom)
+(require 'gnus-util)
(eval-and-compile
(autoload 'gnus-error "gnus-util")
(set-file-modes
tofile nnmail-default-file-modes))))
;; Probably a real error.
+ ;; We nix out the password in case the error
+ ;; was because of a wrong password being given.
+ (setq nnmail-internal-password nil)
(subst-char-in-region (point-min) (point-max) ?\n ?\ )
(goto-char (point-max))
(skip-chars-backward " \t")
group-assoc)))
group-assoc))
-(defvar nnmail-active-file-coding-system
- 'iso-8859-1
+(defvar nnmail-active-file-coding-system 'binary
"*Coding system for active file.")
(defun nnmail-save-active (group-assoc file-name)
(let* ((list (gnus-parse-netrc nntp-authinfo-file))
(alist (gnus-netrc-machine list nntp-address))
(force (gnus-netrc-get alist "force"))
- (user (gnus-netrc-get alist "login"))
+ (user (or (gnus-netrc-get alist "login") nntp-authinfo-user))
(passwd (gnus-netrc-get alist "password")))
(when (or (not send-if-force)
force)
- (nntp-send-command
- "^3.*\r?\n" "AUTHINFO USER"
- (or user
- nntp-authinfo-user
- (setq nntp-authinfo-user
- (read-string (format "NNTP (%s) user name: " nntp-address)))))
+ (unless user
+ (setq user (read-string (format "NNTP (%s) user name: " nntp-address))
+ nntp-authinfo-user user))
+ (unless (member user '(nil ""))
+ (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user)
+ (when t ;???Should check if AUTHINFO succeeded
(nntp-send-command
"^2.*\r?\n" "AUTHINFO PASS"
(or passwd
nntp-authinfo-password
(setq nntp-authinfo-password
- (nnmail-read-passwd (format "NNTP (%s) password: "
- nntp-address))))))))
+ (nnmail-read-passwd (format "NNTP (%s@%s) password: "
+ user nntp-address))))))))))
(defun nntp-send-nosy-authinfo ()
"Send the AUTHINFO to the nntp server."
- (nntp-send-command
- "^3.*\r?\n" "AUTHINFO USER"
- (read-string (format "NNTP (%s) user name: " nntp-address)))
- (nntp-send-command
- "^2.*\r?\n" "AUTHINFO PASS"
- (nnmail-read-passwd "NNTP (%s) password: " nntp-address)))
+ (let ((user (read-string (format "NNTP (%s) user name: " nntp-address))))
+ (unless (member user '(nil ""))
+ (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user)
+ (when t ;???Should check if AUTHINFO succeeded
+ (nntp-send-command "^2.*\r?\n" "AUTHINFO PASS"
+ (nnmail-read-passwd "NNTP (%s@%s) password: "
+ user nntp-address))))))
(defun nntp-send-authinfo-from-file ()
"Send the AUTHINFO to the nntp server.
(deffoo nnvirtual-request-type (group &optional article)
(if (not article)
'unknown
- (let ((mart (nnvirtual-map-article article)))
- (when mart
- (gnus-request-type (car mart) (cdr mart))))))
+ (if (numberp article)
+ (let ((mart (nnvirtual-map-article article)))
+ (if mart
+ (gnus-request-type (car mart) (cdr mart))))
+ (let ((method (gnus-find-method-for-group
+ nnvirtual-last-accessed-component-group)))
+ (gnus-request-type
+ nnvirtual-last-accessed-component-group nil)))))
(deffoo nnvirtual-request-update-mark (group article mark)
(let* ((nart (nnvirtual-map-article article))
:info
cd ..\texi
-call %1\bin\emacs.bat -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -fsave-buffer
-call %1\bin\emacs.bat -batch -q -no-site-file message.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -fsave-buffer
+call %1\bin\emacs.bat -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
+call %1\bin\emacs.bat -batch -q -no-site-file message.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
if not "%2" == "copy" goto done
copy gnus %1\info
copy gnus-?? %1\info
goto end
:usage
-echo Usage: install ^<emacs-dir^> [copy]
+echo Usage: make ^<emacs-dir^> [copy]
echo.
echo where: ^<emacs-dir^> is the directory you installed emacs in
echo eg. d:\emacs\19.34
+1998-07-21 17:51 Simon Josefsson <jas@pdc.kth.se>
+
+ * gnus.texi (Splitting Mail): junk is fancy splitting only
+
+ * gnus.texi (Fancy Mail Splitting): warn about junk
+
+1998-07-27 02:28:33 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Topic Commands): Fix.
+
+1998-07-27 02:23:17 Robert Bihlmeyer <robbe@orcus.priv.at>
+
+ * gnus.texi (Score Decays): Fix.
+
+Sun Jul 12 04:03:27 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Home Score File): Addition.
+
Fri Jul 10 04:26:23 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.texi (NNTP): Addition.
Copy all groups that match some regular expression to a topic
(@code{gnus-topic-copy-matching}).
-@item T h
-@kindex T h (Topic)
+@item T H
+@kindex T H (Topic)
@findex gnus-topic-toggle-display-empty-topics
Toggle hiding empty topics
(@code{gnus-topic-toggle-display-empty-topics}).
("list.\\1" "From:.*\\(.*\\)-list@@majordomo.com")
@end lisp
-If the first element is the special symbol @code{junk}, then messages
-that match the regexp will disappear into the aether. Use with
-extreme caution.
-
The second element can also be a function. In that case, it will be
called narrowed to the headers with the first element of the rule as the
argument. It should return a non-@code{nil} value if it thinks that the
@item
@code{junk}: If the split is the symbol @code{junk}, then don't save
-this message.
+this message. Use with extreme caution.
@item
@var{(: function arg1 arg2 ...)}: If the split is a list, and the first
@subsection Virtual Groups
@cindex nnvirtual
@cindex virtual groups
+@cindex merging groups
An @dfn{nnvirtual group} is really nothing more than a collection of
other groups.
If you want to use @file{gnu.SCORE} for all @samp{gnu} groups and
@file{rec.SCORE} for all @samp{rec} groups (and so on), you can say:
+@findex gnus-hierarchial-home-score-file
@lisp
(setq gnus-home-score-file
'gnus-hierarchial-home-score-file)
@end lisp
This is a ready-made function provided for your convenience.
+Other functions include
+
+@table @code
+@item gnus-current-home-score-file
+@findex gnus-current-home-score-file
+Return the ``current'' regular score file. This will make scoring
+commands add entry to the ``innermost'' matching score file.
+
+@end table
If you want to have one score file for the @samp{emacs} groups and
another for the @samp{comp} groups, while letting all other groups use
@vindex gnus-decay-scores
@findex gnus-decay-score
-@vindex gnus-score-decay-function
+@vindex gnus-decay-score-function
Gnus provides a mechanism for decaying scores to help with this problem.
When score files are loaded and @code{gnus-decay-scores} is
non-@code{nil}, Gnus will run the score files through the decaying
mechanism thereby lowering the scores of all non-permanent score rules.
-The decay itself if performed by the @code{gnus-score-decay-function}
+The decay itself if performed by the @code{gnus-decay-score-function}
function, which is @code{gnus-decay-score} by default. Here's the
definition of that function:
January 25th 1997 (after 84 releases) as ``Gnus 5.4'' (67 releases).
On September 13th 1997, Quassia Gnus was started and lasted 37
-releases. If was released as ``Gnus 5.6.24' on March 8th 1998.
+releases. If was released as ``Gnus 5.6.27' on March 8th 1998.
If you happen upon a version of Gnus that has a prefixed name --
``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' --
* 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.24.
+* Quassia Gnus:: Two times two is four, or Gnus 5.6.27.
@end menu
These lists are, of course, just @emph{short} overviews of the
@node Quassia Gnus
@subsubsection Quassia Gnus
-New features in Gnus 5.6.24:
+New features in Gnus 5.6.27:
@itemize @bullet
gnus-posting-styles doesn't work in drafts.
@item
+gnus-summary-limit-include-cached is slow when there are
+many articles in the cache, since it regenerates big parts of the
+summary buffer for each article.
+
+@item
Solve the halting problem.
@c TODO
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 5.6.24 Manual
+@settitle Message 5.6.27 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 5.6.24 Manual
+@title Message 5.6.27 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 5.6.24. Message is distributed with
+This manual corresponds to Message 5.6.27. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.