You are not logged in.

#1 2016-01-01 02:23:35

PackRat
jgmenu user Numero Uno
Registered: 2015-10-02
Posts: 1,438

Fvwm Window Manager - share configs, functions, all that jazz.

A thread for anyone using - or wanting to use - the Fvwm window manager. The current version is in the repos; and I'm pretty sure there is a usable configuration that gets installed as well (I always get the most recent version via cvs, instructions on the Fvwm website). If you log into a black screen and mouse cursor, just click on the desktop to get a menu that contains the install scripts for two configurations - a classic Fvwm look, and Windows 95 look.

A must read primer for Fvwm and basic configuration.

Fvwm is modular - so you can pretty much create any desktop aesthetic to suit your whims.

There are no gui apps to help you configure Fvwm so fire up your favorite text editor; also, open a terminal (or browser) and read the man pages.. Fvwm (~6900 lines) and every Fvwm module has a well constructed man page.

Best thing to do is find a configuration(s) you like and start hacking away to get the desktop you want.

Some screenshots with configurations

More configs with screenshots - the last one by tavis o. is well commented config file; worth a read.

Old #! Fvwm Thread - unfortunately looks like a lot of the screenshots were on omploader and are now lost.

box-look.org also has some nice fvwm configs; the Minimoids theme has some nice scripts for FvwmScript (I use the clock, calendar, and weather).

My current Fvwm desktop -

December_1451612713_1600x900.th.jpg

configs:

~/.fvwm/config

# fvwm config file
# created 10 july 2015
#============================#

ImagePath $[FVWM_USERDIR]/pixmaps/+
SetEnv fvwm_temp $[FVWM_USERDIR]/tmp

# single desktop(s)
DeskTopSize 1x1
EwmhNumberOfDesktops 2

# 3x3 grid of pages on desktop
#DeskTopSize 3x3

# margins LRTB - make room for panel as necessary
EwmhBaseStruts 4 4 4 34

# Rest of configuration
#=========================#

Emulate FVWM
DefaultLayers 0 4 6

# Ignore L (caps-lock) 2 (Numlock) and 5 (scroll lock) keys as modifiers
# pretty much mandatory for key bindings to work properly, especially laptops
IgnoreModifiers L25

EWMHUseStackingOrderHints
ClickTime 350
EdgeScroll 0 0
EdgeThickness 0
EdgeResistance 800 20
EdgeCommand Left nop
SnapAttraction 3
SnapGrid 2 2
XorValue 55555
# OpaqueMoveSize -1
OpaqueMoveSize 7
HideGeometryWindow Move, Resize
BugOpts FlickeringMoveWorkaround True
SetAnimation  10  -.01 0 .01 .03 .08 .18 .3 .45 .6 .75 .85 .90 .94 .97 .99 1.0
BusyCursor DynamicMenu True, Read True

# Focus Style
# Style * SloppyFocus
# Style * MouseFocusClickRaises
Style * ClickToFocus
# Style *   FocusFollowsMouse

ColorMapFocus  FollowsMouse
Style * IndexedWindowName
Style * TileCascadePlacement
Style * DecorateTransient
Style * WindowShadeSteps 20, WindowShadeScrolls
# Style * FPGrabFocusOff
Style * FPGrabFocus
Style * FPReleaseFocus
Style * FPGrabFocusTransientOff
Style * !AllowMaximizeFixedSize
Style * IndexedIconName
Style * HintOverride
Style * ResizeHintOverride
Style * ResizeOpaque
Style * MWMFunctions
Style * MWMDecor
Style * HintOverride
Style * OLDecor
# Style * FvwmButtons, FvwmBorder
Style * !UsePPosition
Style * MinOverlapPlacement

CursorStyle ROOT		left_ptr		black	white
# CursorStyle ROOT		X_cursor		black	white
CursorStyle TITLE		left_ptr		black	white
CursorStyle DEFAULT		left_ptr		black	white
CursorStyle SYS			hand2			black	white
CursorStyle MENU		left_ptr		black	white
CursorStyle POSITION		top_left_corner		black	white
CursorStyle MOVE		fleur			black	white
CursorStyle RESIZE		sizing			black	white
CursorStyle WAIT		watch			black	white
CursorStyle SELECT		crosshair		black	white
CursorStyle DESTROY		pirate			black	white
CursorStyle TOP			top_side		black	white
CursorStyle RIGHT		right_side		black	white
CursorStyle BOTTOM		bottom_side		black	white
CursorStyle LEFT		left_side		black	white
CursorStyle TOP_LEFT		top_left_corner		black	white
CursorStyle TOP_RIGHT		top_right_corner	black	white
CursorStyle BOTTOM_LEFT		bottom_left_corner	black	white
CursorStyle BOTTOM_RIGHT	bottom_right_corner	black	white
CursorStyle TOP_EDGE		top_side		black	white
CursorStyle RIGHT_EDGE		right_side		black	white
CursorStyle BOTTOM_EDGE		bottom_side		black	white
CursorStyle LEFT_EDGE		left_side		black	white
# CursorStyle STROKE			plus			black	white

# Default Window Decorations
#==============================#

DestroyDecor DefaultDecor
AddToDecor   DefaultDecor

Style "*" Color #929292/#333238, HilightBack #517061, HilightFore #F1F1FF
Style "*" Font "Shadow=0 0 SE:xft:Source Sans Pro:style:Medium:size=10:hinting=slight:antialias=true"
Style "*" BorderWidth 5, HandleWidth 5
Style "*" FvwmBorder, FirmBorder
Style "*" FvwmButtons

+ TitleStyle LeftJustified Height 18
+ BorderStyle Active -- NoInset
+ BorderStyle InActive -- HiddenHandles NoInset

+ ButtonStyle All -- UseTitleStyle
+ ButtonStyle 1 - MwmDecorMenu
+ ButtonStyle 6 - MwmDecorMin
+ ButtonStyle 4 - MwmDecorMax

+ AddButtonStyle 1 ActiveUp 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 1 ActiveDown 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 1 InActive 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1

+ AddButtonStyle 3 ActiveUp 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 3 ActiveDown 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 3 InActive 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1

+ AddButtonStyle 5 ActiveUp 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 5 ActiveDown 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 5 InActive 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1

+ AddButtonStyle 2 ActiveUp 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 2 ActiveDown 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 2 InActive 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1

+ AddButtonStyle 4 ActiveUp 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 4 ActiveDown 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 4 InActive 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1

+ AddButtonStyle 6 ActiveUp 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 6 ActiveDown 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1
+ AddButtonStyle 6 InActive 5 40x25@1 60x25@1 60x75@0 40x75@0 40x25@1

Style * UseDecor DefaultDecor

# end default window decor. ================================================#

# Uncomment these if titles and/or borders are not wanted all apps
# Style * !Title
# Style * !Borders

# Read In Configuration Files

Read Colors
Read Functions
Read Modules
Read AppStyles
Read ConfigPanels
#Read ConfigChronoPanel
#Read ConfigLaunchers
Read Menu
Read Mouse
Read Keys

DestroyFunc StartFunction
AddToFunc StartFunction

+ I Module FvwmCommandS
# + I Module FvwmPerl
# + I Module FvwmRearrange
+ I Module FvwmAnimate
+ I Schedule 500 Module FvwmEvent
+ I Module FvwmEvent Term-StartMaximised
+ I Module FvwmEvent App-StartFullscreen

# + I Module FvwmPager 0 1
# + I Module FvwmIconMan

# + I Module FvwmButtons LauncherButtons -g 448x$[FVWM_APP_HEIGHT]+2+2
# + I Module FvwmButtons AppButtons
+ I Module FvwmButtons InlinePanel -g 1596x$[Fvwm_Panel_Height]+0-0

+ I exec exec xset s off
+ I exec exec xset b 33
+ I Test Exec exec "$HOME/bin/ConkyFvwm.sh"
# + I Exec exec tint2
# + I Test Exec exec stalonetray --geometry 5x1-0+0
+ I Test (Restart) All (Iconic) Test (f $[FVWM_USERDIR]/icon.tmp.$[w.id].png) WindowStyle IconOverride, Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png

DestroyFunc ExitFunction
AddToFunc   ExitFunction
+ I Exec exec killall conky
+ I Exec exec killall tint2
+ I Exec exec killall xclock
+ I Exec exec killall stalonetray
+ I Test (!ToRestart) Exec exec rm -f $[HOME]/.fvwm/icon.tmp.*

Files read into ~/.fvwm/config

Colors -

# remove any exisitng colorsets
CleanupColorsets

Colorset 1 fg #030303, bg #D3D3D3
Colorset 2 fg #FFFFF4, bg #808B9C

##=========== module colors in windec file
# pager colors
Colorset 3 fg #8F8E8C, bg #E6E5E1, RootTransparent, buffer, Tint #BBBBB5 66
Colorset 4 fg #1E1D1D, bg #1E1D1D, RootTransparent, buffer, Tint #706767 66
Colorset 5 fg #d3d3d3, bg #6F88A3, RootTransparent, buffer, Tint #B39DAF 66
Colorset 6 fg #d3d3d3, bg #53667A, RootTransparent, buffer, Tint #995656 66

# iconman colors
Colorset 7 fg #000000, bg #DDDDD3, RootTransparent, buffer, Tint #282828 80
Colorset 8 fg #A0A0A0, bg #0D0D0D, RootTransparent, buffer, Tint #282828 80
Colorset 9 fg #D0D0D0, bg #0D0D0D, RootTransparent, buffer, Tint #282828 80
Colorset 10 fg #F0F0F0, bg #0D0D0D, RootTransparent, buffer, Tint #413E3E 90
Colorset 11 fg #F0F0F0, bg #0D0D0D, RootTransparent, buffer, Tint #777777 90
Colorset 12 fg #F0F0F0, bg #0D0D0D, RootTransparent, buffer, Tint #777777 90

Colorset 13 fg #C0C0C0, bg #585858, RootTransparent, buffer, Tint #413E3E 50

Colorset 14 fg #484848, bg #413E3E
Colorset 15 fg #484848, bg #686868
Colorset 16 fg #F0F0F0, bg #6F6F6F
Colorset 17 fg #F0F0F0, bg #9F9F9F
Colorset 18 fg #F0F0F0, bg #413E3E

Colorset 19 fg #030303, bg #D5D5D5, RootTransparent, buffer, Tint #BBBBB5 50

Functions  #Note that a lot are just testing and not used in the mouse/key bindongs

# fvwmfunctions 10-07-13
#============================#

#
# DestroyFunc FuncName
# AddToFunc   FuncName
# + I (Action to happen immediately)
# + C (Action to happen on a mouse 'click')
# + D (Action to happen on a mouse 'double click')
# + H (Action to happen on a mouse 'hold')
# + M (Action to happen on a mouse 'motion')
#
###########

# Move Window
DestroyFunc MoveRight
AddToFunc   MoveRight
+ I AnimatedMove w+20p keep

DestroyFunc MoveLeft
AddToFunc MoveLeft
+ I AnimatedMove w+-20p keep

DestroyFunc MoveUp
AddToFunc MoveUp
+ I AnimatedMove keep w+-20p

DestroyFunc MoveDown
AddToFunc MoveDown
+ I AnimatedMove keep w+20p

DestroyFunc ShrinkEast
AddToFunc ShrinkEast
+ I PipeRead "echo Resize $(($[cw.width] - 15))p keep"

DestroyFunc GrowEast
AddToFunc GrowEast
+ I PipeRead "echo Resize $(($[cw.width] + 15))p keep"

DestroyFunc ShrinkSouth
AddToFunc ShrinkSouth
+ I PipeRead "echo Resize keep $(($[cw.height] - 15))p"

DestroyFunc GrowSouth
AddToFunc GrowSouth
+ I PipeRead "echo Resize keep $(($[cw.height] + 15))p"

# Alt-Tab Window Switching
SetEnv DIR Next

