From 77c2b3c6707324bdf2d5376e1c97cdfff7014c74 Mon Sep 17 00:00:00 2001 From: morioka Date: Thu, 27 Nov 1997 09:08:36 +0000 Subject: [PATCH] Quassia Gnus v0.16. --- lisp/gnus-art.el | 47 ++++++++++++++++++------ lisp/gnus-cite.el | 9 ++++- lisp/gnus-group.el | 4 +- lisp/gnus-picon.el | 24 ++++++------ lisp/gnus-srvr.el | 20 +++++----- lisp/gnus-sum.el | 103 ++++++++++++++++++++++++++++++---------------------- lisp/gnus-uu.el | 1 + lisp/gnus-xmas.el | 1 + lisp/gnus.el | 9 +++-- lisp/message.el | 49 +++++++++++++------------ lisp/nnfolder.el | 4 +- lisp/nnheader.el | 10 +++++ lisp/nnmh.el | 10 ++--- lisp/nnweb.el | 6 +++ texi/Makefile | 57 ++++++----------------------- texi/gnus.texi | 25 +++++++++---- texi/message.texi | 6 +-- 17 files changed, 215 insertions(+), 170 deletions(-) diff --git a/lisp/gnus-art.el b/lisp/gnus-art.el index 992dd3f..44bf80d 100644 --- a/lisp/gnus-art.el +++ b/lisp/gnus-art.el @@ -526,6 +526,8 @@ displayed by the first non-nil matching CONTENT face." ;;; Internal variables +(defvar article-lapsed-timer nil) + (defvar gnus-article-mode-syntax-table (let ((table (copy-syntax-table text-mode-syntax-table))) (modify-syntax-entry ?- "w" table) @@ -1292,14 +1294,15 @@ how much time has lapsed since DATE." (setq bface (get-text-property (gnus-point-at-bol) 'face) eface (get-text-property (1- (gnus-point-at-eol)) 'face)) - (message-remove-header date-regexp t) + (delete-region (progn (beginning-of-line) (point)) + (progn (end-of-line) (point))) (beginning-of-line)) (goto-char (point-max))) (insert (article-make-date-line date type)) ;; Do highlighting. - (forward-line -1) + (beginning-of-line) (when (looking-at "\\([^:]+\\): *\\(.*\\)$") - (put-text-property (match-beginning 1) (match-end 1) + (put-text-property (match-beginning 1) (1+ (match-end 1)) 'face bface) (put-text-property (match-beginning 2) (match-end 2) 'face eface)))))))) @@ -1314,18 +1317,16 @@ how much time has lapsed since DATE." ((eq type 'local) (concat "Date: " (condition-case () (timezone-make-date-arpa-standard date) - (error date)) - "\n")) + (error date)))) ;; Convert to Universal Time. ((eq type 'ut) (concat "Date: " (condition-case () (timezone-make-date-arpa-standard date nil "UT") - (error date)) - "\n")) + (error date)))) ;; Get the original date from the article. ((eq type 'original) - (concat "Date: " date "\n")) + (concat "Date: " date)) ;; Let the user define the format. ((eq type 'user) (concat @@ -1334,8 +1335,7 @@ how much time has lapsed since DATE." (ignore-errors (gnus-encode-date (timezone-make-date-arpa-standard - date nil "UT")))) - "\n")) + date nil "UT")))))) ;; Do an X-Sent lapsed format. ((eq type 'lapsed) ;; If the date is seriously mangled, the timezone functions are @@ -1386,8 +1386,8 @@ how much time has lapsed since DATE." ;; If dates are odd, then it might appear like the ;; article was sent in the future. (if (> real-sec 0) - " ago\n" - " in the future\n")))))) + " ago" + " in the future")))))) (t (error "Unknown conversion type: %s" type)))) @@ -1408,6 +1408,29 @@ function and want to see what the date was before converting." (interactive (list t)) (article-date-ut 'lapsed highlight)) +(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))))) + +(defun gnus-start-date-timer () + "Start a timer to update the X-Sent header in the article buffers." + (interactive) + (gnus-stop-date-timer) + (setq article-lapsed-timer + (nnheader-run-at-time 1 1 '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) + (setq article-lapsed-timer nil))) + (defun article-date-user (&optional highlight) "Convert the current article date to the user-defined format. This format is defined by the `gnus-article-time-format' variable." diff --git a/lisp/gnus-cite.el b/lisp/gnus-cite.el index 2a1eb4f..ca1d579 100644 --- a/lisp/gnus-cite.el +++ b/lisp/gnus-cite.el @@ -258,6 +258,7 @@ This should make it easier to see who wrote what." ;;; Internal Variables: (defvar gnus-cite-article nil) +(defvar gnus-cite-overlay-list nil) (defvar gnus-cite-prefix-alist nil) ;; Alist of citation prefixes. @@ -577,6 +578,8 @@ See also the documentation for `gnus-article-highlight-citation'." gnus-cite-attribution-alist nil gnus-cite-loose-prefix-alist nil gnus-cite-loose-attribution-alist nil) + (while gnus-cite-overlay-list + (gnus-delete-overlay (pop gnus-cite-overlay-list))) ;; Parse if not too large. (if (and (not force) gnus-cite-parse-max-size @@ -858,7 +861,7 @@ See also the documentation for `gnus-article-highlight-citation'." (let ((inhibit-point-motion-hooks t) from to) (goto-line number) - (unless (eobp);; Sometimes things become confused. + (unless (eobp) ; Sometimes things become confused. (forward-char (length prefix)) (skip-chars-forward " \t") (setq from (point)) @@ -866,7 +869,9 @@ See also the documentation for `gnus-article-highlight-citation'." (skip-chars-backward " \t") (setq to (point)) (when (< from to) - (gnus-overlay-put (gnus-make-overlay from to) 'face face)))))) + (push (setq overlay (gnus-make-overlay from to)) + gnus-cite-overlay-list) + (gnus-overlay-put overlay 'face face)))))) (defun gnus-cite-toggle (prefix) (save-excursion diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index 3292970..6f05d2a 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -89,7 +89,7 @@ unread articles in the groups. If nil, no groups are permanently visible." :group 'gnus-group-listing - :type '(choice regexp (const nil))) + :type 'regexp) (defcustom gnus-list-groups-with-ticked-articles t "*If non-nil, list groups that have only ticked articles. @@ -1575,6 +1575,8 @@ If REQUEST-ONLY, don't actually read the group; just request it. Return the name of the group is selection was successful." ;; Transform the select method into a unique server. + (when (stringp method) + (setq method (gnus-server-to-method method))) (let ((saddr (intern (format "%s-address" (car method))))) (setq method (gnus-copy-sequence method)) (require (car method)) diff --git a/lisp/gnus-picon.el b/lisp/gnus-picon.el index d478236..47af8d8 100644 --- a/lisp/gnus-picon.el +++ b/lisp/gnus-picon.el @@ -43,44 +43,44 @@ also add gnus-article-display-picons to gnus-article-display-hook." :group 'gnus-visual) (defcustom gnus-picons-display-where 'picons - "Where to display the group and article icons. + "*Where to display the group and article icons. Legal values are `article' and `picons'." :type '(choice symbol string) :group 'picons) (defcustom gnus-picons-has-modeline-p t - "Wether the picons window should have a modeline. + "*Wether the picons window should have a modeline. This is only useful if `gnus-picons-display-where' is `picons'." :type 'boolean :group 'picons) (defcustom gnus-picons-database "/usr/local/faces" - "Defines the location of the faces database. + "*Defines the location of the faces database. For information on obtaining this database of pretty pictures, please see http://www.cs.indiana.edu/picons/ftp/index.html" :type 'directory :group 'picons) (defcustom gnus-picons-news-directories '("news") - "Sub-directory of the faces database containing the icons for newsgroups." + "*Sub-directory of the faces database containing the icons for newsgroups." :type '(repeat string) :group 'picons) (define-obsolete-variable-alias 'gnus-picons-news-directory 'gnus-picons-news-directories) (defcustom gnus-picons-user-directories '("local" "users" "usenix" "misc") - "List of directories to search for user faces." + "*List of directories to search for user faces." :type '(repeat string) :group 'picons) (defcustom gnus-picons-domain-directories '("domains") - "List of directories to search for domain faces. + "*List of directories to search for domain faces. Some people may want to add \"unknown\" to this list." :type '(repeat string) :group 'picons) (defcustom gnus-picons-refresh-before-display nil - "If non-nil, display the article buffer before computing the picons." + "*If non-nil, display the article buffer before computing the picons." :type 'boolean :group 'picons) @@ -91,12 +91,12 @@ Some people may want to add \"unknown\" to this list." (defcustom gnus-picons-x-face-file-name (format "/tmp/picon-xface.%s.xbm" (user-login-name)) - "The name of the file in which to store the converted X-face header." + "*The name of the file in which to store the converted X-face header." :type 'string :group 'picons) (defcustom gnus-picons-convert-x-face (format "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | pbmtoxbm > %s" gnus-picons-x-face-file-name) - "Command to convert the x-face header into a xbm file." + "*Command to convert the x-face header into a xbm file." :type 'string :group 'picons) @@ -113,7 +113,7 @@ Some people may want to add \"unknown\" to this list." (when (featurep 'xpm) (push "xpm" types)) types)) - "List of suffixes on picon file names to try." + "*List of suffixes on picon file names to try." :type '(repeat string) :group 'picons) @@ -253,8 +253,8 @@ annotations. Sets buffer to `gnus-picons-display-where'." (defun gnus-picons-x-face-sentinel (process event) (let* ((env (assq process gnus-picons-processes-alist)) (annot (cdr env))) - (setq gnus-picons-processes-alist (remassq process - gnus-picons-processes-alist)) + (setq gnus-picons-processes-alist + (remassq process gnus-picons-processes-alist)) (when annot (set-annotation-glyph annot (make-glyph gnus-picons-x-face-file-name)) diff --git a/lisp/gnus-srvr.el b/lisp/gnus-srvr.el index d5122fe..a556576 100644 --- a/lisp/gnus-srvr.el +++ b/lisp/gnus-srvr.el @@ -473,7 +473,7 @@ The following commands are available: (interactive (list (gnus-server-server-name))) (let ((buf (current-buffer))) (prog1 - (gnus-browse-foreign-server (gnus-server-to-method server) buf) + (gnus-browse-foreign-server server buf) (save-excursion (set-buffer buf) (gnus-server-update-server (gnus-server-server-name)) @@ -543,14 +543,13 @@ The following commands are available: (defvar gnus-browse-buffer "*Gnus Browse Server*") -(defun gnus-browse-foreign-server (method &optional return-buffer) - "Browse the server METHOD." - (setq gnus-browse-current-method method) +(defun gnus-browse-foreign-server (server &optional return-buffer) + "Browse the server SERVER." + (setq gnus-browse-current-method server) (setq gnus-browse-return-buffer return-buffer) - (when (stringp method) - (setq method (gnus-server-to-method method))) - (let ((gnus-select-method method) - groups group) + (let* ((method (gnus-server-to-method server)) + (gnus-select-method method) + groups group) (gnus-message 5 "Connecting to %s..." (nth 1 method)) (cond ((not (gnus-check-server method)) @@ -710,7 +709,10 @@ buffer. (progn (gnus-group-change-level (list t group gnus-level-default-subscribed - nil nil gnus-browse-current-method) + nil nil (if (gnus-server-equal + gnus-browse-current-method "native") + nil + gnus-browse-current-method)) gnus-level-default-subscribed gnus-level-killed (and (car (nth 1 gnus-newsrc-alist)) (gnus-gethash (car (nth 1 gnus-newsrc-alist)) diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index a101f8a..05f7b26 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -4399,7 +4399,7 @@ The resulting hash table is returned, or nil if no Xrefs were found." (mail-header-set-id header id)) (setcar (symbol-value id-dep) header)) (set id-dep (list header))) - (when header + (when header (if (boundp (setq ref-dep (intern (or ref "none") dependencies))) (setcdr (symbol-value ref-dep) (nconc (cdr (symbol-value ref-dep)) @@ -5979,7 +5979,9 @@ Returns how many articles were removed." (gnus-summary-position-point)))) (defun gnus-summary-limit-include-dormant () - "Display all the hidden articles that are marked as dormant." + "Display all the hidden articles that are marked as dormant. +Note that this command only works on a subset of the articles currently +fetched for this group." (interactive) (unless gnus-newsgroup-dormant (error "There are no dormant articles in this group")) @@ -6362,17 +6364,20 @@ or `gnus-select-method', no matter what backend the article comes from." (gnus-summary-article-sparse-p (mail-header-number header)) (memq (mail-header-number header) - gnus-newsgroup-limit)))) - (if (and header - (or (not (gnus-summary-article-sparse-p - (mail-header-number header))) - sparse)) - (prog1 - ;; The article is present in the buffer, so we just go to it. - (gnus-summary-goto-article - (mail-header-number header) nil t) - (when sparse - (gnus-summary-update-article (mail-header-number header)))) + gnus-newsgroup-limit))) + h) + (cond + ;; If the article is present in the buffer we just go to it. + ((and header + (or (not (gnus-summary-article-sparse-p + (mail-header-number header))) + sparse)) + (prog1 + (gnus-summary-goto-article + (mail-header-number header) nil t) + (when sparse + (gnus-summary-update-article (mail-header-number header))))) + (t ;; We fetch the article (let ((gnus-override-method (cond ((gnus-news-group-p gnus-newsgroup-name) @@ -6388,7 +6393,7 @@ or `gnus-select-method', no matter what backend the article comes from." ;; Fetch the header, and display the article. (if (setq number (gnus-summary-insert-subject message-id)) (gnus-summary-select-article nil nil nil number) - (gnus-message 3 "Couldn't fetch article %s" message-id))))))) + (gnus-message 3 "Couldn't fetch article %s" message-id)))))))) (defun gnus-summary-enter-digest-group (&optional force) "Enter an nndoc group based on the current article. @@ -7571,7 +7576,9 @@ returned." "Mark the current article quickly as unread with MARK." (let ((article (gnus-summary-article-number))) (if (<= article 0) - (gnus-error 1 "Can't mark negative article numbers") + (progn + (gnus-error 1 "Can't mark negative article numbers") + nil) (setq gnus-newsgroup-marked (delq article gnus-newsgroup-marked)) (setq gnus-newsgroup-dormant (delq article gnus-newsgroup-dormant)) (setq gnus-newsgroup-expirable (delq article gnus-newsgroup-expirable)) @@ -7597,8 +7604,8 @@ returned." (= mark gnus-dormant-mark) (= mark gnus-unread-mark)))) ;; Fix the mark. - (gnus-summary-update-mark mark 'unread)) - t)) + (gnus-summary-update-mark mark 'unread) + t))) (defun gnus-summary-mark-article (&optional article mark no-expire) "Mark ARTICLE with MARK. MARK can be any character. @@ -7624,29 +7631,29 @@ marked." (article (or article (gnus-summary-article-number)))) (unless article (error "No article on current line")) - (if (or (= mark gnus-unread-mark) - (= mark gnus-ticked-mark) - (= mark gnus-dormant-mark)) - (gnus-mark-article-as-unread article mark) - (gnus-mark-article-as-read article mark)) - - ;; See whether the article is to be put in the cache. - (and gnus-use-cache - (not (= mark gnus-canceled-mark)) - (vectorp (gnus-summary-article-header article)) - (save-excursion - (gnus-cache-possibly-enter-article - gnus-newsgroup-name article - (gnus-summary-article-header article) - (= mark gnus-ticked-mark) - (= mark gnus-dormant-mark) (= mark gnus-unread-mark)))) + (if (not (if (or (= mark gnus-unread-mark) + (= mark gnus-ticked-mark) + (= mark gnus-dormant-mark)) + (gnus-mark-article-as-unread article mark) + (gnus-mark-article-as-read article mark))) + t + ;; See whether the article is to be put in the cache. + (and gnus-use-cache + (not (= mark gnus-canceled-mark)) + (vectorp (gnus-summary-article-header article)) + (save-excursion + (gnus-cache-possibly-enter-article + gnus-newsgroup-name article + (gnus-summary-article-header article) + (= mark gnus-ticked-mark) + (= mark gnus-dormant-mark) (= mark gnus-unread-mark)))) - (when (gnus-summary-goto-subject article nil t) - (let ((buffer-read-only nil)) - (gnus-summary-show-thread) - ;; Fix the mark. - (gnus-summary-update-mark mark 'unread) - t)))) + (when (gnus-summary-goto-subject article nil t) + (let ((buffer-read-only nil)) + (gnus-summary-show-thread) + ;; Fix the mark. + (gnus-summary-update-mark mark 'unread) + t))))) (defun gnus-summary-update-secondary-mark (article) "Update the secondary (read, process, cache) mark." @@ -7702,15 +7709,15 @@ marked." (defun gnus-mark-article-as-unread (article &optional mark) "Enter ARTICLE in the pertinent lists and remove it from others." (let ((mark (or mark gnus-ticked-mark))) - (setq gnus-newsgroup-marked (delq article gnus-newsgroup-marked) - gnus-newsgroup-dormant (delq article gnus-newsgroup-dormant) - gnus-newsgroup-expirable (delq article gnus-newsgroup-expirable) - gnus-newsgroup-unreads (delq article gnus-newsgroup-unreads)) - (if (<= article 0) (progn (gnus-error 1 "Can't mark negative article numbers") nil) + (setq gnus-newsgroup-marked (delq article gnus-newsgroup-marked) + gnus-newsgroup-dormant (delq article gnus-newsgroup-dormant) + gnus-newsgroup-expirable (delq article gnus-newsgroup-expirable) + gnus-newsgroup-unreads (delq article gnus-newsgroup-unreads)) + ;; Unsuppress duplicates? (when gnus-suppress-duplicates (gnus-dup-unsuppress-article article)) @@ -8665,6 +8672,14 @@ save those articles instead." (not (gnus-summary-article-sparse-p (mail-header-number header)))) ;; We have found the header. header + ;; If this is a sparse article, we have to nix out its + ;; previous entry in the thread hashtb. + (when (and header + (gnus-summary-article-sparse-p (mail-header-number header))) + (let ((thread (gnus-gethash + (gnus-parent-id (mail-header-references header)) + gnus-newsgroup-dependencies))) + (delq (assq header thread) thread))) ;; We have to really fetch the header to this article. (save-excursion (set-buffer nntp-server-buffer) diff --git a/lisp/gnus-uu.el b/lisp/gnus-uu.el index 6b74974..9f33946 100644 --- a/lisp/gnus-uu.el +++ b/lisp/gnus-uu.el @@ -1202,6 +1202,7 @@ didn't work, and overwrite existing files. Otherwise, ask each time." (defun gnus-uu-grab-articles (articles process-function &optional sloppy limit no-errors) (let ((state 'first) + (gnus-asynchronous nil) has-been-begin article result-file result-files process-state gnus-summary-display-article-function gnus-article-display-hook gnus-article-prepare-hook diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index 2794ce3..d989f6a 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -410,6 +410,7 @@ call it with the value of the `gnus-data' text property." (fset 'gnus-characterp 'characterp))) (fset 'gnus-make-overlay 'make-extent) + (fset 'gnus-delete-overlay 'delete-extent) (fset 'gnus-overlay-put 'set-extent-property) (fset 'gnus-move-overlay 'gnus-xmas-move-overlay) (fset 'gnus-overlay-end 'extent-end-position) diff --git a/lisp/gnus.el b/lisp/gnus.el index 45e340d..0c4d048 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.15" +(defconst gnus-version-number "0.16" "Version number for this version of Gnus.") (defconst gnus-version (format "Quassia Gnus v%s" gnus-version-number) @@ -266,6 +266,7 @@ be set in `.emacs' instead." (unless (featurep 'gnus-xmas) (defalias 'gnus-make-overlay 'make-overlay) + (defalias 'gnus-delete-overlay 'delete-overlay) (defalias 'gnus-overlay-put 'overlay-put) (defalias 'gnus-move-overlay 'move-overlay) (defalias 'gnus-overlay-end 'overlay-end) @@ -1648,7 +1649,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") gnus-article-date-original gnus-article-date-lapsed gnus-article-show-all-headers gnus-article-edit-mode gnus-article-edit-article - gnus-article-edit-done gnus-decode-rfc1522 article-decode-rfc1522) + gnus-article-edit-done gnus-decode-rfc1522 article-decode-rfc1522 + gnus-start-date-timer gnus-stop-date-timer) ("gnus-int" gnus-request-type) ("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1 gnus-dribble-enter) @@ -2296,7 +2298,8 @@ that that variable is buffer-local to the summary buffers." (defun gnus-group-prefixed-name (group method) "Return the whole name from GROUP and METHOD." (and (stringp method) (setq method (gnus-server-to-method method))) - (if (not method) + (if (or (not method) + (gnus-server-equal method "native")) group (concat (format "%s" (car method)) (when (and diff --git a/lisp/message.el b/lisp/message.el index 518e9ad..8717431 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -213,7 +213,7 @@ included. Organization, Lines and X-Mailer are optional." :group 'message-headers :type 'regexp) -(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\||X-Trace:\\|X-Complaints-To:\\|Return-Path:\\|^Supersedes:" +(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|X-Trace:\\|X-Complaints-To:\\|Return-Path:\\|^Supersedes:" "*Header lines matching this regexp will be deleted before posting. It's best to delete old Path and Date headers before posting to avoid any confusion." @@ -2451,31 +2451,32 @@ to find out how to use this." ;; Remove empty lines in the header. (save-restriction (message-narrow-to-headers) + ;; Remove blank lines. (while (re-search-forward "^[ \t]*\n" nil t) - (replace-match "" t t))) + (replace-match "" t t)) - ;; Correct Newsgroups and Followup-To headers: change sequence of - ;; spaces to comma and eliminate spaces around commas. Eliminate - ;; embedded line breaks. - (goto-char (point-min)) - (while (re-search-forward "^\\(Newsgroups\\|Followup-To\\): +" nil t) - (save-restriction - (narrow-to-region - (point) - (if (re-search-forward "^[^ \t]" nil t) - (match-beginning 0) - (forward-line 1) - (point))) - (goto-char (point-min)) - (while (re-search-forward "\n[ \t]+" nil t) - (replace-match " " t t)) ;No line breaks (too confusing) - (goto-char (point-min)) - (while (re-search-forward "[ \t\n]*,[ \t\n]*\\|[ \t]+" nil t) - (replace-match "," t t)) - (goto-char (point-min)) - ;; Remove trailing commas. - (when (re-search-forward ",+$" nil t) - (replace-match "" t t))))) + ;; Correct Newsgroups and Followup-To headers: Change sequence of + ;; spaces to comma and eliminate spaces around commas. Eliminate + ;; embedded line breaks. + (goto-char (point-min)) + (while (re-search-forward "^\\(Newsgroups\\|Followup-To\\): +" nil t) + (save-restriction + (narrow-to-region + (point) + (if (re-search-forward "^[^ \t]" nil t) + (match-beginning 0) + (forward-line 1) + (point))) + (goto-char (point-min)) + (while (re-search-forward "\n[ \t]+" nil t) + (replace-match " " t t)) ;No line breaks (too confusing) + (goto-char (point-min)) + (while (re-search-forward "[ \t\n]*,[ \t\n]*\\|[ \t]+" nil t) + (replace-match "," t t)) + (goto-char (point-min)) + ;; Remove trailing commas. + (when (re-search-forward ",+$" nil t) + (replace-match "" t t)))))) (defun message-make-date () "Make a valid data header." diff --git a/lisp/nnfolder.el b/lisp/nnfolder.el index 7baa8d3..84d6cc6 100644 --- a/lisp/nnfolder.el +++ b/lisp/nnfolder.el @@ -493,9 +493,7 @@ time saver for large mailboxes.") (progn (forward-line 1) (if (nnmail-search-unix-mail-delim) - (if (and (not (bobp)) leave-delim) - (progn (forward-line -2) (point)) - (point)) + (point) (point-max)))))) (defun nnfolder-possibly-change-group (group &optional server dont-check) diff --git a/lisp/nnheader.el b/lisp/nnheader.el index 97c842b..59353b9 100644 --- a/lisp/nnheader.el +++ b/lisp/nnheader.el @@ -792,6 +792,16 @@ find-file-hooks, etc. (pop files)) (nreverse out))) +(defun nnheader-directory-files (&rest args) + "Same as `directory-files', but prune \".\" and \"..\"." + (let ((files (apply 'directory-files args)) + out) + (while files + (unless (member (file-name-nondirectory (car files)) '("." "..")) + (push (car files) out)) + (pop files)) + (nreverse out))) + (defmacro nnheader-skeleton-replace (from &optional to regexp) `(let ((new (generate-new-buffer " *nnheader replace*")) (cur (current-buffer)) diff --git a/lisp/nnmh.el b/lisp/nnmh.el index 900eede..4c302f4 100644 --- a/lisp/nnmh.el +++ b/lisp/nnmh.el @@ -186,6 +186,7 @@ (deffoo nnmh-request-list (&optional server dir) (nnheader-insert "") + (nnmh-possibly-change-directory nil server) (let ((pathname-coding-system 'binary) (nnmh-toplev (file-truename (or dir (file-name-as-directory nnmh-directory))))) @@ -199,15 +200,14 @@ ;; Recurse down all directories. (let ((dirs (and (file-readable-p dir) (> (nth 1 (file-attributes (file-chase-links dir))) 2) - (directory-files dir t nil t))) + (nnheader-directory-files dir t nil t))) rdir) ;; Recurse down directories. (while (setq rdir (pop dirs)) - (when (and (not (member (file-name-nondirectory rdir) '("." ".."))) - (file-directory-p rdir) + (when (and (file-directory-p rdir) (file-readable-p rdir) - (equal (file-truename rdir) - (file-truename dir))) + (not (equal (file-truename rdir) + (file-truename dir)))) (nnmh-request-list-1 rdir)))) ;; For each directory, generate an active file line. (unless (string= (expand-file-name nnmh-toplev) dir) diff --git a/lisp/nnweb.el b/lisp/nnweb.el index 748b3d2..8d217f7 100644 --- a/lisp/nnweb.el +++ b/lisp/nnweb.el @@ -55,6 +55,12 @@ (search . nnweb-dejanews-search) (address . "http://xp9.dejanews.com/dnquery.xp") (identifier . nnweb-dejanews-identity)) + (dejanewsold + (article . nnweb-dejanews-wash-article) + (map . nnweb-dejanews-create-mapping) + (search . nnweb-dejanewsold-search) + (address . "http://xp9.dejanews.com/dnquery.xp") + (identifier . nnweb-dejanews-identity)) (reference (article . nnweb-reference-wash-article) (map . nnweb-reference-create-mapping) diff --git a/texi/Makefile b/texi/Makefile index ad0c8d1..ea5ef8f 100644 --- a/texi/Makefile +++ b/texi/Makefile @@ -12,11 +12,10 @@ all: gnus message most: texi2latex.elc latex latexps -gnus: gnus.texi - $(MAKEINFO) -eval '(find-file "gnus.texi")' $(XINFOSWI) +.SUFFIXES: .texi .dvi .ps -message: message.texi - $(MAKEINFO) -eval '(find-file "message.texi")' $(XINFOSWI) +.texi: + $(MAKEINFO) -eval '(find-file "$<")' $(XINFOSWI) dvi: gnus.dvi message.dvi @@ -29,34 +28,29 @@ dvi: gnus.dvi message.dvi refcard.dvi: refcard.tex gnuslogo.refcard gnusref.tex $(LATEX) refcard.tex -sclean: +clean: rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \ - *.tp *.toc \ - *.pg gnus.latexi *.aux *.[cgk]idx \ + *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \ gnus.ilg gnus.ind gnus.[cgk]ind gnus.idx \ - gnus.tmptexi gnus.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \ - gnus.latexi*~* - -clean: - make sclean - rm -f *.latexi - rm tmp/*.ps + 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 -f batch-byte-recompile-directory + $(EMACS) -batch -l bytecomp --eval '(byte-compile-file "texi2latex.el")' -latex: gnus.texi +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 + ./splitindex makeindex -o gnus.kind gnus.kidx makeindex -o gnus.cind gnus.cidx makeindex -o gnus.gind gnus.gidx @@ -66,7 +60,7 @@ latexps: cat postamble.tex >> gnus.tmplatexi $(LATEX) gnus.tmplatexi $(LATEX) gnus.tmplatexi - $(DVIPS) -f gnus.dvi > /local/tmp/larsi/gnus.ps + $(DVIPS) -f gnus.dvi > gnus.ps pss: make latex @@ -165,30 +159,3 @@ complete: make texi2latex.elc make tmps make pss -tmps: - if [ ! -d /local/tmp/larsi ]; then mkdir /local/tmp/larsi; fi - make screens - make herds - make etc - make piconss - make xfaces - -herds: - cd ps ; for i in new-herd-[0-9]*.gif; do echo $$i; giftoppm $$i | pnmcrop -white | pnmmargin -white 9 | pnmscale 2 | pnmsmooth -size 5 5 | ppmtopgm | pgmtops > ../tmp/`basename $$i .gif`.ps; done - cd ps ; giftoppm new-herd-section.gif | pnmscale 4 | pnmsmooth -size 11 11 | ppmtopgm | pgmtops > ../tmp/new-herd-section.ps - -screens: - cd screen ; for i in *.gif; do echo $$i; giftoppm $$i | pnmmargin -black 1 | ppmtopgm | pgmtops > ../tmp/`basename $$i .gif`.ps; done - giftoppm ps/larsi.gif | ppmtopgm | pgmtops > tmp/larsi.ps - -etc: - cd ../etc/gnus; for i in gnus-*.xpm; do echo $$i; xpmtoppm $$i | ppmtopgm | pgmtops > ../../texi/tmp/`basename $$i .xpm`.ps; done - -piconss: - cd picons; for i in *.xbm; do echo $$i; xbmtopbm $$i | pgmtops > ../tmp/picons-`basename $$i .xbm`.ps; done - cd picons; for i in *.gif; do echo $$i; giftoppm $$i | ppmtopgm | pgmtops > ../tmp/picons-`basename $$i .gif`.ps; done - for i in tmp/picons-*.ps; do echo "\\gnuspicon{$$i}"; done > picons.tmplatexi - -xfaces: - cd xface; for i in *.gif; do echo $$i; giftoppm $$i | ppmtopgm | pgmtops > ../tmp/xface-`basename $$i .gif`.ps; done - for i in tmp/xface-*.ps; do echo "\\gnusxface{$$i}"; done > xface.tmplatexi diff --git a/texi/gnus.texi b/texi/gnus.texi index 5315360..e3197ee 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename gnus -@settitle Quassia Gnus 0.15 Manual +@settitle Quassia Gnus 0.16 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.15 Manual +@title Quassia Gnus 0.16 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.15. +This manual corresponds to Quassia Gnus 0.16. @end ifinfo @@ -6522,8 +6522,19 @@ for a list of possible format specs. @item W T e @kindex W T e (Summary) @findex gnus-article-date-lapsed +@findex gnus-start-date-timer +@findex gnus-stop-date-timer Say how much time has elapsed between the article was posted and now -(@code{gnus-article-date-lapsed}). +(@code{gnus-article-date-lapsed}). If you want to have this line +updated continually, you can put + +@lisp +(gnus-start-date-timer) +@end lisp + +in your @file{.gnus.el} file, or you can run it off of some hook. If +you want to stop the timer, you can use the @code{gnus-stop-date-timer} +command. @item W T o @kindex W T o (Summary) @@ -9446,7 +9457,7 @@ be stored in one or more groups. @item @code{junk}: If the split is the symbol @code{junk}, then don't save -this message anywhere. +this message. @item @var{(: function arg1 arg2 ...)}: If the split is a list, and the first @@ -9478,7 +9489,7 @@ information in the headers (i.e., do @code{replace-match}-like substitions in the group names), you can say things like: @example -(any "debian-\(\\w*\\)@@lists.debian.org" "mail.debian.\\1") +(any "debian-\\(\\w*\\)@@lists.debian.org" "mail.debian.\\1") @end example @node Mail and Procmail @@ -11912,7 +11923,7 @@ Apply all score files that match, using bnews syntax. This is the default. If the current group is @samp{gnu.emacs.gnus}, for instance, @file{all.emacs.all.SCORE}, @file{not.alt.all.SCORE} and @file{gnu.all.SCORE} would all apply. In short, the instances of -@samp{all} in the score file names are translated into @samp{.+}, and +@samp{all} in the score file names are translated into @samp{.*}, and then a regexp match is done. This means that if you have some score entries that you want to apply to diff --git a/texi/message.texi b/texi/message.texi index 2445386..47a080d 100644 --- a/texi/message.texi +++ b/texi/message.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename message -@settitle Message 0.15 Manual +@settitle Message 0.16 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.15 Manual +@title Message 0.16 Manual @author by Lars Magne Ingebrigtsen @page @@ -79,7 +79,7 @@ buffers. * Key Index:: List of Message mode keys. @end menu -This manual corresponds to Message 0.15. Message is distributed with +This manual corresponds to Message 0.16. Message is distributed with the Gnus distribution bearing the same version number as this manual has. -- 1.7.10.4