Synch with Gnus.
[elisp/gnus.git-] / lisp / nneething.el
index 6aaa529..04b0229 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nneething.el --- arbitrary file access for Gnus
 ;;; nneething.el --- arbitrary file access for Gnus
-;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
   "Regexp saying what files to exclude from the group.
 If this variable is nil, no files will be excluded.")
 
   "Regexp saying what files to exclude from the group.
 If this variable is nil, no files will be excluded.")
 
+(defvoo nneething-include-files nil
+  "Regexp saying what files to include in the group.
+If this variable is non-nil, only files matching this regexp will be
+included.")
+
 \f
 
 ;;; Internal variables.
 \f
 
 ;;; Internal variables.
@@ -102,7 +107,7 @@ If this variable is nil, no files will be excluded.")
          (and large
               (zerop (% count 20))
               (nnheader-message 5 "nneething: Receiving headers... %d%%"
          (and large
               (zerop (% count 20))
               (nnheader-message 5 "nneething: Receiving headers... %d%%"
-                       (/ (* count 100) number))))
+                                (/ (* count 100) number))))
 
        (when large
          (nnheader-message 5 "nneething: Receiving headers...done"))
 
        (when large
          (nnheader-message 5 "nneething: Receiving headers...done"))
@@ -122,7 +127,8 @@ If this variable is nil, no files will be excluded.")
           (nnmail-find-file file)      ; Insert the file in the nntp buf.
           (unless (nnheader-article-p) ; Either it's a real article...
             (goto-char (point-min))
           (nnmail-find-file file)      ; Insert the file in the nntp buf.
           (unless (nnheader-article-p) ; Either it's a real article...
             (goto-char (point-min))
-            (nneething-make-head file (current-buffer)) ; ... or we fake some headers.
+            (nneething-make-head
+             file (current-buffer))    ; ... or we fake some headers.
             (insert "\n"))
           t))))
 
             (insert "\n"))
           t))))
 
@@ -211,17 +217,27 @@ If this variable is nil, no files will be excluded.")
                  (setq files (cdr files)))
              (setq prev f))
            (setq f (cdr f)))))
                  (setq files (cdr files)))
              (setq prev f))
            (setq f (cdr f)))))
+      ;; Remove files not matching the inclusion regexp.
+      (when nneething-include-files
+       (let ((f files)
+             prev)
+         (while f
+           (if (not (string-match nneething-include-files (car f)))
+               (if prev (setcdr prev (cdr f))
+                 (setq files (cdr files)))
+             (setq prev f))
+           (setq f (cdr f)))))
       ;; Remove deleted files from the map.
       (let ((map nneething-map)
            prev)
        (while map
       ;; Remove deleted files from the map.
       (let ((map nneething-map)
            prev)
        (while map
-         (if (and (member (cadar map) files)
+         (if (and (member (cadr (car map)) files)
                   ;; We also remove files that have changed mod times.
                   (equal (nth 5 (file-attributes
                   ;; We also remove files that have changed mod times.
                   (equal (nth 5 (file-attributes
-                                 (nneething-file-name (cadar map))))
-                         (caddar map)))
+                                 (nneething-file-name (cadr (car map)))))
+                         (cadr (cdar map))))
              (progn
              (progn
-               (push (cadar map) map-files)
+               (push (cadr (car map)) map-files)
                (setq prev map))
            (setq touched t)
            (if prev
                (setq prev map))
            (setq touched t)
            (if prev
@@ -279,8 +295,7 @@ If this variable is nil, no files will be excluded.")
           (concat "Lines: " (int-to-string
                              (count-lines (point-min) (point-max)))
                   "\n"))
           (concat "Lines: " (int-to-string
                              (count-lines (point-min) (point-max)))
                   "\n"))
-       "")
-     )))
+       ""))))
 
 (defun nneething-from-line (uid &optional file)
   "Return a From header based of UID."
 
 (defun nneething-from-line (uid &optional file)
   "Return a From header based of UID."
@@ -300,7 +315,8 @@ If this variable is nil, no files will be excluded.")
                       (substring file
                                  (match-beginning 1)
                                  (match-end 1))
                       (substring file
                                  (match-beginning 1)
                                  (match-end 1))
-                    (when (string-match "/\\(users\\|home\\)/\\([^/]+\\)/" file)
+                    (when (string-match
+                           "/\\(users\\|home\\)/\\([^/]+\\)/" file)
                       (setq login (substring file
                                              (match-beginning 2)
                                              (match-end 2))
                       (setq login (substring file
                                              (match-beginning 2)
                                              (match-end 2))
@@ -314,7 +330,7 @@ If this variable is nil, no files will be excluded.")
   (save-excursion
     (set-buffer (get-buffer-create nneething-work-buffer))
     (setq case-fold-search nil)
   (save-excursion
     (set-buffer (get-buffer-create nneething-work-buffer))
     (setq case-fold-search nil)
-    (buffer-disable-undo (current-buffer))
+    (buffer-disable-undo)
     (erase-buffer)
     (cond
      ((not (file-exists-p file))
     (erase-buffer)
     (cond
      ((not (file-exists-p file))
@@ -342,10 +358,13 @@ If this variable is nil, no files will be excluded.")
 
 (defun nneething-file-name (article)
   "Return the file name of ARTICLE."
 
 (defun nneething-file-name (article)
   "Return the file name of ARTICLE."
-  (concat (file-name-as-directory nneething-address)
-         (if (numberp article)
-             (cadr (assq article nneething-map))
-           article)))
+  (let ((dir (file-name-as-directory nneething-address))
+        fname)
+    (if (numberp article)
+       (if (setq fname (cadr (assq article nneething-map)))
+           (expand-file-name fname dir)
+         (make-temp-name (expand-file-name "nneething" dir)))
+      (expand-file-name article dir))))
 
 (provide 'nneething)
 
 
 (provide 'nneething)