###########################################################################
# set up the colors
#
#
Style "*" ForeColor PeachPuff
Style "*" BackColor DarkSlateBlue
Style "*"             BorderWidth 5, HandleWidth 5
Style "*"             SmartPlacement
Style "*"             StickyIcon
Style "*"             IconBox -70 150 -1 -140

# this is used for the selected window
# Set the foreground and background color for selected windows
HilightColor   Black gray45

MenuStyle   PeachPuff DarkSlateBlue DarkSlateGray -adobe-times-medium-i-*-*-*-140-*-*-*-*-*-* fvwm


############################################################################
# Now the fonts - one for menus, another for window titles, another for icons
WindowFont		-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*
#IconFont		-adobe-helvetica-medium-r-*-*-11-*-*-*-*-*-*-*
IconFont		fixed

###########################################################################
# Set up the major operating modes
#
########################      FOCUS STUFF     ##############################
# Normally, we'll be in focus-follows mouse mode, but uncomment this 
# for mwm-style click-to-focus
#Style "*" ClickToFocus

# If you uncomment this, and make sure that the WindowList is bound to
# something, it works pretty much like an icon manager.
# Style "*" SuppressIcons

# StubbornIcons makes icons de-iconify into their original position on the
# desktop, instead of on the current page.
# Style "*" StubbornIcons

# With AutoPlacement, icons will normally place themselves underneath active
# windows. This option changes that.
# Style "*" StubbornIconPlacement

# If you want ALL you icons to follow you around the desktop (Sticky), try
# this
# Style "*" StickyIcons

########################      MWM EMULATION     #######################
#
# My feeling is that everyone should use MWMDecorHints and MWMFunctionHints,
# since some applications depend on having the window manager respect them
#
# MWMFunction hints parses the function information in the MOTIF_WM_HINTS
# property, and prohibits use of these functions on the window. Appropriate
# portions of the window decorations are removed.
Style "*" MWMFunctions

# MWM is kinda picky about what can be done to transients, and it was keeping
# me from iconifying some windows that I like to iconify, so here's an
# over-ride that will allow me to do the operation, even tough the menu
# item is shaded out.
Style "*" HintOverride

# MWMDecor hints parses the decoration information in the MOTIF_WM_HINTS
# property, and removes these decoratons from the window. This does not affect
# the functions that can be performed via the menus.
Style "*" MWMDecor

# These are affect minor aspects for the look-and-feel.
# Sub-menus placement mwm-style?
# MWMMenus
# mwm-style border reliefs (less deep than default fvwm) ?
# MWMBorders
# Maximize button does mwm-inversion thingy
# MWMButtons
########################      MISCELLANEOUS STUFF     #######################
# If you don't like the default 150 msec click delay for the complex functions
# change this and uncomment it.
#ClickTime 150

# OpaqueMove has a number (N) attached to it (default 5).
# if the window occupies less than N% of the screen, 
# then opaque move is used. 0 <= N <= 100
# OpaqueMove 100

# flip by whole pages on the edge of the screen.
EdgeScroll 100 100

# A modest delay before flipping pages seems to be nice...
# I thresh in a 50 pixel Move-resistance too, just so people
# can try it out.
EdgeResistance 1000 50


########################      WINDOW PLACEMENT     #######################
# RandomPlacement prevents user interaction while placing windows:
# Style "*" RandomPlacement

# SmartPlacement makes new windows pop-up in blank regions of screen 
# if possible, or falls back to random or interactive placement.
Style "*" SmartPlacement

# With SmartPlacement, windows will normally place themselves over icons. 
# Uncomment this to change that.
# Style "*" StubbornPlacement

# NoPPosition instructs fvwm to ignore the PPosition field in window 
# geometry hints. Emacs annoyingly sets PPosition to (0,0)!
Style "*" NoPPosition


########################      DECORATIONS     #######################
# If you want decorated transient windows, uncomment this:
# Style "*" DecorateTransients


###########################################################################
# Set up the virtual desktop and pager

#set the desk top size in units of physical screen size
DeskTopSize 2x2

##########################################################################
# Module path and paths to the icons
#
# ModulePath is a colon-separated list, just like regular unix PATH
############################################################################
ModulePath /lusr/X11/lib/X11/fvwm/2.2.2
PixmapPath /lusr/X11/include/X11/pixmaps:/lusr/X11/lib/X11/twm/images
IconPath /lusr/X11/include/X11/bitmaps

# Set the decoration styles and window options
# Order is important!!!!
# If compatible styles are set for a single window in multiple Style
# commands, then the styles are ORed together. If conflicting styles
# are set, the last one specified is used.

# These commands should command before any menus or functions are defined,
# and before the internal pager is started.

