+1998-03-08 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+
+ * lisp/gnus.el (gnus-version-number): Update to 6.0.9.
+
+ * README.semi (How to get?): Add description of daily snapshot.
+ (How to join development): Change mailing list command address.
+
+ * Sync up with Gnus 5.6.2.
+
+1998-03-01 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+
+ * lisp/gnus-ems.el: Change variable name
+ gnus-bdf-image-file to gnus-mule-bitmap-image-file.
+
1998-02-28 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.0.8.
** Gnus changes.
-*** The Gnus alpha distribution no longer bundles Custom and Widget.
+*** The Gnus distribution no longer bundles Custom and Widget.
If your Emacs doesn't come with these libraries, fetch them from
<URL:http://www.dina.kvl.dk/~abraham/custom/>. You also then need to
add the following to the lisp/dgnushack.el file:
*** New command to translate M******** sm*rtq**t*s into proper text
-- `W d'.
+*** For easier debugging of nntp, you can set `nntp-record-commands'
+to a non-nil value.
+
+*** nntp now uses ~/.authinfo, a .netrc-like file, for controlling
+where and how to send AUTHINFO to NNTP servers.
+
+*** A command for editing group parameters from the summary buffer
+has been added.
+
+*** A history of where mails have been split is available.
+
+*** A new article date command has been added -- `article-date-iso8601'.
+
+*** Subjects can be simplified when threading by setting
+`gnus-score-thread-simplify'.
+
+*** A new function for citing in Message has been added --
+`message-cite-original-without-signature'.
+
+*** `article-strip-all-blank-lines' -- new article command.
+
+*** A new Message command to kill to the end of the article has
+been added.
+
+*** A minimum adaptive score can be specified by using the
+`gnus-adaptive-word-minimum' variable.
+
+*** The "lapsed date" article header can be kept continually
+updated by the `gnus-start-date-timer' command.
+
+*** Web listserv archives can be read with the nnlistserv backend.
+
+*** Old dejanews archives can now be read by nnweb.
+
+++ /dev/null
-EMACS=emacs
-XEMACS=xemacs
-
-all: lick info
-
-lick:
- cd lisp; $(MAKE) EMACS=$(EMACS) all
-
-# Rule for Lars and nobody else.
-some:
- cd lisp; $(MAKE) EMACS=$(EMACS) some
-l:
- cd lisp; $(MAKE) EMACS=$(EMACS) clever
-
-info:
- cd texi; $(MAKE) EMACS=$(EMACS) all
-
-clean:
- rm -f */*.orig */*.rej *.orig *.rej
-
-xsome:
- cd lisp; $(MAKE) EMACS=$(XEMACS) some
-
-elclean:
- rm lisp/*.elc
-
-x:
- make EMACS=xemacs
-
-distclean:
- make clean
- rm -r *~
- for i in lisp texi; do (cd $$i; make distclean); done
-
-osome:
- make EMACS=emacs-19.34 some
Please do following in a directory to extract (ex. site-lisp):
% cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
- co -r semi-gnus gnus
+ checkout -r semi-gnus gnus
(2) compile
% cvs update -r semi-gnus
+ (semi-)daily snapshot is also available from
+
+ ftp://ftp.jaist.ac.jp/pub/GNU/elisp/semi-gnus/
+
+ Note that this snapshot is automatically created from our repository
+and will usually not be tested, and may not even work.
+
+
How to join development
=======================
Via the Semi-gnus ML, you can report Semi-gnus related bugs, obtain
the latest release of Semi-gnus, and discuss future enhancements to
-Semi-gnus. To join the Semi-gnus ML, send e-mail to
+Semi-gnus. To join the Semi-gnus ML, send an empty e-mail to
- semi-gnus-ja-subscribe@meadow.scphys.kyoto-u.ac.jp (Japanese)
- semi-gnus-en-subscribe@meadow.scphys.kyoto-u.ac.jp (English)
+ semi-gnus-en-help@meadow.scphys.kyoto-u.ac.jp (English)
+ semi-gnus-ja-help@meadow.scphys.kyoto-u.ac.jp (Japanese)
In addition, we need developers. If you would like to develop it,
please send mail to cvs@chamonix.jaist.ac.jp.
+Sun Mar 8 14:05:25 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.2 is released.
+
+Sun Mar 8 00:35:09 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-picon.el (gnus-get-buffer-name): Look in the assoc for the
+ variable.
+
+ * nntp.el (nntp-wait-for): Check more for dead connections.
+
+ * gnus-eform.el (gnus-edit-form-buffer): Moved back here.
+
+ * gnus-win.el (gnus-window-to-buffer-helper): Return nil when
+ buffers don't exist.
+
+ * nndraft.el (nndraft-request-restore-buffer): Remove Xref header,
+ not Xrefs.
+
+Sun Mar 8 00:00:04 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.1 is released.
+
+Sat Mar 7 22:15:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el (gnus-edit-form-buffer): Moved here.
+
+ * gnus-agent.el (gnus-agent-expire-old): Removed.
+ (gnus-agent-expire-directory): Ditto.
+ (gnus-agent-expire-group): Even more ditto.
+
+Sat Mar 7 21:59:18 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.37 is released.
+
+Sat Mar 7 20:10:42 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-expire-days): New variable.
+ (gnus-agent-expire): New function.
+
+Sat Mar 7 17:35:53 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.36 is released.
+
+Sat Mar 7 17:29:20 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-wait-for): Reversed logic.
+
+Sat Mar 7 17:19:04 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.35 is released.
+
+Sat Mar 7 15:01:57 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-picon.el (gnus-picons-x-face-sentinel): Check whether
+ gnus-picons-x-face-file-name exists.
+
+ * gnus-art.el (gnus-article-read-summary-keys): Move window point
+ in the summary buffer.
+
+ * nndoc.el (nndoc-type-alist): Allow spaces around separator.
+
+ * gnus-sum.el (gnus-summary-edit-parameters): Interactive.
+
+Sat Mar 7 15:00:05 1998 Wes Hardaker <wjhardaker@ucdavis.edu>
+
+ * gnus-art.el (gnus-article-prepare): Mark articles as
+ downloadable.
+
+Wed Mar 4 22:33:27 1998 Ken Raeburn <raeburn@cygnus.com>
+
+ * gnus-int.el (gnus-get-function): New version, caches symbol
+ names.
+
+Fri Mar 6 01:10:22 1998 Ken Raeburn <raeburn@cygnus.com>
+
+ * nnml.el (nnml-article-to-file): Build pathname using
+ expand-file-name. (Thanks, Colin Rafferty, for catching
+ this.)
+
+Sat Feb 28 23:33:40 1998 Ken Raeburn <raeburn@cygnus.com>
+
+ * nnml.el (nnml-article-to-file): Don't add extra "/" when
+ building pathname.
+
+ * nnheader.el (nnheader-file-to-number): Check value of
+ nnheader-numerical-short-files instead of checking if jka-compr is
+ loaded.
+
+1998-03-03 Dave Love <d.love@dl.ac.uk>
+
+ * nnheader.el (nnheader-parse-head): Fix in-reply-to code. Return
+ nil consistently if not found.
+
+Sat Mar 7 13:50:44 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el: Check whether the connection died.
+
+1998-03-01 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * gnus.texi (Easy Picons): Removed references to
+ `gnus-group-display-picons'.
+ (Hard Picons): Ditto.
+
+Mon Mar 2 16:17:36 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-exit-no-update): Run
+ gnus-summary-prepare-exit-hook here as well.
+
+Sat Feb 28 13:35:26 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-authinforc-file): Changed default.
+ (nntp-authinfo-file): Changed name.
+ (nntp-record-commands): New variable.
+ (nntp-record-command): New function.
+
+ * gnus-agent.el (gnus-agent-group-path): Use real name of group.
+
+ * gnus-sum.el (gnus-summary-insert-subject): Don't allow nil
+ articles.
+ (gnus-summary-read-group): Respect backward movement.
+
+1998-03-01 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * gnus-win.el (gnus-window-to-buffer): change "*Picons*" to
+ `gnus-picons-buffer'.
+ (gnus-window-to-buffer-helper): Support dynamic picon buffer
+ name (i.e a symbol that names a function to be called).
+ (gnus-configure-frame): Use it.
+ (gnus-delete-windows-in-gnusey-frames): Use it.
+ (gnus-all-windows-visible-p): Use it.
+ (gnus-remove-some-windows): Use it.
+
+ * gnus-picon.el (gnus-get-buffer-name): Use it.
+ (gnus-picons-kill-buffer): New function.
+ (gnus-picons-setup-buffer): New function.
+ (gnus-picons-set-buffer): Use them.
+ (gnus-picons-display-x-face): Put back the `buf' binding: it is
+ needed when `gnus-picons-display-where' is not set to article.
+ Also move the X-Face to the left, near the address. It seems more
+ logical.
+
Sat Feb 28 08:27:20 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
* gnus.el: Quassia Gnus v0.34 is released.
+++ /dev/null
-SHELL = /bin/sh
-EMACS=emacs
-FLAGS=-batch -q -no-site-file -l ./dgnushack.el
-
-total:
- rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
-
-all:
- rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
-
-clever:
- $(EMACS) $(FLAGS) -f dgnushack-compile
-
-some:
- $(EMACS) $(FLAGS) -f dgnushack-compile
-
-tags:
- etags *.el
-
-separately:
- rm -f *.elc ; for i in *.el; do $(EMACS) $(FLAGS) -f batch-byte-compile $$i; done
-
-pot:
- xpot -drgnus -r`cat ./version` *.el > rgnus.pot
-
-gnus-load.el:
- echo ";;; gnus-load.el --- automatically extracted custom dependencies" > gnus-load.el
- echo ";;" >> gnus-load.el
- echo ";;; Code:" >> gnus-load.el
- echo >> gnus-load.el
- $(EMACS) $(FLAGS) -l ./dgnushack.el -l cus-edit.el *.el \
- -f custom-make-dependencies >> gnus-load.el
- echo >> gnus-load.el
- echo "(provide 'gnus-load)" >> gnus-load.el
- echo >> gnus-load.el
- echo ";;; gnus-load.el ends here" >> gnus-load.el
-
-distclean:
- rm -f *.orig *.rej *.elc *~
-
:group 'gnus-agent
:type 'integer)
+(defcustom gnus-agent-expire-days 7
+ "Read articles older than this will be expired."
+ :group 'gnus-agent
+ :type 'integer)
+
;;; Internal variables
(defvar gnus-agent-history-buffers nil)
(defun gnus-agent-group-path (group)
"Translate GROUP into a path."
(if nnmail-use-long-file-names
- group
+ (gnus-group-real-name group)
(nnheader-replace-chars-in-string
- (nnheader-translate-file-chars group)
+ (nnheader-translate-file-chars (gnus-group-real-name group))
?. ?/)))
\f
(goto-char (point-max))
(insert id "\t" (number-to-string date) "\t")
(while group-arts
- (insert (caar group-arts) "/" (number-to-string (cdr (pop group-arts)))
+ (insert (caar group-arts) " " (number-to-string (cdr (pop group-arts)))
" "))
(insert "\n")))
"Expire all old articles."
(interactive)
(let ((methods gnus-agent-covered-methods)
- (alist (cdr gnus-newsrc-alist))
- gnus-command-method ofiles info method file group)
- (while (setq gnus-command-method (pop methods))
- (setq ofiles (nconc ofiles (gnus-agent-expire-directory
- (gnus-agent-directory)))))
- (while (setq info (pop alist))
- (when (and (gnus-agent-method-p
- (setq gnus-command-method
- (gnus-find-method-for-group
- (setq group (gnus-info-group info)))))
- (member
- (setq file
- (concat
- (gnus-agent-directory)
- (gnus-agent-group-path group) "/.overview"))
- ofiles))
- (setq ofiles (delete file ofiles))
- (gnus-agent-expire-group file group)))
- (while ofiles
- (gnus-agent-expire-group (pop ofiles)))))
-
-(defun gnus-agent-expire-directory (dir)
- "Expire all groups in DIR recursively."
- (when (file-directory-p dir)
- (let ((files (directory-files dir t))
- file ofiles)
- (while (setq file (pop files))
- (cond
- ((member (file-name-nondirectory file) '("." ".."))
- ;; Do nothing.
- )
- ((file-directory-p file)
- ;; Recurse.
- (setq ofiles (nconc ofiles (gnus-agent-expire-directory file))))
- ((string-match "\\.overview$" file)
- ;; Expire group.
- (push file ofiles))))
- ofiles)))
-
-(defun gnus-agent-expire-group (overview &optional group)
- "Expire articles in OVERVIEW."
- (gnus-message 5 "Expiring %s..." overview)
- (let ((odate (- (gnus-time-to-day (current-time)) 4))
- (dir (file-name-directory overview))
- (info (when group (gnus-get-info group)))
- headers article file point unreads)
- (gnus-agent-load-alist nil dir)
- (when info
- (setq unreads
- (nconc
- (gnus-list-of-unread-articles group)
- (gnus-uncompress-range
- (cdr (assq 'tick (gnus-info-marks info))))
- (gnus-uncompress-range
- (cdr (assq 'dormant (gnus-info-marks info)))))))
- (nnheader-temp-write overview
- (insert-file-contents overview)
- (goto-char (point-min))
- (while (not (eobp))
- (setq point (point))
- (condition-case ()
- (setq headers (inline (nnheader-parse-nov)))
- (error
- (goto-char point)
- (gnus-delete-line)
- (setq headers nil)))
- (when headers
- (if (memq (setq article (mail-header-number headers)) unreads)
+ (day (- (gnus-time-to-day (current-time)) gnus-agent-expire-days))
+ (expiry-hashtb (gnus-make-hashtable 1023))
+ gnus-command-method sym group articles
+ history overview file histories elem art nov-file low info
+ unreads marked article)
+ (save-excursion
+ (setq overview (get-buffer-create " *expire overview*"))
+ (while (setq gnus-command-method (pop methods))
+ (gnus-agent-open-history)
+ (set-buffer
+ (setq gnus-agent-current-history
+ (setq history (gnus-agent-history-buffer))))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (skip-chars-forward "^\t")
+ (if (> (read (current-buffer)) day)
+ ;; New article; we don't expire it.
(forward-line 1)
- (if (not (< (inline
- (gnus-time-to-day
- (inline (nnmail-date-to-time
- (mail-header-date headers)))))
- odate))
- (forward-line 1)
- (gnus-delete-line)
- (setq gnus-agent-article-alist
- (delq (assq article gnus-agent-article-alist)
- gnus-agent-article-alist))
- (when (file-exists-p
- (setq file (concat dir (number-to-string article))))
- (delete-file file))))))
- (gnus-agent-save-alist nil nil nil dir))))
+ ;; Old article. Schedule it for possible nuking.
+ (while (not (eolp))
+ (setq sym (let ((obarray expiry-hashtb))
+ (read (current-buffer))))
+ (if (boundp sym)
+ (set sym (cons (cons (read (current-buffer)) (point))
+ (symbol-value sym)))
+ (set sym (list (cons (read (current-buffer)) (point)))))
+ (skip-chars-forward " "))
+ (forward-line 1)))
+ ;; We now have all articles that can possibly be expired.
+ (mapatoms
+ (lambda (sym)
+ (setq group (symbol-name sym)
+ articles (sort (symbol-value sym) 'car-less-than-car)
+ low (car (gnus-active group))
+ 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))))
+ (gnus-uncompress-range
+ (cdr (assq 'dormant (gnus-info-marks info)))))
+ nov-file (gnus-agent-article-name ".overview" group))
+ (gnus-message 5 "Expiring articles in %s" group)
+ (set-buffer overview)
+ (erase-buffer)
+ (when (file-exists-p nov-file)
+ (insert-file-contents nov-file))
+ (goto-char (point-min))
+ (while (setq elem (pop articles))
+ (setq article (car elem))
+ (when (or (null low)
+ (< article low)
+ (and (not (memq article unreads))
+ (not (memq article marked))))
+ ;; Find and nuke the NOV line.
+ (while (and (not (eobp))
+ (< (setq art (read (current-buffer))) article))
+ (forward-line 1))
+ (if (or (eobp)
+ (/= art article))
+ (beginning-of-line)
+ (gnus-delete-line))
+ ;; Nuke the article.
+ (when (file-exists-p (setq file (gnus-agent-article-name
+ (number-to-string article)
+ group)))
+ (delete-file file))
+ ;; Schedule the history line for nuking.
+ (push (cdr elem) histories)))
+ (write-region (point-min) (point-max) nov-file nil 'silent))
+ expiry-hashtb)
+ (set-buffer history)
+ (setq histories (nreverse (sort histories '<)))
+ (while histories
+ (goto-char (pop histories))
+ (gnus-delete-line))
+ (gnus-agent-save-history)
+ (gnus-agent-close-history)))))
;;;###autoload
(defun gnus-agent-batch ()
(cons gnus-newsgroup-name article))
(set-buffer gnus-summary-buffer)
(setq gnus-current-article article)
- (gnus-summary-mark-article article gnus-canceled-mark))
- (unless (memq article gnus-newsgroup-sparse)
- (gnus-error
- 1 "No such article (may have expired or been canceled)")))
+ (if (eq (gnus-article-mark article) gnus-undownloaded-mark)
+ (progn
+ (gnus-summary-set-agent-mark article)
+ (message "Message marked for downloading"))
+ (gnus-summary-mark-article article gnus-canceled-mark)
+ (unless (memq article gnus-newsgroup-sparse)
+ (gnus-error 1
+ "No such article (may have expired or been canceled)")))))
(if (or (eq result 'pseudo) (eq result 'nneething))
(progn
(save-excursion
'("\C-d"))
(up-to-top
'("n" "Gn" "p" "Gp"))
- keys)
+ keys new-sum-point)
(save-excursion
(set-buffer gnus-article-current-summary)
(let (gnus-pick-mode)
(ding)
(unless (member keys nosave-in-article)
(set-buffer gnus-article-current-summary))
- (call-interactively func))
+ (call-interactively func)
+ (setq new-sum-point (point)))
(when (member keys nosave-but-article)
(pop-to-buffer gnus-article-buffer 'norecord)))
;; These commands should restore window configuration.
(let ((obuf (current-buffer))
(owin (current-window-configuration))
(opoint (point))
+ (summary gnus-article-current-summary)
func in-buffer)
(if not-restore-window
- (pop-to-buffer gnus-article-current-summary 'norecord)
- (switch-to-buffer gnus-article-current-summary 'norecord))
+ (pop-to-buffer summary 'norecord)
+ (switch-to-buffer summary 'norecord))
(setq in-buffer (current-buffer))
;; We disable the pick minor mode commands.
(if (setq func (let (gnus-pick-mode)
(lookup-key (current-local-map) keys)))
- (call-interactively func)
+ (progn
+ (call-interactively func)
+ (setq new-sum-point (point)))
(ding))
(when (eq in-buffer (current-buffer))
(set-buffer obuf)
(set-window-configuration owin))
(unless (member keys up-to-top)
(set-window-point (get-buffer-window (current-buffer))
- opoint)))))))
+ opoint))
+ (let ((win (get-buffer-window gnus-article-current-summary)))
+ (when win
+ (set-window-point win new-sum-point))))))))
(defun gnus-article-hide (&optional arg force)
"Hide all the gruft in the current article.
;;; Internal variables
-(defvar gnus-edit-form-done-function nil)
(defvar gnus-edit-form-buffer "*Gnus edit form*")
+(defvar gnus-edit-form-done-function nil)
(defvar gnus-edit-form-mode-map nil)
(unless gnus-edit-form-mode-map
(truncate-string valstr (, max-width))
valstr))))
-(defvar gnus-bdf-image-file nil)
+(defvar gnus-mule-bitmap-image-file nil)
(defun gnus-mule-group-startup-message (&optional x y)
"Insert startup message in current buffer."
;; Insert the message.
(format " %s
"
- "" (if (and (stringp gnus-bdf-image-file)
- (file-exists-p gnus-bdf-image-file))
- (insert-file gnus-image-file)))
+ "" (if (and (stringp gnus-mule-bitmap-image-file)
+ (file-exists-p gnus-mule-bitmap-image-file))
+ (insert-file gnus-mule-bitmap-image-file)))
(format " %s
_ ___ _ _
_ ___ __ ___ __ _ ___
(defun gnus-update-group-mark-positions ()
(save-excursion
- (let ((gnus-process-mark 128)
+ (let ((gnus-process-mark ?\200)
(gnus-group-marked '("dummy.group"))
(gnus-active-hashtb (make-vector 10 0))
(topic ""))
(error "Attempted use of a nil select method"))
(when (stringp method)
(setq method (gnus-server-to-method method)))
- (let ((func (intern (format "%s-%s" (if gnus-agent
- (gnus-agent-get-function method)
- (car method))
- function))))
- ;; If the functions isn't bound, we require the backend in
- ;; question.
+ ;; Check cache of constructed names.
+ (let* ((method-sym (if gnus-agent
+ (gnus-agent-get-function method)
+ (car method)))
+ (method-fns (get method-sym 'gnus-method-functions))
+ (func (let ((method-fnlist-elt (assq function method-fns)))
+ (unless method-fnlist-elt
+ (setq method-fnlist-elt
+ (cons function
+ (intern (format "%s-%s" method-sym function))))
+ (put method-sym 'gnus-method-functions
+ (cons method-fnlist-elt method-fns)))
+ (cdr method-fnlist-elt))))
+ ;; Maybe complain if there is no function.
(unless (fboundp func)
(require (car method))
(when (and (not (fboundp func))
(not noerror))
- ;; This backend doesn't implement this function.
(error "No such function: %s" func)))
func))
(defun gnus-get-buffer-name (variable)
"Returns the buffer name associated with the contents of a variable."
- (cond ((symbolp variable) (let ((newvar (cdr (assq variable
- gnus-window-to-buffer))))
- (cond ((symbolp newvar)
- (symbol-value newvar))
- ((stringp newvar) newvar))))
- ((stringp variable) variable)))
+ (buffer-name (get-buffer (gnus-window-to-buffer-helper
+ (cdr (assq variable gnus-window-to-buffer))))))
+
+(defun gnus-picons-buffer-name ()
+ (cond ((or (stringp gnus-picons-display-where)
+ (bufferp gnus-picons-display-where))
+ gnus-picons-display-where)
+ ((eq gnus-picons-display-where 'picons)
+ (if gnus-single-article-buffer
+ "*Picons*"
+ (concat "*Picons " gnus-newsgroup-name "*")))
+ (t
+ (gnus-get-buffer-name gnus-picons-display-where))))
+
+(defun gnus-picons-kill-buffer ()
+ (let ((buf (get-buffer (gnus-picons-buffer-name))))
+ (if (buffer-live-p buf)
+ (kill-buffer buf))))
+
+(defun gnus-picons-setup-buffer ()
+ (let ((name (gnus-picons-buffer-name)))
+ (save-excursion
+ (if (get-buffer name)
+ (set-buffer name)
+ (set-buffer (get-buffer-create name))
+ (buffer-disable-undo)
+ (setq buffer-read-only t)
+ (gnus-add-current-to-buffer-list)
+ (add-hook 'gnus-summary-prepare-exit-hook 'gnus-picons-kill-buffer))
+ (current-buffer))))
(defun gnus-picons-set-buffer ()
- (set-buffer
- (get-buffer-create (gnus-get-buffer-name gnus-picons-display-where)))
- (gnus-add-current-to-buffer-list)
+ (set-buffer (gnus-picons-setup-buffer))
(goto-char (point-min))
(if (and (eq gnus-picons-display-where 'article)
gnus-picons-display-article-move-p)
(gnus-picons-set-buffer)
(gnus-picons-make-annotation (make-glyph gnus-picons-x-face-file-name)
nil 'text)
- (delete-file gnus-picons-x-face-file-name)))
+ (when (file-exists-p gnus-picons-x-face-file-name)
+ (delete-file gnus-picons-x-face-file-name))))
(defun gnus-picons-display-x-face (beg end)
"Function to display the x-face header in the picons window.
(if (featurep 'xface)
;; Use builtin support
(save-excursion
- (gnus-picons-set-buffer)
- (gnus-picons-make-annotation
- (vector 'xface
- :data (concat "X-Face: " (buffer-substring beg end)))
- nil 'text))
+ ;; Don't remove this binding, it is really needed: when
+ ;; `gnus-picons-set-buffer' changes buffer (like when it is
+ ;; set to display picons outside of the article buffer), BEG
+ ;; and END still refer the buffer current now !
+ (let ((buf (current-buffer)))
+ (gnus-picons-set-buffer)
+ (gnus-picons-make-annotation
+ (vector 'xface
+ :data (concat "X-Face: " (buffer-substring beg end buf)))
+ nil 'text nil nil nil t)))
;; convert the x-face header to a .xbm file
(let* ((process-connection-type nil)
(process (start-process-shell-command "gnus-x-face" nil
(and (consp elem) ; Has to be a cons.
(consp (cdr elem)) ; The cdr has to be a list.
(symbolp (car elem)) ; Has to be a symbol in there.
- (not (memq (car elem)
- '(quit-config to-address to-list to-group)))
(ignore-errors ; So we set it.
(make-local-variable (car elem))
(set (car elem) (eval (nth 1 elem))))))))
(defun gnus-summary-read-group (group &optional show-all no-article
- kill-buffer no-display)
+ kill-buffer no-display backward)
"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.
(setq show-all nil)))))
(eq gnus-auto-select-next 'quietly))
(set-buffer gnus-group-buffer)
+ ;; The entry function called above goes to the next
+ ;; group automatically, so we go two groups back
+ ;; if we are searching for the previous group.
+ (when backward
+ (gnus-group-prev-unread-group 2))
(if (not (equal group (gnus-group-group-name)))
(setq group (gnus-group-group-name))
(setq group nil)))
;; article we have fetched.
(when (and (not gnus-show-threads)
old-header)
- (when (setq d (gnus-data-find (mail-header-number old-header)))
+ (when (and number
+ (setq d (gnus-data-find (mail-header-number old-header))))
(goto-char (gnus-data-pos d))
(gnus-data-remove
number
gnus-expert-user
(gnus-y-or-n-p "Discard changes to this group and exit? "))
(gnus-async-halt-prefetch)
+ (gnus-run-hooks 'gnus-summary-prepare-exit-hook)
;; If we have several article buffers, we kill them at exit.
(unless gnus-single-article-buffer
(gnus-kill-buffer gnus-article-buffer)
(and unreads (not (zerop unreads))))
(gnus-summary-read-group
target-group nil no-article
- (and (buffer-name current-buffer) current-buffer)))
+ (and (buffer-name current-buffer) current-buffer)
+ nil backward))
(setq entered t)
(setq current-group target-group
target-group nil)))))))
(defun gnus-summary-edit-parameters ()
"Edit the group parameters of the current group."
+ (interactive)
(gnus-group-edit-group gnus-newsgroup-name 'params))
(defun gnus-summary-enter-digest-group (&optional force)
(mail . gnus-message-buffer)
(post-news . gnus-message-buffer)
(faq . gnus-faq-buffer)
- (picons . "*Picons*")
+ (picons . gnus-picons-buffer-name)
(tree . gnus-tree-buffer)
(score-trace . "*Score Trace*")
(info . gnus-info-buffer)
(defvar gnus-frame-list nil)
+(defun gnus-window-to-buffer-helper (obj)
+ (cond ((not (symbolp obj))
+ obj)
+ ((boundp obj)
+ (symbol-value obj))
+ ((fboundp obj)
+ (funcall obj))
+ (t
+ nil)))
+
(defun gnus-configure-frame (split &optional window)
"Split WINDOW according to SPLIT."
(unless window
;; This is a buffer to be selected.
((not (memq type '(frame horizontal vertical)))
(let ((buffer (cond ((stringp type) type)
- (t (cdr (assq type gnus-window-to-buffer)))))
- buf)
+ (t (cdr (assq type gnus-window-to-buffer))))))
(unless buffer
(error "Illegal buffer type: %s" type))
- (unless (setq buf (get-buffer (if (symbolp buffer)
- (symbol-value buffer) buffer)))
- (setq buf (get-buffer-create (if (symbolp buffer)
- (symbol-value buffer) buffer))))
- (switch-to-buffer buf)
+ (switch-to-buffer (get-buffer-create
+ (gnus-window-to-buffer-helper buffer)))
;; We return the window if it has the `point' spec.
(and (memq 'point split) window)))
;; This is a frame split.
(let ((buffers
(mapcar
(lambda (elem)
- (if (symbolp (cdr elem))
- (when (and (boundp (cdr elem))
- (symbol-value (cdr elem)))
- (get-buffer (symbol-value (cdr elem))))
- (when (cdr elem)
- (get-buffer (cdr elem)))))
+ (get-buffer (gnus-window-to-buffer-helper (cdr elem))))
gnus-window-to-buffer)))
(mapcar
(lambda (frame)
(t (cdr (assq type gnus-window-to-buffer)))))
(unless buffer
(error "Illegal buffer type: %s" type))
- (when (setq buf (get-buffer (if (symbolp buffer)
- (symbol-value buffer)
- buffer)))
- (setq win (get-buffer-window buf t)))
- (if win
- (when (memq 'point split)
+ (if (and (setq buf (get-buffer (gnus-window-to-buffer-helper buffer)))
+ (setq win (get-buffer-window buf t)))
+ (if (memq 'point split)
(setq all-visible win))
(setq all-visible nil)))
(t
(save-excursion
;; Remove windows on all known Gnus buffers.
(while buffers
- (setq buf (cdar buffers))
- (when (symbolp buf)
- (setq buf (and (boundp buf) (symbol-value buf))))
- (and buf
+ (and (setq buf (gnus-window-to-buffer-helper (cdar buffers)))
(get-buffer-window buf)
(progn
(push buf bufs)
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "6.0.8"
+(defconst gnus-version-number "6.0.9"
"Version number for this version of gnus.")
(defconst gnus-version
- (format "Semi-gnus %s (based on Quassia Gnus v0.34)" gnus-version-number)
+ (format "Semi-gnus %s (based on Gnus 5.6.2)" gnus-version-number)
"Version string for this version of gnus.")
(defcustom gnus-inhibit-startup-message nil
("gnus-sum" gnus-summary-insert-line gnus-summary-read-group
gnus-list-of-unread-articles gnus-list-of-read-articles
gnus-offer-save-summaries gnus-make-thread-indent-array
- gnus-summary-exit gnus-update-read-articles)
+ gnus-summary-exit gnus-update-read-articles gnus-summary-last-subject
+ gnus-summary-skip-intangible gnus-summary-article-number
+ gnus-data-header gnus-data-find)
("gnus-group" gnus-group-insert-group-line gnus-group-quit
gnus-group-list-groups gnus-group-first-unread-group
gnus-group-set-mode-line gnus-group-set-info gnus-group-save-newsrc
gnus-async-halt-prefetch)
("gnus-agent" gnus-open-agent gnus-agent-get-function
gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p
- gnus-agent-get-undownloaded-list gnus-agent-fetch-session)
+ gnus-agent-get-undownloaded-list gnus-agent-fetch-session
+ gnus-summary-set-agent-mark)
("gnus-agent" :interactive t
gnus-unplugged gnus-agentize gnus-agent-batch)
("gnus-vm" :interactive t gnus-summary-save-in-vm
(file-end . "")
(subtype digest guess))
(standard-digest
- (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
- (article-begin . ,(concat "^\n" (make-string 30 ?-) "\n\n+"))
+ (first-article . ,(concat "^" (make-string 70 ?-) "\n *\n+"))
+ (article-begin . ,(concat "^\n" (make-string 30 ?-) "\n *\n+"))
(prepare-body-function . nndoc-unquote-dashes)
(body-end-function . nndoc-digest-body-end)
(head-end . "^ *$")
"Request a new buffer that is restored to the state of ARTICLE."
(nndraft-possibly-change-group group)
(when (nndraft-request-article article group server (current-buffer))
- (message-remove-header "xrefs")
+ (message-remove-header "xref")
(message-remove-header "lines")
(let ((gnus-verbose-backends nil))
(nndraft-request-expire-articles (list article) group server t))
(autoload 'mail-position-on-field "sendmail")
(autoload 'message-remove-header "message")
(autoload 'cancel-function-timers "timers")
- (autoload 'gnus-point-at-eol "gnus-util")
- (autoload 'gnus-delete-line "gnus-util")
- (autoload 'gnus-buffer-live-p "gnus-util")
- (autoload 'gnus-encode-coding-string "gnus-ems"))
+ (autoload 'gnus-point-at-eol "gnus-util"))
;;; Header access macros.
(setq ref2 (substring in-reply-to (match-beginning 0)
(match-end 0)))
(when (> (length ref2) (length ref))
- (setq ref ref2))))
- "")))
+ (setq ref ref2)))
+ ref)
+ nil)))
;; Chars.
0
;; Lines.
(defsubst nnheader-file-to-number (file)
"Take a file name and return the article number."
- (if (not (boundp 'jka-compr-compression-info-list))
+ (if (string= nnheader-numerical-short-files "^[0-9]+$")
(string-to-int file)
(string-match nnheader-numerical-short-files file)
(string-to-int (match-string 0 file))))
;; Just to make sure nothing went wrong when reading over NFS --
;; check once more.
(when (file-exists-p
- (setq file (concat nnml-current-directory "/"
- (number-to-string article))))
+ (setq file (expand-file-name (number-to-string article)
+ nnml-current-directory)))
(nnml-update-file-alist t)
file))))
(defvoo nntp-coding-system-for-write 'binary
"*Coding system to write to NNTP.")
-(defcustom nntp-authinforc-file "~/.authinforc"
+(defcustom nntp-authinfo-file "~/.authinfo"
"Docstring."
:type
'(choice file
;;; Internal variables.
+(defvar nntp-record-commands nil
+ "*If non-nil, nntp will record all commands in the \"*nntp-log*\" buffer.")
+
(defvar nntp-have-messaged nil)
(defvar nntp-process-wait-for nil)
(defsubst nntp-send-string (process string)
"Send STRING to PROCESS."
+ ;; We need to store the time to provide timeouts, and
+ ;; to store the command so the we can replay the command
+ ;; if the server gives us an AUTHINFO challenge.
(setq nntp-last-command-time (current-time)
nntp-last-command string)
+ (when nntp-record-commands
+ (nntp-record-command string))
(process-send-string process (concat string nntp-end-of-line)))
+(defun nntp-record-command (string)
+ "Record the command STRING."
+ (save-excursion
+ (set-buffer (get-buffer-create "*nntp-log*"))
+ (goto-char (point-max))
+ (insert (format-time-string "%Y%m%dT%H%M%S" (current-time))
+ " " nntp-address " " string "\n")))
+
(defsubst nntp-wait-for (process wait-for buffer &optional decode discard)
"Wait for WAIT-FOR to arrive from PROCESS."
(save-excursion
(set-buffer (process-buffer process))
(goto-char (point-min))
- (while (or (not (memq (char-after (point)) '(?2 ?3 ?4 ?5)))
- (looking-at "480"))
+ (while (and (or (not (memq (char-after (point)) '(?2 ?3 ?4 ?5)))
+ (looking-at "480"))
+ (memq (process-status process) '(open run)))
(when (looking-at "480")
(nntp-handle-authinfo process))
(nntp-accept-process-output process)
(goto-char (point-min)))
(prog1
- (if (looking-at "[45]")
- (progn
- (nntp-snarf-error-message)
- nil)
+ (cond
+ ((looking-at "[45]")
+ (progn
+ (nntp-snarf-error-message)
+ nil))
+ ((not (memq (process-status process) '(open run)))
+ (nnheader-report 'nntp "Server closed connection"))
+ (t
(goto-char (point-max))
(let ((limit (point-min)))
(while (not (re-search-backward wait-for limit t))
(when nntp-have-messaged
(setq nntp-have-messaged nil)
(message ""))
- t)))
+ t))))
(unless discard
(erase-buffer)))))
(let (process)
(while (setq process (car (pop nntp-connection-alist)))
(when (memq (process-status process) '(open run))
- (set-process-sentinel process nil)
(ignore-errors
(nntp-send-string process "QUIT")
(unless (eq nntp-open-connection-function 'nntp-open-network-stream)
(let (process)
(while (setq process (pop nntp-connection-list))
(when (memq (process-status process) '(open run))
- (set-process-sentinel process nil)
(ignore-errors
(nntp-send-string process "QUIT")
(unless (eq nntp-open-connection-function 'nntp-open-network-stream)
(defun nntp-send-authinfo ()
"Send the AUTHINFO to the nntp server.
This function is supposed to be called from `nntp-server-opened-hook'.
-It will look in the \"~/.authinforc\" file for matching entries. If
+It will look in the \"~/.authinfo\" file for matching entries. If
nothing suitable is found there, it will prompt for a user name
and a password."
- (let* ((list (gnus-parse-netrc nntp-authinforc-file))
+ (let* ((list (gnus-parse-netrc nntp-authinfo-file))
(alist (gnus-netrc-machine list nntp-address))
(user (gnus-netrc-get alist "login"))
(passwd (gnus-netrc-get alist "password")))
+Sun Mar 8 13:56:37 1998 James Troup <J.J.Troup@scm.brad.ac.uk>
+
+ * gnus.texi (Group Highlighting): Removed old example.
+
+Sun Mar 8 00:19:24 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Group Info): Fix ".".
+
+Sat Mar 7 17:09:49 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi: Took direntries out again, since makeinfo doesn't
+ understand them.
+ (Agent Expiry): New.
+ (Quassia Gnus): New.
+
+Sat Mar 7 16:14:10 1998 Dan Christensen <jdc@chow.mat.jhu.edu>
+
+ * gnus.texi (Group Parameters): Mention add-to-list.
+
+Sat Feb 28 14:21:12 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (NNTP): Addition.
+
+1998-03-01 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * gnus.texi (Easy Picons): Removed references to
+ `gnus-group-display-picons'.
+ (Hard Picons): Ditto.
+
+1998-03-01 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * gnus.texi (Easy Picons): Removed references to
+ `gnus-group-display-picons'.
+ (Hard Picons): Ditto.
+
Mon Feb 23 18:05:09 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus.texi: Direntry not handled by Emacs 19.34.
+++ /dev/null
-TEXI2DVI=texi2dvi
-EMACS=emacs
-MAKEINFO=$(EMACS) -batch -q -no-site-file
-INFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
-XINFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
-LATEX=latex
-DVIPS=dvips
-PERL=perl
-INFODIR=/usr/local/info
-
-all: gnus message
-
-most: texi2latex.elc latex latexps
-
-.SUFFIXES: .texi .dvi .ps
-
-.texi:
- $(MAKEINFO) -eval '(find-file "$<")' $(XINFOSWI)
-
-dvi: gnus.dvi message.dvi
-
-.texi.dvi :
- $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
- $(TEXI2DVI) gnustmp.texi
- cp gnustmp.dvi $*.dvi
- rm gnustmp.*
-
-refcard.dvi: refcard.tex gnuslogo.refcard gnusref.tex
- $(LATEX) refcard.tex
-
-clean:
- rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \
- *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \
- gnus.ilg gnus.ind gnus.[cgk]ind gnus.idx \
- gnus.tmptexi *.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
- gnus.latexi*~* tmp/*.ps xface.tex picons.tex smiley.tex *.latexi
-
-makeinfo:
- makeinfo -o gnus gnus.texi
- makeinfo -o message message.texi
-
-texi2latex.elc: texi2latex.el
- $(EMACS) -batch -l bytecomp --eval '(byte-compile-file "texi2latex.el")'
-
-latex: gnus.texi texi2latex.elc
- $(EMACS) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
-
-latexps:
- make texi2latex.elc
- rm -f gnus.aux
- egrep -v "label.*Index|chapter.*Index" gnus.latexi > gnus.tmplatexi1
- $(LATEX) gnus.tmplatexi1
- ./splitindex
- makeindex -o gnus.kind gnus.kidx
- makeindex -o gnus.cind gnus.cidx
- makeindex -o gnus.gind gnus.gidx
- sed 's/\\char 5E\\relax {}/\\symbol{"5E}/' < gnus.kind > gnus.tmpkind
- mv gnus.tmpkind gnus.kind
- egrep -v "end{document}" gnus.tmplatexi1 > gnus.tmplatexi
- cat postamble.tex >> gnus.tmplatexi
- $(LATEX) gnus.tmplatexi
- $(LATEX) gnus.tmplatexi
- $(DVIPS) -f gnus.dvi > gnus.ps
-
-pss:
- make latex
- make latexps
-
-psout:
- make latex
- make latexboth
- make out
-
-latexboth:
- rm -f gnus-manual-a4.ps.gz gnus-manual-standard.ps.gz
- make latexps
- mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-a4.ps
- gzip /local/tmp/larsi/gnus-manual-a4.ps
- sed 's/,a4paper//' gnus.latexi > gnus-standard.latexi
- mv gnus-standard.latexi gnus.latexi
- make latexps
- mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-standard.ps
- gzip /local/tmp/larsi/gnus-manual-standard.ps
-
-out:
- cp /local/tmp/larsi/gnus-manual-standard.ps.gz \
- /local/tmp/larsi/gnus-manual-a4.ps.gz \
- /local/ftp/pub/emacs/gnus/manual
- mv /local/tmp/larsi/gnus-manual-standard.ps.gz \
- /local/tmp/larsi/gnus-manual-a4.ps.gz \
- /hom/larsi/www_docs/www.gnus.org/documents
-
-veryclean:
- make clean
- rm -f gnus.dvi gnus.ps
-
-distclean:
- make clean
- rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9]
- rm -f message message-[0-9]
-
-install:
- cp gnus gnus-[0-9] gnus-[0-9][0-9] $(INFODIR)
- cp message $(INFODIR)
-
-
-tmps:
- if [ ! -e tmp ]; then mkdir tmp; fi
- make screens
- make herdss
- make etcs
- make piconss
- make xfaces
- make smiley
- make miscs
-
-herdss:
- cd herds ; for i in new-herd-[0-9]*.gif; do echo $$i; giftopnm $$i | pnmcrop -white | pnmmargin -white 9 | pnmscale 2 | pnmconvol convol5.pnm | ppmtopgm | pnmdepth 255 | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done
- cd herds ; giftopnm new-herd-section.gif | pnmscale 4 | pnmconvol convol11.pnm | ppmtopgm | pnmdepth 255 | pnmtops -noturn -width 100 -height 100 > ../tmp/new-herd-section.ps
-
-
-screens:
- cd screen ; for i in *.gif; do echo $$i; giftopnm $$i | pnmmargin -black 1 | ppmtopgm | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done
-
-miscs:
- giftopnm misc/larsi.gif | ppmtopgm | pnmtops -noturn > tmp/larsi.ps
- tifftopnm misc/eseptember.tif | pnmscale 4 | ppmtopgm | pnmtops -noturn -width 100 -height 100 > tmp/september.ps
- tifftopnm misc/fseptember.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn -width 100 -height 100 > tmp/fseptember.ps
- tifftopnm misc/fred.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn -width 100 -height 100 > tmp/fred.ps
- tifftopnm misc/ered.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn -width 100 -height 100 > tmp/red.ps
-
-etcs:
- cd etc; for i in gnus-*.xpm; do echo $$i; xpmtoppm $$i | ppmtopgm | pnmdepth 255 | pnmtops -noturn > ../tmp/`basename $$i .xpm`.ps; done
-
-piconss:
- cd picons; for i in *.xbm; do echo $$i; xbmtopbm $$i | pnmtops -noturn > ../tmp/picons-`basename $$i .xbm`.ps; done
- cd picons; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/picons-`basename $$i .gif`.ps; done
- for i in tmp/picons-*.ps; do echo "\\gnuspicon{$$i}"; done > picons.tex
-
-xfaces:
- cd xface; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/xface-`basename $$i .gif`.ps; done
- for i in tmp/xface-*.ps; do \
- if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
- a="h"; echo -n "\\gnusxface{$$i}"; fi done > xface.tex; \
- if [ -n "$$a" ]; then echo "{$$i}" >> xface.tex; fi
-
-smiley:
- cd smilies; tifftopnm BigFace.tif | ppmtopgm | pnmtops > ../tmp/BigFace.ps
- cd smilies; for i in *.xpm; do echo $$i; sed "s/none/#FFFFFF/" $$i | xpmtoppm | ppmtopgm | pnmdepth 255 | pnmtops > ../tmp/smiley-`basename $$i .xpm`.ps; done
- for i in tmp/smiley-*.ps; do \
- if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
- a="h"; echo -n "\\gnussmiley{$$i}"; fi done > smiley.tex; \
- if [ -n "$$a" ]; then echo "{$$i}" >> smiley.tex; fi
-
-pspackage:
- tar czvf pspackage.tar.gz gnus-faq.texi gnus.texi herds misc pagestyle.sty picons pixidx.sty postamble.tex ps screen smilies splitindex texi2latex.el xface Makefile README etc
-
-complete:
- make texi2latex.elc
- make tmps
- make pss
LATEX=latex
DVIPS=dvips
PERL=perl
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+SHELL = /bin/sh
all: gnus message
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Quassia Gnus 0.34 Manual
+@settitle Gnus 5.6.2 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Quassia Gnus 0.34 Manual
+@title Gnus 5.6.2 Manual
@author by Lars Magne Ingebrigtsen
@page
spool or your mbox file. All at the same time, if you want to push your
luck.
-This manual corresponds to Quassia Gnus 0.34.
+This manual corresponds to Gnus 5.6.2.
@end ifinfo
((and (< level 3) (zerop unread)) . my-group-face-2)
((< level 3) . my-group-face-3)
((zerop unread) . my-group-face-4)
-(setq gnus-group-highlight
- `(((> unread 200) .
- ,(custom-face-lookup "Red" nil nil t nil nil))
- ((and (< level 3) (zerop unread)) .
- ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
- ((< level 3) .
- ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
- ((zerop unread) .
- ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
- (t .
- ,(custom-face-lookup "SkyBlue" nil nil t nil nil))))
(t . my-group-face-5)))
@end lisp
@section Group Parameters
@cindex group parameters
-The group parameters store information local to a particular group:
+The group parameters store information local to a particular group.
+Here's an example group parameter list:
+
+@example
+((to-address . "ding@@gnus.org")
+ (auto-expire . t))
+@end example
+
+We see that each element consists of a "dotted pair"---the thing before
+the dot is the key, while the thing after the dot is the value. All the
+parameters have this form @emph{except} local variable specs, which are
+not dotted pairs, but proper lists.
+
+The following group parameters can be used:
@table @code
@item to-address
@cindex to-address
-If the group parameter list contains an element that looks like
-@code{(to-address . "some@@where.com")}, that address will be used by
-the backend when doing followups and posts. This is primarily useful in
-mail groups that represent closed mailing lists---mailing lists where
-it's expected that everybody that writes to the mailing list is
-subscribed to it. Since using this parameter ensures that the mail only
-goes to the mailing list itself, it means that members won't receive two
-copies of your followups.
+Address used by when doing followups and new posts.
+
+@example
+(to-address . "some@@where.com")
+@end example
+
+This is primarily useful in mail groups that represent closed mailing
+lists---mailing lists where it's expected that everybody that writes to
+the mailing list is subscribed to it. Since using this parameter
+ensures that the mail only goes to the mailing list itself, it means
+that members won't receive two copies of your followups.
Using @code{to-address} will actually work whether the group is foreign
or not. Let's say there's a group on the server that is called
@item to-list
@cindex to-list
-If the group parameter list has an element that looks like
-@code{(to-list . "some@@where.com")}, that address will be used when
-doing a @kbd{a} in that group. It is totally ignored when doing a
-followup---except that if it is present in a news group, you'll get mail
-group semantics when doing @kbd{f}.
+Address used when doing a @kbd{a} in that group.
+
+@example
+(to-list . "some@@where.com")
+@end example
+
+It is totally ignored
+when doing a followup---except that if it is present in a news group,
+you'll get mail group semantics when doing @kbd{f}.
+
+If you do an @kbd{a} command in a mail group and you have neither a
+@code{to-list} group parameter nor a @code{to-address} group paramater,
+then a @code{to-list} group parameter will be added automatically upon
+sending the message if @code{gnus-add-to-list} is set to @code{t}.
+@vindex gnus-add-to-list
If you do an @kbd{a} command in a mail group and you don't have a
@code{to-list} group parameter, one will be added automatically upon
@item newsgroup
@cindex newsgroup
-If this symbol is present in the group parameter list, Gnus will treat
-all responses as if they were responses to news articles. This can be
-useful if you have a mail group that's really a mirror of a news group.
+If you have @code{(newsgroup . t)} in the group parameter list, Gnus
+will treat all responses as if they were responses to news articles.
+This can be useful if you have a mail group that's really a mirror of a
+news group.
@item gcc-self
@cindex gcc-self
-If this symbol is present in the group parameter list and set to
-@code{t}, newly composed messages will be @code{Gcc}'d to the current
-group. If it is present and set to @code{none}, no @code{Gcc:} header
-will be generated, if it is present and a string, this string will be
-inserted literally as a @code{gcc} header (this symbol takes precedence
-over any default @code{Gcc} rules as described later). @xref{Archived
-Messages}
+If @code{(gcc-self . t)} is present in the group parameter list, newly
+composed messages will be @code{Gcc}'d to the current group. If
+@code{(gcc-self . none)} is present, no @code{Gcc:} header will be
+generated, if @code{(gcc-self . "string")} is present, this string will
+be inserted literally as a @code{gcc} header. This parameter takes
+precedence over any default @code{Gcc} rules as described later
+(@pxref{Archived Messages}).
@item auto-expire
@cindex auto-expire
@end table
-Use the @kbd{G p} command to edit group parameters of a group.
-
-@pxref{Topic Parameters}.
-
-Here's an example group parameter list:
-
-@example
-((to-address . "ding@@gnus.org")
- (auto-expiry . t))
-@end example
+Use the @kbd{G p} command to edit group parameters of a group. You
+might also be interested in reading about topic parameters (@pxref{Topic
+Parameters}).
@node Listing Groups
@item nntp-authinfo-function
@vindex nntp-authinfo-function
@findex nntp-send-authinfo
-@vindex nntp-authinforc-file
+@vindex nntp-authinfo-file
This function will be used to send @samp{AUTHINFO} to the @sc{nntp}
server. The default function is @code{nntp-send-authinfo}, which looks
-through your @file{~/.authinforc} (or whatever you've set the
-@code{nntp-authinforc-file} variable to) for applicable entries. If
+through your @file{~/.authinfo} (or whatever you've set the
+@code{nntp-authinfo-file} variable to) for applicable entries. If
none are found, it will prompt you for a login name and a password. The
-format of the @file{~/.authinforc} file is the same as the @code{ftp}
+format of the @file{~/.authinfo} file is the same as the @code{ftp}
@file{~/.netrc} file, which is defined in the @code{ftp} manual page,
but here are the salient facts:
former server, while the latter has only the login name listed, and the
user will be prompted for the password.
-Remember to not leave the @file{~/.authinforc} file world-readable.
+Remember to not leave the @file{~/.authinfo} file world-readable.
@item nntp-server-action-alist
@vindex nntp-server-action-alist
If this variable is non-@code{nil}, some noise will be made when a
server closes connection.
+@item nntp-record-commands
+@vindex nntp-record-commands
+If non-@code{nil}, @code{nntp} will log all commands it sends to the
+@sc{nntp} server (along with a timestep) in the @samp{*nntp-log*}
+buffer. This is useful if you are debugging a Gnus/@sc{nntp} connection
+that doesn't seem to work.
+
@end table
* Agent Basics:: How it all is supposed to work.
* Agent Categories:: How to tell the Gnus Agent what to download.
* Agent Commands:: New commands for all the buffers.
+* Agent Expiry:: How to make old articles go away.
* Outgoing Messages:: What happens when you post/mail something?
* Agent Variables:: Customizing is fun.
* Example Setup:: An example @file{.gnus.el} file for offline people.
@end table
+@node Agent Expiry
+@subsection Agent Expiry
+
+@vindex gnus-agent-expiry-days
+@findex gnus-agent-expiry
+@kindex M-x gnus-agent-expiry
+
+@code{nnagent} doesn't handle expiry. Instead, there's a special
+@code{gnus-agent-expiry} command that will expire all read articles that
+are older than @code{gnus-agent-expiry-days} days. It can be run
+whenever you feel that you're running out of space. It's not
+particularly fast or efficient, and it's not a particularly good idea to
+interrupt it (with @kbd{C-g} or anything else) once you've started it.
+
+
@node Outgoing Messages
@subsection Outgoing Messages
@lisp
(setq gnus-use-picons t)
(add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
-(add-hook 'gnus-summary-prepare-hook 'gnus-group-display-picons t)
(add-hook 'gnus-article-display-hook 'gnus-picons-article-display-x-face)
@end lisp
in the @code{gnus-picons-display-where} buffer. Should be added to the
@code{gnus-article-display-hook}.
-@item gnus-group-display-picons
-@findex gnus-article-display-picons
-Displays picons representing the current group. This function should
-be added to the @code{gnus-summary-prepare-hook} or to the
-@code{gnus-article-display-hook} if @code{gnus-picons-display-where}
-is set to @code{article}.
-
@item gnus-picons-article-display-x-face
@findex gnus-article-display-picons
Decodes and displays the X-Face header if present. This function
Kevin Davidson---came up with the name @dfn{ding}, so blame him.
@item
-François Pinard---many, many interesting and thorough bug reports.
+François Pinard---many, many interesting and thorough bug reports, as
+well as autoconf support.
@end itemize
Andre Deparade,
Ulrik Dickow,
Dave Disser,
+Rui-Tao Dong, @c ?
Joev Dubach,
Michael Welsh Duggan,
Dave Edmondson,
Nat Makarevitch,
Istvan Marko,
David Martin,
+Jason R Mastaler,
Gordon Matzigkeit,
Timo Metzemakers,
Richard Mlynarik,
Hideki Ono, @c Ono
William Perry,
Stephen Peters,
+Jens-Ulrik Holger Petersen,
Ulrich Pfeifer,
John McClary Prevost,
Colin Rafferty,
+Lasse Rasinen,
Lars Balker Rasmussen,
Joe Reiss,
Renaud Rioboo,
* 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.2.7.
@end menu
These lists are, of course, just @emph{short} overviews of the
@end itemize
+@node Quassia Gnus
+@subsubsection Quassia Gnus
+
+New features in Gnus 5.6.2.7:
+
+@itemize @bullet
+
+@item
+New functionality for using Gnus as an offline newsreader has been
+added. A plethora of new commands and modes have been added. See
+@pxref{Gnus Unplugged} for the full story.
+
+@item
+ The @code{nndraft} backend has returned, but works differently than
+before. All Message buffers are now also articles in the @code{nndraft}
+group, which is created automatically.
+
+@item
+@code{gnus-alter-header-function} can now be used to alter header
+values.
+
+@item
+ @code{gnus-summary-goto-article} now accept Message-ID's.
+
+@item
+ A new Message command for deleting text in the body of a message
+outside the region: @kbd{C-c C-v}.
+
+@item
+ You can now post to component group in @code{nnvirtual} groups with
+@kbd{C-u C-c C-c}.
+
+@item
+ @code{nntp-rlogin-program}---new variable to ease customization.
+
+@item
+ @code{C-u C-c C-c} in @code{gnus-article-edit-mode} will now inhibit
+re-highlighting of the article buffer.
+
+@item
+ New element in @code{gnus-boring-article-headers}---@code{long-to}.
+
+@item
+ @kbd{M-i} symbolic prefix command. See the section "Symbolic
+Prefixes" in the Gnus manual for details.
+
+@item
+ @kbd{L} and @kbd{I} in the summary buffer now take the symbolic prefix
+@kbd{a} to add the score rule to the "all.SCORE" file.
+
+@item
+ @code{gnus-simplify-subject-functions} variable to allow greater
+control over simplification.
+
+@item
+ @kbd{A T}---new command for fetching the current thread.
+
+@item
+ @kbd{/ T}---new command for including the current thread in the
+limit.
+
+@item
+ @kbd{M-RET} is a new Message command for breaking cited text.
+
+@item
+ @samp{\\1}-expressions are now valid in @code{nnmail-split-methods}.
+
+@item
+ The @code{custom-face-lookup} function has been removed.
+If you used this function in your initialization files, you must
+rewrite them to use @code{face-spec-set} instead.
+
+@item
+ Cancelling now uses the current select method. Symbolic prefix
+@kbd{a} forces normal posting method.
+
+@item
+ New command to translate M@item
+@item
+** sm*rtq**t*s into proper text---@kbd{W d}.
+
+@item
+ For easier debugging of @code{nntp}, you can set
+@code{nntp-record-commands} to a non-@code{nil} value.
+
+@item
+ @code{nntp} now uses @file{~/.authinfo}, a @file{.netrc}-like file, for
+controlling where and how to send @sc{authinfo} to @sc{nntp} servers.
+
+@item
+ A command for editing group parameters from the summary buffer
+has been added.
+
+@item
+ A history of where mails have been split is available.
+
+@item
+ A new article date command has been added---@code{article-date-iso8601}.
+
+@item
+ Subjects can be simplified when threading by setting
+@code{gnus-score-thread-simplify}.
+
+@item
+ A new function for citing in Message has been
+added---@code{message-cite-original-without-signature}.
+
+@item
+ @code{article-strip-all-blank-lines}---new article command.
+
+@item
+ A new Message command to kill to the end of the article has
+been added.
+
+@item
+ A minimum adaptive score can be specified by using the
+@code{gnus-adaptive-word-minimum} variable.
+
+@item
+ The "lapsed date" article header can be kept continually
+updated by the @code{gnus-start-date-timer} command.
+
+@item
+ Web listserv archives can be read with the @code{nnlistserv} backend.
+
+@item
+ Old dejanews archives can now be read by @code{nnweb}.
+
+@end itemize
+
+
@node Newest Features
@subsection Newest Features
@cindex todo
("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
((tick (15 . 19)) (replied 3 6 (19 . 3)))
(nnml "")
- (auto-expire (to-address "ding@@gnus.org")))
+ ((auto-expire . t) (to-address . "ding@@gnus.org")))
@end example
The first element is the @dfn{group name}---as Gnus knows the group,
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 0.34 Manual
+@settitle Message 5.6.2 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Message 0.34 Manual
+@title Message 5.6.2 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 0.34. Message is distributed with
+This manual corresponds to Message 5.6.2. Message is distributed with
the Gnus distribution bearing the same version number as this manual
has.