changeset 65544:78d74ef1436b

2005-09-15 Chong Yidong <cyd@stupidchicken.com> * image.el (image-load-path): New variable. (image-search-load-path): New function. (find-image): Search for images in `image-load-path'.
author Chong Yidong <cyd@stupidchicken.com>
date Thu, 15 Sep 2005 14:00:09 +0000
parents 27612d890a6c
children 82ce0d75e8ed
files lisp/ChangeLog lisp/image.el
diffstat 2 files changed, 34 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Sep 15 13:17:55 2005 +0000
+++ b/lisp/ChangeLog	Thu Sep 15 14:00:09 2005 +0000
@@ -1,3 +1,9 @@
+2005-09-15  Chong Yidong  <cyd@stupidchicken.com>
+
+	* image.el (image-load-path): New variable.
+	(image-search-load-path): New function.
+	(find-image): Search for images in `image-load-path'.
+
 2005-09-15  David Ponce  <david@dponce.com>
 
 	* recentf.el (recentf-save-file-modes): New option.
--- a/lisp/image.el	Thu Sep 15 13:17:55 2005 +0000
+++ b/lisp/image.el	Thu Sep 15 14:00:09 2005 +0000
@@ -49,6 +49,14 @@
 with one argument, a string containing the image data.  If PREDICATE returns
 a non-nil value, TYPE is the image's type.")
 
+(defvar image-load-path
+  (list (file-name-as-directory (expand-file-name "images" data-directory))
+	data-directory 'load-path)
+  "List of locations in which to search for image files.
+If an element is a string, it defines a directory to search in.
+If an element is a variable symbol, the value of that variable is
+used as a list of directories to search.")
+
 (defun image-jpeg-p (data)
   "Value is non-nil if DATA, a string, consists of JFIF image data.
 We accept the tag Exif because that is the same format."
@@ -269,6 +277,20 @@
 	  (delete-overlay overlay)))
       (setq overlays (cdr overlays)))))
 
+(defun image-search-load-path (file path)
+  (let (found pathname)
+    (while (and (not found) (consp path))
+      (cond
+       ((stringp (car path))
+	(setq found
+	      (file-readable-p
+	       (setq pathname (expand-file-name file (car path))))))
+       ((and (symbolp (car path)) (boundp (car path)))
+	(if (setq pathname (image-search-load-path
+			    file (symbol-value (car path))))
+	    (setq found t))))
+      (setq path (cdr path)))
+    (if found pathname)))
 
 ;;;###autoload
 (defun find-image (specs)
@@ -286,7 +308,7 @@
 specification to be returned.  Return nil if no specification is
 satisfied.
 
-The image is looked for first on `load-path' and then in `data-directory'."
+The image is looked for in `image-load-path'."
   (let (image)
     (while (and specs (null image))
       (let* ((spec (car specs))
@@ -296,20 +318,11 @@
 	     found)
 	(when (image-type-available-p type)
 	  (cond ((stringp file)
-		 (let ((path load-path))
-		   (while (and (not found) path)
-		     (let ((try-file (expand-file-name file (car path))))
-		       (when (file-readable-p try-file)
-			 (setq found try-file)))
-		     (setq path (cdr path)))
-		   (unless found
-		     (let ((try-file (expand-file-name file data-directory)))
-		       (if (file-readable-p try-file)
-			   (setq found try-file))))
-		   (if found
-		       (setq image
-			     (cons 'image (plist-put (copy-sequence spec)
-						     :file found))))))
+		 (if (setq found (image-search-load-path
+				  file image-load-path))
+		     (setq image
+			   (cons 'image (plist-put (copy-sequence spec)
+						   :file found)))))
 		((not (null data))
 		 (setq image (cons 'image spec)))))
 	(setq specs (cdr specs))))