Thumbnail

I am trying to get the thumbnail function to work. Yes, I am modifying the default fvwm2rc. It isn’t working for me. I’m new, so I may be missing something:

[code]# This file is copied to a new user’s FVWM_USERDIR by FvwmForm-Setup form.

This file contains the commands fvwm reads while starting.

EdgeThickness 0
ClickTime 550
IgnoreModifiers L2
CursorStyle root left_ptr
CursorStyle stroke hand2
Emulate mwm

DeskTopSize 2x2
MenuStyle * fvwm, Foreground black, Background #aeb2c3, Greyed grey40
MenuStyle * Font -adobe-helvetica-bold-o---14-------*

ColormapFocus FollowsMouse

default Styles:

make sure these fonts exist on your system:

Style * Font -adobe-times-bold-r---12-------*
Style * IconFont -adobe-times-bold-r---12-------*
Style * HilightFore white, HilightBack #b54872
Style * BorderWidth 7, HandleWidth 7
Style * Icon unknown1.xpm, Color lightgrey/dimgrey
Style * MWMFunctions, MWMDecor, HintOverride
Style * DecorateTransient, NoPPosition
Style * IconBox 0 -10 -280 -1
Style * FocusFollowsMouse
Style * TileCascadePlacement
Style * EWMHUseStackingOrderHints

Styles for various Fvwm modules:

Style Fvwm* NoTitle, Sticky, WindowListSkip
Style Fvwm* BorderWidth 2, CirculateSkipIcon, CirculateSkip
Style FvwmPager StaysOnTop
Style FvwmBanner StaysOnTop
Style FvwmButtons Icon toolbox.xpm, ClickToFocus

Styles for your common terminal emulator programs.

xterms and rxvts in a separate icon box:

Style XTerm Icon xterm.xpm, SloppyFocus, IconBox -70 1 -1 -140
Style rxvt Icon term.xpm, SloppyFocus, IconBox -70 1 -1 -140
Style rxvt MWMBorder, MWMButtons

Styles for various common programs:

Style lock NoTitle, NoHandles, Sticky, WindowListSkip, ClickToFocus
Style xbiff NoTitle, Sticky, WindowListSkip, ClickToFocus
Style xcalc Icon xcalc.xpm, NoButton 2,ClickToFocus
Style xmh Icon mail1.xpm, NoIconTitle,StickyIcon
Style xmh NoButton 2
Style xman Icon xman.xpm, ClickToFocus
Style xmag Icon mag_glass.xpm, ClickToFocus
Style xgraph Icon graphs.xpm, ClickToFocus
Style xmosaic Color Green/Yellow, ClickToFocus
Style OpenOffice
NoFuncHint

some simple default key bindings:

Key Next A SCM Next [] Focus
Key Prior A SCM Prev [
] Focus

some simple default mouse bindings:

for the root window:

Mouse 1 R A Menu MenuFvwmRoot Nop
Mouse 2 R A Menu MenuFvwmWindowOps Nop
Mouse 3 R A WindowList

for the title bar buttons:

Mouse 0 1 A Menu MenuFvwmWindowOps2 Close
Mouse 0 2 A FuncFvwmMaximize
Mouse 0 4 A Iconify

for other parts of the window/borders/icons:

Mouse 1 F A FuncFvwmResizeOrRaise
Mouse 1 TS A FuncFvwmMoveOrRaise
Mouse 1 I A FuncFvwmMoveOrIconify
Mouse 2 I A Iconify
Mouse 2 FST A Menu MenuFvwmWindowOps2 Nop
Mouse 3 TSIF A RaiseLower

######################## Initialization Functions ############################
AddToFunc StartFunction

  • I Module FvwmAnimate
  • I Module FvwmBanner
  • I Module FvwmButtons

#Thumbnail Function

DestroyFunc Thumbnail
AddToFunc Thumbnail

  • I Raise
  • I SetEnv Icon-$[w.id] $[w.iconfile]
  • I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead
    “xwd -silent -id $[w.id] | convert -scale 96 -frame 1x1
    -mattecolor black -quality 0 xwd:-
    png:$[FVWM_USERDIR]/icon.tmp.$[w.id].png
    && echo WindowStyle IconOverride,
    Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png
    || echo Nop”
  • I Iconify

