all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* extension for image view to go to next or previous image
@ 2011-04-08  1:49 chris
  2011-04-08  6:34 ` Thierry Volpiatto
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: chris @ 2011-04-08  1:49 UTC (permalink / raw
  To: help-gnu-emacs

Hi there,

I am frequently viewing images in emacs that are part of a sequence,
therefore I am missing a way to go the next or previous image.  I was
wondering if this is possible somehow already?  Or maybe somebody can
show me how to do this with elisp?  The filenames for these images are
chosen in a way that sorting by name brings them in the right order,
also usually the directory that contains them is open in a dired
buffer, so if necessary, maybe one could retrieve the position of the
current image and then simply get the name of the next image from
there?

Any help would be greatly appreciated,


Chris


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

* Re: extension for image view to go to next or previous image
  2011-04-08  1:49 extension for image view to go to next or previous image chris
@ 2011-04-08  6:34 ` Thierry Volpiatto
  2011-04-08 13:55 ` Drew Adams
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 11+ messages in thread
From: Thierry Volpiatto @ 2011-04-08  6:34 UTC (permalink / raw
  To: help-gnu-emacs

chris <cwittern@gmail.com> writes:

> Hi there,
>
> I am frequently viewing images in emacs that are part of a sequence,
> therefore I am missing a way to go the next or previous image.  I was
> wondering if this is possible somehow already?  Or maybe somebody can
> show me how to do this with elisp?  The filenames for these images are
> chosen in a way that sorting by name brings them in the right order,
> also usually the directory that contains them is open in a dired
> buffer, so if necessary, maybe one could retrieve the position of the
> current image and then simply get the name of the next image from
> there?
>
> Any help would be greatly appreciated,
You can use iterators to do that.
You can find some of my iterators functions actually in ioccur.el, 
the iterator package on emacswiki is no more updated/maintained.
http://mercurial.intuxication.org/hg/ioccur

Use it like this:
--8<---------------cut here---------------start------------->8---
ELISP> (setq A (ioccur-iter-list '("img1.jpg" "img2.jpg" "img3.jpg" "img4.jpg" "img5.jpg")))
ELISP> (ioccur-iter-next A)
"img1.jpg"
ELISP> (ioccur-iter-next A)
"img2.jpg"
ELISP> (ioccur-iter-next A)
"img3.jpg"
--8<---------------cut here---------------end--------------->8---
When you want to go back, create a new iterator from the last element to
beginning of sequence.
To go forward again, same recreate an iterator etc...

You can also create infinite iterators.
(See ioccur-iter-circular)

-- 
A+ Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 




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

* RE: extension for image view to go to next or previous image
  2011-04-08  1:49 extension for image view to go to next or previous image chris
  2011-04-08  6:34 ` Thierry Volpiatto
@ 2011-04-08 13:55 ` Drew Adams
       [not found] ` <mailman.9.1302270960.11168.help-gnu-emacs@gnu.org>
       [not found] ` <mailman.20.1302244507.25447.help-gnu-emacs@gnu.org>
  3 siblings, 0 replies; 11+ messages in thread
From: Drew Adams @ 2011-04-08 13:55 UTC (permalink / raw
  To: 'chris', help-gnu-emacs

> I am frequently viewing images in emacs that are part of a sequence,
> therefore I am missing a way to go the next or previous image.  I was
> wondering if this is possible somehow already?  Or maybe somebody can
> show me how to do this with elisp?  The filenames for these images are
> chosen in a way that sorting by name brings them in the right order,
> also usually the directory that contains them is open in a dired
> buffer, so if necessary, maybe one could retrieve the position of the
> current image and then simply get the name of the next image from
> there?
> 
> Any help would be greatly appreciated,

Here are a couple of ways I would do it - there are no doubt other ways.
Essentially, you just need a way to cycle among files.


1. Use Icicles.  `C-x C-f', then cycle using `up'/`down'.  When a file is an
image file the image is displayed.  To cycle among only files `foo*', type `foo'
then cycle.

