unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Can I avoid using `clear-image-cache'?
@ 2005-05-06  9:27 Mathias Dahl
  2005-05-06 10:35 ` Thien-Thi Nguyen
  0 siblings, 1 reply; 3+ messages in thread
From: Mathias Dahl @ 2005-05-06  9:27 UTC (permalink / raw)


I am currently developing a little package, tumme.el, to browse images
in Emacs. It is similar to thumbs.el but quite different too.

I have code that inserts thumbnail versions of images into a buffer,
like this:

  (defun tumme-ins-img (file original-file-name
                             associated-dired-buffer)
    "Insert thumbnail image."
    (let (beg end tags
              (i `(image :type ,'jpeg
                         :file ,file
                         :relief ,tumme-thumb-relief
                         :margin ,tumme-thumb-margin)))
      (setq beg (point))
      (insert-image i)
      (setq end (point))
      (add-text-properties
       beg end
       (list 'original-file-name original-file-name
             'associated-dired-buffer associated-dired-buffer
             'tags (tumme-list-tags original-file-name)))))

The problem is that if I rotate the thumbnail image (using the tools
from ImageMagick), removes and inserts the image again, the image is
fetched from Emacs' image cache. Therefor I need to clear the cache
using `clear-image-cache' so that it loads the file from disk.

Now, I know that this can be done in other ways. For example
`insert-image-file' does not have this problem as it puts the image
bytes into the text properties, while they way I use `insert-image'
will insert the file name. I probably can change the code to work the
way `insert-image-file' does, but I would rather like to, in some way,
be able to flush one particular image from the image cache.

Can this be done or do I need to write a more advanced piece of code?

For now I will use `clear-image-cache' although it feels "ugly".

/Mathias

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Can I avoid using `clear-image-cache'?
  2005-05-06  9:27 Can I avoid using `clear-image-cache'? Mathias Dahl
@ 2005-05-06 10:35 ` Thien-Thi Nguyen
  2005-05-09  6:01   ` Mathias Dahl
  0 siblings, 1 reply; 3+ messages in thread
From: Thien-Thi Nguyen @ 2005-05-06 10:35 UTC (permalink / raw)


Mathias Dahl <brakjoller.rem0veth1s@gmail.com> writes:

> I probably can change the code to work the way
> `insert-image-file' does, but I would rather like to, in some
> way, be able to flush one particular image from the image cache.
>
> Can this be done or do I need to write a more advanced piece of code?

yes. ;-)

> For now I will use `clear-image-cache' although it feels "ugly".

i just looked at image.c:1661 (lookup_image), which sez:

  /* If not found, create a new image and cache it.  */
  if (img == NULL)

probably immediately prior to this block is the best place to add
a file timestamp check.  that's not as pretty a solution as fully
generalizing the check to some kind of `:volatile VOLATILE-SPEC':

  :volatile VOLATILE-SPEC

  If VOLATILE-SPEC is t, take extra steps to check for "image
  change" so that image-cache lookup can DTRT [obviously this
  documentation can be improved ;-].  If :file is specified,
  use the timestamp of the file.  Otherwise, compute a hash of
  the data and use that to detect change.

  VOLATILE-SPEC may also be a function that takes one argument,
  either the file timestamp or the data (as a string), and returns
  non-nil to indicate that the image has changed.

i was all fired up and ready to do some quick munging and post
code (thereby procrastinating on other emacs munging for vms :-),
but then i saw how image.c leaves file loading to each image type
(not enough abstraction for my tastes) so all the gumption seeped
away...

perhaps post-release i (or someone else) will do the requisite
refactoring so that :volatile or like can be added more easily.

thi

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Can I avoid using `clear-image-cache'?
  2005-05-06 10:35 ` Thien-Thi Nguyen
@ 2005-05-09  6:01   ` Mathias Dahl
  0 siblings, 0 replies; 3+ messages in thread
From: Mathias Dahl @ 2005-05-09  6:01 UTC (permalink / raw)


Thien-Thi Nguyen <ttn@glug.org> writes:

> i just looked at image.c:1661 (lookup_image), which sez:
>
>   /* If not found, create a new image and cache it.  */
>   if (img == NULL)
>
> probably immediately prior to this block is the best place to add
> a file timestamp check.  that's not as pretty a solution as fully
> generalizing the check to some kind of `:volatile VOLATILE-SPEC':
>
>   :volatile VOLATILE-SPEC
>
>   If VOLATILE-SPEC is t, take extra steps to check for "image
>   change" so that image-cache lookup can DTRT [obviously this
>   documentation can be improved ;-].  If :file is specified,
>   use the timestamp of the file.  Otherwise, compute a hash of
>   the data and use that to detect change.
>
>   VOLATILE-SPEC may also be a function that takes one argument,
>   either the file timestamp or the data (as a string), and returns
>   non-nil to indicate that the image has changed.
>
> i was all fired up and ready to do some quick munging and post
> code (thereby procrastinating on other emacs munging for vms :-),
> but then i saw how image.c leaves file loading to each image type
> (not enough abstraction for my tastes) so all the gumption seeped
> away...
>
> perhaps post-release i (or someone else) will do the requisite
> refactoring so that :volatile or like can be added more easily.

Sounds like a good idea. I can wait, my hack is working quite nicely
for now.

/Mathias

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-05-09  6:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-06  9:27 Can I avoid using `clear-image-cache'? Mathias Dahl
2005-05-06 10:35 ` Thien-Thi Nguyen
2005-05-09  6:01   ` Mathias Dahl

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 read-only IMAP folder(s) and NNTP newsgroup(s).