-Tue Aug 8 12:39:28 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+Sat Aug 12 15:09:20 1995 Lars Magne Ingebrigtsen <lingebri@sunsci4.cern.ch>
+
+ * nnml.el (nnml-request-create-group): Would create new groups
+ with 0 0 instead of 1 0.
+
+ * gnus.el (gnus-newsgroup-saveable-name): New function.
+ (gnus-score-file-name): Use it.
+ (gnus-remove-some-windows): Would leave more space for the windows
+ above.
+
+ * gnus-msg.el (gnus-debug): Don't quote nil and t.
+
+ * gnus.el (gnus-groups-to-gnus-format): Might lead to possible
+ bugouts.
+ (gnus-activate-foreign-newsgroups): Changed default to 5 from nil.
+
+ * gnus-score.el (gnus-score-body): "all" didn't work.
+
+ * gnus-uu.el (gnus-uu-save-files): Would bug out on non-existing
+ files.
+
+ * gnus.el (gnus-active-to-gnus-format): Didn't always set
+ group-sym to nil.
+
+ * gnus-vis.el (gnus-summary-make-menu-bar): Merge the two score
+ menus.
+
+ * nndoc.el (nndoc-type-to-regexp): Be more lenient in article end
+ markers for digests. *Sigh*.
+
+ * gnus.el (gnus-group-first-unread-group): Don't move if there is
+ no urnead groups.
+
+Sat Aug 12 12:20:22 1995 Lars Magne Ingebrigtsen <lingebri@sunsci7.cern.ch>
+
+ * gnus.el (gnus-group-list-all-groups): Ignored the prefix arg.
+
+ * gnus-score.el (gnus-score-string): Would loop forever on
+ possibly-empty regexps.
+
+ * gnus-uu.el (gnus-uu-choose-action): Bind case-fold-search to t.
+
+ * gnus.el (gnus-summary-first-unread-article): Would not work with
+ hidden threads.
+ (gnus-setup-news): Update format specs here.
+ (gnus-find-new-newsgroups): Really do ignore illegal groups.
+ (gnus-group-kill-all-zombies): List groups at the right level.
+
+ * nnbabyl.el (nnbabyl-read-mbox): Ensure forward progress.
+
+ * gnus.el (gnus-summary-sort-by-author): Preserve subject order.
+ (gnus-summary-sort-by-subject): Preserve author order.
+
+Sat Aug 12 11:38:32 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * nneething.el (nneething-get-head): Don't use file-regular-p.
+
+ * nndoc.el (nndoc-set-header-dependent-regexps): Don't use
+ buffer-substring-no-props.
+
+ * gnus-msg.el (gnus-inews-article): Unquoted hook.
+
+Fri Aug 11 11:11:26 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * gnus.el (gnus-summary-remove-lines-marked-as-read): Remove
+ canceled articles as well.
+ (gnus-group-first-unread-group): Would bug out on un-activated
+ groups.
+
+ * nnmbox.el (nnmbox-get-new-mail): Did not delete incomings.
+
+Thu Aug 10 12:15:34 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * nnkiboze.el (nnkiboze-enter-nov): Insert Xref: instead of Xref.
+
+Wed Aug 9 11:56:18 1995 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * custom.el (custom-field-accept): Protect call with a
+ `inhibit-point-motion-hooks' around it.
+
+Wed Aug 9 13:57:55 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * gnus.el (gnus-read-active-file): Did not like virtual servers in
+ secondary select methods.
+ (gnus-secondary-method-p): More correct implementation.
+
+Tue Aug 8 16:44:41 1995 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * custom.el: Put initial defvars in an `eval-when-compile'.
+ The `help' menu was renamed to `help-menu'. Adjust code.
+
+Tue Aug 8 14:49:30 1995 Lars Magne Ingebrigtsen <lingebri@sunscipw.cern.ch>
+
+ * gnus.el (gnus-summary-mark-unread-as-read): Mark read-marked
+ articles as read. Yup.
+
+ * gnus-vis.el (gnus-button-url): Change default to use w3-fetch
+ when no window system.
+
+ * gnus.el (gnus-gnus-to-quick-newsrc-format): Add the gnus version
+ to the .newsrc.eld file.
+
+ * gnus-msg.el (gnus-inews-insert-headers): Don't delete original
+ sender, just change it to "Original-Sender".
+
+Tue Aug 8 12:39:28 1995 Lars Magne Ingebrigtsen <lingebri@sunsci4.cern.ch>
+
+ * gnus.el: 0.99.9 is released.
* gnus.el (gnus-group-unsubscribe-group): Wouldn't let you sub to
groups not in active.
(and (symbolp x) (assq x global-face-data)))
t)))
-(defvar x-colors nil)
-(defvar custom-button-face nil)
-(defvar custom-modified-list nil)
-(defvar custom-field-uninitialized-face nil)
-(defvar custom-field-invalid-face nil)
-(defvar custom-field-modified-face nil)
-(defvar custom-field-face nil)
-(defvar custom-button-properties nil)
-(defvar custom-documentation-properties nil)
-(defvar custom-mouse-face nil)
-(defvar custom-field-active-face nil)
+(eval-when-compile
+ (defvar x-colors nil)
+ (defvar custom-button-face nil)
+ (defvar custom-modified-list nil)
+ (defvar custom-field-uninitialized-face nil)
+ (defvar custom-field-invalid-face nil)
+ (defvar custom-field-modified-face nil)
+ (defvar custom-field-face nil)
+ (defvar custom-button-properties nil)
+ (defvar custom-documentation-properties nil)
+ (defvar custom-mouse-face nil)
+ (defvar custom-field-active-face nil))
(or (and (fboundp 'modify-face) (not (featurep 'face-lock)))
;; Introduced in Emacs 19.29. Incompatible definition also introduced
;; Put it in the Help menu, if possible.
(condition-case nil
;; This will not work under XEmacs.
- (global-set-key [ menu-bar help customize ] '("Customize..." . customize))
+ (global-set-key [ menu-bar help-menu customize ]
+ '("Customize..." . customize))
(error nil))
;;; External Data:
(defun custom-field-accept (field value &optional original)
"Accept FIELD VALUE.
If optional ORIGINAL is non-nil, concider VALUE for the original value."
- (funcall (custom-property (custom-field-custom field) 'accept)
- field value original))
+ (let ((inhibit-point-motion-hooks t))
+ (funcall (custom-property (custom-field-custom field) 'accept)
+ field value original)))
(defun custom-field-face (field)
"The face used for highlighting FIELD."
'gnus-score-custom-set
'gnus-score-custom-get))
(make-local-variable 'gnus-score-custom-file)
- (setq gnus-score-custom-file "SCORE")
+ (setq gnus-score-custom-file (expand-file-name "SCORE" "~/News"))
(make-local-variable 'gnus-score-alist)
(setq gnus-score-alist nil)
(custom-reset-all))
(defalias 'gnus-overlay-put 'overlay-put)
(defalias 'gnus-move-overlay 'move-overlay)
+;; Don't warn about these undefined variables.
+ ;defined in gnus.el
+(defvar gnus-active-hashtb)
+(defvar gnus-article-buffer)
+(defvar gnus-auto-center-summary)
+(defvar gnus-buffer-list)
+(defvar gnus-current-headers)
+(defvar gnus-level-killed)
+(defvar gnus-level-zombie)
+(defvar gnus-newsgroup-bookmarks)
+(defvar gnus-newsgroup-dependencies)
+(defvar gnus-newsgroup-headers-hashtb-by-number)
+(defvar gnus-newsgroup-selected-overlay)
+(defvar gnus-newsrc-hashtb)
+(defvar gnus-read-mark)
+(defvar gnus-refer-article-method)
+(defvar gnus-reffed-article-number)
+(defvar gnus-unread-mark)
+(defvar gnus-version)
+(defvar gnus-view-pseudos)
+(defvar gnus-view-pseudos-separately)
+(defvar gnus-visual)
+(defvar gnus-zombie-list)
+ ;defined in gnus-msg.el
+(defvar gnus-article-copy)
+(defvar gnus-check-before-posting)
+ ;defined in gnus-vis.el
+(defvar gnus-article-button-face)
+(defvar gnus-article-mouse-face)
+(defvar gnus-summary-selected-face)
+
+
;; We do not byte-compile this file, because error messages are such a
;; bore.
(provide 'gnus-ems)
;; Local Variables:
-;; byte-compile-warnings: nil
+;; byte-compile-warnings: '(redefine callargs)
;; End:
;;; gnus-ems.el ends here
(match-beginning 0)))
(gnus-inews-remove-headers)
(gnus-inews-insert-headers)
- (run-hooks gnus-inews-article-header-hook)
+ (run-hooks 'gnus-inews-article-header-hook)
(widen))
;; Check whether the article is a good Net Citizen.
(if (and gnus-article-check-size
(progn
(goto-char (point-min))
(and (re-search-forward "^Sender:" nil t)
- (delete-region (progn (beginning-of-line) (point))
- (progn (forward-line 1) (point))))
+ (progn
+ (beginning-of-line)
+ (insert "Original-")
+ (beginning-of-line)))
(insert "Sender: " (gnus-inews-real-user-address) "\n"))))))
The source file has to be in the Emacs load path."
(interactive)
(let ((files '("gnus.el" "gnus-msg.el" "gnus-score.el"))
- file dirs expr olist)
+ file dirs expr olist sym)
(message "Please wait while we snoop your variables...")
(sit-for 0)
(save-excursion
(while olist
(if (boundp (car olist))
(insert "(setq " (symbol-name (car olist))
- (if (or (consp (symbol-value (car olist)))
- (symbolp (symbol-value (car olist))))
+ (if (or (consp (setq sym (symbol-value (car olist))))
+ (and (symbolp sym)
+ (not (or (eq sym nil)
+ (eq sym t)))))
" '" " ")
(prin1-to-string (symbol-value (car olist))) ")\n")
(insert ";; (makeunbound '" (symbol-name (car olist)) ")\n"))
entries alist ofunc article)
;; Not all backends support partial fetching. In that case,
;; we just fetch the entire article.
- (or (gnus-check-backend-function request-func gnus-newsgroup-name)
+ (or (gnus-check-backend-function
+ (and (string-match "^gnus-" (symbol-name request-func))
+ (intern (substring (symbol-name request-func)
+ (match-end 0))))
+ gnus-newsgroup-name)
(progn
(setq ofunc request-func)
(setq request-func 'gnus-request-article)))
(setcdr art (+ score (cdr art)))))))
(forward-line 1))
(and (string= match "") (setq match "\n"))
- (while (funcall search-func match nil t)
+ (while (and (not (eobp))
+ (funcall search-func match nil t))
(goto-char (match-beginning 0))
(end-of-line)
(setq found (setq arts (get-text-property (point) 'articles)))
(defconst gnus-uu-output-buffer-name " *Gnus UU Output*")
-(defconst gnus-uu-highest-article-number 1)
(defvar gnus-uu-default-dir default-directory)
;; Keymaps
;; Internal functions.
(defun gnus-uu-decode-with-method (method n &optional save not-insert scan)
- (gnus-uu-initialize)
+ (gnus-uu-initialize scan)
(if save (setq gnus-uu-default-dir save))
(let ((articles (gnus-uu-get-list-of-articles n))
files)
(let ((len (length files))
to-file file)
(while files
- (setq file (cdr (assq 'name (car files))))
- (and (file-exists-p file)
- (progn
- (setq to-file (if (file-directory-p dir)
- (concat dir (file-name-nondirectory file))
- dir))
- (and (or (not (file-exists-p to-file))
- (gnus-y-or-n-p (format "%s exists; overwrite? "
- to-file)))
- (copy-file file to-file t t))))
+ (and
+ (setq file (cdr (assq 'name (car files))))
+ (file-exists-p file)
+ (progn
+ (setq to-file (if (file-directory-p dir)
+ (concat dir (file-name-nondirectory file))
+ dir))
+ (and (or (not (file-exists-p to-file))
+ (gnus-y-or-n-p (format "%s exists; overwrite? "
+ to-file)))
+ (copy-file file to-file t t))))
(setq files (cdr files)))
(message "Saved %d file%s" len (if (> len 1) "s" ""))))
(setq articles (cdr articles))
(setq gnus-uu-has-been-grabbed (cons article gnus-uu-has-been-grabbed))
- (if (> article gnus-uu-highest-article-number)
- (setq gnus-uu-highest-article-number article))
-
(if (eq articles ())
(if (eq state 'first)
(setq state 'first-and-last)
;; found, or the name of the command to run if such a rule is found.
(defun gnus-uu-choose-action (file-name file-action-list &optional no-ignore)
(let ((action-list (copy-sequence file-action-list))
+ (case-fold-search t)
rule action)
(and
(or no-ignore
(defvar gnus-uu-tmp-alist nil)
-(defun gnus-uu-initialize ()
+(defun gnus-uu-initialize (&optional scan)
(let (entry)
- (if (if (setq entry (assoc gnus-newsgroup-name gnus-uu-tmp-alist))
- (if (file-exists-p (cdr entry))
- (setq gnus-uu-work-dir (cdr entry))
- (setq gnus-uu-tmp-alist (delq entry gnus-uu-tmp-alist))
- nil))
+ (if (and (not scan)
+ (if (setq entry (assoc gnus-newsgroup-name gnus-uu-tmp-alist))
+ (if (file-exists-p (cdr entry))
+ (setq gnus-uu-work-dir (cdr entry))
+ (setq gnus-uu-tmp-alist (delq entry gnus-uu-tmp-alist))
+ nil)))
t
- (setq gnus-uu-highest-article-number 1)
(setq gnus-uu-tmp-dir (file-name-as-directory
(expand-file-name gnus-uu-tmp-dir)))
(if (not (file-directory-p gnus-uu-tmp-dir))
CALLBACK can also be a variable, in that case the value of that
variable it the real callback function.")
-(defvar gnus-button-url 'gnus-netscape-open-url
+(defvar gnus-button-url
+ (if window-system 'gnus-netscape-open-url
+ (and (fboundp 'w3-fetch) 'w3-fetch))
"Function to fetch URL.
The function will be called with one argument, the URL to fetch.
Useful values of this function are:
""
'("Misc"
["Send a bug report" gnus-bug t]
+ ["Customize score file" gnus-score-customize t]
["Check for new news" gnus-group-get-new-news t]
["Delete bogus groups" gnus-group-check-bogus-groups t]
["Find new newsgroups" gnus-find-new-newsgroups t]
(gnus-visual-score-map 'lower)
'(["Current score" gnus-summary-current-score t]
["Set score" gnus-summary-set-score t]
- ("Score file"
- ["Customize score file" gnus-score-customize t]
- ["Switch current score file" gnus-score-change-score-file t]
- ["Set mark below" gnus-score-set-mark-below t]
- ["Set expunge below" gnus-score-set-expunge-below t]
- ["Edit current score file" gnus-score-edit-alist t]
- ["Edit score file" gnus-score-edit-file t]
- ["Trace score" gnus-score-find-trace t])
+ ["Customize score file" gnus-score-customize t]
+ ["Switch current score file" gnus-score-change-score-file t]
+ ["Set mark below" gnus-score-set-mark-below t]
+ ["Set expunge below" gnus-score-set-expunge-below t]
+ ["Edit current score file" gnus-score-edit-alist t]
+ ["Edit score file" gnus-score-edit-file t]
+ ["Trace score" gnus-score-find-trace t]
))))
)))
(defvar gnus-level-default-unsubscribed 6
"*New unsubscribed groups will be unsubscribed at this level.")
-(defvar gnus-activate-foreign-newsgroups nil
+(defvar gnus-activate-foreign-newsgroups 4
"*If nil, Gnus will not check foreign newsgroups at startup.
If it is non-nil, it should be a number between one and nine. Foreign
newsgroups that have a level lower or equal to this number will be
(defconst gnus-maintainer "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
"The mail address of the Gnus maintainers.")
-(defconst gnus-version "(ding) Gnus v0.99.9"
+(defconst gnus-version "(ding) Gnus v0.99.10"
"Version number for this version of Gnus.")
(defvar gnus-info-nodes
(defun gnus-newsgroup-directory-form (newsgroup)
"Make hierarchical directory name from NEWSGROUP name."
- (let ((newsgroup (substring newsgroup 0)) ;Copy string.
+ (let ((newsgroup (gnus-newsgroup-saveable-name newsgroup))
(len (length newsgroup))
idx)
;; If this is a foreign group, we don't want to translate the
(setq idx (1+ idx)))
newsgroup))
+(defun gnus-newsgroup-saveable-name (group)
+ (gnus-replace-chars-in-string group ?/ ?.))
+
(defun gnus-make-directory (dir)
"Make DIRECTORY recursively."
(let* ((dir (expand-file-name dir default-directory))
(defun gnus-remove-some-windows ()
(let ((buffers gnus-window-to-buffer)
- (first t)
- buf)
+ (lowest (frame-height))
+ buf bufs lowest-buf)
(save-excursion
;; Remove windows on all known Gnus buffers.
(while buffers
(and buf
(get-buffer-window buf)
(progn
- (if first
+ (setq bufs (cons buf bufs))
+ (pop-to-buffer buf)
+ (if (< (nth 1 (window-edges)) lowest)
(progn
- (pop-to-buffer buf)
- (switch-to-buffer nntp-server-buffer)
- (setq first nil))
- (delete-window (get-buffer-window buf)))))
+ (setq lowest (nth 1 (window-edges)))
+ (setq lowest-buf buf)))))
(setq buffers (cdr buffers)))
;; Remove windows on *all* summary buffers.
(let (wins)
(lambda (win)
(let ((buf (window-buffer win)))
(if (string-match "^\\*Summary" (buffer-name buf))
- (if first
- (progn
- (select-window win)
- (switch-to-buffer nntp-server-buffer)
- (setq first nil))
- (setq wins (cons win wins)))))))
- (while wins
- (delete-window (car wins))
- (setq wins (cdr wins)))))))
-
+ (progn
+ (setq bufs (cons buf bufs))
+ (pop-to-buffer buf)
+ (if (< (nth 1 (window-edges)) lowest)
+ (progn
+ (setq lowest-buf buf)
+ (setq lowest (nth 1 (window-edges)))))))))))
+ (and lowest-buf
+ (progn
+ (pop-to-buffer lowest-buf)
+ (switch-to-buffer nntp-server-buffer)))
+ (while bufs
+ (and (not (eq (car bufs) lowest-buf))
+ (delete-windows-on (car bufs)))
+ (setq bufs (cdr bufs))))))
(defun gnus-version ()
"Version numbers of this version of Gnus."
(gnus-group-startup-message)
(sit-for 0))))
(gnus-setup-news nil level)
- (gnus-update-format-specifications)
(gnus-group-list-groups level)
(gnus-configure-windows 'group))))))
(defun gnus-group-first-unread-group ()
"Go to the first group with unread articles."
(interactive)
- (goto-char (point-min))
- (or (not (zerop (or (get-text-property (point) 'gnus-unread) 0)))
- (gnus-group-next-unread-group 1))
- (gnus-group-position-cursor))
+ (prog1
+ (let ((opoint (point))
+ unread)
+ (goto-char (point-min))
+ (if (or (eq (setq unread (gnus-group-group-unread)) t) ; Not active.
+ (not (zerop unread)) ; Has unread articles.
+ (zerop (gnus-group-next-unread-group 1))) ; Next unread group.
+ (point) ; Success.
+ (goto-char opoint)
+ nil)) ; Not success.
+ (gnus-group-position-cursor)))
(defun gnus-group-enter-server-mode ()
"Jump to the server buffer."
(interactive)
(setq gnus-killed-list (nconc gnus-zombie-list gnus-killed-list))
(setq gnus-zombie-list nil)
- (funcall gnus-group-prepare-function gnus-level-subscribed nil nil)
- (goto-char (point-min))
- (gnus-group-position-cursor))
+ (gnus-group-list-groups))
(defun gnus-group-kill-region (begin end)
"Kill newsgroups in current region (excluding current point).
Default is gnus-level-unsubscribed, which lists all subscribed and most
unsubscribed groups."
(interactive "P")
- (setq arg (or arg gnus-level-unsubscribed))
- (gnus-group-list-groups gnus-level-unsubscribed t))
+ (gnus-group-list-groups (or arg gnus-level-unsubscribed) t))
(defun gnus-group-list-killed ()
"List all killed newsgroups in the group buffer."
(define-key gnus-summary-wash-map "\C-t" 'gnus-article-date-local)
(define-key gnus-summary-wash-map "T" 'gnus-article-date-lapsed)
- (define-key gnus-summary-wash-map "l" 'gnus-summary-stop-page-breaking)
+ (define-key gnus-summary-wash-map "L" 'gnus-summary-stop-page-breaking)
(define-key gnus-summary-wash-map "r" 'gnus-summary-caesar-message)
(define-key gnus-summary-wash-map "G" 'gnus-summary-toggle-header)
(define-key gnus-summary-wash-map "m" 'gnus-summary-toggle-mime)
;; through the dependecies in the hash table and finds all the
;; roots. Roots do not refer back to any valid articles.
(let (roots new-roots)
- (and gnus-fetch-old-headers (eq gnus-headers-retrieved-by 'nov)
+ (and gnus-fetch-old-headers
+ (eq gnus-headers-retrieved-by 'nov)
(gnus-build-old-threads))
(mapatoms
(lambda (refs)
(let ((default (or gnus-summary-default-score 0))
(below gnus-summary-expunge-below)
roots article new-roots)
- (and gnus-fetch-old-headers (eq gnus-headers-retrieved-by 'nov)
+ (and gnus-fetch-old-headers
+ (eq gnus-headers-retrieved-by 'nov)
(gnus-build-old-threads))
(mapatoms
(lambda (refs)
(gnus-set-global-variables)
(prog1
(if (gnus-summary-first-subject t)
- (gnus-summary-display-article (gnus-summary-article-number)))
+ (progn
+ (gnus-summary-show-thread)
+ (gnus-summary-first-subject t)
+ (gnus-summary-display-article (gnus-summary-article-number))))
(gnus-summary-position-cursor)))
(defun gnus-summary-best-unread-article ()
(defun gnus-summary-mark-unread-as-read ()
"Intended to be used by `gnus-summary-mark-article-hook'."
- (and (memq gnus-current-article gnus-newsgroup-unreads)
- (or (memq gnus-current-article gnus-newsgroup-marked)
- (memq gnus-current-article gnus-newsgroup-dormant)
- (memq gnus-current-article gnus-newsgroup-expirable)
- (gnus-summary-mark-article gnus-current-article gnus-read-mark))))
+ (or (memq gnus-current-article gnus-newsgroup-marked)
+ (memq gnus-current-article gnus-newsgroup-dormant)
+ (memq gnus-current-article gnus-newsgroup-expirable)
+ (gnus-summary-mark-article gnus-current-article gnus-read-mark)))
(defun gnus-summary-mark-region-as-read (point mark all)
"Mark all unread articles between point and mark as read.
'(gnus-del-mark gnus-read-mark gnus-ancient-mark
gnus-killed-mark gnus-kill-file-mark
gnus-low-score-mark gnus-expirable-mark
- gnus-canceled-mark)
+ gnus-canceled-mark gnus-catchup-mark)
""))))
(defalias 'gnus-summary-delete-marked-with
(gnus-summary-sort
(cons
(lambda ()
- (let ((extract (funcall
- gnus-extract-address-components
- (header-from (gnus-get-header-by-num
- (gnus-summary-article-number))))))
- (or (car extract) (cdr extract))))
+ (let* ((header (gnus-get-header-by-num (gnus-summary-article-number)))
+ (extract (funcall
+ gnus-extract-address-components
+ (header-from header))))
+ (concat (or (car extract) (cdr extract))
+ "\r" (header-subject header))))
'gnus-thread-sort-by-author)
reverse))
(gnus-summary-sort
(cons
(lambda ()
- (downcase (gnus-simplify-subject (gnus-summary-subject-string))))
+ (let* ((header (gnus-get-header-by-num (gnus-summary-article-number)))
+ (extract (funcall
+ gnus-extract-address-components
+ (header-from header))))
+ (concat
+ (downcase (gnus-simplify-subject (gnus-summary-subject-string)))
+ "\r" (or (car extract) (cdr extract)))))
'gnus-thread-sort-by-subject)
reverse))
(call-interactively func)
(set-buffer obuf)
(set-window-configuration owin)
- (set-window-start (get-buffer-window (current-buffer)) (point))))
+ (set-window-point (get-buffer-window (current-buffer)) (point))))
(defun gnus-article-summary-command-nosave ()
"Execute the last keystroke in the summary buffer."
(or gnus-kill-files-directory "~/News")))
((gnus-use-long-file-name 'not-kill)
;; Append ".KILL" to newsgroup name.
- (expand-file-name (concat newsgroup "." gnus-kill-file-name)
+ (expand-file-name (concat (gnus-newsgroup-saveable-name newsgroup)
+ "." gnus-kill-file-name)
(or gnus-kill-files-directory "~/News")))
(t
;; Place "KILL" under the hierarchical directory.
(format "%s" (car (gnus-find-method-for-group group)))
gnus-valid-select-methods)))
-(defsubst gnus-secondary-method-p (method)
- (member method gnus-secondary-select-methods))
+(defun gnus-secondary-method-p (method)
+ (let ((methods gnus-secondary-select-methods)
+ (gmethod (gnus-server-get-method nil method)))
+ (while (and methods
+ (not (equal (gnus-server-get-method nil (car methods))
+ gmethod)))
+ (setq methods (cdr methods)))
+ methods))
(defun gnus-find-method-for-group (group &optional info)
(or gnus-override-method
;; Possibly eval the dribble file.
(and init gnus-use-dribble-file (gnus-dribble-eval-file))
+ (gnus-update-format-specifications)
+
;; Find the number of unread articles in each non-dead group.
(let ((gnus-read-active-file (and (not level) gnus-read-active-file)))
(gnus-get-unread-articles (or level (1+ gnus-level-subscribed))))
(mapatoms
(lambda (sym)
(if (or (null (setq group (symbol-name sym)))
+ (null (symbol-value sym))
(gnus-gethash group gnus-killed-hashtb)
(gnus-gethash group gnus-newsrc-hashtb))
()
(let ((do-sub (gnus-matches-options-n group)))
- (cond ((eq do-sub 'subscribe)
- (setq groups (1+ groups))
- (gnus-sethash group group gnus-killed-hashtb)
- (funcall
- gnus-subscribe-options-newsgroup-method group))
- ((eq do-sub 'ignore)
- nil)
- (t
- (setq groups (1+ groups))
- (gnus-sethash group group gnus-killed-hashtb)
- (if gnus-subscribe-hierarchical-interactive
- (setq new-newsgroups (cons group new-newsgroups))
- (funcall gnus-subscribe-newsgroup-method group)))))))
+ (cond
+ ((eq do-sub 'subscribe)
+ (setq groups (1+ groups))
+ (gnus-sethash group group gnus-killed-hashtb)
+ (funcall gnus-subscribe-options-newsgroup-method group))
+ ((eq do-sub 'ignore)
+ nil)
+ (t
+ (setq groups (1+ groups))
+ (gnus-sethash group group gnus-killed-hashtb)
+ (if gnus-subscribe-hierarchical-interactive
+ (setq new-newsgroups (cons group new-newsgroups))
+ (funcall gnus-subscribe-newsgroup-method group)))))))
gnus-active-hashtb)
(if new-newsgroups
(gnus-subscribe-hierarchical-interactive new-newsgroups))
gnus-secondary-select-methods)))
(groups 0)
(new-date (current-time-string))
- hashtb group new-newsgroups got-new)
+ hashtb group new-newsgroups got-new method)
;; Go thorugh both primary and secondary select methods and
;; request new newsgroups.
(while methods
- (and (or (gnus-server-opened (car methods))
- (gnus-open-server (car methods)))
- (gnus-request-newgroups date (car methods))
+ (setq method (gnus-server-get-method nil (car methods)))
+ (and (or (gnus-server-opened method)
+ (gnus-open-server method))
+ (gnus-request-newgroups date method)
(save-excursion
(setq got-new t)
(set-buffer nntp-server-buffer)
(or hashtb (setq hashtb (gnus-make-hashtable
(count-lines (point-min) (point-max)))))
;; Enter all the new groups in a hashtable.
- (gnus-active-to-gnus-format (car methods) hashtb 'ignore)))
+ (gnus-active-to-gnus-format method hashtb 'ignore)))
(setq methods (cdr methods)))
(and got-new (setq gnus-newsrc-last-checked-date new-date))
;; Now all new groups from all select methods are in `hashtb'.
(save-excursion
(set-buffer nntp-server-buffer)
(while methods
- (let* ((where (nth 1 (car methods)))
+ (let* ((method (gnus-server-get-method nil (car methods)))
+ (where (nth 1 method))
(mesg (format "Reading active file%s via %s..."
(if (and where (not (zerop (length where))))
(concat " from " where) "")
- (car (car methods)))))
+ (car method))))
(gnus-message 5 mesg)
- (gnus-check-news-server (car methods))
+ (gnus-check-news-server method)
(cond
((and (eq gnus-read-active-file 'some)
(gnus-check-backend-function
- 'retrieve-groups (car (car methods))))
+ 'retrieve-groups (car method)))
(let ((newsrc (cdr gnus-newsrc-alist))
+ (gmethod (gnus-server-get-method nil method))
groups)
(while newsrc
(and (gnus-server-equal
- (gnus-find-method-for-group
+ (gnus-find-method-for-group
(car (car newsrc)) (car newsrc))
- (gnus-server-get-method nil (car methods)))
- (setq groups (cons (car (car newsrc)) groups)))
+ gmethod)
+ (setq groups (cons (gnus-group-real-name
+ (car (car newsrc))) groups)))
(setq newsrc (cdr newsrc)))
- (setq list-type (gnus-retrieve-groups groups (car methods)))
+ (or (gnus-server-opened method)
+ (gnus-open-server method))
+ (setq list-type (gnus-retrieve-groups groups method))
(cond ((not list-type)
(gnus-message
1 "Cannot read partial active file from %s server."
- (car (car methods)))
+ (car method))
(ding)
(sit-for 2))
((eq list-type 'active)
- (gnus-active-to-gnus-format (car methods)))
+ (gnus-active-to-gnus-format method))
(t
- (gnus-groups-to-gnus-format (car methods))))))
+ (gnus-groups-to-gnus-format method)))))
(t
- (if (not (gnus-request-list (car methods)))
+ (if (not (gnus-request-list method))
(progn
(gnus-message 1 "Cannot read active file from %s server."
- (car (car methods)))
+ (car method))
(ding))
- (gnus-active-to-gnus-format (car methods))
+ (gnus-active-to-gnus-format method)
;; We mark this active file as read.
(setq gnus-have-read-active-file
- (cons (car methods) gnus-have-read-active-file))
- (gnus-message 5 "%sdone" mesg)))))
+ (cons method gnus-have-read-active-file))
+ (gnus-message 5 "%sdone" mesg))))
+ )
(setq methods (cdr methods))))))
;; Read an active file and place the results in `gnus-active-hashtb'.
(delete-matching-lines gnus-ignored-newsgroups)))
;; If these are groups from a foreign select method, we insert the
;; group prefix in front of the group names.
- (and method (not (eq method gnus-select-method))
+ (and method (not (gnus-server-equal
+ (gnus-server-get-method nil method)
+ (gnus-server-get-method nil gnus-select-method)))
(let ((prefix (gnus-group-prefixed-name "" method)))
(goto-char (point-min))
(while (and (not (eobp))
(if (eq (let ((obarray mod-hashtb)) (read cur)) m)
(setq gnus-moderated-list
(cons (symbol-name group) gnus-moderated-list))))
- (error nil))
+ (error
+ (set group nil)))
(widen)
(forward-line 1)))
;; And if we do not care about moderation, we use this loop,
(set group nil)))
(error
(progn
+ (set group nil)
(if ignore-errors
- (set group nil)
+ ()
(ding)
(gnus-message 3 "Warning - illegal active: %s"
(buffer-substring
;; Parse a "groups" active file.
(let ((cur (current-buffer))
(hashtb (or hashtb
- (if method
+ (if (and method gnus-active-hashtb)
gnus-active-hashtb
(setq gnus-active-hashtb
(gnus-make-hashtable
(insert ";; (ding) Gnus startup file.\n")
(insert ";; Never delete this file - touch .newsrc instead to force Gnus\n")
(insert ";; to read .newsrc.\n")
+ (insert "(setq gnus-newsrc-file-version "
+ (prin1-to-string gnus-version) ")\n")
(let ((variables gnus-variable-list)
(inhibit-quit t)
(gnus-newsrc-alist (cdr gnus-newsrc-alist))
;; select method, and return a select method.
(cond ((stringp method)
(gnus-server-to-method method))
- ((stringp (car method))
+ ((and (stringp (car method)) group)
(gnus-server-extend-method group method))
(t
(gnus-server-add-address method))))
(defun gnus-score-file-name (newsgroup &optional suffix)
"Return the name of a score file for NEWSGROUP."
(let ((suffix (or suffix gnus-score-file-suffix)))
- (cond ((or (null newsgroup)
- (string-equal newsgroup ""))
- ;; The global score file is placed at top of the directory.
- (expand-file-name
- suffix (or gnus-kill-files-directory "~/News")))
- ((gnus-use-long-file-name 'not-score)
- ;; Append ".SCORE" to newsgroup name.
- (expand-file-name (concat newsgroup "." suffix)
- (or gnus-kill-files-directory "~/News")))
- (t
- ;; Place "SCORE" under the hierarchical directory.
- (expand-file-name (concat (gnus-newsgroup-directory-form newsgroup)
- "/" suffix)
- (or gnus-kill-files-directory "~/News"))))))
+ (cond
+ ((or (null newsgroup)
+ (string-equal newsgroup ""))
+ ;; The global score file is placed at top of the directory.
+ (expand-file-name
+ suffix (or gnus-kill-files-directory "~/News")))
+ ((gnus-use-long-file-name 'not-score)
+ ;; Append ".SCORE" to newsgroup name.
+ (expand-file-name (concat (gnus-newsgroup-saveable-name newsgroup)
+ "." suffix)
+ (or gnus-kill-files-directory "~/News")))
+ (t
+ ;; Place "SCORE" under the hierarchical directory.
+ (expand-file-name (concat (gnus-newsgroup-directory-form newsgroup)
+ "/" suffix)
+ (or gnus-kill-files-directory "~/News"))))))
(defun gnus-score-search-global-directories (files)
"Scan all global score directories for score files."
(defun nnbabyl-insert-newsgroup-line (group-art)
(save-excursion
(goto-char (point-min))
- ;; If there is a C-l at the beginning of the narrowed region, this
- ;; isn't really a "save", but rather a "scan".
(while (looking-at "From ")
(replace-match "Mail-from: From " t t)
(forward-line 1))
+ ;; If there is a C-l at the beginning of the narrowed region, this
+ ;; isn't really a "save", but rather a "scan".
(goto-char (point-min))
(or (looking-at "\^L")
(save-excursion
(goto-char (point-min))
(while (re-search-forward delim nil t)
(setq start (match-beginning 0))
- (if (and
- (save-excursion (re-search-forward delim nil t))
- (not (search-forward
- "\nX-Gnus-Newsgroup: "
- (save-excursion
- (setq end (or (and (re-search-forward delim nil t)
- (match-beginning 0))
- (point-max)))) t)))
+ (if (not (search-forward
+ "\nX-Gnus-Newsgroup: "
+ (save-excursion
+ (setq end (or (and (re-search-forward delim nil t)
+ (match-beginning 0))
+ (point-max)))) t))
(progn
(goto-char end)
(save-excursion
(save-restriction
(goto-char start)
- (narrow-to-region (1+ start) end)
- (nnbabyl-save-mail))))))
+ (narrow-to-region start end)
+ (nnbabyl-save-mail)
+ (setq end (point-max))))
+ (goto-char end))))
(and (buffer-modified-p (current-buffer)) (save-buffer))
(nnmail-save-active nnbabyl-group-alist nnbabyl-active-file)))))
"\\*\\*\\* EOOH \\*\\*\\*\n\\(^.+\n\\)*")
(list 'digest
"^------------------------------*[\n \t]+"
- "^------------------------------[\n \t]+"
+ "^------------------------------*[\n \t]+"
nil "^ ?$"
"^------------------------------*[\n \t]+"
"^End of" nil))
(setq nndoc-group-alist (delq (assoc group nndoc-group-alist)
nndoc-group-alist))
(setq nndoc-current-buffer nil)
+ (setq nndoc-current-server nil)
t)
(defun nndoc-request-list (&optional server)
nil t)
(match-beginning 1))
(setq nndoc-digest-type 'rfc1341
- boundary-id (buffer-substring-no-properties
- (match-beginning 1) (match-end 1))
+ boundary-id (format "%s"
+ (buffer-substring
+ (match-beginning 1) (match-end 1)))
b-delimiter (concat "\n--" boundary-id "[\n \t]+")
nndoc-article-begin b-delimiter ; Too strict: "[ \t]*$"
nndoc-article-end (concat "\n--" boundary-id
((not (file-exists-p file))
;; The file do not exist.
nil)
- ((not (file-regular-p file))
+ ((or (file-directory-p file)
+ (file-symlink-p file))
;; It's a dir, so we fudge a head.
(nneething-make-head file) t)
(t
(defun nnkiboze-retrieve-headers (articles &optional group server)
(nnkiboze-possibly-change-newsgroups group)
- (if (or gnus-nov-is-evil)
+ (if gnus-nov-is-evil
nil
(if (stringp (car articles))
'headers
(int-to-string (or (header-chars header) 0)) "\t"
(int-to-string (or (header-lines header) 0)) "\t")
(if (or (not xref) (equal "" xref))
- (insert "Xref " (system-name) " " group ":"
+ (insert "Xref: " (system-name) " " group ":"
(int-to-string (header-number header))
"\t\n")
(insert (header-xref header) "\t\n")
(setq incoming
(nnmail-move-inbox
(car spools) (concat nnmbox-mbox-file "-Incoming")))
+ (setq incomings (cons incoming incomings))
(save-excursion
(setq group (nnmail-get-split-group (car spools) group-in))
(let ((in-buf (nnmail-split-incoming
(nnmail-activate 'nnml)
(or (assoc group nnml-group-alist)
(let (active)
- (setq nnml-group-alist (cons (list group (setq active (cons 0 0)))
+ (setq nnml-group-alist (cons (list group (setq active (cons 1 0)))
nnml-group-alist))
(nnml-possibly-create-directory group)
(nnml-possibly-change-directory group)
(if (and (or (not nnmail-keep-last-article)
(not max-article)
(not (= (car articles) max-article)))
- (not (equal mod-time '(0 0)))
(or force
- (setq is-old
- (> (nnmail-days-between
- (current-time-string)
- (current-time-string mod-time))
- days))))
+ (and (not (equal mod-time '(0 0)))
+ (setq is-old
+ (> (nnmail-days-between
+ (current-time-string)
+ (current-time-string mod-time))
+ days)))))
(progn
(and gnus-verbose-backends
(message "Deleting article %s..." article))
(setq dirs (cons dir dirs))
(setq dir (file-name-directory (directory-file-name dir))))
(while dirs
- (if (make-directory (directory-file-name (car dirs)))
- (error "Could not create directory %s" (car dirs)))
+ (make-directory (directory-file-name (car dirs)))
(and gnus-verbose-backends
(message "Creating mail directory %s" (car dirs)))
(setq dirs (cdr dirs)))))
nntp-status-string))
(substring nntp-status-string (match-beginning 1) (match-end 1))
;; Empty message if nothing.
- nntp-status-string))
+ (or nntp-status-string "")))
(defun nntp-request-article (id &optional newsgroup server buffer)
"Request article ID (message-id or number)."
@vindex nnbabyl-active-file
@vindex nnbabyl-mbox-file
-The @dfn{nnbabyl} backend will use a babyl mail box to store mail.
-@code{nnbabyl} will add extra headers to each mail article to say which
-group it belongs in.
+The @dfn{nnbabyl} backend will use a babyl mail box (aka. @dfn{rmail
+mbox}) to store mail. @code{nnbabyl} will add extra headers to each mail
+article to say which group it belongs in.
Virtual server settings:
@section Various Article Stuff
@table @kbd
-@item W l
-@kindex W l (Summary)
+@item W L
+@kindex W L (Summary)
@findex gnus-summary-stop-page-breaking
Remove page breaks from the current article
(@code{gnus-summary-stop-page-breaking}).