* gnus-picon.el (gnus-picon-find-face): Search MISC for all types.
[gnus] / lisp / gnus-picon.el
index 7f73ea7..d29d2e5 100644 (file)
@@ -60,7 +60,8 @@ see http://www.cs.indiana.edu/picons/ftp/index.html"
   :type '(repeat string)
   :group 'picon)
 
-(defcustom gnus-picon-user-directories '("users" "usenix" "local" "misc")
+(defcustom gnus-picon-user-directories '("users" "usenix" "local"
+                                        "misc" "unknown")
   "*List of directories to search for user faces."
   :type '(repeat string)
   :group 'picon)
@@ -107,29 +108,29 @@ List of pairs (KEY . GLYPH) where KEY is either a filename or an URL.")
        (split-string (car address) "\\."))))
 
 (defun gnus-picon-find-face (address directories &optional exact)
-  (let* ((databases gnus-picon-databases)
-        (address (gnus-picon-split-address address))
+  (let* ((address (gnus-picon-split-address address))
         (user (pop address))
-        database directory found instance base)
-    (while (and (not found)
-               (setq database (pop databases)))
-      (while (and (not found)
-                 (setq directory (pop directories)))
-       (setq base (expand-file-name directory database))
-       ;; Kludge to search misc/MISC for users.
-       (when (string= directory "misc")
-         (setq address '("MISC")))
-       (while (and (not found)
-                   address)
-         (setq found (gnus-picon-find-image
-                      (concat base "/" (mapconcat 'identity
-                                                  (reverse address)
-                                                  "/")
-                              "/" user "/")))
-         (if exact
-             (setq address nil)
-           (pop address)))))
-    found))
+        (faddress address)
+        database directory result instance base)
+    (catch 'found
+      (dolist (database gnus-picon-databases)
+       (dolist (directory directories)
+         (setq address faddress
+               base (expand-file-name directory database))
+         (while address
+           (when (setq result (gnus-picon-find-image
+                               (concat base "/" (mapconcat 'identity
+                                                           (reverse address)
+                                                           "/")
+                                       "/" user "/")))
+             (throw 'found result))
+           (if exact
+               (setq address nil)
+             (pop address)))
+         ;; Kludge to search MISC as well.
+         (when (setq result (gnus-picon-find-image
+                             (concat base "/MISC/" user "/")))
+           (throw 'found result)))))))
 
 (defun gnus-picon-find-image (directory)
   (let ((types gnus-picon-file-types)
@@ -167,10 +168,16 @@ GLYPH can be either a glyph or a string."
              first t)
        (when (and (stringp address)
                   (setq spec (gnus-picon-split-address address)))
-         (when (setq file (gnus-picon-find-face
-                           address gnus-picon-user-directories))
+         (when (setq file (or (gnus-picon-find-face
+                               address gnus-picon-user-directories)
+                              (gnus-picon-find-face
+                               (concat "unknown@"
+                                       (mapconcat
+                                        'identity (cdr spec) "."))
+                               gnus-picon-user-directories)))
            (setcar spec (cons (gnus-picon-create-glyph file)
                               (car spec))))
+             
          (dotimes (i (1- (length spec)))
            (when (setq file (gnus-picon-find-face
                              (concat "unknown@"
@@ -253,7 +260,7 @@ If picons are already displayed, remove them."
   (interactive)
   (gnus-with-article-buffer
     (if (memq 'newsgroups-picon gnus-article-wash-types)
-       (gnus-delete-images  'newsgroups-picon)
+       (gnus-delete-images 'newsgroups-picon)
       (gnus-picon-transform-newsgroups "newsgroups")
       (gnus-picon-transform-newsgroups "followup-to"))))