Fix my last change.
[gnus] / lisp / nneething.el
index 700dad8..04b0229 100644 (file)
@@ -1,5 +1,5 @@
 ;;; 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>
   "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.
@@ -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%%"
-                       (/ (* count 100) number))))
+                                (/ (* count 100) number))))
 
        (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))
-            (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))))
 
@@ -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)))))
+      ;; 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
-         (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
-                                 (nneething-file-name (cadar map))))
-                         (caddar map)))
+                                 (nneething-file-name (cadr (car map)))))
+                         (cadr (cdar map))))
              (progn
-               (push (cadar map) map-files)
+               (push (cadr (car map)) map-files)
                (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"))
-       "")
-     )))
+       ""))))
 
 (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))
-                    (when (string-match "/\\(users\\|home\\)/\\([^/]+\\)/" file)
+                    (when (string-match
+                           "/\\(users\\|home\\)/\\([^/]+\\)/" file)
                       (setq login (substring file
                                              (match-beginning 2)
                                              (match-end 2))
@@ -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."
-  (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)