To cycle among files matching `foo' as a substring, do the same thing, but
either cycle using `next'/`prior' or hit `S-TAB' to initiate apropos completion
before using `up'/`down' to cycle.

You can use `S-SPC' to add other patterns to match, regardless of order - e.g.
`C-x C-f foo S-TAB S-SPC bar S-SPC toto' matches file names with `foo', `bar',
and `toto', in any order.  You can use a regexp for any of the match patterns.

If you hit `TAB' or `S-TAB' you see the file names, in *Completions*, that match
what you type.  By default, for image files you see thumbnail images next to the
file names there.  You can hit `C-x t' to show only file names or only
thumbnails: `C-x t' cycles among the 3 image-candidate display types.


2. Use `image-dired'. Use `right'/`left' + `RET' in the thumbnails buffer to
cycle among images.




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

* Re: extension for image view to go to next or previous image
       [not found] ` <mailman.9.1302270960.11168.help-gnu-emacs@gnu.org>
@ 2011-04-08 23:07   ` chris
  2011-04-09  0:28     ` Drew Adams
                       ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: chris @ 2011-04-08 23:07 UTC (permalink / raw
  To: help-gnu-emacs

Thank you Drew, I tried your suggestions.

On Apr 8, 10:55 pm, "Drew Adams" <drew.ad...@oracle.com> wrote:
> Here are a couple of ways I would do it - there are no doubt other ways.
> Essentially, you just need a way to cycle among files.

Yeah in a way this is true, but what I had in mind was a bit of lisp
code that would allow me to press 'n' (or SPC) on an image and then
see the next one, 'p' would get me the previous one.

>
> 1. Use Icicles.  `C-x C-f', then cycle using `up'/`down'.  When a file is an
> image file the image is displayed.  To cycle among only files `foo*', type `foo'
> then cycle.

Hmm, I tried to use icicles, but it seems to fight with ido, which I
am using. If they can't figure it out, I am with ido.  But at the
moment, I am not sure this is the route I want to take.

> 2. Use `image-dired'. Use `right'/`left' + `RET' in the thumbnails buffer to
> cycle among images.

I also looked at image-dired, but that seems to be a different use
case.  If there was a way to make the thumbnails larger, it might be
useful in some ways, but not for my main purpose.

All the best,

Chris


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

* Re: extension for image view to go to next or previous image
       [not found] ` <mailman.20.1302244507.25447.help-gnu-emacs@gnu.org>
@ 2011-04-08 23:11   ` chris
  2011-04-09  5:39     ` Thierry Volpiatto
  0 siblings, 1 reply; 11+ messages in thread
From: chris @ 2011-04-08 23:11 UTC (permalink / raw
  To: help-gnu-emacs


Dear Thierry,


On Apr 8, 3:34 pm, Thierry Volpiatto <thierry.volpia...@gmail.com>
wrote:
>
> You can use iterators to do that.

I never had heard of it iterators in elisp, but they look useful.  But
it is a pity they can only go in one direction.  Anyway, I will check
out ioccur.

I still think that maybe finding a way to "remote control" dired would
be the easiest solution, than I would simply have the dired buffer in
the background and get the info about which file comes next or
previous from there.
But I am still stuck at how to practically do that...

All the best,

Chris





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

* RE: extension for image view to go to next or previous image
  2011-04-08 23:07   ` chris
@ 2011-04-09  0:28     ` Drew Adams
       [not found]     ` <mailman.12.1302309090.11006.help-gnu-emacs@gnu.org>
  2011-04-09  5:32     ` Thierry Volpiatto
  2 siblings, 0 replies; 11+ messages in thread
From: Drew Adams @ 2011-04-09  0:28 UTC (permalink / raw
  To: 'chris', help-gnu-emacs

> what I had in mind was ... to press 'n' (or SPC) on an
> image and then see the next one, 'p' would get me the
> previous one.

Ah, you didn't say that.

In that case, you probably need to bind `n' and `p' in `image-mode-map'.  You
just need commands that visit the next/previous file in sequence, then bind `n'
and `p' to them.  Shouldn't be hard.  Iterate over `directory-files' (e.g.
filtered by `image-file-name-regexp'), and call `find-file'.

Might be a reasonable addition to the default `image-mode-map' bindings.  After
you create the commands, think about submitting such bindings as an enhancement
via `M-x send-emacs-bug-report'.

Something like this, perhaps (you can improve it, certainly):

(require 'image-mode)
(define-key image-mode-map "n" 'next-image)
(define-key image-mode-map "p" 'previous-image)

(defun next-image (arg)
  "..."
  (interactive "P")
  (unless (and (buffer-file-name) (eq major-mode 'image-mode))
    (error "Not visiting a file in image mode"))
  (let* ((regexp  (image-file-name-regexp))
         (files   (directory-files default-directory nil regexp))
         (len     (length files))
         (this    (file-name-nondirectory (buffer-file-name)))
         (idx     0))
    (catch 'next-image
      (dolist (file  files)
        (when (string= this file) (throw 'next-image (1+ idx)))
        (setq idx  (1+ idx))))
    (setq idx  (+ idx (if arg -1 1)))
    (when (< idx 0) (setq idx (1- len)))
    (when (>= idx len) (setq idx 0))
    (find-file (elt files idx))))

(defun previous-image (arg)
  "..."
  (interactive "P")
  (next-image t))

> > 1. Use Icicles.  `C-x C-f', then cycle using `up'/`down'.  
> >    When a file is an image file the image is displayed.
> >    To cycle among only files `foo*', type `foo' then cycle.
> 
> Hmm, I tried to use icicles, but it seems to fight with ido, which I
> am using. If they can't figure it out, I am with ido.  But at the
> moment, I am not sure this is the route I want to take.

http://www.emacswiki.org/emacs/Icicles_-_Ido_and_IswitchB

> > 2. Use `image-dired'. Use `right'/`left' + `RET' in the 
> >    thumbnails buffer to cycle among images.
> 
> I also looked at image-dired, but that seems to be a different use
> case.  If there was a way to make the thumbnails larger, it might be
> useful in some ways, but not for my main purpose.

image-dired-thumb-size, `image-dired-thumb-width', and
`image-dired-thumb-height' should let you control the size.




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

* Re: extension for image view to go to next or previous image
       [not found]     ` <mailman.12.1302309090.11006.help-gnu-emacs@gnu.org>
@ 2011-04-09  1:24       ` chris
  2011-04-09  4:03       ` rusi
  1 sibling, 0 replies; 11+ messages in thread
From: chris @ 2011-04-09  1:24 UTC (permalink / raw
  To: help-gnu-emacs

Dear Drew,

This is absolutely excellent.  Here is my version, based on your code,
which is actually a bit simpler, since I only want to look at images
of the same type.

(require 'image-mode)
(define-key image-mode-map "n" 'next-image)
(define-key image-mode-map "p" 'previous-image)

(defun next-image (arg)
  "when visitng an image, go to the next image in the same
directory of the same type. No argument or nil will move to the
following image in ascending order, t will move to the previous
one.  Thanks to Drew Adams for help with this on gnu.emacs.help"
  (interactive "P")
  (unless (and (buffer-file-name) (eq major-mode 'image-mode))
    (error "Not visiting a file in image mode"))
  (let* ((files   (directory-files
		   (file-name-directory (buffer-file-name)) nil
		   (file-name-extension (buffer-file-name)) ))
         (len     (length files))
         (this    (file-name-nondirectory (buffer-file-name)))
         (idx     0))
    (catch 'next-image
      (dolist (file  files)
        (when (string= this file) (throw 'next-image (1+ idx)))
        (setq idx  (1+ idx))))
    (setq idx  (+ idx (if arg -1 1)))
    (when (< idx 0) (setq idx (1- len)))
    (when (>= idx len) (setq idx 0))
    (find-file (elt files idx))))

(defun previous-image (arg)
  "when visitng an image, go to the next image in the same
directory of the same type. No argument or nil will move to the
following image in ascending order, t will move to the previous
one.  Thanks to Drew Adams for help with this on gnu.emacs.help"
  (interactive "P")
  (next-image t))


Many thanks for your help!!!

Chris



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

* Re: extension for image view to go to next or previous image
       [not found]     ` <mailman.12.1302309090.11006.help-gnu-emacs@gnu.org>
  2011-04-09  1:24       ` chris
@ 2011-04-09  4:03       ` rusi
  2011-04-09 15:06         ` Drew Adams
  1 sibling, 1 reply; 11+ messages in thread
From: rusi @ 2011-04-09  4:03 UTC (permalink / raw
  To: help-gnu-emacs

On Apr 9, 5:28 am, "Drew Adams" <drew.ad...@oracle.com> wrote:

> > Hmm, I tried to use icicles, but it seems to fight with ido, which I
> > am using. If they can't figure it out, I am with ido.  But at the
> > moment, I am not sure this is the route I want to take.
>
> http://www.emacswiki.org/emacs/Icicles_-_Ido_and_IswitchB

Of late Ive been having clashes between icicles and org-mode (C-c =
and other things related to tables spreadsheets etc).  I generally
shut off icicles and proceed.  But this reminds me is there a page
like the above for org vs icicles keybinding clashes?


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

* Re: extension for image view to go to next or previous image
  2011-04-08 23:07   ` chris
  2011-04-09  0:28     ` Drew Adams
       [not found]     ` <mailman.12.1302309090.11006.help-gnu-emacs@gnu.org>
@ 2011-04-09  5:32     ` Thierry Volpiatto
  2 siblings, 0 replies; 11+ messages in thread
From: Thierry Volpiatto @ 2011-04-09  5:32 UTC (permalink / raw
  To: help-gnu-emacs

chris <cwittern@gmail.com> writes:

> Thank you Drew, I tried your suggestions.
>
> On Apr 8, 10:55 pm, "Drew Adams" <drew.ad...@oracle.com> wrote:
>> Here are a couple of ways I would do it - there are no doubt other ways.
>> Essentially, you just need a way to cycle among files.
>
> Yeah in a way this is true, but what I had in mind was a bit of lisp
> code that would allow me to press 'n' (or SPC) on an image and then
> see the next one, 'p' would get me the previous one.
>
>>
>> 1. Use Icicles.  `C-x C-f', then cycle using `up'/`down'.  When a file is an
>> image file the image is displayed.  To cycle among only files `foo*', type `foo'
>> then cycle.
>
> Hmm, I tried to use icicles, but it seems to fight with ido, which I
> am using. If they can't figure it out, I am with ido.  But at the
> moment, I am not sure this is the route I want to take.
>
>> 2. Use `image-dired'. Use `right'/`left' + `RET' in the thumbnails buffer to
>> cycle among images.
>
> I also looked at image-dired, but that seems to be a different use
> case.  If there was a way to make the thumbnails larger, it might be
> useful in some ways, but not for my main purpose.

See also anything-find-files which can be turned in an image browser
with possibility to rotate images on the fly and is very simple to use.
http://repo.or.cz/w/anything-config.git

You will find anything.pdf in doc directory with explanation.
 
-- 
A+ Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 




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

* Re: extension for image view to go to next or previous image
  2011-04-08 23:11   ` chris
@ 2011-04-09  5:39     ` Thierry Volpiatto
  0 siblings, 0 replies; 11+ messages in thread
From: Thierry Volpiatto @ 2011-04-09  5:39 UTC (permalink / raw
  To: help-gnu-emacs

chris <cwittern@gmail.com> writes:

> Dear Thierry,
>
>
> On Apr 8, 3:34 pm, Thierry Volpiatto <thierry.volpia...@gmail.com>
> wrote:
>>
>> You can use iterators to do that.
>
> I never had heard of it iterators in elisp, but they look useful.  But
> it is a pity they can only go in one direction.

They go in two directions, see the circular functions.
  
>Anyway, I will check
> out ioccur.
>
> I still think that maybe finding a way to "remote control" dired would
> be the easiest solution, than I would simply have the dired buffer in
> the background and get the info about which file comes next or
> previous from there.

anything-find-files can be seen as a virtual dired and does this.


-- 
A+ Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 




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

* RE: extension for image view to go to next or previous image
  2011-04-09  4:03       ` rusi
@ 2011-04-09 15:06         ` Drew Adams
  0 siblings, 0 replies; 11+ messages in thread
From: Drew Adams @ 2011-04-09 15:06 UTC (permalink / raw
  To: 'rusi', help-gnu-emacs

> > http://www.emacswiki.org/emacs/Icicles_-_Ido_and_IswitchB
> 
> Of late Ive been having clashes between icicles and org-mode (C-c =
> and other things related to tables spreadsheets etc).  I generally
> shut off icicles and proceed.  But this reminds me is there a page
> like the above for org vs icicles keybinding clashes?

1. The page cited above is not about keybinding clashes.

2. Keys such as `C-c =' are reserved for minor modes.  From `(elisp) Key Binding
Conventions': "Sequences consisting of `C-c' followed by any other punctuation
character [other than { } < > : and ;] are allocated for minor modes."

`icicle-mode' is a minor mode.  There is nothing abnormal about two minor modes
defining a key such as `C-c =' differently.

3. If Org defines `C-c =' as a major- (not just a minor-) mode key binding
(which it seems to: `org-table-eval-formula') then that is perhaps a bit
ill-advised, but it is not verboten.

Again, from the same Elisp manual page, same paragraph: "Using them [keys such
as `C-c ='] in a _major_ mode is not absolutely prohibited, but if you do that,
the major mode binding may be shadowed from time to time by minor modes."

IOW, a major mode that goes ahead and does this should expect that the key will
be shadowed by minor modes.

4. What is important is that any library you use provide you (a) a
straightforward way to change or remove such key bindings and (b) good doc about
them.

4a. Icicles gives you a user option that lets you easily change or remove such
key bindings: `icicle-top-level-key-bindings'.  You do not even need to know any
Lisp to do this.

For example, it is trivial to either remove this entry from
`icicle-top-level-key-bindings' or assign a different key to the same command:

[INS] [DEL]  <== Click DEL to remove the key binding
 Key: C-c =  <== Or type a different key name, to change key
 Command: icicle-imenu

4b. This is all clearly documented.  There is even a screenshot of the Customize
interface for `icicle-top-level-key-bindings' (second URL) - `C-c =' is the 3rd
binding shown in the screenshot.
http://www.emacswiki.org/emacs/Icicles_-_Customizing_Key_Bindings
http://www.emacswiki.org/emacs/Icicles_-_Key_Bindings

If you are toggling Icicle mode off and on just because of such a key binding,
then you owe it to yourself, I suggest, to look at the doc to learn about
Icicles keys and how to change them.

5. If you think you see a bug, doc or code, then send a _specific recipe_,
starting with emacs -Q: `M-x icicle-send-bug-report'.




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

end of thread, other threads:[~2011-04-09 15:06 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-08  1:49 extension for image view to go to next or previous image chris
2011-04-08  6:34 ` Thierry Volpiatto
2011-04-08 13:55 ` Drew Adams
     [not found] ` <mailman.9.1302270960.11168.help-gnu-emacs@gnu.org>
2011-04-08 23:07   ` chris
2011-04-09  0:28     ` Drew Adams
     [not found]     ` <mailman.12.1302309090.11006.help-gnu-emacs@gnu.org>
2011-04-09  1:24       ` chris
2011-04-09  4:03       ` rusi
2011-04-09 15:06         ` Drew Adams
2011-04-09  5:32     ` Thierry Volpiatto
     [not found] ` <mailman.20.1302244507.25447.help-gnu-emacs@gnu.org>
2011-04-08 23:11   ` chris
2011-04-09  5:39     ` Thierry Volpiatto

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.