A fish eye

with thumbs? thumbimgthumbimgeyeimgthumbimgthumbimg

I must have missed that in my zoology classes. Tell me more…

In Emacs, you have the following choices for frame “states”:

Library thumb-frm.el provides an additional frame “state”: thumbnail. In the spectrum from visible to invisible, thumbnail is between visible and iconified.

Screen Shot

A picture is worth a thousand words. Well, maybe a thumbnail is worth only 50 words:


Well, actually, that’s an old screenshot. Here’s one more recent, showing the default behavior of making thumbnail frames semi-transparent when they are not selected (you control this using option ‘thumfr-frame-parameters’ with frame parameter ‘alpha’).


Thumbnail Frame FAQ

What is a thumbnail frame?
: It’s just a tiny frame, where everything is shrunk: characters, scroll bar, minibuffer (if present) – everything. By default it has no menu bar or tool bar. It’s like a large desktop icon, but it shows you what is in the frame — a transparent icon. And it is live — you can interact with it normally.
Is it just a picture?
: No, a thumbnail frame is a fully functioning, active frame. So be careful: you can make changes in it without necessarily seeing what you are doing.
Can I use thumb-frm.el to view images (e.g. photos) as thumbnails?
: No, it shrinks only text, not graphics – a thumbnail of a displayed image just shows a tiny part of the image at full size. To create and view image thumbnails, see ThumbsMode.
What good is a thumbnail frame?
: You can see what is in it, but it doesn’t take up much room. It’s as easy to thumbify and dethumbify a frame as it is to iconify and deiconify it. Thumbnail frames can be stacked (arranged) along an edge of your display for access and reference. They aren’t quite as out-of-the-way as icons, and they provide more info and content access than icons.
You can, for instance, search through or monitor the progress of their buffers. Put a progressive-output buffer (make, grep, shell, communication) in a thumbnail frame to monitor its progress, then dethumbify it when something interesting happens. Or use a thumbnail frame when you want a buffer to be current but not in-your-face – click to choose a buffer without fanfare.
What’s the “fisheye” stuff all about?
: A fisheye lens shows you the center of attention close up and everything else (on the periphery) appears very small. This effect is sometimes used in user-interface design to achieve a compromise between showing you what you’re focusing on and giving you some idea of its surrounding context.
Command ‘thumfr-fisheye’ thumbifies all frames except the selected frame, so you can still see them but concentrate on the frame at hand – the others are there, but out of the way. You can use other fisheye commands to cycle the fisheye among the visible frames. (This is kind of like using ‘ALT TAB’ in Windows.)
Is this really useful, or just a gadget?
: Yes, it is useful ;-). Try it and decide for yourself. (Those baby frames are cute, in any case, no?)
Actually, at first I did not expect that this feature would be very useful. After using it for a while, however, I realized that I greatly preferred it to iconifying, so I decided to provide it as a general replacement for iconifying. Out of the box, thumb-frm.el now replaces iconifying with thumbifying; if you do not want that replacement, you can easily turn it off.
How can I get back the original behavior of ‘iconify-frame’?
: Set ‘thumfr-thumbify-dont-iconify-flag’ to ‘nil’, or use ‘ad-deactivate’ on ‘iconify-frame’ and ‘iconify-or-deiconify-frame’.

Commands, Keys, and Variables


Key Bindings

By default, standard iconifying bindings such as ‘C-z’ thumbify/dethumbify instead. The following are additional, suggested bindings:

     (global-set-key [S-mouse-3] 'thumfr-toggle-thumbnail-frame)
     (global-set-key [C-S-mouse-3] 'thumfr-thumbify-other-frames)
     (global-set-key [(shift control ?z)] 'thumfr-thumbify-other-frames)
     (global-set-key [(control meta ?z)] 'thumfr-really-iconify-or-deiconify-frame)
     ;; Bind window-manager "minimize" button, so it thumbifies instead.
     (define-key special-event-map [iconify-frame] 'thumfr-thumbify-frame-upon-event)
     ;; Add `doremi-thumbnail-frames' to the Do Re Mi commands - see library `doremi-frm.el'.
     (defalias 'doremi-prefix (make-sparse-keymap))
     (defvar doremi-map (symbol-function 'doremi-prefix) "Keymap for Do Re Mi commands.")
     (define-key global-map "\C-xt"  'doremi-prefix)
     (define-key global-map "\C-xte" 'thumfr-doremi-thumbnail-frames) ; "Eye"

In addition, I use the following bindings. The first three get rid of everything and then bring it all back as it was. These commands are defined in library frame-cmds.el.

     (global-set-key [(control meta shift ?z)] 'show-hide)
     (global-set-key [(control ?x) (control ?z)] 'iconify-everything)
     (global-set-key [C-down-mouse-1] 'mouse-show-hide-mark-unmark)
     (global-set-key [mode-line mouse-3] 'mouse-iconify/map-frame)
     (global-set-key [(control ?z)] 'iconify/map-frame)

If you want a key to iconify individual frames, bind ‘really-iconify-or-deiconify-frame’.

User Options (Variables)

These options control the behavior and appearance of thumbnail frames:

See Also

Discussion / Feedback

Your comments and questions here, please:

NicFerrier says: I wish we could have an ELPA package for this; it’s a lot of depends.

Can’t have a package for every combination of libraries. ;-) However, there was really no need for me to have hard-required library doremi-frm.el. I’ve removed that – it is needed now only when (if) you invoke command ‘doremi-thumbnail-frames’.

So now there are only two libraries strictly needed by thumb-frm.el:

If you do want to use command ‘doremi-thumbnail-frames’, then you will also need these libraries:


Libraries faces+.el and ring+.el just extend standard libraries faces.el and ring.el a bit, and library hexrgb.el has general-purpose color manipulation functions. All three are used by multiple libraries on the wiki (as are frame-fns.el and frame-cmds.el). Library doremi.el is also a general feature that is used by a dozen or so libraries on the wiki. It is only doremi-frm.el that is a bit specialized.

Thanks for bringing this to my attention. I should have removed that hard dependency long ago. HTH. – DrewAdams

OneOnOneEmacs CategoryFrames CategoryDisplay