# change the default width.
Style "*" BorderWidth 5, HandleWidth 5, Icon unknown1.xpm

Style "Fvwm*"      NoTitle, NoHandles, Sticky, WindowListSkip,BorderWidth 0
Style "Fvwm Pager" StaysOnTop
Style "FvwmPager"  StaysOnTop
Style "FvwmBanner" StaysOnTop
Style "FvwmButtons"  NoTitle, NoHandles, Sticky, WindowListSkip,BorderWidth 0
Style "xbiff"      NoTitle, Sticky, WindowListSkip
Style "oclock"     NoTitle, Sticky, WindowListSkip
Style "xclock"     NoTitle, Sticky, WindowListSkip
Style "XTerm"      Icon xterm.xpm
Style "Mail"	   Icon mail2.xpm
Style "Ncftp	   Icon xftp.xpm
Style "xarchie"    Icon xarchie.xpm
Style "Appointment" Icon datebook.xpm, NoButton 2, NoButton 4
Style "xcalc"      Icon xcalc.xpm, NoButton 2
Style "xbiff"      Icon mail1.xpm, NoButton 2
Style "xman"	   Icon xman.xpm
Style "xmag"	   Icon mag_glass.xpm
Style "FvwmButtons"  Icon toolbox.xpm

# Change the Maximize and iconify buttons to up and down triangles.

ButtonStyle 2 4 50x35@1 65x65@0 35x65@0 50x35@1
ButtonStyle 4 4 50x65@1 35x35@1 65x35@1 50x65@0

#############################################################################

# Stuff to do at start-up

AddToFunc "InitFunction" "I" Module FvwmBanner
+              "I" Exec xsetroot -solid midnightblue
+              "I" Module FvwmButtons

AddToFunc "RestartFunction" "I" Module FvwmButtons


############################################################################
# Now define some handy complex functions

# This one moves and then raises the window if you drag the mouse,
# only raises the window if you click,  or does a RaiseLower if you double 
# click
AddToFunc Move-or-Raise		"M" Move
+              			"M" Raise
+              			"C" Raise
+              			"D" RaiseLower

# This one maximizes vertically if you click (leaving room for the GoodStuff bar at the
# bottom, or does a full maximization if you double click, or a true full vertical 
# maximization if you just hold the mouse button down.
AddToFunc maximize_func		"M" Maximize 0 100
+              			"C" Maximize 0 80
+              			"D" Maximize 100 100


# This one moves and then lowers the window if you drag the mouse,
# only lowers the window if you click,  or does a RaiseLower if you double 
# click
AddToFunc Move-or-Lower		"M" Move
+              			"M" Lower
+              			"C" Lower
+              			"D" RaiseLower

# This one moves or (de)iconifies:
AddToFunc Move-or-Iconify	"M" Move
+              			"D" Iconify

# This one resizes and then raises the window if you drag the mouse,
# only raises the window if you click,  or does a RaiseLower if you double 
# click
AddToFunc Resize-or-Raise	"M" Resize
+              			"M" Raise
+              			"C" Raise
+              			"D" RaiseLower


# This is provided as a hint only.
# Move to a known page on the desktop, then start an application in a 
# known location. Could also switch to a known desktop, I guess
#AddToFunc abs_coord
#+	GoToPage "Immediate"	1,1
#+	Exec	"Immediate"	exec xcalc -geometry +100+100&


##############################################################################
#now define the menus - defer bindings until later

# This menu is invoked as a sub-menu - it allows you to quit,
# restart, or switch to another WM.
AddToMenu Quit-Verify	"Really Quit Fvwm?" Title
+              		"Yes, Really Quit" Quit
+              		"Restart Fvwm2" Restart fvwm2
+              		"Start twm" Restart twm
+              		"Start tvtwm" Restart tvtwm
+              		"Start mwm" Restart mwm
+              		"" Nop
+              		"No, Don't Quit" Nop

# Provides a list of modules to fire off
AddToMenu Module-Popup	"Modules" Title
+			"Animate" Module FvwmAnimate
+              		"Button-Bar" Module FvwmButtons
+              		"Identify" Module FvwmIdent
+              		"SaveDesktop" Module FvwmSave
+              		"Debug" Module FvwmDebug
+              		"Pager" Module FvwmPager 0 1
+              		"FvwmWinList" Module FvwmWinList
+                       "Background" Module FvwmBacker
+                       "IconBox" Module FvwmIconBox
+                       "Banner" Module FvwmBanner
+                       "Talk" Module FvwmTalk
+                       "Prompt" Module FvwmPrompt "hello" raise
+                       "Auto Raise" Module FvwmAuto 1000
+			"Task Bar" Module FvwmTaskBar
+			"Cascade" Module FvwmRearrange -cascade -incx 5 -incy 5


