From: ichikawa Date: Mon, 9 Mar 1998 15:37:44 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: ichikawa-199811302358~82 X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a8906161681648eae7aaeaed84a5cea1bc41375;p=elisp%2Fgnus.git- *** empty log message *** --- diff --git a/ChangeLog b/ChangeLog index d197988..e97dd36 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +1998-03-08 Shuhei KOBAYASHI + + * 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 + + * lisp/gnus-ems.el: Change variable name + gnus-bdf-image-file to gnus-mule-bitmap-image-file. + 1998-02-28 MORIOKA Tomohiko * lisp/gnus.el (gnus-version-number): Update to 6.0.8. diff --git a/GNUS-NEWS b/GNUS-NEWS index e4a0a67..bef3a3a 100644 --- a/GNUS-NEWS +++ b/GNUS-NEWS @@ -1,6 +1,6 @@ ** 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 . You also then need to add the following to the lisp/dgnushack.el file: @@ -63,3 +63,37 @@ rewrite them to use `face-spec-set' instead. *** 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. + diff --git a/Makefile b/Makefile deleted file mode 100644 index 05503f4..0000000 --- a/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -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 diff --git a/README.semi b/README.semi index 6d607e2..e1c4535 100644 --- a/README.semi +++ b/README.semi @@ -26,7 +26,7 @@ How to get? 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 @@ -43,6 +43,14 @@ How to get? % 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 ======================= @@ -54,10 +62,10 @@ send them to the Semi-gnus mailing list: 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. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9bafbe5..5187062 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,145 @@ +Sun Mar 8 14:05:25 1998 Lars Magne Ingebrigtsen + + * gnus.el: Gnus v5.6.2 is released. + +Sun Mar 8 00:35:09 1998 Lars Magne Ingebrigtsen + + * 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 + + * gnus.el: Gnus v5.6.1 is released. + +Sat Mar 7 22:15:46 1998 Lars Magne Ingebrigtsen + + * 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 + + * gnus.el: Quassia Gnus v0.37 is released. + +Sat Mar 7 20:10:42 1998 Lars Magne Ingebrigtsen + + * gnus-agent.el (gnus-agent-expire-days): New variable. + (gnus-agent-expire): New function. + +Sat Mar 7 17:35:53 1998 Lars Magne Ingebrigtsen + + * gnus.el: Quassia Gnus v0.36 is released. + +Sat Mar 7 17:29:20 1998 Lars Magne Ingebrigtsen + + * nntp.el (nntp-wait-for): Reversed logic. + +Sat Mar 7 17:19:04 1998 Lars Magne Ingebrigtsen + + * gnus.el: Quassia Gnus v0.35 is released. + +Sat Mar 7 15:01:57 1998 Lars Magne Ingebrigtsen + + * 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 + + * gnus-art.el (gnus-article-prepare): Mark articles as + downloadable. + +Wed Mar 4 22:33:27 1998 Ken Raeburn + + * gnus-int.el (gnus-get-function): New version, caches symbol + names. + +Fri Mar 6 01:10:22 1998 Ken Raeburn + + * 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 + + * 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 + + * 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 + + * nntp.el: Check whether the connection died. + +1998-03-01 Kim-Minh Kaplan + + * gnus.texi (Easy Picons): Removed references to + `gnus-group-display-picons'. + (Hard Picons): Ditto. + +Mon Mar 2 16:17:36 1998 Lars Magne Ingebrigtsen + + * 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 + + * 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 + + * 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 * gnus.el: Quassia Gnus v0.34 is released. diff --git a/lisp/Makefile b/lisp/Makefile deleted file mode 100644 index b949400..0000000 --- a/lisp/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -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 *~ - diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index df71437..397986f 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -49,6 +49,11 @@ :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) @@ -488,9 +493,9 @@ the actual number of articles toggled is returned." (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)) ?. ?/))) @@ -546,7 +551,7 @@ the actual number of articles toggled is returned." (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"))) @@ -1203,89 +1208,83 @@ The following commands are available: "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 () diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 762f0e9..6229bfb 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -2028,10 +2028,14 @@ If ALL-HEADERS is non-nil, no headers are hidden." (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 @@ -2306,7 +2310,7 @@ Argument LINES specifies lines to be scrolled down." '("\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) @@ -2327,22 +2331,26 @@ Argument LINES specifies lines to be scrolled down." (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) @@ -2350,7 +2358,10 @@ Argument LINES specifies lines to be scrolled down." (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. diff --git a/lisp/gnus-eform.el b/lisp/gnus-eform.el index 7cb3f7c..b0ff413 100644 --- a/lisp/gnus-eform.el +++ b/lisp/gnus-eform.el @@ -48,8 +48,8 @@ ;;; 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 diff --git a/lisp/gnus-ems.el b/lisp/gnus-ems.el index 9b8f91b..734723a 100644 --- a/lisp/gnus-ems.el +++ b/lisp/gnus-ems.el @@ -79,7 +79,7 @@ (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. @@ -89,9 +89,9 @@ (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 _ ___ _ _ _ ___ __ ___ __ _ ___ diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index d85c820..49a6cd2 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -776,7 +776,7 @@ The following commands are available: (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 "")) diff --git a/lisp/gnus-int.el b/lisp/gnus-int.el index 58f93a7..78a943a 100644 --- a/lisp/gnus-int.el +++ b/lisp/gnus-int.el @@ -134,17 +134,24 @@ If it is down, start it up (again)." (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)) diff --git a/lisp/gnus-picon.el b/lisp/gnus-picon.el index 7f04650..1efc228 100644 --- a/lisp/gnus-picon.el +++ b/lisp/gnus-picon.el @@ -184,17 +184,39 @@ arguments necessary for the job.") (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) @@ -233,7 +255,8 @@ arguments necessary for the job.") (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. @@ -242,11 +265,16 @@ To use: (setq gnus-article-x-face-command 'gnus-picons-display-x-face)" (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 diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 6637221..6e6802a 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -2608,14 +2608,12 @@ the thread are to be displayed." (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. @@ -2630,6 +2628,11 @@ If NO-DISPLAY, don't generate a summary buffer." (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))) @@ -4667,7 +4670,8 @@ This is meant to be called in `gnus-article-internal-prepare-hook'." ;; 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 @@ -5183,6 +5187,7 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil." 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) @@ -5422,7 +5427,8 @@ previous group instead." (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))))))) @@ -6497,6 +6503,7 @@ or `gnus-select-method', no matter what backend the article comes from." (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) diff --git a/lisp/gnus-win.el b/lisp/gnus-win.el index e6a2037..2d94679 100644 --- a/lisp/gnus-win.el +++ b/lisp/gnus-win.el @@ -182,7 +182,7 @@ See the Gnus manual for an explanation of the syntax used.") (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) @@ -267,6 +267,16 @@ See the Gnus manual for an explanation of the syntax used.") (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 @@ -300,15 +310,11 @@ See the Gnus manual for an explanation of the syntax used.") ;; 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. @@ -439,12 +445,7 @@ See the Gnus manual for an explanation of the syntax used.") (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) @@ -493,12 +494,9 @@ should have point." (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 @@ -517,10 +515,7 @@ should have point." (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) diff --git a/lisp/gnus.el b/lisp/gnus.el index 17d7c58..62e2d65 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -246,11 +246,11 @@ is restarted, and sometimes reloaded." :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 @@ -1628,7 +1628,9 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") ("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 @@ -1673,7 +1675,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") 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 diff --git a/lisp/nndoc.el b/lisp/nndoc.el index 067b2a8..9c4b235 100644 --- a/lisp/nndoc.el +++ b/lisp/nndoc.el @@ -87,8 +87,8 @@ from the document.") (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 . "^ *$") diff --git a/lisp/nndraft.el b/lisp/nndraft.el index be653df..6bbd1fb 100644 --- a/lisp/nndraft.el +++ b/lisp/nndraft.el @@ -125,7 +125,7 @@ "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)) diff --git a/lisp/nnheader.el b/lisp/nnheader.el index 5751973..44f3079 100644 --- a/lisp/nnheader.el +++ b/lisp/nnheader.el @@ -59,10 +59,7 @@ on your system, you could say something like: (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. @@ -241,8 +238,9 @@ on your system, you could say something like: (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. @@ -562,7 +560,7 @@ If FILE is t, return the buffer contents as a string." (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)))) diff --git a/lisp/nnml.el b/lisp/nnml.el index 68dcc5f..c037c73 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -480,8 +480,8 @@ all. This may very well take some time.") ;; 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)))) diff --git a/lisp/nntp.el b/lisp/nntp.el index 560dae1..8f10d3e 100644 --- a/lisp/nntp.el +++ b/lisp/nntp.el @@ -166,7 +166,7 @@ server there that you can connect to. See also (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 @@ -187,6 +187,9 @@ server there that you can connect to. See also ;;; 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) @@ -220,26 +223,44 @@ server there that you can connect to. See also (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)) @@ -258,7 +279,7 @@ server there that you can connect to. See also (when nntp-have-messaged (setq nntp-have-messaged nil) (message "")) - t))) + t)))) (unless discard (erase-buffer))))) @@ -658,7 +679,6 @@ server there that you can connect to. See also (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) @@ -671,7 +691,6 @@ server there that you can connect to. See also (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) @@ -729,10 +748,10 @@ reading." (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"))) diff --git a/texi/ChangeLog b/texi/ChangeLog index a3b0c50..f10df33 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,38 @@ +Sun Mar 8 13:56:37 1998 James Troup + + * gnus.texi (Group Highlighting): Removed old example. + +Sun Mar 8 00:19:24 1998 Lars Magne Ingebrigtsen + + * gnus.texi (Group Info): Fix ".". + +Sat Mar 7 17:09:49 1998 Lars Magne Ingebrigtsen + + * 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 + + * gnus.texi (Group Parameters): Mention add-to-list. + +Sat Feb 28 14:21:12 1998 Lars Magne Ingebrigtsen + + * gnus.texi (NNTP): Addition. + +1998-03-01 Kim-Minh Kaplan + + * gnus.texi (Easy Picons): Removed references to + `gnus-group-display-picons'. + (Hard Picons): Ditto. + +1998-03-01 Kim-Minh Kaplan + + * gnus.texi (Easy Picons): Removed references to + `gnus-group-display-picons'. + (Hard Picons): Ditto. + Mon Feb 23 18:05:09 1998 Lars Magne Ingebrigtsen * gnus.texi: Direntry not handled by Emacs 19.34. diff --git a/texi/Makefile b/texi/Makefile deleted file mode 100644 index ea5ef8f..0000000 --- a/texi/Makefile +++ /dev/null @@ -1,161 +0,0 @@ -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 diff --git a/texi/Makefile.in b/texi/Makefile.in index 2fc3cec..b8eb937 100644 --- a/texi/Makefile.in +++ b/texi/Makefile.in @@ -13,6 +13,9 @@ XINFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f sa LATEX=latex DVIPS=dvips PERL=perl +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +SHELL = /bin/sh all: gnus message diff --git a/texi/gnus.texi b/texi/gnus.texi index 3d28d62..350be7d 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -1,7 +1,7 @@ \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 @@ -316,7 +316,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Quassia Gnus 0.34 Manual +@title Gnus 5.6.2 Manual @author by Lars Magne Ingebrigtsen @page @@ -352,7 +352,7 @@ can be gotten by any nefarious means you can think of---@sc{nntp}, local 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 @@ -1281,17 +1281,6 @@ background is dark: ((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 @@ -1952,19 +1941,35 @@ groups from different @sc{nntp} servers. @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 @@ -1975,11 +1980,21 @@ list address instead. @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 @@ -2006,19 +2021,20 @@ posts in that group will be sent to @code{some.group.name}. @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 @@ -2096,16 +2112,9 @@ group. @code{dummy-variable} will be set to the result of the @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 @@ -8860,13 +8869,13 @@ present in this hook. @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: @@ -8894,7 +8903,7 @@ In this example, both login name and password have been supplied for the 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 @@ -9094,6 +9103,13 @@ A hook run before attempting to connect to an @sc{nntp} server. 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 @@ -11141,6 +11157,7 @@ Of course, to use it as such, you have to learn a few new commands. * 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. @@ -11537,6 +11554,21 @@ Agent (@code{gnus-agent-remove-server}). @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 @@ -14554,7 +14586,6 @@ To enable displaying picons, simply put the following line in your @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 @@ -14634,13 +14665,6 @@ Looks up and displays the picons for the author and the author's domain 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 @@ -15436,7 +15460,8 @@ David Moore---rewrite of @file{nnvirtual.el} and many other things. 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 @@ -15484,6 +15509,7 @@ Geoffrey T. Dairiki, Andre Deparade, Ulrik Dickow, Dave Disser, +Rui-Tao Dong, @c ? Joev Dubach, Michael Welsh Duggan, Dave Edmondson, @@ -15535,6 +15561,7 @@ Shlomo Mahlab, Nat Makarevitch, Istvan Marko, David Martin, +Jason R Mastaler, Gordon Matzigkeit, Timo Metzemakers, Richard Mlynarik, @@ -15551,9 +15578,11 @@ Masaharu Onishi, @c Onishi 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, @@ -15616,6 +15645,7 @@ actually are people who are using Gnus. Who'd'a thunk it! * 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 @@ -16147,6 +16177,137 @@ Emphasized text can be properly fontisized: @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 @@ -18866,7 +19027,7 @@ second is a more complex one: ("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, diff --git a/texi/message.texi b/texi/message.texi index f9142e4..be8d4ec 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -1,7 +1,7 @@ \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 @@ -42,7 +42,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Message 0.34 Manual +@title Message 5.6.2 Manual @author by Lars Magne Ingebrigtsen @page @@ -83,7 +83,7 @@ Message mode buffers. * 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.