And then the Icon is restored with this function:

DestroyFunc DeThumbnail
AddToFunc DeThumbnail

  • I PipeRead “echo WindowStyle Icon \$\[Icon-$[w.id]\]”
  • I UnsetEnv Icon-$[w.id]
  • I Exec rm -f $[FVWM_USERDIR]/icon.tmp.$[w.id].png

AddToFunc InitFunction

  • I exec xsetroot -mod 2 2 -fg rgb:55/40/55 -bg rgb:70/50/70

For some SM-s (like gnome-session) there is an internal background setter.

AddToFunc SessionInitFunction

  • I Nop

######################## Menus ###################
Read /etc/X11/fvwm/menudefs.hook Quiet
Read menudefs.hook Quiet

DestroyMenu MenuFvwmRoot
AddToMenu MenuFvwmRoot “$[gt.Root Menu]” Title

  •                   "&1. XTerm"             Exec exec xterm +ai
    
  •                   "&2. Rxvt"              Exec exec rxvt
    
  •                   ""              Nop
    
  •                   "&D. Debian Menu"             Popup "/Debian"
    
  •                   ""              Nop
    
  •                   "&R. $[gt.Remote Logins]"     Popup MenuFvwmLogins
    
  •                   ""              Nop
    
  •                   "&U. $[gt.Utilities]"         Popup MenuFvwmUtilities
    
  •                   ""              Nop
    
  •                   "&M. $[gt.Fvwm Modules]"      Popup MenuFvwmModules
    
  •                   "&W. $[gt.Fvwm Window Ops]"   Popup MenuFvwmWindowOps
    
  •                   "&S. $[gt.Fvwm Config Ops]"   Popup MenuFvwmConfig
    
  •                   ""              Nop
    
  •                   "&F. $[gt.Refresh Screen]"   Refresh
    
  •                   "&C. $[gt.Recapture Screen]" Recapture
    
  •                   ""              Nop
    
  •                   "&X. $[gt.Exit Fvwm]" Popup MenuFvwmQuitVerify
    

DestroyMenu MenuFvwmUtilities
AddToMenu MenuFvwmUtilities “$[gt.Utilities]” Title

  •                   "&T. Top"       Exec exec xterm -T Top -n Top -e top
    
  •                   "&C. Calculator" Exec exec xcalc
    
  •                   "&M. Xman"      Exec exec xman
    
  •                   "&G. Xmag"      Exec exec xmag
    
  •                   "&R. Editres"   Exec exec editres
    
  •                   ""              Nop
    
  •                   "&E. XEmacs"    Exec exec xemacs
    
  •                   "&A. Xmh Mail"  FuncFvwmMailXmh xmh "-font fixed"
    
  •                   ""              Nop
    
  •                   "&L. XLock"     Exec exec xlock -mode random
    
  •                   ""              Nop
    
  •                   "&D. $[gt.Reset X defaults]" Exec xrdb -load $HOME/.Xdefaults
    

DestroyMenu MenuFvwmConfig
AddToMenu MenuFvwmConfig “$[gt.Fvwm Config Ops]” Title

  • “&S. $[gt.Sloppy Focus]” FuncFvwmFocusPolicyChange SloppyFocus
  • “&C. $[gt.Click To Focus]” FuncFvwmFocusPolicyChange ClickToFocus
  • “&F. $[gt.Focus Follows Mouse]” FuncFvwmFocusPolicyChange FocusFollowsMouse
  • “” Nop
  • “&1. $[gt.Colormap Follows Mouse]” ColormapFocus FollowsMouse
  • “&2. $[gt.Colormap Follows Focus]” ColormapFocus FollowsFocus
  • “” Nop
  • “&3. $[gt.Full Paging ON]” EdgeScroll 100 100
  • “&4. $[gt.All Paging OFF]” EdgeScroll 0 0
  • “&5. $[gt.Horizontal Paging Only]” EdgeScroll 100 0
  • “&6. $[gt.Vertical Paging Only]” EdgeScroll 0 100
  • “&7. $[gt.Partial Paging]” EdgeScroll 50 50
  • “&8. $[gt.Full Paging && Edge Wrap]” EdgeScroll 100000 100000