DestroyFunc SwitchWindow
AddToFunc SwitchWindow
+ I $[DIR] (CurrentPage, !Iconic, !Sticky) FvwmRaiseAndFocus
+ I Deschedule 134000
+ I PipeRead `[ "$[DIR]" == "Prev" ] && \
	echo 'SetEnv NDIR Next' || \
	echo 'SetEnv NDIR Prev'`
+ I Schedule 700 134000 SetEnv DIR $[NDIR]

DestroyFunc 	NextWindow
AddToFunc 	NextWindow
+ I ScanForWindow NorthEast NorthWest (CurrentPage, !Iconic, AcceptsFocus) FlipFocus
+ I Current Raise
#+ I Current WarpToWindow 5 5

DestroyFunc 	PrevWindow
AddToFunc 	PrevWindow
+ I ScanForWindow SouthEast SouthWest (CurrentPage, !Iconic, AcceptsFocus) FlipFocus
+ I Current Raise
#+ I Current WarpToWindow 5 5

# Undecorate given window
DestroyFunc UnDecorate
AddToFunc UnDecorate
# + I WindowStyle !Title, !Borders, !Handles
+ I WindowStyle !Title

# And decorate it again
DestroyFunc Decorate
AddToFunc Decorate
# + I WindowStyle Title, Borders, Handles
+ I WindowStyle Title

# Undecorate window and maximize it
DestroyFunc UndecMax
AddToFunc UndecMax 
+ I ThisWindow UnDecorate
+ I Schedule 100 Maximize 100 100

#### Browse Wallpapers Directory
DestroyFunc WallpaperBrowser
AddToFunc WallpaperBrowser
+ I PipeRead 'test ! -d "$0/.thumbs" && mkdir "$0/.thumbs"; \
    for i in "$0/"*; do \
        test -f "$0/.thumbs/${i##*/}" \
            -a "${i}" -ot "$0/.thumbs/${i##*/}" || { \
                convert -quality 0 -scale 64 "${i}" "png:$0/.thumbs/${i##*/}" 2>/dev/null \
                    || continue; \
            }; \
    done; \
    fvwm-menu-directory --icon-title icons/globes/folder.png --icon-file __PIXMAP__ \
    --icon-dir icons/globes/folder.png --dir $0 --exec-file "^hsetroot -center" \
    --exec-t="^eog *" | sed -e "s#FuncFvwmMenuDirectory#WallpaperBrowser#g" \
    -e "s#__PIXMAP__\\(.*\\)\\"\\(.*/\\)\\(.*\\)\\"#\\2.thumbs/\\3\\1\\2\\3#g"'

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

# 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

DestroyFunc FvwmViewManPage
AddToFunc   FvwmViewManPage
+ I Exec exec uxterm -fg "#F8F8ED" -bg "#202838" -g 100x40 -fa "Terminus-10" -fb 7x14bold \
-n "Manual Page - $0" -T "Manual Page - $0" -e man "$0"

Style FvwmForm-RunCommand !Title

# use
#Module FvwmForm FvwmForm-RunCommand

#***********************************************************************
# 7.5.1 RunCommand Window
#***********************************************************************
DestroyModuleConfig  FvwmForm-RunCommand: *
*FvwmForm-RunCommand: WarpPointer
# *FvwmForm-RunCommand: Font 8x13
*FvwmForm-RunCommand: Font "xft:Source Code Pro:size=10:antialias=true"
*FvwmForm-RunCommand: Title         "$[gt.Run Command]"
*FvwmForm-RunCommand: Line          center
*FvwmForm-RunCommand: Text          "$[gt.Run Command]"
*FvwmForm-RunCommand: Line          left
*FvwmForm-RunCommand: Text          "$[gt.Command:]"
*FvwmForm-RunCommand: Input         Command 30 ""
*FvwmForm-RunCommand: Line          center
*FvwmForm-RunCommand: Selection     cmd multiple
*FvwmForm-RunCommand: Choice        TERM    TERM     off      "$[gt.Run in Terminal]"
*FvwmForm-RunCommand: Line          expand
*FvwmForm-RunCommand: Button        quit "$[gt.Execute]" ^M
*FvwmForm-RunCommand: Command       $(TERM?exec xterm -hold -T "$(Command)" -n "$(Command)" -e $(Command))
*FvwmForm-RunCommand: Command       exec $(Command)
*FvwmForm-RunCommand: Button        quit "$[gt.Cancel]"
*FvwmForm-RunCommand: Command       Nop

