Gnus development mailing list
 help / color / mirror / Atom feed
From: Bill Wohler <wohler@newt.com>
Subject: Re: image-load-path/load-path function
Date: Fri, 03 Mar 2006 14:46:47 -0800	[thread overview]
Message-ID: <9977.1141426007@olgas.newt.com> (raw)
In-Reply-To: <v9ek1jfpq3.fsf@marauder.physik.uni-ulm.de>

Reiner Steib <reinersteib+gmane@imap.cc> wrote:

> On Fri, Mar 03 2006, Bill Wohler wrote:
> 
> > I think we're ready to move it to image.el. Let me know if you think I
> > should proceed.
> >
> > I think the name image-load-path would be fine: If you ask for the
> > variable image-load-path, you get the image load path, if you ask for
> > the function image-load-path, you get the image load path. Seems
> > consistent. What do you think?
> 
> Maybe `image-relative-load-path' or `image-load-path-relative' to make
> it more clear?

Hmmm, I'm not entirely enamored with these. If not image-load-path, then
perhaps something like image-load-path-for-library since library is the
first argument.

> > (defun mh-image-load-path (library image &optional path)
> >   "Return a suitable search path for images of LIBRARY.
> >
> > Images for LIBRARY are searched for in \"../../etc/images\" and
> > \"../etc/images\" relative to the files in \"lisp/LIBRARY\", in
> > `image-load-path', or in `load-path'.
> >
> > This function returns value of `load-path' augmented with the
> > path to IMAGE.  If PATH is given, it is used instead of
> > `load-path'."
> 
> Adding a calling example to doc string won't hurt.  Maybe emphasize
> that IMAGE must include the extension, e.g. .xpm (maybe not necessary
> when we give an example).

I was thinking the very same thing.

> >   (let ((mh-image-directory))
> [...]
> >      ((let (mh-library-name d1ei d2ei)
> 
> The local variables mh-image-directory and mh-library-name should have
> a non-prefixed name e.g. image-dir and library-name.  This would also
> make synching more easy.

Agreed. That occurred to me too, and it seems that there aren't any
variables in the functions we call that we might clobber. I'd prefer the
non-abbreviated name image-directory, if you don't mind.

>                           See the attached patch against
> emacs/lisp/mh-e/mh-utils.el.

Thanks.

> >     (unless (file-exists-p mh-image-directory)
> >       (error "Directory %s in mh-image-directory does not exist"
> > 	     mh-image-directory))
> >     (unless (file-exists-p (expand-file-name image mh-image-directory))
> >       (error "Directory %s in mh-image-directory does not contain image %s"
> >              mh-image-directory image))
> 
> As mh-image-directory cannot be not a user-specified directory
> anymore, I doubt that these errors are very useful.  But if you'd like
> to keep these two `error' calls, we should add an optional no-error
> argument as suggested by Katsumi Yamaoka.  We would set this to t in
> Gnus and the function would use `message' or `error' depending on its
> value.

Good catch. Actually, I just found that there was a bug in this code
since if the given image couldn't be found, this code would throw an
error with (file-exists-p nil).

There still needs to be an error check in case the provided image wasn't
found at all in ../../etc/images, image-load-path, or load-path. This
can be a default case in the cond. I don't think a NOERROR argument
belongs here; it belongs higher up in the call-chain.

Here's a patch coming back at you (but I'm sending another note
immediately after this one).

--- mh-utils.el.orig	2006-03-03 12:07:57.000000000 -0800
+++ mh-utils.el	2006-03-03 12:39:25.000000000 -0800
@@ -82,7 +82,7 @@
   (delete-region (point) (progn (forward-line lines) (point))))
 
 ;;;###mh-autoload
-(defun mh-image-load-path (library image &optional path)
+(defun mh-image-load-path-for-library (library image &optional path)
   "Return a suitable search path for images of LIBRARY.
 
 Images for LIBRARY are searched for in \"../../etc/images\" and
@@ -91,10 +91,20 @@
 
 This function returns value of `load-path' augmented with the
 path to IMAGE.  If PATH is given, it is used instead of
-`load-path'."
+`load-path'.
+
+Here is an example that uses a common idiom to provide
+compatibility with versions of Emacs that lack the variable
+`image-load-path':
+
+  (let ((load-path
+         (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\" 'load-path))
+        (image-load-path
+         (image-load-path-for-library \"mh-e\" \"mh-logo.xpm\" 'image-load-path)))
+    (mh-tool-bar-folder-buttons-init))"
   (unless library (error "No library specified"))
   (unless image   (error "No image specified"))
-  (let ((image-dir))
+  (let ((image-directory))
     (cond
      ;; Try relative setting.
      ((let (library-name d1ei d2ei)
@@ -102,17 +112,15 @@
         (setq library-name (locate-library library))
         (if (not library-name)
             (error "Cannot find library %s in load-path" library))
-        ;; And then set image-dir relative to that.
+        ;; And then set image-directory relative to that.
         (setq
          ;; Go down 2 levels.
          d2ei (expand-file-name
-               (concat (file-name-directory library-name)
-                       "../../etc/images"))
+               (concat (file-name-directory library-name) "../../etc/images"))
          ;; Go down 1 level.
          d1ei (expand-file-name
-               (concat (file-name-directory library-name)
-                       "../etc/images")))
-        (setq image-dir
+               (concat (file-name-directory library-name) "../etc/images")))
+        (setq image-directory
               ;; Set it to nil if image is not found.
               (cond ((file-exists-p (expand-file-name image d2ei)) d2ei)
                     ((file-exists-p (expand-file-name image d1ei)) d1ei)))))
@@ -124,8 +132,8 @@
                   ;; Images in load-path.
                   (locate-library image)))
             parent)
-        ;; Since the image might be in a nested directory
-        ;; (for example, mail/attach.pbm), adjust `image-dir'
+        ;; Since the image might be in a nested directory (for
+        ;; example, mail/attach.pbm), adjust `image-directory'
         ;; accordingly.
         (and dir
              (setq dir (file-name-directory dir))
@@ -133,25 +141,20 @@
                (while (setq parent (file-name-directory img))
                  (setq img (directory-file-name parent)
                        dir (expand-file-name "../" dir)))
-               (setq image-dir dir))))))
-    ;;
-    (unless (file-exists-p image-dir)
-      (error "Directory %s in image-dir does not exist"
-	     image-dir))
-    (unless (file-exists-p (expand-file-name image image-dir))
-      (error "Directory %s in image-dir does not contain image %s"
-             image-dir image))
+               (setq image-directory dir)))))
+     (t
+      (error "Could not find image %s for library %s" image library)))
+
     ;; Return augmented `image-load-path' or `load-path'.
     (cond ((and path (symbolp path))
-           (nconc (list image-dir)
-                  (delete image-dir
+           (nconc (list image-directory)
+                  (delete image-directory
                           (if (boundp path)
                               (copy-sequence (symbol-value path))
                             nil))))
           (t
-           (nconc (list image-dir)
-                  (delete image-dir
-                          (copy-sequence load-path)))))))
+           (nconc (list image-directory)
+                  (delete image-directory (copy-sequence load-path)))))))
 
 ;;;###mh-autoload
 (defun mh-make-local-vars (&rest pairs)

-- 
Bill Wohler <wohler@newt.com>  http://www.newt.com/wohler/  GnuPG ID:610BD9AD
Maintainer of comp.mail.mh FAQ and MH-E. Vote Libertarian!
If you're passed on the right, you're in the wrong lane.


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642

  reply	other threads:[~2006-03-03 22:46 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-20 22:22 Customizable tool bars Reiner Steib
2006-01-25 16:40 ` Reiner Steib
2006-01-26  0:53   ` Katsumi Yamaoka
2006-01-26  1:39     ` Steve Youngs
2006-01-26  2:35       ` Katsumi Yamaoka
2006-01-26  4:28         ` Steve Youngs
2006-01-26  5:14           ` Katsumi Yamaoka
2006-01-26  9:19             ` Reiner Steib
2006-01-26 11:31               ` Katsumi Yamaoka
2006-01-26  9:24     ` Reiner Steib
2006-01-26 10:52       ` Katsumi Yamaoka
2006-01-26 15:04         ` Reiner Steib
2006-01-30 23:45           ` Katsumi Yamaoka
2006-02-21 22:23   ` Reiner Steib
2006-02-22  5:04     ` Katsumi Yamaoka
2006-02-22 12:19       ` image-load-path/load-path function (was: Customizable tool bars) Reiner Steib
2006-02-22 14:53         ` image-load-path/load-path function Reiner Steib
2006-02-23  8:23           ` Katsumi Yamaoka
2006-02-23 11:50             ` Reiner Steib
2006-02-23 13:19               ` Katsumi Yamaoka
2006-02-23 15:17                 ` Reiner Steib
2006-02-24  8:03                   ` Katsumi Yamaoka
2006-02-24  8:40                     ` Katsumi Yamaoka
2006-02-23 18:13               ` Bill Wohler
2006-03-01 23:33         ` Bill Wohler
2006-03-02  1:07           ` Bill Wohler
2006-03-02  4:31             ` Peter S Galbraith
2006-03-02 17:13               ` Reiner Steib
2006-03-02 20:30                 ` Bill Wohler
2006-03-02 22:05                   ` Reiner Steib
2006-03-03  0:49                     ` Bill Wohler
2006-03-03  0:52                       ` Bill Wohler
2006-03-03 16:38                       ` Reiner Steib
2006-03-03 22:46                         ` Bill Wohler [this message]
2006-03-03 22:47                         ` Bill Wohler
2006-03-04 16:27                           ` Reiner Steib
2006-03-04 17:55                             ` Bill Wohler
2006-03-06 16:11                               ` Bill Wohler
2006-03-11  2:16                                 ` Bill Wohler
     [not found]                         ` <8096.1141420620@olgas.newt.com>
2006-03-04 23:33                           ` Bill Wohler
2006-03-02 16:59           ` Reiner Steib
2006-03-02 17:22             ` Bill Wohler
2006-02-22 12:23       ` Customizable tool bars Reiner Steib
2006-03-01 17:41       ` Reiner Steib
2006-03-01 18:26         ` Romain Francoise
2006-03-02 16:30           ` Reiner Steib
2006-03-01 19:35         ` Michael Piotrowski
2006-03-01 22:51           ` Reiner Steib
2006-03-02  0:00           ` Katsumi Yamaoka
2006-03-02 11:16             ` Michael Piotrowski
2006-03-02 16:31               ` Reiner Steib
2006-03-02 18:00                 ` Michael Piotrowski
2006-03-01 22:49         ` Katsumi Yamaoka
2006-03-02 10:49           ` Reiner Steib
2006-03-02 23:34             ` Katsumi Yamaoka
2006-03-03 10:35               ` Reiner Steib
2006-03-06  4:00                 ` Katsumi Yamaoka
2006-03-06 10:32                   ` Reiner Steib
2006-03-06 12:16                     ` Katsumi Yamaoka
2006-03-03 16:47               ` low-color variants of the Gnome icons (was: Customizable tool bars) Reiner Steib

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9977.1141426007@olgas.newt.com \
    --to=wohler@newt.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).