Revision: emacs@sv.gnu.org/gnus--devo--0--patch-25
[gnus] / lisp / gnus-picon.el
index c73d5ea..0e4c772 100644 (file)
@@ -1,7 +1,7 @@
 ;;; gnus-picon.el --- displaying pretty icons in Gnus
 
-;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-;;      Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+;;   2005, 2006 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news xpm annotation glyph faces
@@ -20,8 +20,8 @@
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
@@ -83,13 +83,17 @@ added right to the textual representation."
                 (const right))
   :group 'gnus-picon)
 
-(defface gnus-picon-xbm-face '((t (:foreground "black" :background "white")))
+(defface gnus-picon-xbm '((t (:foreground "black" :background "white")))
   "Face to show xbm picon in."
   :group 'gnus-picon)
+;; backward-compatibility alias
+(put 'gnus-picon-xbm-face 'face-alias 'gnus-picon-xbm)
 
-(defface gnus-picon-face '((t (:foreground "black" :background "white")))
+(defface gnus-picon '((t (:foreground "black" :background "white")))
   "Face to show picon in."
   :group 'gnus-picon)
+;; backward-compatibility alias
+(put 'gnus-picon-face 'face-alias 'gnus-picon)
 
 ;;; Internal variables:
 
@@ -165,108 +169,107 @@ replacement is added."
 
 (defun gnus-picon-transform-address (header category)
   (gnus-with-article-headers
-    (let ((addresses
-          (mail-header-parse-addresses
-           ;; mail-header-parse-addresses does not work (reliably) on
-           ;; decoded headers.
-           (or
-            (ignore-errors
-              (mail-encode-encoded-word-string
-               (or (mail-fetch-field header) "")))
-            (mail-fetch-field header))))
-         spec file point cache len)
-      (dolist (address addresses)
-       (setq address (car address))
-       (when (and (stringp address)
-                  (setq spec (gnus-picon-split-address address)))
-         (if (setq cache (cdr (assoc address gnus-picon-cache)))
-             (setq spec cache)
-           (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@"
-                                       (mapconcat
-                                        'identity (nthcdr (1+ i) spec) "."))
-                               gnus-picon-domain-directories t))
-               (setcar (nthcdr (1+ i) spec)
-                       (cons (gnus-picon-create-glyph file)
-                             (nth (1+ i) spec)))))
-           (setq spec (nreverse spec))
-           (push (cons address spec) gnus-picon-cache))
-
-         (gnus-article-goto-header header)
-         (mail-header-narrow-to-field)
-         (case gnus-picon-style
-           (right
-            (when (= (length addresses) 1)
-              (setq len (apply '+ (mapcar (lambda (x)
-                                            (condition-case nil
-                                                (car (image-size (car x)))
-                                              (error 0))) spec)))
-              (when (> len 0)
-                (goto-char (point-at-eol))
-                (insert (propertize
-                         " " 'display
-                         (cons 'space
-                               (list :align-to (- (window-width) 1 len))))))
-              (goto-char (point-at-eol))
-              (setq point (point-at-eol))
-              (dolist (image spec)
-                (unless (stringp image)
-                  (goto-char point)
-                  (gnus-picon-insert-glyph image category 'nostring)))))
-           (inline
-             (when (search-forward address nil t)
-               (delete-region (match-beginning 0) (match-end 0))
-               (setq point (point))
-               (while spec
-                 (goto-char point)
-                 (if (> (length spec) 2)
-                     (insert ".")
-                   (if (= (length spec) 2)
-                       (insert "@")))
-                 (gnus-picon-insert-glyph (pop spec) category)))))
-             )))))
+   (let ((addresses
+         (mail-header-parse-addresses
+          ;; mail-header-parse-addresses does not work (reliably) on
+          ;; decoded headers.
+          (or
+           (ignore-errors
+            (mail-encode-encoded-word-string
+             (or (mail-fetch-field header) "")))
+           (mail-fetch-field header))))
+        spec file point cache len)
+     (dolist (address addresses)
+       (setq address (car address))
+       (when (and (stringp address)
+                 (setq spec (gnus-picon-split-address address)))
+        (if (setq cache (cdr (assoc address gnus-picon-cache)))
+            (setq spec cache)
+          (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@"
+                                      (mapconcat
+                                       'identity (nthcdr (1+ i) spec) "."))
+                              gnus-picon-domain-directories t))
+              (setcar (nthcdr (1+ i) spec)
+                      (cons (gnus-picon-create-glyph file)
+                            (nth (1+ i) spec)))))
+          (setq spec (nreverse spec))
+          (push (cons address spec) gnus-picon-cache))
+
+        (gnus-article-goto-header header)
+        (mail-header-narrow-to-field)
+        (case gnus-picon-style
+              (right
+               (when (= (length addresses) 1)
+                 (setq len (apply '+ (mapcar (lambda (x)
+                                               (condition-case nil
+                                                   (car (image-size (car x)))
+                                                 (error 0))) spec)))
+                 (when (> len 0)
+                   (goto-char (point-at-eol))
+                   (insert (propertize
+                            " " 'display
+                            (cons 'space
+                                  (list :align-to (- (window-width) 1 len))))))
+                 (goto-char (point-at-eol))
+                 (setq point (point-at-eol))
+                 (dolist (image spec)
+                   (unless (stringp image)
+                     (goto-char point)
+                     (gnus-picon-insert-glyph image category 'nostring)))))
+              (inline
+                (when (search-forward address nil t)
+                  (delete-region (match-beginning 0) (match-end 0))
+                  (setq point (point))
+                  (while spec
+                    (goto-char point)
+                    (if (> (length spec) 2)
+                        (insert ".")
+                      (if (= (length spec) 2)
+                          (insert "@")))
+                    (gnus-picon-insert-glyph (pop spec) category))))))))))
 
 (defun gnus-picon-transform-newsgroups (header)
   (interactive)
   (gnus-with-article-headers
-    (gnus-article-goto-header header)
-    (mail-header-narrow-to-field)
-    (let ((groups (message-tokenize-header (mail-fetch-field header)))
-         spec file point)
-      (dolist (group groups)
-       (unless (setq spec (cdr (assoc group gnus-picon-cache)))
-         (setq spec (nreverse (split-string group "[.]")))
-         (dotimes (i (length spec))
-           (when (setq file (gnus-picon-find-face
-                             (concat "unknown@"
-                                     (mapconcat
-                                      'identity (nthcdr i spec) "."))
-                             gnus-picon-news-directories t))
-             (setcar (nthcdr i spec)
-                     (cons (gnus-picon-create-glyph file)
-                           (nth i spec)))))
-           (push (cons group spec) gnus-picon-cache))
-       (when (search-forward group nil t)
-         (delete-region (match-beginning 0) (match-end 0))
-         (save-restriction
-           (narrow-to-region (point) (point))
-           (while spec
-             (goto-char (point-min))
-             (if (> (length spec) 1)
-                 (insert "."))
-             (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon))
-           (goto-char (point-max))))))))
+   (gnus-article-goto-header header)
+   (mail-header-narrow-to-field)
+   (let ((groups (message-tokenize-header (mail-fetch-field header)))
+        spec file point)
+     (dolist (group groups)
+       (unless (setq spec (cdr (assoc group gnus-picon-cache)))
+        (setq spec (nreverse (split-string group "[.]")))
+        (dotimes (i (length spec))
+          (when (setq file (gnus-picon-find-face
+                            (concat "unknown@"
+                                    (mapconcat
+                                     'identity (nthcdr i spec) "."))
+                            gnus-picon-news-directories t))
+            (setcar (nthcdr i spec)
+                    (cons (gnus-picon-create-glyph file)
+                          (nth i spec)))))
+        (push (cons group spec) gnus-picon-cache))
+       (when (search-forward group nil t)
+        (delete-region (match-beginning 0) (match-end 0))
+        (save-restriction
+          (narrow-to-region (point) (point))
+          (while spec
+            (goto-char (point-min))
+            (if (> (length spec) 1)
+                (insert "."))
+            (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon))
+          (goto-char (point-max))))))))
 
 ;;; Commands:
 
@@ -280,10 +283,9 @@ If picons are already displayed, remove them."
   (interactive)
   (let ((wash-picon-p buffer-read-only))
     (gnus-with-article-buffer
-      (if (and wash-picon-p (memq 'from-picon gnus-article-wash-types))
-         (gnus-delete-images 'from-picon)
-       (gnus-picon-transform-address "from" 'from-picon)))
-    ))
+     (if (and wash-picon-p (memq 'from-picon gnus-article-wash-types))
+        (gnus-delete-images 'from-picon)
+       (gnus-picon-transform-address "from" 'from-picon)))))
 
 ;;;###autoload
 (defun gnus-treat-mail-picon ()
@@ -292,11 +294,10 @@ If picons are already displayed, remove them."
   (interactive)
   (let ((wash-picon-p buffer-read-only))
     (gnus-with-article-buffer
-      (if (and wash-picon-p (memq 'mail-picon gnus-article-wash-types))
-         (gnus-delete-images 'mail-picon)
-       (gnus-picon-transform-address "cc" 'mail-picon)
-       (gnus-picon-transform-address "to" 'mail-picon)))
-    ))
+     (if (and wash-picon-p (memq 'mail-picon gnus-article-wash-types))
+        (gnus-delete-images 'mail-picon)
+       (gnus-picon-transform-address "cc" 'mail-picon)
+       (gnus-picon-transform-address "to" 'mail-picon)))))
 
 ;;;###autoload
 (defun gnus-treat-newsgroups-picon ()
@@ -305,12 +306,12 @@ If picons are already displayed, remove them."
   (interactive)
   (let ((wash-picon-p buffer-read-only))
     (gnus-with-article-buffer
-      (if (and wash-picon-p (memq 'newsgroups-picon gnus-article-wash-types))
-         (gnus-delete-images 'newsgroups-picon)
-       (gnus-picon-transform-newsgroups "newsgroups")
-       (gnus-picon-transform-newsgroups "followup-to")))
-    ))
+     (if (and wash-picon-p (memq 'newsgroups-picon gnus-article-wash-types))
+        (gnus-delete-images 'newsgroups-picon)
+       (gnus-picon-transform-newsgroups "newsgroups")
+       (gnus-picon-transform-newsgroups "followup-to")))))
 
 (provide 'gnus-picon)
 
+;;; arch-tag: fe9aede0-1b1b-463a-b4ab-807f98bcb31f
 ;;; gnus-picon.el ends here