The window Ops menus exhibit a different HotKey style.

There are 2 versions of the WindowOps Menu, meant to be bound to different

things. Here is the “common” part:

DestroyFunc FuncFvwmWindowCommon
AddToFunc FuncFvwmWindowCommon

  • I AddToMenu $0 “$[gt.&Move]” Move
  • I AddToMenu $0 “$[gt.&Resize]” Resize
  • I AddToMenu $0 “$[gt.R&aise]” Raise
  • I AddToMenu $0 “$[gt.&Lower]” Lower
  • I AddToMenu $0 “$[gt.(De)&Iconify]” Iconify
  • I AddToMenu $0 “$[gt.(Un)&Stick]” Stick
  • I AddToMenu $0 “$[gt.(Un)Ma&ximize]” Maximize
  • I AddToMenu $0 “” Nop
  • I AddToMenu $0 “$[gt.&Delete]” Delete
  • I AddToMenu $0 “$[gt.&Close]” Close
  • I AddToMenu $0 “$[gt.Destroy]” Destroy
  • I AddToMenu $0 “” Nop

First windowops menu, bound to:

mouse 2 on root

Root menu

DestroyMenu MenuFvwmWindowOps
AddToMenu MenuFvwmWindowOps “$[gt.Window Ops]” Title
FuncFvwmWindowCommon MenuFvwmWindowOps

  • “$[gt.Re&fresh Window]” RefreshWindow

Second windowops menu, bound to:

any mouse on titlebar button 1

mouse 2 on frame, side or titlebar

DestroyMenu MenuFvwmWindowOps2
AddToMenu MenuFvwmWindowOps2
FuncFvwmWindowCommon MenuFvwmWindowOps2

  • Scroll&Bar Module FvwmScroll 2 2
  • “&$[gt.Print]” FuncFvwmPrint
  • “$[gt.Print Re&verse]” FuncFvwmPrintReverse

3 different ways to log on, take your pick:

DestroyFunc FuncFvwmRloginXterm
AddToFunc FuncFvwmRloginXterm
I Exec xterm -name $0 -title “$USER @ $0” -e rlogin $0
DestroyFunc FuncFvwmRloginRxvt
AddToFunc FuncFvwmRloginRxvt
I Exec rxvt -name $0 -n $0 -title $USER@$0 -e rlogin $0
DestroyFunc FuncFvwmRloginSshRxvt
AddToFunc FuncFvwmRloginSshRxvt
I Exec Exec ssh $0 rxvt -display $HOSTDISPLAY

be sure to fill these in with your correct machine names:

DestroyMenu MenuFvwmLogins
AddToMenu MenuFvwmLogins

  • &dopey FuncFvwmRloginXterm dopey
  • &snoopy FuncFvwmRloginXterm snoopy
  • s&ignal Exec rxterm signal

DestroyMenu MenuFvwmModules
AddToMenu MenuFvwmModules “$[gt.Fvwm Modules]” Title

  • “&1. $[gt.Control Animation]” Popup MenuFvwmAnimate
  • “&B. Button-Bar” Module FvwmButtons
  • “&O. IconBox” FuncFvwmConfigureIconBox
  • “&F. Forms” Popup MenuFvwmForms
  • “&I. Identify” Module FvwmIdent
  • “&M. IconMan” Module FvwmIconMan
  • “&N. Banner” Module FvwmBanner
  • “&C. Console” Module FvwmConsole
  • “&P. Pager” Module FvwmPager 0 0
  • “&2. Pager (2 $[gt.desks])” Module FvwmPager 0 1
  • “&R. Backer” Module FvwmBacker
  • “&S. ScrollBar” Module FvwmScroll 50 50
  • “&T. FvwmTaskBar” Module FvwmTaskBar
  • “&U. AutoRaise” Module FvwmAuto 200 Raise Nop
  • “&W. WinList” Module FvwmWinList
  • “&X. $[gt.Stop Module Menu]” Popup MenuFvwmStopModule