DestroyModuleConfig  FvwmForm-Logout *
*FvwmForm-Logout: Font "xft:Source Code Pro:size=10:antialias=true:hinting=slight"
*FvwmForm-Logout: GrabServer
*FvwmForm-Logout: WarpPointer
*FvwmForm-Logout: Command     Beep
*FvwmForm-Logout: Line        center
*FvwmForm-Logout: Text        "Do you really want to logout?"
*FvwmForm-Logout: Line        expand
*FvwmForm-Logout: Button      quit "Logout" ^M
*FvwmForm-Logout: Command     Quit
*FvwmForm-Logout: Button      restart   "Restart" ^R
*FvwmForm-Logout: Command     Restart
*FvwmForm-Logout: Button      quit "Cancel" ^[
*FvwmForm-Logout: Command     Nop
*FvwmForm-Logout: Timeout     20 Quit "Automatic logout will occur in %% seconds."

#***********************************************************************

DestroyFunc FuncFvwmNextWindow
AddToFunc FuncFvwmNextWindow
+ I Next (CurrentPage, !Iconic, AcceptsFocus) FlipFocus NoWarp
+ I Current Raise

DestroyFunc FuncFvwmPrevWindow
AddToFunc FuncFvwmPrevWindow
+ I Prev (CurrentPage, !Iconic, AcceptsFocus) Focus NoWarp
+ I Current Raise

AddToFunc PickWindowRaiseAndDeiconify
 + I Pick
 + I TestRc (Error) Break
 + I Raise
 + I Focus
 + I Iconify off
 
 AddToFunc TaskRaiseFocus
+ I IconifyRaise off
+ I Raise
+ I Focus

AddToFunc RaiseToTop
+ I Layer 0 ontop
+ I Raise

AddToFunc LowerToBottom
+ I Layer 0 0
+ I Lower

AddToFunc TaskbarOne
+ I Iconify off
+ I Raise
+ I Focus

#-----------------------------------------------------------------------
# This function maximize a window to fullscreen - no title, no buttons, no border 
#-----------------------------------------------------------------------
DestroyFunc FuncMaximizeFullScreen
AddToFunc   FuncMaximizeFullScreen
+ I ThisWindow (Maximized) WindowStyle Title, Borders
+ I TestRc (!Match) WindowStyle !Title, !Handles
+ I TestRc (!Match) Raise
+ I TestRc (!Match) UpdateStyles
+ I Maximize ewmhiwa

Modules

Style FvwmIdent* !Title, HandleWidth 2, BorderWidth 2, !Button 1, !Button 4, !Button 6

DestroyModuleConfig FvwmIdent: *
*FvwmIdentBack #191970
*FvwmIdentFore #FFB600
*FvwmIdent: Font "xft:sans:pixelsize=10:antialias=true:hinting=slight"

DestroyModuleConfig FvwmAnimate: *
*FvwmAnimate: Effect Flip
*FvwmAnimate: Delay 1
*FvwmAnimate: Iterations 30
*FvwmAnimate: Twist 1
*FvwmAnimate: Width 2

DestroyModuleConfig FvwmEvent: *
*FvwmEvent: Cmd Function
*FvwmEvent: new_page CurrentPageFocusFunc
*FvwmEvent: new_desk CurrentPageFocusFunc
*FvwmEvent: destroy_window CurrentPageFocusFunc
*FvwmEvent: focus_change MarkWindowAsActiveFunc

Style FvwmTaskBar* !Title, HandleWidth 2, BorderWidth 2, WindowListSkip, CirculateSkip, Sticky, NeverFocus, StaysOnBottom
Style FvwmWinList* !Title, HandleWidth 2, BorderWidth 2, WindowListSkip, CirculateSkip, Sticky, NeverFocus, StaysOnBottom

DestroyModuleConfig FvwmWinList
*FvwmWinList: Font "xft:sans:style=Regular:size=10:antialias=True:hinting=slight"
*FvwmWinList: NoIconAction SendToModule FvwmAnimate animate
*FvwmWinList: Geometry +2+40
*FvwmWinList: ButtonFrameWidth 1
*FvwmWinList: BorderReliefWidth 2
*FvwmWinList: DontDepressFocus
*FvwmWinList: UseSkipList
*FvwmWinList: ShowCurrentDesk
#*FvwmWinList: NoAnchor
#*FvwmWinList: UseIconNames
*FvwmWinList: MinWidth 164
*FvwmWinList: MaxWidth 164
*FvwmWinList: Action Click1 TaskbarOne
*FvwmWinList: Action Click2 Close
*FvwmWinList: Action Click3 Iconify
*FvwmWinList: Colorset 18
*FvwmWinList: IconColorset 18
*FvwmWinList: FocusColorset 20

# FvwmTaskBar
#===========================
*FvwmTaskBar: Geometry +0+0
*FvwmTaskBar: Rows 1
*FvwmTaskBar: Font "xft:Source Sans Pro:style=Medium:size=10:antialias=True:hinting=slight"
*FvwmTaskBar: SelFont "xft:Source Sans Pro:style=Medium:size=10:antialias=True:hinting=slight"
*FvwmTaskBar: StatusFont "xft:Source Sans Pro:style=Medium:size=10:antialias=True:hinting=slight"
#=======
#*FvwmTaskBar: Fore #696969
#*FvwmTaskBar: Back #DBD9DB
#*FvwmTaskBar: IconFore #696969
#*FvwmTaskBar: IconBack #CDC9CD
#*FvwmTaskBar: FocusFore #010101
#*FvwmTaskBar: FocusBack #CD8BCD
*FvwmTaskBar: Colorset 18
*FvwmTaskBar: IconColorset 18
*FvwmTaskBar: FocusColorset 20
#=========
*FvwmTaskBar: NoBrightFocus
*FvwmTaskBar: TipsFore #F7F72A
*FvwmTaskBar: TipsBack #39392B
*FvwmTaskBar: AutoStick
*FvwmTaskBar: AutoFocus
*FvwmTaskBar: UseSkipList
*FvwmTaskBar: DeskOnly
# *FvwmTaskBar: PageOnly
*FvwmTaskBar: Action Click1 Function TaskbarOne
*FvwmTaskBar: Action Click2 Iconify
*FvwmTaskBar: Action Click3 Close
*FvwmTaskBar: ButtonWidth 200
*FvwmTaskBar: Pad 1
*FvwmTaskBar: WindowButtonsLeftMargin 0
*FvwmTaskBar: WindowButtonsRightMargin 0
*FvwmTaskBar: StartButtonRightMargin 0
*FvwmTaskBar: 3DFvwm
*FvwmTaskBar: HighlightFocus
*FvwmTaskBar: ShowTips
*FvwmTaskBar: ClockFormat %a %b %e %k:%M
*FvwmTaskBar: DateFormat %a %b %e
*FvwmTaskBar: MailCheck 0
# *FvwmTaskBar: NoDefaultStartButton
*FvwmTaskBar: Startname
*FvwmTaskBar: StartMenu (Mouse 1) PullDownMenu
*FvwmTaskBar: StartMenu (Mouse 3) MenuExit
*FvwmTaskBar: StartIcon /usr/share/icons/gnome/16x16/devices/display.png
# *FvwmTaskBar: Button Title Mozilla, Action exec exec firefox
*FvwmTaskBar: Button Icon /usr/share/icons/gnome/16x16/apps/terminal.png, Action exec exec urxvtc --geometry 100x24
*FvwmTaskBar: Button Icon /usr/share/icons/gnome/16x16/apps/leafpad.png, Action exec exec medit
*FvwmTaskBar: Button Icon /usr/share/icons/gnome/16x16/apps/firefox.png, Action exec exec firefox
*FvwmTaskBar: Button Icon /usr/share/icons/gnome/16x16/apps/thunderbird-old.png, Action exec exec thunderbird
*FvwmTaskBar: Button Icon /usr/share/icons/gnome/16x16/apps/gimp.png, Action exec exec gimp
*FvwmTaskBar: Button Icon /usr/share/icons/gnome/16x16/apps/preferences-desktop-remote-desktop.png, Action 'Exec exec wicd-gtk --tray'
*FvwmTaskBar: ButtonIcon /usr/share/icons/gnome/16x16/actions/gnome-shutdown.png , Action `Exec exec vsido-exit`

Style "Win95TaskBar" NoTitle, BorderWidth 4, HandleWidth 4, Sticky
Style "Win95TaskBar" StaysOnTop, WindowListSkip, CirculateSkip

DestroyModuleConfig Win95TaskBar: *
*Win95TaskBar: Back #c3c3c3
*Win95TaskBar: Fore black
*Win95TaskBar: TipsBack bisque
*Win95TaskBar: TipsFore black
*Win95TaskBar: Geometry +0+0
*Win95TaskBar: Font "xft:envy code r:size=10:regular:antialias=true"
*Win95TaskBar: SelFont "xft:envy code r:size=10:bold:antialias=true"
*Win95TaskBar: StatusFont "xft:envy code r:size=10:regular:antialias=true"

*Win95TaskBar: Action Click1 Iconify false, Raise
*Win95TaskBar: Action Click2 Iconify true,  Lower
*Win95TaskBar: Action Click3 Iconify false, Raise

*Win95TaskBar: UseSkipList
*Win95TaskBar: UseIconNames
*Win95TaskBar: AutoStick
*Win95TaskBar: ShowTips

*Win95TaskBar: ButtonWidth 180
*Win95TaskBar: BellVolume 20
*Win95TaskBar: MailBox /var/spool/mail/
#*Win95TaskBar: MailCommand Exec xterm -e mail
*Win95TaskBar: ClockFormat %k:%M

*Win95TaskBar: StartName Start
*Win95TaskBar: StartMenu MenuFvwmRoot
*Win95TaskBar: StartIcon mini.fvwm.xpm

#*Win95TaskBar: AutoHide

#======FvwmIconBox specs [l t r b]===============#

Style * StickyIcon
Style * IconTitleRelief 1
Style * IconBackgroundRelief 0
Style * IconBackgroundPadding 2
Style * IconSize 32x32
Style * IconFont "Shadow=0 0 SE:xft:Sans:style=regular:size=8:antialias=true:hinting=slight"
Style * IconBackgroundColorset 38
Style * IconTitleColorset 38
Style * HilightIconTitleColorset 38
Style * Icon unknown1.xpm

# comment out if iconbox needed; then select IconBox location
#Style * !Icon
Style * !IconTitle

# top left
Style "*" IconBox 4 100 300 640, IconGrid 32 32, IconFill left top 
#
# top center
# Style * IconBox 270 12 1112 156, IconGrid 48 24, IconFill left top
#
# bottom center
# Style * IconBox 270 684 1112 744, IconGrid 24 24, IconFill left top
#
# top right
# Style * IconBox 1250 48 1360 640, IconGrid 24 24, IconFill left top
#
# bottom left
# Style * IconBox 4 688 700 750, IconGrid 16 16, IconFill left top
#
# top left
# Style "*" Iconbox 4 48 132 256, IconGrid 16 16, IconFill left top
#
# middle right
# Style * Iconbox 1224 300 1360 600, IconGrid 36 36, IconFill left top

# middle left
# Style * Iconbox 1224 300 1360 600, IconGrid 36 36, IconFill left top
#
# thumbnails
# Style "*" Iconbox 2 350 320 740, IconGrid 8 8, IconFill left top
# Style "*" Iconbox 4 36 300 740, IconGrid 8 8, IconFill left top

# fvwmpager
#===========================================#

Style FvwmPager* !Title, HandleWidth 2, BorderWidth 2, WindowListSkip, CirculateSkip, Sticky, NeverFocus, StaysOnBottom
DestroyModuleConfig FvwmPager: *
*FvwmPager: DeskTopScale 20
*FvwmPager: Geometry +2+2
*FvwmPager: WindowBorderWidth 0.3
*FvwmPager: Colorset * 3
*FvwmPager: HilightColorset * 4
*FvwmPager: WindowColorsets 5 6
*FvwmPager: Font none
#*FvwmPager: SmallFont "xft:Sans:style=Regular:pixelsize=9:antialias=True"
*FvwmPager: Balloons
*FvwmPager: BalloonColorset * 4
# *FvwmPager: BalloonFont "xft:Sans:style=Regular:pixelsize=8:antialias=True"
*FvwmPager: BalloonFont "Shadow=0 0 SE:xft:123:style=regular:pixelsize=10:antialias=true:hinting=slight"
*FvwmPager: BalloonYOffset +2
*FvwmPager: BalloonBorderWidth 1
*FvwmPager: BalloonFore #0D0D0D
*FvwmPager: BalloonBack #DFDFDF
*FvwmPager: UseSkipList
# *FvwmPager: SolidSeparators
# *FvwmPager: NoSeparators
*FvwmPager: ShapeLabels
*FvwmPager: !MiniIcons
*FvwmPager: MoveThreshold 5

Style FvwmIconMan* !Title, HandleWidth 2, BorderWidth 2, Sticky, WindowListSkip, CirculateSkip, StaysOnBottom, NeverFocus

# FvwmIconMan
#===========================================================
DestroyModuleConfig FvwmIconMan
*FvwmIconMan: Title ""    
*FvwmIconMan: NumManagers 1
*FvwmIconMan: ManagerGeometry 0x1+2-1
*FvwmIconMan: ButtonGeometry 164x24
#*FvwmIconMan: MaxButtonWidthByColumns 10
*FvwmIconMan: MaxButtonWidth 150
*FvwmIconMan: Font "xft:Sans:style=medium:size=10:antialias=true:hinting=slight"
*FvwmIconMan: Format "%c: %i"
*FvwmIconMan: FollowFocus true
*FvwmIconMan: DontShow icon=Untitled resource=Untitled
*FvwmIconMan: Resolution desk
*FvwmIconMan: ShowOnlyIcons false
*FvwmIconMan: DrawIcons false
*FvwmIconMan: ShowOnlyFocused false
*FvwmIconMan: ShowTransient false
*FvwmIconMan: Sort id
*FvwmIconMan: UseWinList true
*FvwmIconMan: ReliefThickness 0
*FvwmIconMan: Tips Always
*FvwmIconMan: TipsDelays 1000 300
*FvwmIconMan: TipsFont "Shadow=0 0 SE:xft:Monospace:style=regular:pixelsize=12:antialias=true:hinting=slight"
# *FvwmIconMan: TipsFont "xft:Envy Code R:style=regular:pixelsize=10"
*FvwmIconMan: TipsFormat "%i"
*FvwmIconMan: TipsBorderWidth 1
*FvwmIconMan: TipsColorset 3
*FvwmIconMan: TipsJustification center
#======================================================================
*FvwmIconMan: IconButton up
*FvwmIconMan: PlainButton flat
*FvwmIconMan: SelectButton flat
*FvwmIconMan: FocusButton up
*FvwmIconMan: FocusAndSelectButton up

*FvwmIconMan: Colorset 7
*FvwmIconMan: IconColorset 8
*FvwmIconMan: PlainColorset 9
*FvwmIconMan: FocusColorset 10
*FvwmIconMan: SelectColorset 11
*FvwmIconMan: FocusAndSelectColorset 12

#*FvwmIconMan: Background  #D1D0CC
#*FvwmIconMan: Foreground  #000000
#*FvwmIconMan: IconButton	up	#6B6B6B #D1D0CC
#*FvwmIconMan: PlainButton	up	#4E4E4E #D1D0CC
#*FvwmIconMan: SelectButton	up	#191A17 #D1D0CC
#*FvwmIconMan: FocusButton	up	#191A17 #B5B4B1
#*FvwmIconMan: FocusAndSelectButton	flat	#191A17 #B5B4B1

*FvwmIconMan: Action    Mouse 1 N sendcommand "PickWindowRaiseAndDeiconify"
*FvwmIconMan: Action    Mouse 2 N sendcommand "WindowShade toggle"
*FvwmIconMan: Action    Mouse 3 N sendcommand sendcommand Focus, sendcommand "Iconify"
*FvwmIconMan: Action    Mouse 2 M SendCommand "Close"

AppStyles

# Application Styles
#================================#

Style UXTerm	Icon terminal.png
Style XTerm	Icon terminal.png
Style *rxvt	Icon terminal.png, PositionPlacement Center
Style *Calc	Icon calculator.png

Style *medit	PositionPlacement Center
Style *geany	PositionPlacement Center
Style *Vsido-exit	PositionPlacement Center, !Title
Style *thunar	PositionPlacement 5 5

Style *lock !Title, Borderwidth 5, Handlewidth 5, Sticky, WindowListSkip, NeverFocus, StaysOnBottom
Style FvwmScript* !Title, Borderwidth 4, Handlewidth 4, Sticky, WindowListSkip, NeverFocus, StaysOnBottom
Style conky* !Title, Sticky, NeverFocus, StaysOnBottom
Style Conky* !Title, Sticky, NeverFocus, StaysOnBottom
Style dzen2 !Title, !Borders, Sticky, NeverFocus, StaysOnBottom, !Handles
Style stalonetray !Title, !Handles, !Borders, WindowListSkip, CirculateSkip, Sticky, NeverFocus, StaysOnBottom
Style tint2 !Title, !Borders, !Handles, Sticky, StaysOnBottom, NoHandles, ClickToFocus, PositionPlacement 0 -0

Style UXTerm !Title, HandleWidth 4, BorderWidth 4, BorderStyle NoInset, ResizeHintOverride
Style XTerm !Title, HandleWidth 4, BorderWidth 4, BorderStyle NoInset, ResizeHintOverride
Style Firefox !Title, HandleWidth 4, BorderWidth 4, BorderStyle NoInset, ResizeHintOverride
Style Thunderbird !Title, HandleWidth 4, BorderWidth 4, BorderStyle NoInset, ResizeHintOverride
Style Gimp !Title, HandleWidth 4, BorderWidth 4, BorderStyle NoInset, ResizeHintOverride


# Apps to start maximized

DestroyModuleConfig Term-StartMaximised: *
*Term-StartMaximised: Cmd Function
*Term-StartMaximised: add_window StartAppMaximised

DestroyFunc StartAppMaximised
AddToFunc   StartAppMaximised
#  + I ThisWindow (UXTerm, !Maximized) Maximize
#  + I ThisWindow (XTerm,!Maximized) Maximize
  + I ThisWindow (Firefox,!Maximized) Maximize
  + I ThisWindow (Thunderbird,!Maximized) Maximize
  + I ThisWindow (Gimp,!Maximized) Maximize

DestroyModuleConfig Term-Fullscreen: *
*App-StartFullscreen: Cmd Function
*App-StartFullscreen: add_window StartAppFullscreen

DestroyFunc StartAppFullscreen
AddToFunc   StartAppFullscreen
  + I ThisWindow (UXTerm, !Maximized) FuncMaximizeFullScreen
  + I ThisWindow (XTerm,!Maximized) FuncMaximizeFullScreen

ConfigPanels

SetEnv Fvwm_Panel_Height 26
SetEnv Fvwm_Launcher_Width 36
SetEnv FVWM_APP_HEIGHT 44

Style InlinePanel* !Title, !Handles, Borderwidth 2, Sticky, WindowListSkip, CirculateSkip, NeverFocus, StaysOnBottom
Style LauncherButtons* !Title, HandleWidth 2, Borderwidth 2, Sticky, WindowListSkip, CirculateSkip, NeverFocus, StaysOnBottom

KillModule PanelPager
DestroyModuleConfig PanelPager: *
*PanelPager: DeskTopScale 25
*PanelPager: Geometry +2+2
*PanelPager: WindowBorderWidth 1
*PanelPager: Colorset * 14
*PanelPager: HilightColorset * 15
*PanelPager: WindowColorsets 16 17
*PanelPager: Font none
#*PanelPager: SmallFont "xft:Sans:style=Regular:pixelsize=9:antialias=True"
*PanelPager: SmallFont none
*PanelPager: Balloons
*PanelPager: BalloonColorset * 9
*PanelPager: BalloonFont "Shadow=0 0 SE:xft:Sans:style=regular:size=10:antialias=true:hinting=slight"
*PanelPager: BalloonYOffset +2
*PanelPager: BalloonBorderWidth 0
*PanelPager: BalloonFore #1F1F1F
*PanelPager: BalloonBack #E5E5E5
*PanelPager: UseSkipList
# *PanelPager: SolidSeparators
# *PanelPager: NoSeparators
*PanelPager: ShapeLabels
*PanelPager: !MiniIcons
*PanelPager: MoveThreshold 5

# PanelIconMan
#===========================================================
DestroyModuleConfig PanelIconMan
*PanelIconMan: Title ""    
*PanelIconMan: NumManagers 1
# *PanelIconMan: ManagerGeometry 0X1+400-2
*PanelIconMan: ManagerGeometry 1X1
*PanelIconMan: ButtonGeometry 1x$[FVWM_PANEL_HEIGHT]
#==============================================================
*PanelIconMan: MaxButtonWidth 200
*PanelIconMan: Font "xft:Source Sans Pro:style=Medium:size=10:antialias=true:hinting=slight"
*PanelIconMan: Format "%c: %i"
*PanelIconMan: FollowFocus true
*PanelIconMan: DontShow icon=Untitled resource=Untitled
*PanelIconMan: Resolution page
*PanelIconMan: ShowOnlyIcons false
*PanelIconMan: DrawIcons false
*PanelIconMan: ShowOnlyFocused false
*PanelIconMan: ShowTransient false
*PanelIconMan: Sort id
*PanelIconMan: UseWinList true
*PanelIconMan: ReliefThickness 1
*PanelIconMan: Tips Always
*PanelIconMan: TipsDelays 1000 300
*PanelIconMan: TipsFont "Shadow=0 0 SE:xft:123:style=regular:pixelsize=10:antialias=true:hinting=slight"
# *PanelIconMan: TipsFont "xft:Envy Code R:style=regular:pixelsize=10"
*PanelIconMan: TipsFormat "%i"
*PanelIconMan: TipsBorderWidth 0
*PanelIconMan: TipsColorset 3
*PanelIconMan: TipsJustification center
#======================================================================
*PanelIconMan: Background  #413E3E
*PanelIconMan: Foreground  #D5D5D5

*PanelIconMan: IconButton	flat	#A0A0A0 #413E3E
*PanelIconMan: PlainButton	flat	#C0C0C0 #413E3E
*PanelIconMan: SelectButton	flat	#F0F0F0 #585858
*PanelIconMan: FocusButton	down	#F0F0F0 #686868
*PanelIconMan: FocusAndSelectButton	down	#F0F0F0 #585858

# *PanelIconMan: Colorset 3
#*PanelIconMan: IconColorset 14
#*PanelIconMan: PlainColorset 15
#*PanelIconMan: FocusColorset 16
#*PanelIconMan: SelectColorset 17
#*PanelIconMan: FocusAndSelectColorset 18
#*PanelIconMan: IconButton flat
#*PanelIconMan: PlainButton flat
#*PanelIconMan: SelectButton flat
#*PanelIconMan: FocusButton flat
#*PanelIconMan: FocusAndSelectButton flat

#======================================================================
*PanelIconMan: Action    Mouse 1 N sendcommand "DeiconifyFocusAndRaise"
*PanelIconMan: Action    Mouse 2 N sendcommand "WindowShade toggle"
*PanelIconMan: Action    Mouse 3 N sendcommand sendcommand Focus, sendcommand "IconThumb"
*PanelIconMan: Action    Mouse 2 M SendCommand "Close"
#=======================================================================

KillModule InlinePanel
DestroyModuleConfig InlinePanel: *
*InlinePanel: Fore #D5D5D5
*InlinePanel: Back #413E3E
# *InlinePanel: Colorset 14
*InlinePanel: Font "xft:Sans:style=Bold:size=10:antialias=true:hinting=slight"
*InlinePanel: BoxSize smart
*InlinePanel: Frame 1
*InlinePanel: Padding 1 1
#*InlinePanel: Columns $[vp.width]
#*InlinePanel: Rows 1
# PipeRead 'echo SetEnv pager.width $(( $[desk.pagesx]*$[vp.width]*$[Fvwm_Panel_Height]/$[vp.height] ))'
PipeRead 'echo SetEnv pager.width $(( 2*$[desk.pagesx]*$[vp.width]*$[Fvwm_Panel_Height]/$[vp.height] ))'
PipeRead 'echo SetEnv systray.width $(( 5*$[Fvwm_Panel_Height] ))'
PipeRead 'echo SetEnv clock.width $(( 3*$[Fvwm_Panel_Height] ))'
PipeRead 'echo SetEnv iconman.width $(( $[vp.width] - $[pager.width] - $[systray.width] - $[clock.width] - 5*$[Fvwm_Launcher_Width] ))'
*InlinePanel: (Frame 0 Padding 0 0 Container(Rows 1 Columns $[vp.width], Frame 2, Padding 0 0)
*InlinePanel: ($[Fvwm_Launcher_Width], Frame 1, Padding 0 0, Title "", Icon $[FVWM_USERDIR]/BarIcon/system-file-manager.png , Action Menu PullDownMenu)
*InlinePanel: ($[Fvwm_Launcher_Width], Frame 1, Padding 0 0, Title "", Icon $[FVWM_USERDIR]/BarIcon/xterm.png, Action 'Exec exec urxvtc --geometry 128x32')
*InlinePanel: ($[Fvwm_Launcher_Width], Frame 1, Padding 0 0, Title "", Icon $[FVWM_USERDIR]/BarIcon/text-editor.png, Action 'Exec exec medit')
*InlinePanel: ($[Fvwm_Launcher_Width], Frame 1, Padding 0 0, Title "", Icon $[FVWM_USERDIR]/BarIcon/firefox.png, Action 'Exec exec firefox')
*InlinePanel: ($[Fvwm_Launcher_Width], Frame 1, Padding 0 0, Title "", Icon $[FVWM_USERDIR]/BarIcon/thunderbird.png, Action `Exec exec thunderbird`)
*InlinePanel: ($[Fvwm_Launcher_Width], Frame 1, Padding 0 0, Title "", Icon $[FVWM_USERDIR]/BarIcon/gimp.png, Action `Exec exec gimp`)
*InlinePanel: ($[iconman.width], Frame 1, Padding 0 0, Swallow (SwallowNew) FvwmIconMan 'Module FvwmIconMan PanelIconMan')
*InlinePanel: ($[systray.width], Frame 1, Padding 0 0, Swallow (SwallowNew) "stalonetray" `Exec exec stalonetray --config ~/.fvwm/fvwmtray`)
*InlinePanel: ($[pager.width], Frame 1, Padding 0 0, Swallow (SwallowNew) FvwmPager 'Module FvwmPager PanelPager 0 1')
*InlinePanel: ($[clock.width], Frame 1, Padding 0 12, Swallow (NoClose,UseOld) "Clock24hr" `FvwmScript /home/doug/.fvwm/scripts/Clock-24h`)

#*TaskPanel: (1x1, Frame 0, Padding 0 0, Swallow (NoClose,UseOld) "stalonetray" `Exec exec stalonetray --config ~/.fvwm/tray07rc`)
#*TaskPanel: (1x1, Frame 0, Padding 0 12, Swallow (NoClose,UseOld) "Clock24hr" `FvwmScript /home/doug/.fvwm/scripts/Clock-24h`)


DestroyModuleConfig LauncherButtons: *
#*LauncherButtons: Fore Black
#*LauncherButtons: Back #c3c3c3
*LauncherButtons: Colorset 13
*LauncherButtons: Font "xft:PT Sans:Bold:size=10:antialias=true:hinting=slight"
# *LauncherButtons: Geometry 490x$[FVWM_TB_HEIGHT]+0-0
*LauncherButtons: Columns 7
*LauncherButtons: (1x1, Title Fvwm, Icon "", Action Menu PullDownMenu)
*LauncherButtons: (1x1, Icon /usr/share/icons/Faenza/apps/32/file-manager.png, Action 'Exec exec spacefm')
*LauncherButtons: (1x1, Icon /usr/share/icons/Faenza/apps/32/terminal.png, Action 'Exec exec urxvtc --geometry 120x30')
*LauncherButtons: (1x1, Icon /usr/share/icons/Faenza/apps/32/leafpad.png, Action 'Exec exec medit')
*LauncherButtons: (1x1, Icon /usr/share/icons/Faenza/apps/32/mozilla-firefox.png, Action 'Exec exec firefox')
*LauncherButtons: (1x1, Icon /usr/share/icons/Faenza/apps/32/thunderbird-icon.png , Action `Exec exec thunderbird`)
*LauncherButtons: (1x1, Icon /usr/share/icons/Faenza/apps/32/gimp.png, Action 'Exec exec gimp')

Menu

DestroyFunc StartConsole
AddToFunc StartConsole
+ I Module FvwmConsole -terminal urxvt -fg "#F8F8ED" -bg "#202838" -g 100x40 -fa "Terminus-10" -fb 7x14bold -n "FvwmConsole"

# fvwmmenu 10-07-13
#====================================#
MenuStyle "*" FVWM
MenuStyle "*" Font "xft:Fira Sans OT:Style=Regular:size=10:antialias=true:hinting=slight"
MenuStyle "*" Hilight3DThin
MenuStyle "*" Hilight3DThickness 1
# MenuStyle "*" Hilight3DOff
MenuStyle "*" MenuColorset 1, HilightBack, ActiveColorset 2
MenuStyle "*" PopupDelayed, PopupDelay 150, PopdownDelayed, PopdownDelay 150
MenuStyle "*" PopupOffset +6 100, TitleWarpOff
MenuStyle "*" TitleUnderlines2, SeparatorsShort, TrianglesRelief
MenuStyle "*" Animation, AutomaticHotkeysOff, DoubleClickTime
MenuStyle "*" BorderWidth 2, SidePic, SideColor
MenuStyle "*" PopupAsSubmenu, HoldSubmenus, SubmenusRight
MenuStyle "*" ItemFormat "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"
MenuStyle "*" VerticalItemSpacing 3 3, VerticalTitleSpacing 3 3

DestroyMenu MenuFvwmRoot
AddToMenu	MenuFvwmRoot	"$[gt.Fvwm Root Menu]"	Title
+	"Run"		Exec exec dmenu_run -nb rgb:0B/0B/0B -nf rgb:F5/F5/F5 -sb rgb:A6/7B/5B -sf rgb:F5/F5/F5 &
+	"URxvt"		Exec exec urxvtc -geometry 120x32
+	"Medit"		Exec exec medit
+	"Thunar"	Exec exec thunar
+	"Firefox"	Exec exec firefox
+	"Thunderbird"	Exec exec thunderbird
+	"Gimp"		Exec exec gimp
+       "Mirage"	Exec exec mirage
+	""		Nop
+	"Background"	Popup MenuBackground
+	"Screenshot"	Exec exec "$HOME/bin/scrot_delay.sh"
+	"Conky"		Popup ConkyMenu
+   "" Nop
+	"Weather"	FvwmScript /home/doug/.fvwm/scripts/Meteo/Meteo
+   "Calendar"	FvwmScript /home/doug/.fvwm/scripts/Kalende/Kalende
+   "Clock"		FvwmScript /home/doug/.fvwm/scripts/Chrono/Chrono
+   "" Nop
+	"Tile"		Module FvwmRearrange -tile -u -animate -resize -h 1 1 98 96 -mn 2
+	"Cascade"	Module FvwmRearrange -cascade -u -resize 1 1 84 84 -incx 2p -incy 2p
+	""		Nop
+	"FvwmConsole"	StartConsole
+	"Man Pages"	Popup FvwmManPagesMenu
+	"Modules"	Popup MenuFvwmModules
+	"Configure Fvwm"	Popup MenuFvwmConfig
+	""		Nop
+	"Exit Fvwm"	Popup MenuExit
+	""		Nop
+	"Exit"		Module FvwmForm FvwmForm-Logout


# additional menus

SetEnv fvwm_wallpaper $[HOME]/wallpaper
DestroyMenu MenuBackground
AddToMenu MenuBackground
+	MissingSubmenuFunction WallpaperBrowser
+	"Image Browser"		Popup $[fvwm_wallpaper]
+	"Blue"			Exec exec xsetroot -mod 1 1 -bg gray75 -fg Royalblue &
+	"Black"			Exec exec xsetroot -solid black &
+	"Green"			Exec exec xsetroot -solid "#35C55F" &
+	"SteelBlue"		Exec exec xsetroot -solid SteelBlue &
+	"Gray"			Exec exec xsetroot -solid gray75 &

DestroyMenu ConkyMenu
AddToMenu ConkyMenu
+	"Conky"		Exec exec "$HOME/bin/ConkyFvwm.sh"
+	"Tao"		Exec exec "$HOME/bin/ConkyTao.sh"
+	"Weather"	Exec exec "$HOME/bin/ConkyWeather.sh"

DestroyMenu MenuExit
AddToMenu MenuExit "$[gt.Really Quit Fvwm?]" Title
+ "$[gt.Yes, Really Quit]" Quit
+ ""                     Nop
+ "$[gt.Restart]"          Restart
+ ""                     Nop
+ "$[gt.Fvwm Tiling]"	Restart fvwm -f "$HOME/.fvwm/tileconfig"
+	""		Nop
+ "$[gt.Just an Xterm]"    Restart xterm -n '"X Console"' -T '"X Console"'
+ ""                     Nop
+ "$[gt.No, Don't Quit]"   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

DestroyMenu MenuFvwmWindowOps
AddToMenu MenuFvwmWindowOps "Window Options" Title
+ "$[gt.&Move]"              Move
+ "$[gt.&Resize]"            Resize
+ "$[gt.R&aise]"             Raise
+ "$[gt.&Lower]"             Lower
+ "$[gt.(De)&Iconify]"       Iconify
+ "$[gt.(Un)&Stick]"         Stick
+ "$[gt.(Un)Ma&ximize]"      Maximize
+ "$[gt.(Un)Shade]"          WindowShade
+ ""                 Nop
+ "$[gt.&Delete]"            Delete
+ "$[gt.&Close]"             Close
+ "$[gt.Destroy]"            Destroy
+ ""                 Nop
+ "$[gt.Identify]"           Module FvwmIdent
+ "$[gt.Re&fresh Window]"    RefreshWindow
+ "$[gt.Recapture Screen]"   Recapture

DestroyMenu FvwmManPagesMenu
AddToMenu   FvwmManPagesMenu "FVWM Man Pages" Title
+ "%menu/help.png%fvwm"                FvwmViewManPage fvwm
+ "%menu/help.png%FvwmAnimate"         FvwmViewManPage FvwmAnimate
+ "%menu/help.png%FvwmAuto"            FvwmViewManPage FvwmAuto
+ "%menu/help.png%FvwmBacker"          FvwmViewManPage FvwmBacker
+ "%menu/help.png%FvwmBanner"          FvwmViewManPage FvwmBanner
+ "%menu/help.png%FvwmButtons"         FvwmViewManPage FvwmButtons
+ "%menu/help.png%FvwmCommand"         FvwmViewManPage FvwmCommand
+ "%menu/help.png%FvwmConsole"         FvwmViewManPage FvwmConsole
+ "%menu/help.png%FvwmConsoleC.pl"     FvwmViewManPage FvwmConsoleC.pl
+ "%menu/help.png%FvwmCpp"             FvwmViewManPage FvwmCpp
+ "%menu/help.png%FvwmDebug"           FvwmViewManPage FvwmDebug
+ "%menu/help.png%FvwmDragWell"        FvwmViewManPage FvwmDragWell
+ "%menu/help.png%FvwmEvent"           FvwmViewManPage FvwmEvent
+ "%menu/help.png%FvwmForm"            FvwmViewManPage FvwmForm
+ "%menu/help.png%FvwmGtk"             FvwmViewManPage FvwmGtk
+ "%menu/help.png%FvwmGtkDebug"        FvwmViewManPage FvwmGtkDebug
+ "%menu/help.png%FvwmIconBox"         FvwmViewManPage FvwmIconBox
+ "%menu/help.png%FvwmIconMan"         FvwmViewManPage FvwmIconMan
+ "%menu/help.png%FvwmIdent"           FvwmViewManPage FvwmIdent
+ "%menu/help.png%FvwmM4"              FvwmViewManPage FvwmM4
+ "%menu/help.png%FvwmPager"           FvwmViewManPage FvwmPager
+ "%menu/help.png%FvwmPerl"            FvwmViewManPage FvwmPerl
+ "%menu/help.png%FvwmProxy"           FvwmViewManPage FvwmProxy
+ "%menu/help.png%FvwmRearrange"       FvwmViewManPage FvwmRearrange
+ "%menu/help.png%FvwmSave"            FvwmViewManPage FvwmSave
+ "%menu/help.png%FvwmSaveDesk"        FvwmViewManPage FvwmSaveDesk
+ "%menu/help.png%FvwmScript"          FvwmViewManPage FvwmScript
+ "%menu/help.png%FvwmScroll"          FvwmViewManPage FvwmScroll
+ "%menu/help.png%FvwmTaskBar"         FvwmViewManPage FvwmTaskBar
+ "%menu/help.png%FvwmTheme"           FvwmViewManPage FvwmTheme
+ "%menu/help.png%FvwmWharf"           FvwmViewManPage FvwmWharf
+ "%menu/help.png%FvwmWinList"         FvwmViewManPage FvwmWinList
+ "%menu/help.png%Fvwm/"               FvwmViewManPage FvwmWindowMenu
+ "" Nop
+ "%menu/help.png%fvwm-config"         FvwmViewManPage fvwm-config
+ "%menu/help.png%fvwm-perllib"        FvwmViewManPage fvwm-perllib
+ "%menu/help.png%fvwm-root"           FvwmViewManPage fvwm-root
+ "%menu/help.png%fvwm-bug"            FvwmViewManPage fvwm-bug
+ "%menu/help.png%fvwm-convert-2.2"    FvwmViewManPage fvwm-convert-2.2
+ "%menu/help.png%fvwm-convert-2.4"    FvwmViewManPage fvwm-convert-2.4
+ "" Nop
+ "%menu/help.png%fvwm-menu-desktop"   FvwmViewManPage fvwm-menu-desktop
+ "%menu/help.png%fvwm-menu-directory" FvwmViewManPage fvwm-menu-directory
+ "%menu/help.png%fvwm-menu-headlines" FvwmViewManPage fvwm-menu-headlines

DestroyMenu MenuFvwmModules
AddToMenu MenuFvwmModules "$[gt.Fvwm Modules]"        Title
+ "$[gt.Control Animation]" Popup  MenuFvwmAnimate
+ "Button-Bar"        Module FvwmButtons
+ "IconBox"           FuncFvwmConfigureIconBox
+ "Forms"             Popup  MenuFvwmForms
+ "Identify"          Module FvwmIdent
+ "IconMan"           Module FvwmIconMan
+ "Banner"            Module FvwmBanner
+ "Console"           Module FvwmConsole
+ "Pager"             Module FvwmPager 0 0
+ "Pager (2 $[gt.desks])"   Module FvwmPager 0 3
+ "Backer"            Module FvwmBacker
+ "ScrollBar"         Module FvwmScroll 50 50
+ "FvwmTaskBar"       Module FvwmTaskBar
+ "AutoRaise"         Module FvwmAuto 200 Raise Nop
+ "WinList"           Module FvwmWinList
+ "$[gt.Stop Module Menu]"  Popup  MenuFvwmStopModule

DestroyMenu MenuFvwmStopModule
AddToMenu MenuFvwmStopModule "$[gt.Stop Fvwm Modules]" Title
+ "$[gt.Stop] Button-Bar"  KillModule FvwmButtons
+ "$[gt.Stop] IconBox"     KillModule FvwmIconBox
+ "$[gt.Stop] IconMan"     KillModule FvwmIconMan
+ "$[gt.Stop] Pager"       KillModule FvwmPager
+ "$[gt.Stop] Backer"      KillModule FvwmBacker
+ "$[gt.Stop] ScrollBar"   KillModule FvwmScroll
+ "$[gt.Stop] FvwmTaskBar" KillModule FvwmTaskBar
+ "$[gt.Stop] AutoRaise"   KillModule FvwmAuto
+ "$[gt.Stop] WinList"     KillModule FvwmWinList

DestroyMenu MenuFvwmConfig
AddToMenu MenuFvwmConfig "$[gt.Fvwm Config Ops]" Title
+ "$[gt.Sloppy Focus]"        FuncFvwmFocusPolicyChange SloppyFocus
+ "$[gt.Click To Focus]"      FuncFvwmFocusPolicyChange ClickToFocus
+ "$[gt.Focus Follows Mouse]" FuncFvwmFocusPolicyChange FocusFollowsMouse
+ "" Nop
+ "$[gt.Colormap Follows Mouse]" ColormapFocus FollowsMouse
+ "$[gt.Colormap Follows Focus]" ColormapFocus FollowsFocus
+ "" Nop
+ "$[gt.Full Paging ON]"           EdgeScroll 100 100
+ "$[gt.All Paging OFF]"           EdgeScroll 0 0
+ "$[gt.Horizontal Paging Only]"   EdgeScroll 100 0
+ "$[gt.Vertical Paging Only]"     EdgeScroll 0 100
+ "$[gt.Partial Paging]"           EdgeScroll 50 50
+ "$[gt.Full Paging && Edge Wrap]" EdgeScroll 100000 100000


# fvwmmenu 10-07-13
#====================================#
MenuStyle "*" FVWM
MenuStyle "*" Font "xft:Fira Sans OT:Style=Regular:size=10:antialias=true:hinting=slight"
MenuStyle "*" Hilight3DThin
MenuStyle "*" Hilight3DThickness 1
# MenuStyle "*" Hilight3DOff
MenuStyle "*" MenuColorset 1, HilightBack, ActiveColorset 2
MenuStyle "*" PopupDelayed, PopupDelay 150, PopdownDelayed, PopdownDelay 150
MenuStyle "*" PopupOffset +6 100, TitleWarpOff
MenuStyle "*" TitleUnderlines2, SeparatorsShort, TrianglesRelief
MenuStyle "*" Animation, AutomaticHotkeysOff, DoubleClickTime
MenuStyle "*" BorderWidth 2, SidePic, SideColor
MenuStyle "*" PopupAsSubmenu, HoldSubmenus, SubmenusRight
MenuStyle "*" ItemFormat "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"
MenuStyle "*" VerticalItemSpacing 3 3, VerticalTitleSpacing 3 3

DestroyMenu PullDownMenu
AddToMenu	PullDownMenu	"$[gt.Fvwm Apps Menu]"	Title
+	"Run"		Exec exec dmenu_run -nb rgb:0B/0B/0B -nf rgb:F5/F5/F5 -sb rgb:A6/7B/5B -sf rgb:F5/F5/F5 &
+	"URxvt"		Exec exec urxvtc
+	"Medit"		Exec exec medit
+	"Thunar"	Exec exec thunar
+	"Firefox"	Exec exec firefox
+	"Thunderbird"	Exec exec thunderbird
+	"Gimp"		Exec exec gimp
+       "Ristretto"	Exec exec ristretto
+	"FileZilla"	Exec exec filezilla
+	"Xchat"		Exec exec xchat
+	"SMplayer"	Exec exec smplayer
+	"FvwmConsole"	StartConsole
+	""		Nop
+	"Exit Fvwm"	Module FvwmForm FvwmForm-Logout
+	""		Nop
+	"Exit"		Exec exec /usr/local/bin/vsido-exit

Mouse -

# standard mouse bindings and functions - 10-07-13
#=======================================================

# R - the root window, I - Icon, F - frame corners,
# S - frame sides, T - title bar, W - application window and 0-9 - buttons. 
# Note that A will stand for anywhere, i.e. it doesn't matter where the mouse is located.


#####
# If you use Thumbnails (as opposed to Iconify), how big would you like the Icons to be?
#
# Try one of these, from tiny to large: 32, 64, 96, 128
#
# Note that the aspect ratio is maintained, so tall and thin windows may get larger icons,
# but you can change that if it annoys you.
#################

SetEnv fvwm_icon_size 32
SetEnv fvwm_thumbx 128
SetEnv fvwm_thumby 72

#####
# Name:     Thumbnail
# Purpose:  Iconify a window with a reduced screenshot of the application
#           Window, looks really cool.
#
#           Uses FvwmEvent to remove the Icon when deiconified, you will want
#           to remove this if you use WindowStyle elsewhere.
#
#           Thumbnailing example: [6]http://dev.gentoo.org/~taviso/step2.png
#
##################
DestroyFunc IconThumb
AddToFunc IconThumb
+ I Raise
+ I PipeRead "xwd -silent -id $[w.id] | convert -scale '$[fvwm_thumbx]x$[fvwm_thumby]!' -frame 1x1 \
    -mattecolor black -quality 0 xwd:- png:$[HOME]/.fvwm/icon.tmp.$[w.id].png \
    && echo WindowStyle IconOverride, Icon $[HOME]/.fvwm/icon.tmp.$[w.id].png, StaysOnBottom \
    || echo Nop"
+ I Iconify

DestroyFunc DeIconThumb
AddToFunc DeIconThumb
+ I DestroyWindowStyle
+ I Exec exec rm -f $HOME/.fvwm/icon.tmp.$[w.id].png

# Autoshade functions set mimics
# kwin autoshade feature
DestroyFunc ToggleAutoshaded
AddToFunc ToggleAutoshaded
+ I State 0

DestroyFunc AutoShade
AddToFunc AutoShade
+ I ThisWindow (State 0) WindowShade True

DestroyFunc AutoUnshade
AddToFunc AutoUnshade
+ I ThisWindow (State 0) WindowShade False

# Widescreen formatting 
DestroyFunc ReadableWidth
AddToFunc ReadableWidth
+ I Maximize 66 90
+ I Move 50-50w 50-50w

DestroyFunc MaxCenter
AddToFunc MaxCenter
+ I ResizeMove 80 80 50-50w 50-50w

DestroyFunc MaxULeft
AddToFunc MaxULeft
+ I ResizeMove 50 50 0 0

DestroyFunc MaxURight
AddToFunc MaxURight
+ I ResizeMove 50 50 -0 0

DestroyFunc MaxLLeft
AddToFunc MaxLLeft
+ I ResizeMove 50 50 0 -0

DestroyFunc MaxLRight
AddToFunc MaxLRight
+ I ResizeMove 50 50 -0 -0

DestroyFunc TileLeft
AddToFunc TileLeft
+ I ResizeMove 50 95 0 0

DestroyFunc TileRight
AddToFunc TileRight
+ I ResizeMove 50 95 -0 0

DestroyFunc TileTop
AddToFunc TileTop
+ I ResizeMove 70 50 0 0

DestroyFunc FvwmMaximize
AddToFunc   FvwmMaximize
+ H Nop
+ M Nop
+ C Maximize $0 $1

DestroyFunc FvwmVMaximize
AddToFunc FvwmVMaximize
+ H Nop
+ M Nop
+ C Maximize 0 100

DestroyFunc FvwmHMaximize
AddToFunc FvwmHMaximize
+ H Nop
+ M Nop
+ C Maximize 100 0

DestroyFunc ResizeOrRaise
AddToFunc ResizeOrRaise
+ I Raise
+ M Resize
+ D Lower

DestroyFunc Move-Raise-Shade
AddToFunc   Move-Raise-Shade
+ I Raise
+ M Move
+ D WindowShade

DestroyFunc DeiconifyAndRearrange
AddToFunc DeiconifyAndRearrange
+ C Iconify off
+ C All (CurrentPage, Iconic) PlaceAgain Icon

DestroyFunc AnimateIcon
AddToFunc AnimateIcon
+ C DeiconifyAndRearrange
+ M Raise
+ M Move
+ D DeiconifyAndRearrange

DestroyFunc DeleteOrDestroy
AddToFunc   DeleteOrDestroy
+ H Nop
+ M Nop
+ C Delete
+ D Destroy

DestroyFunc WindowShade
AddToFunc   WindowShade
+ H Nop
+ M Nop
+ C WindowShade $0
+ D WindowShade $0

# this isn't working

DestroyFunc SelectRaiseAndFocus
AddToFunc SelectRaiseAndFocus
+ C DeiconifyAndRearrange
+ I Raise
+ I Focus

DestroyFunc DeiconifyRaiseAndFocus
AddToFunc DeiconifyRaiseAndFocus
+ I Iconify off
+ I Raise
+ I Focus

########

DestroyFunc DeiconifyFocusAndRaise
AddToFunc DeiconifyFocusAndRaise
+ I Iconify off
+ I Focus
+ I Raise

# some simple default mouse bindings:

#		root window:
Mouse 1 R       A       Menu MenuFvwmRoot Nop
Mouse 2 R       A       Menu MenuFvwmWindowOps Nop
Mouse 3 R       A       WindowList

#		buttons
# mouse 1
Mouse 1	1	A	Menu MenuFvwmWindowOps Close
Mouse 1	3	A	WindowShade
Mouse 1	2	A	Close
Mouse 1 4	A	FvwmMaximize
Mouse 1 6	A	IconThumb
# Mouse 1	6	A	Iconify

# mouse 2
Mouse 2	1	A	ReadableWidth
Mouse 2	3	A	Destroy
Mouse 2	2	A	Close
Mouse 2	4	A	FvwmVMaximize
Mouse 2	6	A	IconThumb

# mouse 3
Mouse 3	1	A	MaxCenter
Mouse 3	3	A	FvwmIdent
Mouse 3	2	A	Destroy
Mouse 3	4	A	FvwmHMaximize
Mouse 3	6	A	Iconify

#		window
Mouse 1	FS	A	ResizeOrRaise
Mouse 1	T	A	Move-Raise-Shade
Mouse 1	I	A	AnimateIcon
Mouse 2	I	A	AnimateIcon
Mouse 3 I	A	DeiconifyRaiseAndFocus
Mouse 2 FST	A	WindowShade
Mouse 3 TSIF	A	RaiseLower

# fluxbox style
Mouse 1	W	M	Move-Raise-Shade
Mouse 3	W	M	ResizeOrRaise

# EOF

Keys -

# fvwm keys file 10-07-2013
#=============================#

Key	Space	A	4	Menu MenuFvwmRoot Nop
Key	Space	A	CM	Menu WindowOptionsMenu Close

#Key	r	A	CM	RaiseToTop
#Key	l	A	CM	LowerToBottom
Key	F1	A	M	Exec exec urxvtc -geometry 120x32
# Key	F2	A	M	Exec exec dmenu_run
Key	F2	A	M	Module FvwmForm FvwmForm-RunCommand
Key	F3	A	M	Exec exec uxterm -e tmux
Key	F4	A	M	Close
Key	F5	A	SM	MaxCenter
Key	F5	A	M	Move 50-50w 50-50w
# Key	F6	A	M	IconThumb
# Key	F6	A	M	Iconify
Key	F6	A	M	IconThumb
Key	F6	A	MS	RaiseLower
Key	F7	A	M	Maximize 0 100
Key	F8	A	M	Maximize 100 0
Key	F9	A	M	Destroy
Key	F10	A	M	Maximize 100 100
# Key	F11	A	M	UndecMax
Key F11		A	M	FuncMaximizeFullScreen
Key	F11	A	SM	StartConsole
Key	F12	A	SM	ReadableWidth

#Key	F1	A	SM	AnimatedMove +0 +0
#Key	F2	A	SM	AnimatedMove -0 +0
#Key	F3	A	SM	AnimatedMove +0 -0
#Key	F4	A	SM	AnimatedMove -0 -0

Key	F1	A	SM	MaxULeft
Key	F2	A	SM	MaxURight
Key	F3	A	SM	MaxLLeft
Key	F4	A	SM	MaxLRight
#Key	F1	A	SM	TileUpperLeft
#Key	F2	A	SM	TileUpperRight
#Key	F3	A	SM	TileLowerLeft
#Key	F4	A	SM	TileLowerRight
Key F1	A	S4	MaxLeftHalf
Key F2	A	S4	MaxRightHalf

Key	Right	A	SM	MoveRight
Key	Left	A	SM	MoveLeft
Key	Up	A	SM	MoveUp
Key	Down	A	SM	MoveDown

Key	Right	A	S4	GrowEast
Key	Left	A	S4	ShrinkEast
Key	Up	A	S4	ShrinkSouth
Key	Down	A	S4	GrowSouth

Key	Tab	A	M	FuncFvwmNextWindow
Key	Tab	A	MS	FuncFvwmPrevWindow

# Scroll Pages
# Key	Right	A	CM	Scroll +100 0
# Key	Left	A	CM	Scroll -100 0
# Key	Up	A	CM	Scroll +0 -100
# Key	Down	A	CM	Scroll +0 +100

# Scroll Desktops
Key	Right	A	CM	GotoDesk	1 0 3
Key	Left	A	CM	GotoDesk	-1 0 3

Key	q	A	4	Restart
Key	q	A	S4	Exec exec vsido-exit
# Key	q	A	S4	Module FvwmForm FvwmForm-Logout

Key	XF86HomePage	A	A	Exec exec firefox
Key	XF86Mail	A	A	Exec exec thunderbird
Key	Menu		A	A	Exec exec thunar
Key	XF86AudioMute		A	A	Exec exec amixer sset Master,0 toggle
Key	XF86AudioRaiseVolume	A	A	Exec exec amixer sset Master 5%+ unmute
Key	XF86AudioLowerVolume	A	A	Exec exec amixer sset Master 5%- unmute

Key	l	A	C4	Exec exec geany
Key	g	A	C4	Exec exec gimp
Key	p	A	C4	Exec exec libreoffice --calc
Key	o	A	C4	Exec exec libreoffice --writer
Key	c	A	C4	Exec exec xcalc
Key	r	A	C4	Exec exec ristretto
Key	Print	A	C4	Exec exec "$HOME/bin/scrot_delay.sh"
Key	Pause	A	C4	Exec exec "$HOME/bin/ConkyFvwm.sh"
Key	b	A	C4	Exec exec "$HOME/bin/FCTao.sh"
Key	w	A	C4	Exec exec "$HOME/bin/PMWeather.sh"
# EOF

If you're running Fvwm and have some awesome function or configuration to share lets see them.

Note - the set of patches for fvwm that will provide rounded corners, translucancy, and some other modern aethetics were hosted on the Arch Linux site (the Aur I think) last I went looking for them. There may still be a set on the Gentoo site.

Last edited by PackRat (2016-01-01 03:05:13)


You must unlearn what you have learned.
    -- yoda

Offline

#2 2016-01-01 02:44:52

PackRat
jgmenu user Numero Uno
Registered: 2015-10-02
Posts: 1,438

Re: Fvwm Window Manager - share configs, functions, all that jazz.

A brief note on panels, pagers, and system trays -

Fvwm is self contained - except for a system tray and clock - so you can create your panel.

FvwmIconManager - Show active, inactive, iconified windows - like a taskbar

IconBox - icons on the desktop; can display icons or thumbnails

FvwmTaskBar - Retro, but functional taskbar with a Win95 look.

FvwmButtons - powerful module to create your own panels, can swallow other Fvwm modules, FvwmScript, other apps (but not conky).

FvwmPager - the Fvwm pager

For a system tray, stalonetray works the best- IMO, trayer is also really good. Both are in the debian repos.

Fvwm supports 3rd party panels pretty well - xfce4-panel, lxpanel, and fbpanel all work out of the box; tint2 takes some extra configuration. If you use tint2, be sure a line similar to:

Style tint2 !Title, !Borders, !Handles, Sticky, StaysOnBottom, NoHandles, ClickToFocus, PositionPlacement 0 -0

is in your config file(s) somewhere. The "PositionPlacement 0 -0" is the important part of the style. Tint2 has a tendency to place itself across the middle of the (my) monitor(s). That Style element anchors it to the lower left corner.

Fvwm with xfce4-panel -

December_1451613086_1600x900.th.jpg

Fvwm with tint2 -

December_1451612798_1600x900.th.jpg

3rd party pagers can be an issue when used with Fvwm. Keep in mind that Fvwm makes the distinction between a desktop and a page (portion of a desktop). 3rd party pagers don't make that distinction as far as I know.

In my config I use:

# single desktop(s)
DeskTopSize 1x1
EwmhNumberOfDesktops 2

Which makes my desktops consist of 1 page, and I have 2 desktops - no real difference than using 2 desktops in openbox; tint2 and xfce4-pager have no issues with this configuration.

The classic Fvwm config is:

DeskTopSize 3x3

# combined with
Module FvwmPager 0 3

This yields a desktop that is divided into a 3x3 grid of pages, and launches a FvwmPager with 4 desktops (numbered 0-3) for a total of 36 pages. Xfce4-panel and tint2 tend to barf with this configuration.

Some hints to keep in mind when designing an Fvwm desktop.

Last edited by PackRat (2016-01-02 00:16:58)


You must unlearn what you have learned.
    -- yoda

Offline

#3 2016-01-01 05:30:17

gako
Member
Registered: 2015-10-02
Posts: 241

Re: Fvwm Window Manager - share configs, functions, all that jazz.

Swiiit Swooo! Awesomeness

Great share Pack Rat, thank you. I love these family of window managers; they've turned me into a stacker/tabber/whatevuh.
I was heavy into tiling for a long while and you start to miss things like window decorations.
From what I've seen fvwm can be bare minimal to heavily modulated and it has an awesome community.

Once I get my feet wet I'm sure I'll be a dedicated convert.
I'd like to learn to write modules for it and probably a cool way to use python.
Also, thx for the m4 info from the screenshots thread
I'd bet a lot of my macros for vtwm would work with fvwm hm...

Offline

#4 2016-01-01 12:34:27

Head_on_a_Stick
Member
From: London
Registered: 2015-09-29
Posts: 8,759
Website

Re: Fvwm Window Manager - share configs, functions, all that jazz.

This is so awesome  glasses

Thank you very much for this PackRat!
smile


“Et ignotas animum dimittit in artes.” — Ovid, Metamorphoses, VIII., 18.

Forum Rules   •   How to report a problem   •   Software that rocks

Offline

#5 2016-01-02 00:50:22

PackRat
jgmenu user Numero Uno
Registered: 2015-10-02
Posts: 1,438

Re: Fvwm Window Manager - share configs, functions, all that jazz.

From what I've seen fvwm can be bare minimal to heavily modulated and it has an awesome community.

Absolutely - there are all sorts of decor options, and FvwmButtons is a pretty powerful module; there is also pipemenu support.

minimal -

fvwm-notitle.th.png

and FvwmConsole can be used to change configuration on the fly, or test new layouts -

fvwm-left-title.th.png

And then there is this - Fvwm Screenshot

The Fvwm forum has been pretty dead lately, but is still an awesome archive; I think the mailing list is where the action is for any sort of help.

Last edited by PackRat (2016-01-02 19:07:58)


You must unlearn what you have learned.
    -- yoda

Offline

#6 2016-01-04 01:20:23

daggoth
Member
Registered: 2016-01-02
Posts: 26

Re: Fvwm Window Manager - share configs, functions, all that jazz.

PackRat wrote:

@daggoth - awesome setup; don't you have a git page or something like that with your configs - if so, can you poat a link here.

Someone else on reddit asked, so I ended up posting a series of five gists here that relate to features that you see in my screenshot. Hope that helps.

I've basically decided that for myself, wherever I see a huge PipeRead function with some nasty syntax, it is probably better off implemented as an fvwmperl module. Going from limited and ugly syntax to something more powerful and readable.

The one module I didn't post is the clipboard module. With that one, I intend to strip out its extra features before eventually posting it somewhere.

Offline

#7 2016-01-04 03:06:56

PackRat
jgmenu user Numero Uno
Registered: 2015-10-02
Posts: 1,438

Re: Fvwm Window Manager - share configs, functions, all that jazz.

@daggoth - thanks

I like what you did with the wallpaper browser - consider it "stolen". And taviso is Tavis Ormandy; his name pops up all over Fvwm sites.

Time to resurrect my CPAN skills, too. That system info block is too good to pass up.


You must unlearn what you have learned.
    -- yoda

Offline

#8 2016-01-04 03:26:42

daggoth
Member
Registered: 2016-01-02
Posts: 26

Re: Fvwm Window Manager - share configs, functions, all that jazz.

PackRat wrote:

Time to resurrect my CPAN skills, too. That system info block is too good to pass up.

My system info graphs are a rip of the Windows 10 task manager. Microsoft got that bit right! Enjoy.

Offline

#9 2016-01-06 04:43:51

daggoth
Member
Registered: 2016-01-02
Posts: 26

Re: Fvwm Window Manager - share configs, functions, all that jazz.

blah.png

Here is the clipboard manager that I mentioned. Basically, it periodically polls the system clipboard with xsel. And when it receives a certain SendToModule event from FVWM, it pops up the menu.

Firstly, some lines from my ~/.fvwm/config. Then secondly, a listing of the fvwmperl module.

Edit: Corrected errors in both sections.

DestroyModuleConfig FvwmClipper: *
*FvwmClipper: Records 22
*FvwmClipper: MaxChars 65
*FvwmClipper: Title "Fvwm\ Clipboard"
*FvwmClipper: Period 500000

KillModule FvwmClipper
Module FvwmClipper

Key C A 4 SendToModule FvwmClipper menu
##!/usr/bin/perl

##  A clipboard manager implemented as an fvwmperl module.
##  It monitors the clipboard selection, NOT the primary selection.
##  Information is stored as plaintext - NOT secure!
##  
##  ualarm() is used to periodically poll the clipboard with cb_sync().
##  At other times, fvwm events are listened for and acted upon.

use utf8 ;
use strict ;
use warnings ;
use v5.18 ;

use lib `fvwm-perllib dir`;
use FVWM::Module;
use Path::Tiny ;
use Data::Dump qw( dump ) ;
use Time::HiRes qw( ualarm ) ;
use Text::Unidecode ;
use IPC::Run qw( run timeout ) ;
use Try::Tiny ;

##  Array of hashes to store the xsel clip records
my @records = () ;
##  maximum number of records in @records
my $max_records = 20 ;
##  maximum width for any record label
my $max_chars = 50 ;
##  Title name for menu
my $menu_title = "Fvwm Clipboard" ;
##  Delay in usecs between xsel polls .
my $pollinterval = 1000000 ;
##  Timeout period for all shell commands in seconds.
my $shelltimeout = 2 ;
##  md5sum of the last xsel clip added to @record
my $md5last = "" ;
##  Temporaray queue of FVWM commands to be sent.
my @cmds = () ;

##  Setup a folder to store xsel entries into.
my $dir = path("~/.fvwm/xsel") ;
system("rm $dir/* 2>/dev/null") ;
system("mkdir -p $dir 2>/dev/null") ;

my $module = new FVWM::Module(
    Name => 'FvwmClipper',
    Mask => M_CONFIG_INFO | M_END_CONFIG_INFO | M_STRING,
    Debug => 0,
    );

##  Storing the name of the fvwm module
my $modname = $module->name ;

##  Using ualarm to trigger a clipboard sync every $pollinterval usecs.
$SIG{ALRM} = \&cb_sync ;

##  First read info from the fvwm config database, then
##  start polling the clipboard via the subroutine cb_sync().
$module->addHandler(M_CONFIG_INFO, \&read_config);
$module->addHandler(M_END_CONFIG_INFO, sub {
    $module->show_message("[$modname] read config finished]") ;
    $module->addHandler(M_STRING, \&process_cmd);
    clear_history() ;
    sleep 1 ;
    cb_sync() ;
    }) ;
    
##  Using an infinite event_loop to monitor FVWM events.
$module->show_message("starting ".$module->name);
$module->send("Send_ConfigInfo") ;
$module->event_loop ;

##  Only process events that pertain to this module.
sub read_config {
    my ($module, $event) = @_ ;
    return unless $event->_text =~ /^\*$modname(.*)$/;
    process_config($1);
}

sub process_config {
    my ($s) = @_ ;
    my ($option, $args)= $s =~/\s*(\w+)\s*(.*)/;

    my %opts = (
        Records => sub { $max_records = $args },
        MaxChars => sub { $max_chars = $args },
        Title => sub { $menu_title = $args },
        Period => sub { $pollinterval = $args },
    ) ;

    if (defined $opts{$option}) {
        $opts{$option}() ;
    } else {
        $module->showMessage("Unknown option \"$option\"");
    }
}

##  Act upon SendToModule cmnds that are sent to this module.
sub process_cmd {

    my ($module, $event) = @_ ;
    my ($s) = $event->_text ;
    my ($command, $arg) = $s =~ /\s*(\w+)\s*(.*)/ ;

    my %cmd = (
        dump  => sub { cb_dump() },
        clear => sub { clear_history() },
        menu  => sub { cb_menu() },
        copy  => sub { xselcopy($arg) },
    ) ;

    if (defined $cmd{$command}) {
        $cmd{$command}() ;
        $module->showMessage("debug: $command");
    } else {
        $module->showMessage("unknown command \"$command\"");
    }
}


##  Used to poll the system clipboard with xsel. If the current entry has
##  changed, then create a new record, and store it.  This is the main
##  sub for clipboard management, and is called periodically by ualarm().

sub cb_sync {

    ##  Get md5sum for the current clipboard entry.
    my $md5 = get_xsel_md5() ;

    ##  If new clipboard entry found, then...
    if ($md5 && $md5 ne $md5last)  {

        ##  Make a hash of all md5s to indexes in @records
        my %md5index = () ;
        for (my $idx = $#records ; $idx >= 0 ; $idx--)  {
            $md5index{$records[$idx]->{md5}} = $idx
        }
            
        ##  If this xsel record already exists, then...
        if (defined $md5index{$md5})  {
            
            ##  move the old record to the top of @records
            my $idx = $md5index{$md5} ;
            my $oldrecord = $records[$idx] ;
            splice @records, $idx, 1 ;
            unshift @records, $oldrecord ;  
            $md5last = $md5 ;

            say STDERR "^" ;

        } else {

            ##  else, make a new xsel record. Each clipboard entry
            ##  is stored as a file, named according to its md5.
            unlink "$dir/$md5" ;
            store_current_xsel("$dir/$md5") ;

            ##  Test that the new xsel record and its md5 match.  This can
            ##  fail in rare cases, when the clipboard changes quickly.
            my $validity = verify_md5($md5, "$dir/$md5") ;
            
            if ($validity)  {

                ##  Add the new entry to @records.
                my $record = new_record($md5, $dir->child($md5)) ;
                unshift(@records, $record) if $record ;  
                say STDERR "+" ;

                ##  If the num of stored @records now exceeds 
                ##  $max_records, then delete the oldest record.
                if (exists $records[$max_records])  {
                    foreach (keys %{ $records[$max_records] } ) { 
                        delete $records[$max_records]->{$_} 
                    }
                    splice @records, $max_records, 1 ;
                }

                $md5last = $md5 ;

            } else {

                ##  Validity test failed, so delete file.
                unlink "$dir/$md5" ;
                say STDERR "%" ;
            }
        }
    }

    ##  Set an alarm timer for when xsel is to be polled again.
    ualarm($pollinterval) ;
    return 1 ;
}

sub new_record  {

    my $md5 = shift ;
    my $file = shift ;

    ##  The label is based on the entries first line only.
    my ($label) = $file->lines_utf8( {count => 1} ) ;
    return 0 if not $label ;

    chomp $label ;
    unidecode $label ;

    if ($file->lines > 1)  {

        ##  multiple lines
        $label = format_label($label) ;
        $label = substr $label, 0, $max_chars ; 
        return { md5 => $md5,  label => $label } ;

    } elsif ($label =~ m{^/} and -e $label) {

        ##  a single line, and it looks like a filename
        $label = abbrev_path($label) ;
        $label = format_label($label) ;
        return { md5 => $md5,  label => $label } ;

    } elsif ($label =~ m{^http[s]?://(\w.*)$} )  {

        ##  a single line, and it looks like an url
        $label = substr $1, 0, $max_chars ;
        $label = format_label($label) ;
        return { md5 => $md5,  label => $label } ;

    } else {

        ##  a single line, but neither a filename nor url.
        $label = substr $label, 0, $max_chars ; 
        $label = format_label($label) ;
        return { md5 => $md5,  label => $label } ;
    } 
}


##  Special chars tend to trip up fvwm when a menu is defined.
##  This sub formats the chars in a label such that the text
##  is printed almost correctly in the menu. Also trying to avoid
##  becoming a perl unicode ninja.

sub format_label  {
    my $label = shift ;
    for ($label)  {
        tr/$/ / ;  
        s/([\[\]\#\'\*\?\^`!@;])/\\$1/g ;
        s/&/&&/g ; 
        s/\s+/ /g ;
        s/^\s*$/-/ ;
    }
    return $label ;
}

##  Filepaths can be very long. So this sub reduces a filepath
##  to a shorter string.
sub abbrev_path  {
    my $name = shift ;

    while ( length($name) > $max_chars and
            $name =~ s!/([^/])[^/]+/!/$1/! ) { }

    my $num = length($name) - $max_chars ;
    $name = "..." . substr($name, $num+3) if $num > 0 ;
    return $name ;
}

##  Generate fvwm cmnds to define clipmenu, then run it.
sub cb_menu {

    addcmd("DestroyMenu ClipMenu") ;
    addcmd("AddToMenu ClipMenu \"$menu_title\" Title") ;

    ##  One menu entry for each item in @records.
    for (my $idx = 0 ; $idx <= $#records ; $idx++)  { 
        my $rec = $records[$idx] ;
        my $cmnd = "+ \'$rec->{label}\' " ; 
        $cmnd .= "SendToModule $modname copy $idx" ;
        addcmd($cmnd) ;  
    }

    ##  Divider line and a clear history entry.
    addcmd('+ "" Nop') ;
    my $cmnd = '+ "Clear history" ' ;
    $cmnd   .= "SendToModule $modname clear " ;
    addcmd($cmnd) ;  

    ## Move the cursor aside, and open the clipboard menu.
    addcmd("WindowId root WarpToWindow 50 10") ;
    addcmd("Menu ClipMenu Root c c Nop") ;
    
    sendcmds() ;
}

##  Verifies that a file and md5sum value match. 
##  Success == 1, Fail == 0
sub verify_md5  {

    my $md5 =shift ;
    my $file = shift ;

    my @cmd1 = ("md5sum", $file) ;
    my $in = my $out = my $err = "" ;
    my $t = timeout($shelltimeout) ;
    my $excp = try {
        run \@cmd1, \$in, \$out, \$err, $t ;
    } catch { "" } ;

    if ($err or not $excp) {
        say STDERR "%" ;
        return 0 ;
    }

    my $md5out = $out ;
    chomp $md5out ;
    $md5out =~ s/\s.+$// ;

    return 0 unless $md5 eq $md5out ;
    return 1 ;

}

##  This sub calculates the md5sum for the current entry in the
##  system clipboard. Xsel cmnds take longer when the system is
## loaded, and may not complete at all, so the xsel cmnd is
##  implemented with timeout + exception handler.

sub get_xsel_md5  {
    my @cmd1 = ("xsel", "-ob") ;
    my @cmd2 = qw( md5sum ) ;
    my $out = my $err = "" ;
    my $t = timeout($shelltimeout) ;
    my $excp = try {
        run \@cmd1, '|', \@cmd2,  \$out, \$err, $t ;
    } catch { "" } ;

    if ($err or not $excp) {
        say STDERR "~" ;
        return 0 ;
    }
    chomp $out ;
    $out =~ s/\s.+$// ;
    return $out ;
}


##  When the system clipboard has a new entry, this sub stores the
##  clipboard contents to a file.

sub store_current_xsel  {
    my $filex = shift ;
    my @cmd = ("xsel", "-ob") ;
    my $t = timeout($shelltimeout) ;
    my $excp = try {
        run \@cmd, ">>", $filex, $t ;
    } catch { "" } ;
}

##  When an item is selected from the clipboard menu, this sub is
##  called, with an index to the desired clipboard entry. The relevant
##  entry is found, and pushed to the system clipboard.

sub xselcopy  {
    my $idx = shift ;
    my $md5 = $records[$idx]->{md5} ;
    my $filex = "$dir/$md5" ;
    my $t = timeout($shelltimeout) ;

    my @cmd = ("pkill", "xsel") ;
    my $excp = try {
        run \@cmd, $t ;
    } catch { "" } ;

    @cmd = ("xsel", "-ib") ;
    $excp = try {
        run \@cmd, "<", $filex, $t ;
    } catch { "" } ;
}

sub clear_history {
    @records = () ; 
    system("rm $dir/* 2>/dev/null") ;
    system("mkdir $dir 2>/dev/null") ;
    system("echo -- |timeout $shelltimeout xsel -ib") ;
}

sub cb_dump { dump \@records }

##  addcmd() and sendcmds() are used to queue fvwm commands, and
##  the send them to fvwm.

sub addcmd   { push @cmds, $_[0] } ;

sub sendcmds {
    foreach (@cmds) { $module->send($_) } ;
    @cmds = () ;
}

Last edited by daggoth (2016-01-06 09:25:33)

Offline

#10 2016-01-06 15:43:14

PackRat
jgmenu user Numero Uno
Registered: 2015-10-02
Posts: 1,438

Re: Fvwm Window Manager - share configs, functions, all that jazz.

^ another nice perl extension.


You must unlearn what you have learned.
    -- yoda

Offline

#11 2016-02-04 14:45:12

shot-in-the-head
Member
Registered: 2015-10-28
Posts: 61

Re: Fvwm Window Manager - share configs, functions, all that jazz.

does this wm do basic tiling of windows too?

Offline

#12 2016-02-04 18:27:54

PackRat
jgmenu user Numero Uno
Registered: 2015-10-02
Posts: 1,438

Re: Fvwm Window Manager - share configs, functions, all that jazz.

Sort of.

There is a module FvwmRearrange which can be used to rearrange windows on the fly, or there are some tiling configurations for fvwm that make use of window movement functions - FvwmPiazza is a module you can get from CPAN for tiling.


You must unlearn what you have learned.
    -- yoda

Offline

#13 2016-02-04 19:07:14

shot-in-the-head
Member
Registered: 2015-10-28
Posts: 61

Re: Fvwm Window Manager - share configs, functions, all that jazz.

Thanks for the links, might give it another try, I do remember trying it briefly a while ago but was daunted by the complexity and possibilities ---so many!  I think you need a bit of spare time on your hands to tackle this one.

Offline

#14 2016-10-08 21:08:55

daggoth
Member
Registered: 2016-01-02
Posts: 26

Re: Fvwm Window Manager - share configs, functions, all that jazz.

When your fvwmrc gets too large, vim-folding is your friend - webm.

Offline

#15 2017-01-01 22:21:50

jalexander9
Member
Registered: 2015-11-08
Posts: 152

Re: Fvwm Window Manager - share configs, functions, all that jazz.

Alright, a New Year, I will make a separate Debian Jessie minimal build using the Fvwm as you suggest! I will try your versions if you don't mind? First, PackRat, then daggoth okay?

Offline

#16 2017-01-01 22:24:06

jalexander9
Member
Registered: 2015-11-08
Posts: 152

Re: Fvwm Window Manager - share configs, functions, all that jazz.

But, some of those screenshots (above) are missing, I trust all is well nonetheless!

Offline

#17 2017-01-07 20:05:17

jalexander9
Member
Registered: 2015-11-08
Posts: 152

Re: Fvwm Window Manager - share configs, functions, all that jazz.

This is really great work, Pack Rat. I'm sure it took quite a while to design and code such a great custom window-manager!
It has taken a week in some free time sessions to tweak and get it up and running. I love it.

I was really impressed with daggoth's perl-extension - a customized and automatic clip-it application, also great work!

Further proof of an innovative and vibrant open-source development community. Bravo!

Offline

#18 2017-01-07 21:02:09

PackRat
jgmenu user Numero Uno
Registered: 2015-10-02
Posts: 1,438

Re: Fvwm Window Manager - share configs, functions, all that jazz.

jalexander9 wrote:

But, some of those screenshots (above) are missing, I trust all is well nonetheless!

It's all good. I just deleted some screenshots from the hosting site so the link is broken.

I'll have to frop my current Fvwm config here when I get a chance.


You must unlearn what you have learned.
    -- yoda

Offline

#19 2017-01-07 22:42:42

daggoth
Member
Registered: 2016-01-02
Posts: 26

Re: Fvwm Window Manager - share configs, functions, all that jazz.

jalexander9 wrote:

I will try your versions if you don't mind? First, PackRat, then daggoth okay?

My most recently posted config was here - pic, webm, fvwmrc. I won't be adding further to it until the new fvwm3 syntax has arrived.

My config is experimental, messy - seeing what works and does not. But pieces of it like the system-monitor or clipmenu might be added to anyones fvwmrc.

I see that the latest fvwm has a new default-config for the curious - here.

Offline

#20 2017-01-08 00:34:05

PackRat
jgmenu user Numero Uno
Registered: 2015-10-02
Posts: 1,438

Re: Fvwm Window Manager - share configs, functions, all that jazz.

I see that the latest fvwm has a new default-config for the curious - here.

which is pretty much what I'm using -

scrot-shot-Sat_7_1483835405.th.jpg

just some color changes to the default panel - by default it's the same green as the focused titlebar, and some font changes.

until the new fvwm3 syntax has arrived

Can you elaborate on this? I've seen some references to Fvwm3 coming out, but haven't investigated any further.


You must unlearn what you have learned.
    -- yoda

Offline

#21 2017-01-08 03:25:36

daggoth
Member
Registered: 2016-01-02
Posts: 26

Re: Fvwm Window Manager - share configs, functions, all that jazz.

PackRat wrote:

Can you elaborate on this? I've seen some references to Fvwm3 coming out, but haven't investigated any further.

From the mailing-list :-

ThomasAdam wrote:

To that end, the latest stable release (2.6.7) marks the end of the line for fvwm2.  This release is unique because it was my opportunity to remove all of the modules which I thought were no longer providing anything useful (because the functionality no longer exists outside of fvwm in certain applications, or because more widely-used modules in fvwm provided equivalent/better funtionality).  Indeed, this releases also includes a new default configuration.  I hope you find it useful.

In fact, I'm not envisaging any further work happening on fvwm2.X at all.  So what does this mean for fvwm?  In order for us to continue to make larger changes, we need to be able to break backwards compatibility and to make a lot of structural changes.  All of this goes towards a lot of other changes we'd like to make.  This therefore means that we will look at fvwm3 to do this.  This will be different to fvwm2.

So they have tied off fvwm2, and are now working on fvwm3. It may take a while. It seems that parts of the fvwm codebase are currently a mess. But by changing the fvwm syntax, the fvwm codebase can be made smaller and cleaner. Such that the development  of fvwm can continue forward indefinitely.

Initially, this code rewrite will neither add nor remove features from FVWM. A conversion script will be provided to update old configs. But I have placed my fvwm-2.6.7 package on hold for now - I expect some breakage when fvwm3 arrives.

Other links :-

Aspirational goals for fvwm3 - here

New format - here

Thread about new format - http://www.mail-archive.com/fvwm@fvwm.org/msg03023.html

Last edited by daggoth (2017-01-08 07:48:26)

Offline

Board footer

Powered by FluxBB