# This menu will fire up some very common utilities
AddToMenu Utilities	"Utilities" Title
+              		"Xterm" Exec exec xterm
+			"Netscape" Exec exec netscape
+              		"Calculator" Exec exec xcalc
+              		"Xman" Exec exec xman
+			"Xboing" Exec exec xboing 
+              		"Xmag" Exec exec xmag
+              		"" Nop
+              		"Modules" Popup Module-Popup
+              		"" Nop
+              		"Exit Fvwm" Popup Quit-Verify

# This defines the most common window operations
AddToMenu Window-Ops	"Window Ops" Title
+              		"Move" Function Move-or-Raise
+              		"Resize" Function Resize-or-Raise
+              		"Raise" Raise
+              		"Lower" Lower
+              		"(De)Iconify" Iconify
+              		"(Un)Stick" Stick
+              		"(Un)Maximize" Function maximize_func
+              		"" Nop
+              		"Destroy" Destroy
+              		"Close" Close
+              		"" Nop
+              		"Refresh Screen" Refresh

# A trimmed down version of "Window Ops", good for binding to decorations
AddToMenu Window-Ops2	"Move" Function Move-or-Raise
+              		"Resize" Function Resize-or-Raise
+              		"Raise" Raise
+              		"Lower" Lower
+              		"Iconify" Iconify
+              		"(Un)Stick" Stick
+              		"" Nop
+              		"Destroy" Destroy
+              		"Close" Close
+              		"" Nop
+              		"ScrollBar" Module FvwmScroll 2 2

#############################################################################
# One more complex function - couldn't be defined earlier because it used 
# pop-up menus
#
# This creates a motif-ish sticky menu for the title-bar window-ops
# pop-up
# Menu acts like normal twm menu if you just hold the button down,
# but if you click instead, the menu stays up, motif style
AddToFunc "window_ops_func" "C" Menu Window-Ops2
+              "M" Menu Window-Ops2
# Motif would add:
# I'll add it too, it can be mighty handy.
+              "D" Close


##############################################################################
# This defines the mouse bindings

# First, for the mouse in the root window
# Button 1 gives the Utilities menu
# Button 2 gives the Window Ops menu
# Button 3 gives the WindowList (like TwmWindows)
# I use the AnyModifier (A) option for the modifier field, so you can hold down
# any shift-control-whatever combination you want!

#     Button	Context Modifi 	Function
Mouse 1		R   	A       Menu Utilities Nop
Mouse 2		R    	A       Menu Window-Ops Nop
Mouse 3		R    	A      	WindowList



# Now the title bar buttons
# Any button in the left title-bar button gives the window ops menu
# Any button in the right title-bar button Iconifies the window
# Any button in the rightmost title-bar button maximizes
# Note the use of "Mouse 0" for AnyButton.

#     Button	Context Modifi 	Function
Mouse 0		1    	A      	Function window_ops_func
Mouse 0		2    	A     	Function maximize_func
Mouse 0		4    	A     	Iconify

# Now the rest of the frame
# Here I invoke my complex functions for Move-or-lower, Move-or-raise,
# and Resize-or-Raise. 
# Button 1 in the corner pieces, with any modifiers, gives resize or raise
Mouse 1		F	A	Function Resize-or-Raise
# Button 1 in the title, sides, or icon, w/ any modifiers, gives move or raise
Mouse 1		TS	A	Function Move-or-Raise

# Button 1 in an icons gives move for a drag, de-iconify for a double-click,
# nothing for a single click
# Button 2 in an icon, w/ any modifiers, gives de-iconify

Mouse 1		I	A	Function Move-or-Iconify
Mouse 2		I	A	Iconify

# Button 2 in the corners, sides, or title-bar gives the window ops menu
Mouse 2		FST	A	Function window_ops_func
# Button 3 anywhere in the decoration (except the title-bar buttons)
# does a raise-lower
Mouse 3		TSIF	A	RaiseLower

# Button 3 in the window, with the Modifier-1 key (usually alt or diamond)
# gives Raise-Lower. Used to use control here, but that interferes with xterm
Mouse 3         W       M       RaiseLower

############################################################################
# Now some keyboard shortcuts.

# Arrow Keys
# press arrow + control anywhere, and scroll by 1 page
Key Left	A	C	Scroll -100 0
Key Right	A	C	Scroll +100 +0
Key Up		A	C	Scroll +0   -100
Key Down	A	C	Scroll +0   +100

# press arrow + meta key, and scroll by 1/10 of a page
Key Left	A	M	Scroll -10 +0
Key Right	A	M	Scroll +10 +0
Key Up		A	M	Scroll +0   -10
Key Down	A	M	Scroll +0   +10