DestroyMenu MenuFvwmStopModule
AddToMenu MenuFvwmStopModule “$[gt.Stop Fvwm Modules]” Title

  • “&B. $[gt.Stop] Button-Bar” KillModule FvwmButtons
  • “&O. $[gt.Stop] IconBox” KillModule FvwmIconBox
  • “&M. $[gt.Stop] IconMan” KillModule FvwmIconMan
  • “&P. $[gt.Stop] Pager” KillModule FvwmPager
  • “&R. $[gt.Stop] Backer” KillModule FvwmBacker
  • “&S. $[gt.Stop] ScrollBar” KillModule FvwmScroll
  • “&T. $[gt.Stop] FvwmTaskBar” KillModule FvwmTaskBar
  • “&U. $[gt.Stop] AutoRaise” KillModule FvwmAuto
  • “&W. $[gt.Stop] WinList” KillModule FvwmWinList

DestroyMenu MenuFvwmForms
AddToMenu MenuFvwmForms

  • “&C. Capture” Module FvwmForm FvwmForm-Capture
  • “&D. Form Defaults” Module FvwmForm FvwmForm-Form
  • “&R. Rlogin” Module FvwmForm FvwmForm-Rlogin
  • “&P. RootCursor” Module FvwmForm FvwmForm-RootCursor
  • “&S. Setup” Module FvwmForm FvwmForm-Setup
  • “&T. Talk Form” Module FvwmForm FvwmForm-Talk
  • “&Q. QuitVerify” Module FvwmForm FvwmForm-QuitVerify

Configure and start using an iconbox on the fly

DestroyFunc FuncFvwmConfigureIconBox
AddToFunc FuncFvwmConfigureIconBox

  • I Module FvwmIconBox
  • I Style * NoIcon

DestroyMenu MenuFvwmQuitVerify
AddToMenu MenuFvwmQuitVerify “$[gt.Really Quit Fvwm?]” Title

  • “&Q. $[gt.Yes, Really Quit]” Quit
  • “” Nop
  • “&R. $[gt.Restart]” Restart
  • “” Nop
  • “&T. $[gt.Start] twm” Restart twm
  • “&C. $[gt.Start] ctwm” Restart ctwm
  • “&2. $[gt.Start] tvtwm” Restart tvtwm
  • “&V. $[gt.Start] vtwm” Restart vtwm
  • “&M. $[gt.Start] mwm” Restart mwm
  • “&O. $[gt.Start] olwm” Restart /usr/openwin/bin/olwm
  • “” Nop
  • “&X. $[gt.Just an Xterm]” Restart xterm -n ‘“X Console”’ -T ‘“X Console”’
  • “” Nop
  • “&N. $[gt.No, Don’t Quit]” Nop

######################## Sample Functions ##########################

DestroyFunc FuncFvwmMailXmh
AddToFunc FuncFvwmMailXmh

  • I Next [$0] Iconify false
  • I Next [$0] Focus
  • I None [$0] Exec $0 $1

DestroyFunc FuncFvwmMoveOrRaise
AddToFunc FuncFvwmMoveOrRaise

  • I Raise
  • M Move
  • D Lower

DestroyFunc FuncFvwmMaximize
AddToFunc FuncFvwmMaximize

  • M Maximize 0 100
  • H Maximize 0 100
  • C Maximize 0 80
  • D Maximize 100 100

DestroyFunc FuncFvwmMoveOrIconify
AddToFunc FuncFvwmMoveOrIconify

  • I Raise
  • M Move
  • D Iconify

DestroyFunc FuncFvwmResizeOrRaise
AddToFunc FuncFvwmResizeOrRaise

  • I Raise
  • M Resize
  • D Lower

DestroyFunc FuncFvwmPrint
AddToFunc FuncFvwmPrint

  • I Raise
  • I Exec xdpr -id $w

DestroyFunc FuncFvwmPrintReverse
AddToFunc FuncFvwmPrintReverse

  • I Raise
  • I Exec xdpr 1/2 -h -rv -id $w

DestroyFunc FuncFvwmFocusPolicyChange
AddToFunc FuncFvwmFocusPolicyChange

  • I Style * $0
  • I Recapture

Read config files for modules:

