From: morioka Date: Thu, 27 Nov 1997 17:23:32 +0000 (+0000) Subject: Quassia Gnus v0.17. X-Git-Tag: qgnus-0_17 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=4131ea9653854d4dd1b73263c52b6c0962ab74de;p=elisp%2Fgnus.git- Quassia Gnus v0.17. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7fb7fc2..b626cc5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,6 +1,179 @@ -Sat Sep 13 21:21:38 1997 Lars Magne Ingebrigtsen +Wed Nov 26 17:40:57 1997 Lars Magne Ingebrigtsen - * gnus.el: Quassia Gnus v0.1 is released. + * gnus.el: Quassia Gnus v0.17 is released. + +Wed Nov 26 16:04:25 1997 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-move-article): Don't work on canceled + articles. + + * gnus-start.el (gnus-subscribe-hierarchical-interactive): Use + `read-char-exclusive'. + + * gnus-sum.el (gnus-summary-mode): Localize + gnus-summary-dummy-line-format. + + * nnml.el (nnml-open-nov): Check that the file exists before + inserting it. + + * gnus-art.el (article-date-ut): Insert a newline if needed. + + * gnus-score.el (gnus-score-edit-current-scores): Protect against + nil score files. + + * gnus-start.el (gnus-newsrc-parse-options): Be more correct -- + match only hierarchies. + (gnus-gnus-to-quick-newsrc-format): Changed warning. + +Wed Nov 26 15:47:40 1997 Greg Klanderman + + * messagexmas.el (message-xmas-maybe-fontify): New definition. + +Wed Nov 26 15:43:53 1997 Lars Magne Ingebrigtsen + + * gnus-start.el (gnus-setup-news): Protect against nil + gnus-message-archive-method. + +1997-11-26 Christoph Wedler + + * gnus-art.el (gnus-article-edit-done): Update headers "Lines:", + "Content-Length:" and "X-Content-Length:" when present. + +Wed Nov 26 15:08:17 1997 Lars Magne Ingebrigtsen + + * nnmail.el (nnmail-process-unix-mail-format): Pop to the right + buffer on error. + (nnmail-process-mmdf-mail-format): Ditto. + +Wed Nov 26 13:54:04 1997 Joe Reiss + + * gnus-art.el (gnus-summary-save-in-rmail): Return the name of the + file. + +Wed Nov 26 13:50:01 1997 Alastair Burt + + * smiley.el: Balloon help, etc. + +Wed Nov 26 13:45:35 1997 Lars Magne Ingebrigtsen + + * gnus-util.el (gnus-kill-all-overlays): Remove check for XEmacs. + +1997-09-30 Dave Love + + * message.el: Don't require rmail. + +Wed Nov 26 13:37:50 1997 Kurt Swanson + + * gnus-group.el (gnus-group-setup-buffer): set-buffer. + +Wed Nov 26 13:31:54 1997 Lars Magne Ingebrigtsen + + * gnus-score.el (gnus-score-load-file): Don't create empty score + files when doing decays. + +Wed Nov 26 13:28:04 1997 Renaud Rioboo + + * nnmail.el (nnmail-move-inbox): Only bind default-directory when + calling external function. + +Wed Nov 26 13:03:45 1997 IWAMURO Motonori + + * gnus-kill.el (gnus-batch-score): Newsrc thinko. + +Wed Nov 26 10:31:17 1997 Lars Magne Ingebrigtsen + + * nnheader.el (nnheader-parse-head): Would break on Message-ID's + that spanned several lines. + + * gnus-util.el (gnus-date-iso8601): Didn't pick out the date + header. + + * gnus-demon.el (gnus-demon-scan-mail): Clean inboxes. + +1997-11-25 Christoph Wedler + + * gnus-picon.el (gnus-picons-x-face-sentinel): Would bug out in + headers with two X-Face lines. + +Wed Nov 26 08:54:26 1997 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-summary-update-info): Would use wrong group + name. + +1997-11-26 Hrvoje Niksic + + * gnus-spec.el (gnus-compile): Avoid multiple `c*addr's. + (gnus-compile): Require `bytecomp'. + +1997-11-25 Hrvoje Niksic + + * gnus-util.el (gnus-prin1): Bind `print-readably' to t. + + * gnus-xmas.el (gnus-xmas-kill-all-overlays): New function. + (gnus-xmas-define): Use it. + + * gnus-art.el (gnus-stop-date-timer): Use `nnheader-cancel-timer'. + + * message.el (message-header-lines): Specify format. + + * gnus-xmas.el (gnus-xmas-move-overlay): Use BUFFER. + (gnus-byte-code): Use `indirect-function'. + + * gnus-cite.el (gnus-cite-add-face): Would assign free variable. + +Wed Nov 26 08:31:28 1997 Lars Magne Ingebrigtsen + + * gnus-art.el (gnus-stop-date-timer): Cancel instead of delete. + (gnus-start-date-timer): Use the numerical prefix. + +Tue Nov 25 20:03:34 1997 Lars Magne Ingebrigtsen + + * gnus-draft.el (gnus-group-send-drafts): Activate group first. + +Tue Nov 25 19:57:55 1997 Dan Christensen + + * gnus-group.el (gnus-group-process-prefix): Skip topics. + +Tue Nov 25 19:54:00 1997 Lars Magne Ingebrigtsen + + * gnus-move.el (gnus-move-group-to-server): Protect agains + nil-ness. + +Tue Nov 25 19:03:38 1997 Lars Magne Ingebrigtsen + + * gnus.el: Quassia Gnus v0.16 is released. + +Tue Nov 25 16:05:01 1997 Lars Magne Ingebrigtsen + + * gnus-sum.el (gnus-read-header): Remove thread entry before + rebuilding. + + * gnus-cite.el (gnus-cite-add-face): Keep track of all overlays. + + * gnus-art.el (article-update-date-lapsed): New function. + (gnus-start-date-timer): New command. + (article-date-ut): Put the face in the right place. + (article-date-ut): Would move around. + + * gnus-group.el (gnus-group-read-ephemeral-group): Accept server + names. + + * gnus-srvr.el (gnus-browse-foreign-server): Use proper server + names. + + * gnus.el (gnus-group-prefixed-name): Give the right result for + native groups. + + * nnheader.el (nnheader-directory-files): New function. + + * nnmh.el (nnmh-request-list-1): Reversed check. + + * nnfolder.el (nnfolder-delete-mail): Would skip backwards one + line too much. + +Tue Nov 25 14:44:02 1997 SeokChan LEE + + * message.el (message-ignored-supersedes-headers): Typo. Mon Nov 24 18:46:37 1997 Lars Magne Ingebrigtsen diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 44bf80d..fdf779f 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -1282,7 +1282,7 @@ how much time has lapsed since DATE." header)) (date-regexp "^Date:[ \t]\\|^X-Sent:[ \t]") (inhibit-point-motion-hooks t) - bface eface) + bface eface newline) (when (and date (not (string= date ""))) (save-excursion (save-restriction @@ -1297,7 +1297,8 @@ how much time has lapsed since DATE." (delete-region (progn (beginning-of-line) (point)) (progn (end-of-line) (point))) (beginning-of-line)) - (goto-char (point-max))) + (goto-char (point-max)) + (setq newline t)) (insert (article-make-date-line date type)) ;; Do highlighting. (beginning-of-line) @@ -1305,7 +1306,10 @@ how much time has lapsed since DATE." (put-text-property (match-beginning 1) (1+ (match-end 1)) 'face bface) (put-text-property (match-beginning 2) (match-end 2) - 'face eface)))))))) + 'face eface)) + (when newline + (end-of-line) + (insert "\n")))))))) (defun article-make-date-line (date type) "Return a DATE line of TYPE." @@ -1411,24 +1415,29 @@ function and want to see what the date was before converting." (defun article-update-date-lapsed () "Function to be run from a timer to update the lapsed time line." (save-excursion - (when (gnus-buffer-live-p gnus-article-buffer) - (set-buffer gnus-article-buffer) - (goto-char (point-min)) - (when (re-search-forward "^X-Sent:" nil t) - (article-date-lapsed t))))) + (ignore-errors + (when (gnus-buffer-live-p gnus-article-buffer) + (set-buffer gnus-article-buffer) + (goto-char (point-min)) + (when (re-search-forward "^X-Sent:" nil t) + (article-date-lapsed t)))))) -(defun gnus-start-date-timer () - "Start a timer to update the X-Sent header in the article buffers." - (interactive) +(defun gnus-start-date-timer (&optional n) + "Start a timer to update the X-Sent header in the article buffers. +The numerical prefix says how frequently (in seconds) the function +is to run." + (interactive "p") + (unless n + (setq n 1)) (gnus-stop-date-timer) (setq article-lapsed-timer - (nnheader-run-at-time 1 1 'article-update-date-lapsed))) + (nnheader-run-at-time 1 n 'article-update-date-lapsed))) (defun gnus-stop-date-timer () "Stop the X-Sent timer." (interactive) (when article-lapsed-timer - (nnheader-delete-timer article-lapsed-timer) + (nnheader-cancel-timer article-lapsed-timer) (setq article-lapsed-timer nil))) (defun article-date-user (&optional highlight) @@ -1610,7 +1619,8 @@ Directory to save to is default to `gnus-article-save-directory'." (save-excursion (save-restriction (widen) - (gnus-output-to-rmail filename))))) + (gnus-output-to-rmail filename)))) + filename) (defun gnus-summary-save-in-mail (&optional filename) "Append this article to Unix mail file. @@ -1628,7 +1638,8 @@ Directory to save to is default to `gnus-article-save-directory'." (if (and (file-readable-p filename) (mail-file-babyl-p filename)) (gnus-output-to-rmail filename t) - (gnus-output-to-mail filename)))))) + (gnus-output-to-mail filename))))) + filename) (defun gnus-summary-save-in-file (&optional filename overwrite) "Append this article to file. @@ -1646,7 +1657,8 @@ Directory to save to is default to `gnus-article-save-directory'." (when (and overwrite (file-exists-p filename)) (delete-file filename)) - (gnus-output-to-file filename))))) + (gnus-output-to-file filename)))) + filename) (defun gnus-summary-write-to-file (&optional filename) "Write this article to a file. @@ -1671,7 +1683,8 @@ The directory to save in defaults to `gnus-article-save-directory'." (goto-char (point-min)) (when (search-forward "\n\n" nil t) (narrow-to-region (point) (point-max))) - (gnus-output-to-file filename))))) + (gnus-output-to-file filename)))) + filename) (defun gnus-summary-save-in-pipe (&optional command) "Pipe this article to subprocess." @@ -2559,6 +2572,28 @@ groups." (defun gnus-article-edit-done (&optional arg) "Update the article edits and exit." (interactive "P") + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (when (search-forward "\n\n" nil 1) + (let ((lines (count-lines (point) (point-max))) + (length (- (point-max) (point))) + (case-fold-search t) + (body (copy-marker (point)))) + (goto-char (point-min)) + (when (re-search-forward "^content-length:[ \t]\\([0-9]+\\)" body t) + (delete-region (match-beginning 1) (match-end 1)) + (insert (number-to-string length))) + (goto-char (point-min)) + (when (re-search-forward + "^x-content-length:[ \t]\\([0-9]+\\)" body t) + (delete-region (match-beginning 1) (match-end 1)) + (insert (number-to-string length))) + (goto-char (point-min)) + (when (re-search-forward "^lines:[ \t]\\([0-9]+\\)" body t) + (delete-region (match-beginning 1) (match-end 1)) + (insert (number-to-string lines))))))) (let ((func gnus-article-edit-done-function) (buf (current-buffer)) (start (window-start))) diff --git a/lisp/gnus-cite.el b/lisp/gnus-cite.el index ca1d579..4650599 100644 --- a/lisp/gnus-cite.el +++ b/lisp/gnus-cite.el @@ -859,7 +859,7 @@ See also the documentation for `gnus-article-highlight-citation'." ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line. (when face (let ((inhibit-point-motion-hooks t) - from to) + from to overlay) (goto-line number) (unless (eobp) ; Sometimes things become confused. (forward-char (length prefix)) diff --git a/lisp/gnus-demon.el b/lisp/gnus-demon.el index 40934ac..8347e55 100644 --- a/lisp/gnus-demon.el +++ b/lisp/gnus-demon.el @@ -280,6 +280,7 @@ minutes, the connection is closed." (save-window-excursion (let ((servers gnus-opened-servers) server) + (gnus-clear-inboxes-moved) (while (setq server (car (pop servers))) (and (gnus-check-backend-function 'request-scan (car server)) (or (gnus-server-opened server) diff --git a/lisp/gnus-draft.el b/lisp/gnus-draft.el index 8492475..b17356b 100644 --- a/lisp/gnus-draft.el +++ b/lisp/gnus-draft.el @@ -88,14 +88,14 @@ "Enter a mail/post buffer to edit and send the draft." (interactive) (let ((article (gnus-summary-article-number))) + (gnus-summary-mark-as-read article gnus-canceled-mark) (gnus-draft-setup article gnus-newsgroup-name) (push `((lambda () (when (buffer-name (get-buffer ,gnus-summary-buffer)) (save-excursion (set-buffer (get-buffer ,gnus-summary-buffer)) - (gnus-cache-possibly-remove-article ,article nil nil nil t) - (gnus-summary-mark-as-read ,article gnus-canceled-mark))))) + (gnus-cache-possibly-remove-article ,article nil nil nil t))))) message-send-actions))) (defun gnus-draft-send-message (&optional n) @@ -124,7 +124,7 @@ (defun gnus-group-send-drafts () "Send all sendable articles from the queue group." (interactive) - (gnus-request-group "nndraft:queue") + (gnus-activate-group "nndraft:queue") (save-excursion (let ((articles (nndraft-articles)) (unsendable (gnus-uncompress-range diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 6f05d2a..bd2cc6f 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -810,7 +810,7 @@ The following commands are available: (or level gnus-group-default-list-level gnus-level-subscribed)))) (defun gnus-group-setup-buffer () - (switch-to-buffer (get-buffer-create gnus-group-buffer)) + (set-buffer (get-buffer-create gnus-group-buffer)) (unless (eq major-mode 'gnus-group-mode) (gnus-add-current-to-buffer-list) (gnus-group-mode) @@ -1417,9 +1417,9 @@ Take into consideration N (the prefix) and the list of marked groups." (n (abs n)) group groups) (save-excursion - (while (and (> n 0) - (setq group (gnus-group-group-name))) - (push group groups) + (while (> n 0) + (if (setq group (gnus-group-group-name)) + (push group groups)) (setq n (1- n)) (gnus-group-next-group way))) (nreverse groups))) @@ -2403,16 +2403,15 @@ If REVERSE, sort in reverse order." (defun gnus-group-catchup-current (&optional n all) "Mark all articles not marked as unread in current newsgroup as read. -If prefix argument N is numeric, the ARG next newsgroups will be +If prefix argument N is numeric, the next N newsgroups will be caught up. If ALL is non-nil, marked articles will also be marked as read. Cross references (Xref: header) of articles are ignored. -The difference between N and actual number of newsgroups that were -caught up is returned." +The number of newsgroups that this function was unable to catch +up is returned." (interactive "P") - (unless (gnus-group-group-name) - (error "No group on the current line")) (let ((groups (gnus-group-process-prefix n)) (ret 0)) + (unless groups (error "No groups selected")) (if (not (or (not gnus-interactive-catchup) ;Without confirmation? gnus-expert-user diff --git a/lisp/gnus-kill.el b/lisp/gnus-kill.el index f2fad66..92e091f 100644 --- a/lisp/gnus-kill.el +++ b/lisp/gnus-kill.el @@ -676,10 +676,7 @@ marked as read or ticked are ignored." ;;;###autoload (defun gnus-batch-score () "Run batched scoring. -Usage: emacs -batch -l gnus -f gnus-batch-score ... -Newsgroups is a list of strings in Bnews format. If you want to score -the comp hierarchy, you'd say \"comp.all\". If you would not like to -score the alt hierarchy, you'd say \"!alt.all\"." +Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score" (interactive) (let* ((gnus-newsrc-options-n (gnus-newsrc-parse-options @@ -689,7 +686,7 @@ score the alt hierarchy, you'd say \"!alt.all\"." (nnmail-spool-file nil) (gnus-use-dribble-file nil) (gnus-batch-mode t) - group newsrc entry + info group newsrc entry ;; Disable verbose message. gnus-novice-user gnus-large-newsgroup gnus-options-subscribe gnus-auto-subscribed-groups @@ -699,14 +696,13 @@ score the alt hierarchy, you'd say \"!alt.all\"." (gnus-slave) ;; Apply kills to specified newsgroups in command line arguments. (setq newsrc (cdr gnus-newsrc-alist)) - (while (setq group (car (pop newsrc))) - (setq entry (gnus-gethash group gnus-newsrc-hashtb)) - (when (and (<= (gnus-info-level (car newsrc)) gnus-level-subscribed) + (while (setq info (pop newsrc)) + (setq group (gnus-info-group info) + entry (gnus-gethash group gnus-newsrc-hashtb)) + (when (and (<= (gnus-info-level info) gnus-level-subscribed) (and (car entry) (or (eq (car entry) t) - (not (zerop (car entry))))) - ;;(eq (gnus-matches-options-n group) 'subscribe) - ) + (not (zerop (car entry)))))) (gnus-summary-read-group group nil t nil t) (when (eq (current-buffer) (get-buffer gnus-summary-buffer)) (gnus-summary-exit)))) diff --git a/lisp/gnus-move.el b/lisp/gnus-move.el index f00fb3b..801f891 100644 --- a/lisp/gnus-move.el +++ b/lisp/gnus-move.el @@ -113,18 +113,18 @@ Update the .newsrc.eld file to reflect the change of nntp server." (goto-char (point-min)) (while (looking-at "^[0-9]+\t[^\t]*\t[^\t]*\t[^\t]*\t\\([^\t]*\\)\t") - (setq to-article - (gnus-gethash - (buffer-substring (match-beginning 1) (match-end 1)) - hashtb)) - ;; Add this article to the list of read articles. - (push to-article to-reads) - ;; See if there are any marks and then add them. - (when (setq mark (assq (read (current-buffer)) marks)) - (setq marks (delq mark marks)) - (setcar mark to-article) - (push mark to-marks)) - (forward-line 1)) + (when (setq to-article + (gnus-gethash + (buffer-substring (match-beginning 1) (match-end 1)) + hashtb)) + ;; Add this article to the list of read articles. + (push to-article to-reads) + ;; See if there are any marks and then add them. + (when (setq mark (assq (read (current-buffer)) marks)) + (setq marks (delq mark marks)) + (setcar mark to-article) + (push mark to-marks)) + (forward-line 1))) ;; Now we know what the read articles are and what the ;; article marks are. We transform the information ;; into the Gnus info format. diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index e7534f3..dbf2722 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -217,8 +217,7 @@ Thank you for your help in stamping out bugs. If ARG, post to the group under point. If ARG is 1, prompt for a group name." (interactive "P") - ;; Bind this variable here to make message mode hooks - ;; work ok. + ;; Bind this variable here to make message mode hooks work ok. (let ((gnus-newsgroup-name (if arg (if (= 1 (prefix-numeric-value arg)) diff --git a/lisp/gnus-picon.el b/lisp/gnus-picon.el index 47af8d8..ed11b59 100644 --- a/lisp/gnus-picon.el +++ b/lisp/gnus-picon.el @@ -255,7 +255,7 @@ annotations. Sets buffer to `gnus-picons-display-where'." (annot (cdr env))) (setq gnus-picons-processes-alist (remassq process gnus-picons-processes-alist)) - (when annot + (when (annotationp annot) (set-annotation-glyph annot (make-glyph gnus-picons-x-face-file-name)) (if (memq annot gnus-x-face-annotations) diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index be60027..4d91754 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -1008,19 +1008,21 @@ SCORE is the score to add." (defun gnus-score-edit-current-scores (file) "Edit the current score alist." (interactive (list gnus-current-score-file)) - (let ((winconf (current-window-configuration))) - (when (buffer-name gnus-summary-buffer) - (gnus-score-save)) - (gnus-make-directory (file-name-directory file)) - (setq gnus-score-edit-buffer (find-file-noselect file)) - (gnus-configure-windows 'edit-score) - (gnus-score-mode) - (setq gnus-score-edit-exit-function 'gnus-score-edit-done) - (make-local-variable 'gnus-prev-winconf) - (setq gnus-prev-winconf winconf)) - (gnus-message - 4 (substitute-command-keys - "\\\\[gnus-score-edit-exit] to save edits"))) + (if (not gnus-current-score-file) + (error "No current score file") + (let ((winconf (current-window-configuration))) + (when (buffer-name gnus-summary-buffer) + (gnus-score-save)) + (gnus-make-directory (file-name-directory file)) + (setq gnus-score-edit-buffer (find-file-noselect file)) + (gnus-configure-windows 'edit-score) + (gnus-score-mode) + (setq gnus-score-edit-exit-function 'gnus-score-edit-done) + (make-local-variable 'gnus-prev-winconf) + (setq gnus-prev-winconf winconf)) + (gnus-message + 4 (substitute-command-keys + "\\\\[gnus-score-edit-exit] to save edits")))) (defun gnus-score-edit-file (file) "Edit a score file." @@ -1096,6 +1098,7 @@ SCORE is the score to add." (eval (car (gnus-score-get 'eval alist)))) ;; Perform possible decays. (when (and gnus-decay-scores + (or cached (file-exists-p file)) (or (not decay) (gnus-decay-scores alist decay))) (gnus-score-set 'touched '(t) alist) diff --git a/lisp/gnus-spec.el b/lisp/gnus-spec.el index a39ba1d..6db4b31 100644 --- a/lisp/gnus-spec.el +++ b/lisp/gnus-spec.el @@ -502,6 +502,7 @@ If PROPS, insert the result." (defun gnus-compile () "Byte-compile the user-defined format specs." (interactive) + (require 'bytecomp) (let ((entries gnus-format-specs) (byte-compile-warnings '(unresolved callargs redefine)) entry gnus-tmp-func) @@ -512,14 +513,16 @@ If PROPS, insert the result." (setq entry (pop entries)) (if (eq (car entry) 'version) (setq gnus-format-specs (delq entry gnus-format-specs)) - (when (and (listp (caddr entry)) - (not (eq 'byte-code (caaddr entry))) - ;; Under XEmacs, it's (funcall #) - (not (and (eq 'funcall (caaddr entry)) - (compiled-function-p (car (cdaddr entry)))))) - (fset 'gnus-tmp-func `(lambda () ,(caddr entry))) - (byte-compile 'gnus-tmp-func) - (setcar (cddr entry) (gnus-byte-code 'gnus-tmp-func))))) + (let ((form (caddr entry))) + (when (and (listp form) + ;; Under GNU Emacs, it's (byte-code ...) + (not (eq 'byte-code (car form))) + ;; Under XEmacs, it's (funcall #) + (not (and (eq 'funcall (car form)) + (compiled-function-p (cadr form))))) + (fset 'gnus-tmp-func `(lambda () ,form)) + (byte-compile 'gnus-tmp-func) + (setcar (cddr entry) (gnus-byte-code 'gnus-tmp-func)))))) (push (cons 'version emacs-version) gnus-format-specs) ;; Mark the .newsrc.eld file as "dirty". diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index 9996ef4..f346f92 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -445,7 +445,8 @@ Can be used to turn version control on or off." (push prefix prefixes) (message "Descend hierarchy %s? ([y]nsq): " (substring prefix 1 (1- (length prefix)))) - (while (not (memq (setq ans (read-char)) '(?y ?\n ?\r ?n ?s ?q))) + (while (not (memq (setq ans (read-char-exclusive)) + '(?y ?\n ?\r ?n ?s ?q))) (ding) (message "Descend hierarchy %s? ([y]nsq): " (substring prefix 1 (1- (length prefix))))) @@ -473,7 +474,8 @@ Can be used to turn version control on or off." (setq groups (cdr groups)))) (t nil))) (message "Subscribe %s? ([n]yq)" (car groups)) - (while (not (memq (setq ans (read-char)) '(?y ?\n ?\r ?q ?n))) + (while (not (memq (setq ans (read-char-exclusive)) + '(?y ?\n ?\r ?q ?n))) (ding) (message "Subscribe %s? ([n]yq)" (car groups))) (setq group (car groups)) @@ -851,11 +853,12 @@ If LEVEL is non-nil, the news will be set up at level LEVEL." (gnus-read-newsrc-file rawfile)) ;; Make sure the archive server is available to all and sundry. - (setq gnus-server-alist (delq (assoc "archive" gnus-server-alist) - gnus-server-alist)) - (when (gnus-archive-server-wanted-p) - (push (cons "archive" gnus-message-archive-method) - gnus-server-alist)) + (when gnus-message-archive-method + (setq gnus-server-alist (delq (assoc "archive" gnus-server-alist) + gnus-server-alist)) + (when (gnus-archive-server-wanted-p) + (push (cons "archive" gnus-message-archive-method) + gnus-server-alist))) ;; If we don't read the complete active file, we fill in the ;; hashtb here. @@ -2195,11 +2198,12 @@ If FORCE is non-nil, the .newsrc file is read." (push (cons (concat "^" (buffer-substring (1+ (match-beginning 0)) - (match-end 0))) + (match-end 0)) + "\\($\\|\\.\\)") 'ignore) out) ;; There was no bang, so this is a "yes" spec. - (push (cons (concat "^" (match-string 0)) + (push (cons (concat "^" (match-string 0) "\\($\\|\\.\\)") 'subscribe) out)))) @@ -2254,9 +2258,9 @@ If FORCE is non-nil, the .newsrc file is read." (print-escape-newlines t)) (insert ";; -*- emacs-lisp -*-\n") (insert ";; Gnus startup file.\n") - (insert - ";; Never delete this file - touch .newsrc instead to force Gnus\n") - (insert ";; to read .newsrc.\n") + (insert "\ +;; Never delete this file -- if you want to force Gnus to read the +;; .newsrc file (if you have one), touch .newsrc instead.\n") (insert "(setq gnus-newsrc-file-version " (prin1-to-string gnus-version) ")\n") (let* ((gnus-killed-list diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 05f7b26..daaad7f 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1940,6 +1940,8 @@ The following commands are available: (setq gnus-newsgroup-name group) (make-local-variable 'gnus-summary-line-format) (make-local-variable 'gnus-summary-line-format-spec) + (make-local-variable 'gnus-summary-dummy-line-format) + (make-local-variable 'gnus-summary-dummy-line-format-spec) (make-local-variable 'gnus-summary-mark-positions) (make-local-hook 'post-command-hook) (add-hook 'post-command-hook 'gnus-clear-inboxes-moved nil t) @@ -4975,38 +4977,39 @@ The prefix argument ALL means to select all articles." (defun gnus-summary-update-info (&optional non-destructive) (save-excursion (let ((group gnus-newsgroup-name)) - (when gnus-newsgroup-kill-headers - (setq gnus-newsgroup-killed - (gnus-compress-sequence - (nconc - (gnus-set-sorted-intersection - (gnus-uncompress-range gnus-newsgroup-killed) - (setq gnus-newsgroup-unselected - (sort gnus-newsgroup-unselected '<))) - (setq gnus-newsgroup-unreads - (sort gnus-newsgroup-unreads '<))) - t))) - (unless (listp (cdr gnus-newsgroup-killed)) - (setq gnus-newsgroup-killed (list gnus-newsgroup-killed))) - (let ((headers gnus-newsgroup-headers)) - (when (and (not gnus-save-score) - (not non-destructive)) - (setq gnus-newsgroup-scored nil)) - ;; Set the new ranges of read articles. - (save-excursion + (when group + (when gnus-newsgroup-kill-headers + (setq gnus-newsgroup-killed + (gnus-compress-sequence + (nconc + (gnus-set-sorted-intersection + (gnus-uncompress-range gnus-newsgroup-killed) + (setq gnus-newsgroup-unselected + (sort gnus-newsgroup-unselected '<))) + (setq gnus-newsgroup-unreads + (sort gnus-newsgroup-unreads '<))) + t))) + (unless (listp (cdr gnus-newsgroup-killed)) + (setq gnus-newsgroup-killed (list gnus-newsgroup-killed))) + (let ((headers gnus-newsgroup-headers)) + (when (and (not gnus-save-score) + (not non-destructive)) + (setq gnus-newsgroup-scored nil)) + ;; Set the new ranges of read articles. + (save-excursion + (set-buffer gnus-group-buffer) + (gnus-undo-force-boundary)) + (gnus-update-read-articles + group (append gnus-newsgroup-unreads gnus-newsgroup-unselected)) + ;; Set the current article marks. + (gnus-update-marks) + ;; Do the cross-ref thing. + (when gnus-use-cross-reference + (gnus-mark-xrefs-as-read group headers gnus-newsgroup-unreads)) + ;; Do not switch windows but change the buffer to work. (set-buffer gnus-group-buffer) - (gnus-undo-force-boundary)) - (gnus-update-read-articles - group (append gnus-newsgroup-unreads gnus-newsgroup-unselected)) - ;; Set the current article marks. - (gnus-update-marks) - ;; Do the cross-ref thing. - (when gnus-use-cross-reference - (gnus-mark-xrefs-as-read group headers gnus-newsgroup-unreads)) - ;; Do not switch windows but change the buffer to work. - (set-buffer gnus-group-buffer) - (unless (gnus-ephemeral-group-p gnus-newsgroup-name) - (gnus-group-update-group group)))))) + (unless (gnus-ephemeral-group-p group) + (gnus-group-update-group group))))))) (defun gnus-summary-save-newsrc (&optional force) "Save the current number of read/marked articles in the dribble buffer. @@ -6872,9 +6875,9 @@ and `request-accept' functions." ((eq action 'copy) (save-excursion (set-buffer copy-buf) - (gnus-request-article-this-buffer article gnus-newsgroup-name) - (gnus-request-accept-article - to-newsgroup select-method (not articles)))) + (when (gnus-request-article-this-buffer article gnus-newsgroup-name) + (gnus-request-accept-article + to-newsgroup select-method (not articles))))) ;; Crosspost the article. ((eq action 'crosspost) (let ((xref (message-tokenize-header diff --git a/lisp/gnus-util.el b/lisp/gnus-util.el index 5cbf09e..8cca4a9 100644 --- a/lisp/gnus-util.el +++ b/lisp/gnus-util.el @@ -381,7 +381,7 @@ Cache the result as a text property stored in DATE." (defun gnus-date-iso8601 (header) "Convert the date field in HEADER to YYMMDDTHHMMSS" (condition-case () - (gnus-time-iso8601 (gnus-date-get-time header)) + (gnus-time-iso8601 (gnus-date-get-time (mail-header-date header))) (error ""))) (defun gnus-mode-string-quote (string) @@ -528,12 +528,11 @@ Timezone package is used." (defun gnus-kill-all-overlays () "Delete all overlays in the current buffer." - (unless gnus-xemacs - (let* ((overlayss (overlay-lists)) - (buffer-read-only nil) - (overlays (delq nil (nconc (car overlayss) (cdr overlayss))))) - (while overlays - (delete-overlay (pop overlays)))))) + (let* ((overlayss (overlay-lists)) + (buffer-read-only nil) + (overlays (delq nil (nconc (car overlayss) (cdr overlayss))))) + (while overlays + (delete-overlay (pop overlays))))) (defvar gnus-work-buffer " *gnus work*") @@ -580,8 +579,9 @@ Timezone package is used." (defun gnus-prin1 (form) "Use `prin1' on FORM in the current buffer. -Bind `print-quoted' to t while printing." +Bind `print-quoted' and `print-readably' to t while printing." (let ((print-quoted t) + (print-readably t) print-level print-length) (prin1 form (current-buffer)))) diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index d989f6a..6a67e2b 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -244,7 +244,13 @@ call it with the value of the `gnus-data' text property." (funcall fun data)))) (defun gnus-xmas-move-overlay (extent start end &optional buffer) - (set-extent-endpoints extent start end)) + (set-extent-endpoints extent start end buffer)) + +(defun gnus-xmas-kill-all-overlays () + "Delete all extents in the current buffer." + (map-extents (lambda (extent ignore) + (delete-extent extent) + nil))) ;; Fixed by Christopher Davis . (defun gnus-xmas-article-add-button (from to fun &optional data) @@ -414,13 +420,13 @@ call it with the value of the `gnus-data' text property." (fset 'gnus-overlay-put 'set-extent-property) (fset 'gnus-move-overlay 'gnus-xmas-move-overlay) (fset 'gnus-overlay-end 'extent-end-position) + (fset 'gnus-kill-all-overlays 'gnus-xmas-kill-all-overlays) (fset 'gnus-extent-detached-p 'extent-detached-p) (fset 'gnus-add-text-properties 'gnus-xmas-add-text-properties) (fset 'gnus-put-text-property 'gnus-xmas-put-text-property) (fset 'gnus-deactivate-mark 'ignore) (fset 'gnus-window-edges 'window-pixel-edges) - (require 'text-props) (if (and (<= emacs-major-version 19) (< emacs-minor-version 14)) (fset 'gnus-set-text-properties 'gnus-xmas-set-text-properties)) @@ -445,8 +451,8 @@ call it with the value of the `gnus-data' text property." (defun gnus-byte-code (func) "Return a form that can be `eval'ed based on FUNC." - (let ((fval (symbol-function func))) - (if (byte-code-function-p fval) + (let ((fval (indirect-function func))) + (if (compiled-function-p fval) (list 'funcall fval) (cons 'progn (cdr (cdr fval)))))) diff --git a/lisp/gnus.el b/lisp/gnus.el index 0c4d048..b9e261a 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -244,7 +244,7 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "0.16" +(defconst gnus-version-number "0.17" "Version number for this version of Gnus.") (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number) diff --git a/lisp/message.el b/lisp/message.el index 8717431..1c211aa 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -32,9 +32,6 @@ (eval-when-compile (require 'cl)) (require 'mailheader) -(condition-case nil - (require 'rmail) - (t (message "Ignore any errors about rmail from this file"))) (require 'nnheader) (require 'timezone) (require 'easymenu) @@ -542,6 +539,7 @@ If stringp, use this; if non-nil, use no host name (user name only)." (define-widget 'message-header-lines 'text "All header lines must be LFD terminated." :valid-regexp "^\\'" + :format "%t:\n%v" :error "All header lines must be newline terminated") (defcustom message-default-headers "" @@ -777,6 +775,8 @@ Defaults to `text-mode-abbrev-table'.") (0 'message-cited-text-face)))) "Additional expressions to highlight in Message mode.") +(put 'message-mode 'font-lock-defaults '(message-font-lock-keywords t)) + (defvar message-face-alist '((bold . bold-region) (underline . underline-region) @@ -1262,8 +1262,6 @@ C-c C-r message-caesar-buffer-body (rot13 the message body)." (setq major-mode 'message-mode) (setq mode-name "Message") (setq buffer-offer-save t) - (make-local-variable 'font-lock-defaults) - (setq font-lock-defaults '(message-font-lock-keywords t)) (make-local-variable 'facemenu-add-face-function) (make-local-variable 'facemenu-remove-face-function) (setq facemenu-add-face-function diff --git a/lisp/messagexmas.el b/lisp/messagexmas.el index 4fd13d2..31fc6bf 100644 --- a/lisp/messagexmas.el +++ b/lisp/messagexmas.el @@ -93,9 +93,8 @@ If it is non-nil, it must be a toolbar. The five legal values are (fset 'message-exchange-point-and-mark 'message-xmas-exchange-point-and-mark) (defun message-xmas-maybe-fontify () - (when (and (featurep 'font-lock) - font-lock-auto-fontify) - (turn-on-font-lock))) + (when (featurep 'font-lock) + (font-lock-set-defaults))) (defun message-xmas-make-caesar-translation-table (n) "Create a rot table with offset N." diff --git a/lisp/nnheader.el b/lisp/nnheader.el index 59353b9..e9b66fa 100644 --- a/lisp/nnheader.el +++ b/lisp/nnheader.el @@ -214,8 +214,9 @@ on your system, you could say something like: (goto-char p) (if (search-forward "\nmessage-id:" nil t) (buffer-substring - (1- (or (search-forward "<" nil t) (point))) - (or (search-forward ">" nil t) (point))) + (1- (or (search-forward "<" (gnus-point-at-eol) t) + (point))) + (or (search-forward ">" (gnus-point-at-eol) t) (point))) ;; If there was no message-id, we just fake one to make ;; subsequent routines simpler. (nnheader-generate-fake-message-id))) diff --git a/lisp/nnmail.el b/lisp/nnmail.el index 978a8bd..dc112f2 100644 --- a/lisp/nnmail.el +++ b/lisp/nnmail.el @@ -445,6 +445,8 @@ parameter. It should return nil, `warn' or `delete'." (defvar nnmail-split-history nil "List of group/article elements that say where the previous split put messages.") +(defvar nnmail-current-spool nil) + (defvar nnmail-pop-password nil "*Password to use when reading mail from a POP server, if required.") @@ -616,17 +618,17 @@ parameter. It should return nil, `warn' or `delete'." (save-excursion (setq errors (generate-new-buffer " *nnmail loss*")) (buffer-disable-undo errors) - (let ((default-directory "/")) - (if (nnheader-functionp nnmail-movemail-program) - (condition-case err - (progn - (funcall nnmail-movemail-program inbox tofile) - (setq result 0)) - (error - (save-excursion - (set-buffer errors) - (insert (prin1-to-string err)) - (setq result 255)))) + (if (nnheader-functionp nnmail-movemail-program) + (condition-case err + (progn + (funcall nnmail-movemail-program inbox tofile) + (setq result 0)) + (error + (save-excursion + (set-buffer errors) + (insert (prin1-to-string err)) + (setq result 255)))) + (let ((default-directory "/")) (setq result (apply 'call-process @@ -877,7 +879,7 @@ is a spool. If not using procmail, return GROUP." (goto-char (match-beginning 0)))) ;; Possibly wrong format? (progn - (pop-to-buffer (current-buffer)) + (pop-to-buffer (find-file-noselect nnmail-current-spool)) (error "Error, unknown mail format! (Possibly corrupted.)")) ;; Carry on until the bitter end. (while (not (eobp)) @@ -964,7 +966,7 @@ is a spool. If not using procmail, return GROUP." (forward-line 1))) ;; Possibly wrong format? (progn - (pop-to-buffer (current-buffer)) + (pop-to-buffer (find-file-noselect nnmail-current-spool)) (error "Error, unknown mail format! (Possibly corrupted.)")) ;; Carry on until the bitter end. (while (not (eobp)) @@ -1550,7 +1552,7 @@ See the documentation for the variable `nnmail-split-fancy' for documentation." (setq nnmail-split-history nil)) (let* ((spools (nnmail-get-spool-files group)) (group-in group) - incoming incomings spool) + nnmail-current-spool incoming incomings spool) (when (and (nnmail-get-value "%s-get-new-mail" method) nnmail-spool-file) ;; We first activate all the groups. @@ -1572,6 +1574,7 @@ See the documentation for the variable `nnmail-split-fancy' for documentation." (nnheader-message 3 "%s: Reading incoming mail..." method) (when (and (nnmail-move-inbox spool) (file-exists-p nnmail-crash-box)) + (setq nnmail-current-spool spool) ;; There is new mail. We first find out if all this mail ;; is supposed to go to some specific group. (setq group (nnmail-get-split-group spool group-in)) diff --git a/lisp/nnml.el b/lisp/nnml.el index 06f016d..eb36725 100644 --- a/lisp/nnml.el +++ b/lisp/nnml.el @@ -684,7 +684,8 @@ all. This may very well take some time.") (concat (nnmail-group-pathname group nnml-directory) nnml-nov-file-name)) (erase-buffer) - (nnheader-insert-file-contents nnml-nov-buffer-file-name)) + (when (file-exists-p nnml-nov-buffer-file-name) + (nnheader-insert-file-contents nnml-nov-buffer-file-name))) (push (cons group buffer) nnml-nov-buffer-alist) buffer))) diff --git a/lisp/nnoo.el b/lisp/nnoo.el index c28c888..84924d9 100644 --- a/lisp/nnoo.el +++ b/lisp/nnoo.el @@ -219,7 +219,10 @@ (nconc bstate (list (cons current state)))))) (defsubst nnoo-current-server-p (backend server) - (equal (nnoo-current-server backend) server)) + (equal (nnoo-current-server backend) + (if nnoo-parent-backend + (format "%s+%s" nnoo-parent-backend server) + server))) (defun nnoo-current-server (backend) (nth 1 (assq backend nnoo-state-alist))) diff --git a/lisp/smiley.el b/lisp/smiley.el index 2a66080..64576db 100644 --- a/lisp/smiley.el +++ b/lisp/smiley.el @@ -150,7 +150,6 @@ above them." :type 'face :group 'smiley) - (defvar smiley-glyph-cache nil) (defvar smiley-running-xemacs (string-match "XEmacs" emacs-version)) @@ -158,6 +157,14 @@ above them." "Keymap to toggle smiley states.") (define-key smiley-map [(button2)] 'smiley-toggle-extent) +(define-key smiley-map [(button3)] 'smiley-popup-menu) + +(defun smiley-popup-menu (e) + (interactive "e") + (popup-menu + `("Smilies" + ["Toggle This Smiley" (smiley-toggle-extent ,e) t] + ["Toggle All Smilies" (smiley-toggle-extents ,e) t]))) (defun smiley-create-glyph (smiley pixmap) (and @@ -201,6 +208,23 @@ above them." (reveal-annotation ant) (set-extent-property ext 'invisible t))))))) +(defun smiley-toggle-extents (e) + (interactive "e") + (map-extents + '(lambda (e void) + (let (ant) + (if (annotationp (setq ant (extent-property e 'smiley-annotation))) + (progn + (if (eq (extent-property e 'invisible) nil) + (progn + (reveal-annotation ant) + (set-extent-property e 'invisible t) + ) + (hide-annotation ant) + (set-extent-property e 'invisible nil)))) + nil)) + (event-buffer e))) + ;;;###autoload (defun smiley-buffer (&optional buffer st nd) (interactive) @@ -214,6 +238,12 @@ above them." smiley-regexp-alist)) (case-fold-search nil) entry regexp beg group file) + (map-extents + '(lambda (e void) + (when (or (extent-property e 'smiley-extent) + (extent-property e 'smiley-annotation)) + (delete-extent e))) + buffer st nd) (goto-char (or st (point-min))) (setq beg (point)) ;; loop through alist @@ -243,7 +273,14 @@ above them." (set-extent-property ant 'keymap smiley-map) ;; remember each other (set-extent-property ant 'smiley-extent ext) - (set-extent-property ext 'smiley-annotation ant)) + (set-extent-property ext 'smiley-annotation ant) + ;; Help + (set-extent-property ext 'balloon-help + "Mouse button2 - toggle smiley +Mouse button3 - menu") + (set-extent-property ant 'balloon-help + "Mouse button2 - toggle smiley +Mouse button3 - menu")) (when (smiley-end-paren-p start end) (make-annotation ")" end 'text)) (goto-char end))))))))) diff --git a/texi/gnus.texi b/texi/gnus.texi index e3197ee..a4df6ad 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename gnus -@settitle Quassia Gnus 0.16 Manual +@settitle Quassia Gnus 0.17 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -313,7 +313,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Quassia Gnus 0.16 Manual +@title Quassia Gnus 0.17 Manual @author by Lars Magne Ingebrigtsen @page @@ -349,7 +349,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.16. +This manual corresponds to Quassia Gnus 0.17. @end ifinfo @@ -415,6 +415,9 @@ If things do not go smoothly at startup, you have to twiddle some variables in your @file{~/.gnus} file. This file is similar to @file{~/.emacs}, but is read when gnus starts. +If you puzzle at any terms used in this manual, please refer to the +terminology section (@pxref{Terminology}). + @menu * Finding the News:: Choosing a method for getting news. * The First Time:: What does Gnus do the first time you start it? @@ -1697,6 +1700,8 @@ to 5. The default is 6. @node Group Score @section Group Score @cindex group score +@cindex group rank +@cindex rank You would normally keep important groups on high levels, but that scheme is somewhat restrictive. Don't you wish you could have Gnus sort the @@ -2229,12 +2234,12 @@ Sort by group level. @item gnus-group-sort-by-score @findex gnus-group-sort-by-score -Sort by group score. +Sort by group score. @xref{Group Score}. @item gnus-group-sort-by-rank @findex gnus-group-sort-by-rank Sort by group score and then the group level. The level and the score -are, when taken together, the group's @dfn{rank}. +are, when taken together, the group's @dfn{rank}. @xref{Group Score}. @item gnus-group-sort-by-unread @findex gnus-group-sort-by-unread @@ -2278,13 +2283,13 @@ Sort the group buffer by group level @kindex G S v (Group) @findex gnus-group-sort-groups-by-score Sort the group buffer by group score -(@code{gnus-group-sort-groups-by-score}). +(@code{gnus-group-sort-groups-by-score}). @xref{Group Score}. @item G S r @kindex G S r (Group) @findex gnus-group-sort-groups-by-rank Sort the group buffer by group rank -(@code{gnus-group-sort-groups-by-rank}). +(@code{gnus-group-sort-groups-by-rank}). @xref{Group Score}. @item G S m @kindex G S m (Group) @@ -2321,13 +2326,13 @@ Sort the process/prefixed groups in the group buffer by group level @kindex G P v (Group) @findex gnus-group-sort-selected-groups-by-score Sort the process/prefixed groups in the group buffer by group score -(@code{gnus-group-sort-selected-groups-by-score}). +(@code{gnus-group-sort-selected-groups-by-score}). @xref{Group Score}. @item G P r @kindex G P r (Group) @findex gnus-group-sort-selected-groups-by-rank Sort the process/prefixed groups in the group buffer by group rank -(@code{gnus-group-sort-selected-groups-by-rank}). +(@code{gnus-group-sort-selected-groups-by-rank}). @xref{Group Score}. @item G P m @kindex G P m (Group) @@ -2747,13 +2752,13 @@ Sort the current topic by group level @kindex T S v (Topic) @findex gnus-topic-sort-groups-by-score Sort the current topic by group score -(@code{gnus-topic-sort-groups-by-score}). +(@code{gnus-topic-sort-groups-by-score}). @xref{Group Score}. @item T S r @kindex T S r (Topic) @findex gnus-topic-sort-groups-by-rank Sort the current topic by group rank -(@code{gnus-topic-sort-groups-by-rank}). +(@code{gnus-topic-sort-groups-by-rank}). @xref{Group Score}. @item T S m @kindex T S m (Topic) @@ -11827,6 +11832,14 @@ all the time. This command will flush the cache @end table +You can do scoring from the command line by saying something like: + +@findex gnus-batch-score +@cindex batch scoring +@example +$ emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score +@end example + @node Score Variables @section Score Variables @@ -15315,6 +15328,7 @@ Brad Howes, François Felix Ingrand, Ishikawa Ichiro, @c Ishikawa Lee Iverson, +Iwamuro Motonori, @c Iwamuro Rajappa Iyer, Andreas Jaeger, Randell Jesup, @@ -16148,6 +16162,12 @@ A group that exists in the @file{.newsrc} file, but isn't known to the server (i.e., it isn't in the active file), is a @emph{bogus group}. This means that the group probably doesn't exist (any more). +@item activating +@cindex activating groups +The act of asking the server for info on a group and computing the +number of unread articles is called @dfn{activating the group}. +Un-activated groups are listed with @samp{*} in the group buffer. + @item server @cindex server A machine one can connect to and get news (or mail) from. @@ -17520,11 +17540,13 @@ second is a more complex one: The first element is the @dfn{group name}---as Gnus knows the group, anyway. The second element is the @dfn{subscription level}, which -normally is a small integer. The third element is a list of ranges of -read articles. The fourth element is a list of lists of article marks -of various kinds. The fifth element is the select method (or virtual -server, if you like). The sixth element is a list of @dfn{group -parameters}, which is what this section is about. +normally is a small integer. (It can also be the @dfn{rank}, which is a +cons cell where the @code{car} is the level and the @code{cdr} is the +score.) The third element is a list of ranges of read articles. The +fourth element is a list of lists of article marks of various kinds. +The fifth element is the select method (or virtual server, if you like). +The sixth element is a list of @dfn{group parameters}, which is what +this section is about. Any of the last three elements may be missing if they are not required. In fact, the vast majority of groups will normally only have the first @@ -17533,11 +17555,14 @@ three elements, which saves quite a lot of cons cells. Here's a BNF definition of the group info format: @example -info = "(" group space level space read +info = "(" group space ralevel space read [ "" / [ space marks-list [ "" / [ space method [ "" / space parameters ] ] ] ] ] ")" group = quote quote +ralevel = rank / level level = +rank = "(" level "." score ")" +score = read = range marks-lists = nil / "(" *marks ")" marks = "(" range ")" @@ -17563,7 +17588,7 @@ Get/set the group name. @itemx gnus-info-set-rank @findex gnus-info-rank @findex gnus-info-set-rank -Get/set the group rank. +Get/set the group rank (@pxref{Group Score}). @item gnus-info-level @itemx gnus-info-set-level @@ -17575,7 +17600,7 @@ Get/set the group level. @itemx gnus-info-set-score @findex gnus-info-score @findex gnus-info-set-score -Get/set the group score. +Get/set the group score (@pxref{Group Score}). @item gnus-info-read @itemx gnus-info-set-read diff --git a/texi/message.texi b/texi/message.texi index 47a080d..e3db9a5 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename message -@settitle Message 0.16 Manual +@settitle Message 0.17 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -39,7 +39,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Message 0.16 Manual +@title Message 0.17 Manual @author by Lars Magne Ingebrigtsen @page @@ -67,19 +67,20 @@ into another language, under the above conditions for modified versions. @node Top @top Message -All message composition (both mail and news) takes place in Message mode -buffers. +All message composition from Gnus (both mail and news) takes place in +Message mode buffers. @menu * Interface:: Setting up message buffers. * Commands:: Commands you can execute in message mode buffers. * Variables:: Customizing the message buffers. * Compatibility:: Making Message backwards compatible. +* Appendices:: More technical things. * Index:: Variable, function and concept index. * Key Index:: List of Message mode keys. @end menu -This manual corresponds to Message 0.16. Message is distributed with +This manual corresponds to Message 0.17. Message is distributed with the Gnus distribution bearing the same version number as this manual has. @@ -116,7 +117,7 @@ The @code{message-mail} command pops up a new message buffer. Two optional parameters are accepted: The first will be used as the @code{To} header and the second as the @code{Subject} header. If these -aren't present, those two headers will be empty. +are @code{nil}, those two headers will be empty. @node New News Message @@ -127,7 +128,7 @@ The @code{message-news} command pops up a new message buffer. This function accepts two optional parameters. The first will be used as the @code{Newsgroups} header and the second as the @code{Subject} -header. If these aren't present, those two headers will be empty. +header. If these are @code{nil}, those two headers will be empty. @node Reply @@ -138,9 +139,9 @@ The @code{message-reply} function pops up a message buffer that's a reply to the message in the current buffer. @vindex message-reply-to-function -Message uses the normal methods to determine where replies are to go, -but you can change the behavior to suit your needs by fiddling with the -@code{message-reply-to-function} variable. +Message uses the normal methods to determine where replies are to go +(@pxref{Responding}), but you can change the behavior to suit your needs +by fiddling with the @code{message-reply-to-function} variable. If you want the replies to go to the @code{Sender} instead of the @code{From}, you could do something like this: @@ -411,7 +412,12 @@ Yank the message that's being replied to into the message buffer @item C-c C-q @kindex C-c C-q @findex message-fill-yanked-message -Fill the yanked message (@code{message-fill-yanked-message}). +Fill the yanked message (@code{message-fill-yanked-message}). Warning: +Can severely mess up the yanked text if its quoting conventions are +strange. You'll quickly get a feel for when it's safe, though. Anyway, +just remember that @kbd{C-x u} (@code{undo}) is available and you'll be +all right. + @item C-c C-w @kindex C-c C-w @@ -431,7 +437,15 @@ removed. @item message-citation-line-function @vindex message-citation-line-function Function called to insert the citation line. The default is -@code{message-insert-citation-line}. +@code{message-insert-citation-line}, which will lead to citation lines +that look like: + +@example +Hallvard B Furuseth writes: +@end example + +Point will be at the beginning of the body of the message when this +function is called. @item message-yank-prefix @vindex message-yank-prefix @@ -453,7 +467,8 @@ Number of spaces to indent yanked messages. @findex sc-cite-original @cindex Supercite Function for citing an original message. The default is -@code{message-cite-original}. You can also set it to +@code{message-cite-original}, which simply inserts the original message +and prepends @samp{> } to each line. You can also set it to @code{sc-cite-original} to use Supercite. @item message-indent-citation-function @@ -638,10 +653,11 @@ expansions have to be done explicitly. @node Message Headers @section Message Headers -Message is quite aggressive on the message generation front. It has -to be -- it's a combined news and mail agent. To be able to send -combined messages, it has to generate all headers itself to ensure that -mail and news copies of messages look sufficiently similar. +Message is quite aggressive on the message generation front. It has to +be -- it's a combined news and mail agent. To be able to send combined +messages, it has to generate all headers itself (instead of letting the +mail/news system do it) to ensure that mail and news copies of messages +look sufficiently similar. @table @code @@ -729,8 +745,9 @@ instead, set this variable to @code{message-send-mail-with-mh}. @vindex message-mh-deletable-headers Most versions of MH doesn't like being fed messages that contain the headers in this variable. If this variable is non-@code{nil} (which is -the default), these headers will be removed before mailing. Set it to -@code{nil} if your MH can handle these headers. +the default), these headers will be removed before mailing when sending +messages via MH. Set it to @code{nil} if your MH can handle these +headers. @end table @@ -926,7 +943,8 @@ Function used to send the current buffer as news. The default is @item message-post-method @vindex message-post-method -Method used for posting a prepared news message. +Gnusish @dfn{select method} (see the Gnus manual for details) used for +posting a prepared news message. @end table @@ -1172,6 +1190,74 @@ This will initialize many Message variables from the values in the corresponding mail variables. +@node Appendices +@chapter Appendices + +@menu +* Responses:: Standard rules for determining where responses go. +@end menu + + +@node Responses +@section Responses + +To determine where a message is to go, the following algorithm is used +by default. + +@table @def +@item reply +A @dfn{reply} is when you want to respond @emph{just} to the person who +sent the message via mail. There will only be one recipient. To +determine who the recipient will be, the following headers are +consulted, in turn: + +@table @code +@item Reply-To + +@item From +@end table + + +@item wide reply +A @dfn{wide reply} is a mail response that includes @emph{all} entities +mentioned in the message you are responded to. All mailboxes from the +following headers will be concatenated to form the outgoing +@code{To}/@code{Cc} headers: + +@table +@item From +(unless there's a @code{Reply-To}, in which case that is used instead). + +@item Cc + +@item To +@end table + +If a @code{Mail-Copies-To} header is present, it will also be included +in the list of mailboxes. If this header is @samp{never}, that means +that the @code{From} (or @code{Reply-To}) mailbox will be suppressed. + + +@item followup +A @dfn{followup} is a response sent via news. The following headers +(listed in order of precedence) determine where the response is to be +sent: + +@table @code + +@item Followup-To + +@item Newsgroups + +@end table + +If a @code{Mail-Copies-To} header is present, it will be used as the +basis of the new @code{Cc} header, except if this header is +@samp{never}. + +@end table + + @node Index @chapter Index