# press shift arrow + control anywhere, and move the pointer by 1% of a page
Key Left	A	SC	CursorMove -1 0
Key Right	A	SC	CursorMove +1 +0
Key Up		A	SC	CursorMove +0   -1
Key Down	A	SC	CursorMove +0   +1

# press shift arrow + meta key, and move the pointer by 1/10 of a page
Key Left	A	SM	CursorMove -10 +0
Key Right	A	SM	CursorMove +10 +0
Key Up		A	SM	CursorMove +0   -10
Key Down	A	SM	CursorMove +0   +10

# Keyboard accelerators
Key F1		A	M	Popup Utilities
Key F1		A	M	Popup Utilities
Key F2		A	M	Popup Window Ops
Key F3		A	M	WindowList
Key F4		A	M	Iconify
Key F5		A	M	Move
Key F6		A	M	Resize
Key F7		A	M	CirculateUp
Key F8		A	M	CirculateDown

#Page Up/Dapge Down keys are used to scroll by one desktop page
# in any context, press page up/down + control
# in root context, just pressing page up/down is OK
# 
# I prefer the non-wrapping scroll. These are for example purposes only
#Key Next	A       C       Scroll 100000 0
#Key Next	R       N       Scroll 100000 0  
#Key Prior	A       C       Scroll -100000 0
#Key Prior	R       N       Scroll -100000 0


############################################################################
############################################################################
#Definitions used by the modules

###################### FvwmButtons button-bar ################################
# Colors
*FvwmButtonsFore Black
*FvwmButtonsBack #908090

# Font
*FvwmButtonsFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*
# Geometry - really likes to pick its own size, but giving a position is OK
*FvwmButtonsGeometry -1-1

# Layout: specify rows or columns, not both
*FvwmButtonsRows 3

# Define the buttons to use.....
*FvwmButtons(Title Kill, Icon rbomb.xpm, Action "Destroy")

# xterm on remote machines can be done like this
# Output re-direction is csh style, not sh style
# You will want to substitute your own hosts here!

*FvwmButtons(Title xterm, Icon xterm.xpm, Action `Exec "" xterm`)
# *FvwmButtons(Title archie, Icon xarchie.xpm, Action `Exec "" xarchie &`)
*FvwmButtons(Title Netscape, Icon netscape3.xpm, Action `Exec "" netscape &`)
*FvwmButtons(Title ncftp, Icon xftp.xpm, \
	Action `Exec "" xterm -T ncftp -name Ncftp -e ncftp &`)
*FvwmButtons(2x3, Swallow "xclock" \
	`Exec xclock -bg '#908090' -geometry -1500-1500 -padding 0`)
*FvwmButtons(4x2, Swallow "FvwmPager" `FvwmPager 0 1`)


######################### No Clutter ########################################
# I only wrote NoClutter as a simple test case, but maybe some big sites like
# universities really have usage problems (too many open windows)....
# Time delays are in seconds.
*FvwmNoClutter 3600 Iconify 1
*FvwmNoClutter 86400 Delete
*FvwmNoCLutter 172800 Destroy

########################## Window-Identifier ###############################
# Just choose colors and a fonts
*FvwmIdentBack MidnightBlue
*FvwmIdentFore Yellow
*FvwmIdentFont -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*

########################### Pager #########################################
*FvwmPagerBack          #5c54c0
*FvwmPagerFore	 #cab3ca
*FvwmPagerFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*
*FvwmPagerHilight  orchid
*FvwmPagerGeometry -1-1
*FvwmPagerLabel 0 Misc
*FvwmPagerSmallFont 5x8
*FvwmPagerBalloons
*FvwmPagerBalloonFore black
*FvwmPagerBalloonBack yellow

##########################FvwmWinList##################################
*FvwmWinListBack #908090
*FvwmWinListFore Black
*FvwmWinListFont -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*
*FvwmWinListAction Click1 Iconify -1,Focus
*FvwmWinListAction Click2 Iconify
*FvwmWinListAction Click3 Module "FvwmIdent" FvwmIdent
*FvwmWinListUseSkipList
*FvwmWinListGeometry +0-1

##########################FvwmAnimate##################################
*FvwmAnimateEffect Random

##########################FvwmTaskBar##################################
*FvwmTaskBarAutoStick
*FvwmTaskBarShowTips
*FvwmTaskBarUseSkipList
*FvwmTaskBarStartName Utilities
*FvwmTaskBarStartMenu "Utilities"
*FvwmTaskBarStartIcon mini-x.xpm
*FvwmTaskBarAction Click1 Iconify -1, Raise
*FvwmTaskBarAction Click2 Iconify +1, Lower
*FvwmTaskBarAction Click3 Iconify -1, Raise