read ConfigFvwmBacker
read ConfigFvwmButtons
read ConfigFvwmIconBox
read ConfigFvwmIconMan
read ConfigFvwmIdent
read ConfigFvwmPager
read ConfigFvwmScroll
read ConfigFvwmTaskBar
read ConfigFvwmWinList
#[/code]

What version of FVWM are you using? (You need FVWM 2.5.X). Do you have imagemagick installed? You need that too.

– Thomas Adam

I am running Debian Etch.
Fvwm 2.5.18
ImageMagick installed.

What’s funny is if I use Taviso’s fvwm2rc I get the thumbnails. I can’t find what I am missing.

Well, looking at your config, nothing is calling Thumbnail whenever an iconify action takes place. You want something like:

DestroyModuleConfig FE-i: *
*FE-i: iconify Thumbnail

AddToFunc StartFunction I Module FvwmEvent FE-i

Also note that nothing is calling DeThumbnail either, hence you will want something like this as well:

DestroyModuleConfig FE-d: *
*FE-d: deiconify DeiconifyThumbnail

AddToFunc StartFunction I Module FvwmEvent FE-d

– Thomas Adam

Putting those lines in causes the window to “rebound” instantly, no inconifying, no thumbnails.

So don’t do that, remove the FvwmEvent for the “iconify” action and where you have “Iconify” actions for mouse/key bindings, replace them with calls to “Thumbnail”.

I’d personally be inclined to fix the function to work via the iconify FvwmEvent, but that’s just me. Much more flexible.

– Thomas Adam

That did it. It isn’t ideal, no, but I just wanted to get basic functionality I could build on.

Is there is a way to speed up the thumbnail function? There is a visible delay between hitting the UI to thumbnail and when it actually does it’s thing.

No - this is the price you pay.

– Thomas Adam

For using thumbnails or not using FvwmEvent?

For using Thumbnails. There’s a fair amount of processing which takes place behind the scenes. On a slow computer you may well notice the effects, but that’s just a caveat of your using it.

The FvwmEvent comment was simply an observation the the Thumbnail function is poorly designed – it should not rely on encompassing Iconification itself.

– Thomas Adam

Ah, I see. I’m now going to work on getting FvwmEvent working with this. Thanks!

I use this instead:

DestroyFunc Thumbnail
AddToFunc Thumbnail
+ I Raise
+ I ThisWindow (!Iconic) SetEnv Icon-$[w.id] $[w.iconfile]
+ I ThisWindow (!Shaded, Iconifiable, !Iconic) Piperead \
        "xwd -silent -id $[w.id] > $[FVWM_USERDIR]/tmp/icon.tmp.$[w.id].xwd"
+ I Iconify
+ I Exec convert $[FVWM_USERDIR]/tmp/icon.tmp.$[w.id].xwd -scale 128 -frame 1x1 \
        -mattecolor black -quality 0 png:$[FVWM_USERDIR]/tmp/icon.tmp.$[w.id].png && \
        FvwmCommand "WindowId $[w.id] WindowStyle IconOverride, Icon $[FVWM_USERDIR]/tmp/icon.tmp.$[w.id].png"

DestroyFunc DeThumbnail
AddToFunc DeThumbnail
+ I PipeRead "echo Test \\(i \\$\\[Icon-$[w.id]\\]\\) WindowStyle Icon \\$\\[Icon-$[w.id]\\]"
+ I TestRc (NoMatch) WindowStyle NoIconOverride, Icon
+ I Exec rm -f $[FVWM_USERDIR]/tmp/icon.tmp.$[w.id].png
+ I All (Iconic, CurrentPage) PlaceAgain icon
+ I UnsetEnv Icon-$[w.id]

The main difference is that I use Exec instead of Piperead for the convert stage. That means that, at least, I can continue working without any delay, because the function does not sit waiting for convert to finish its work.

The downside is that for a moment, the iconified window will not show the thumbnail, but who cares about that? :stuck_out_tongue:

There also another way: write a small program in C using imlib to do the conversion, instead of using imagemagick. Imlib is much faster. I think that there was a thread around about that… try looking for “fast thumbnails” or something like that.

This is a duplicate. I remember discussing this before, and having the same silly conversation about Exec/PipeRead then.