# you need to edit these path, otherwise BowMan won't work
# make sure the "icons" directory is current

##########################################################################
# Module path 
# ModulePath is a colon-separated list, just like regular unix PATH
ModulePath /home/staff/pp/bowman
PixmapPath	    /usr/include/X11/pixmaps/:/home/staff/pp/bowman/icons
IconPath	    /usr/include/X11/bitmaps/:/home/staff/pp/bowman/icons


##########################################################################
# NeXSTEP(tm) look  related stuff
# don't touch it.
StdForeColor 		white
StdBackColor 		#c0c0c0
HiForeColor 		white
HiBackColor 		#000080
MenuBackColor	grey70
MenuForeColor	Black
Font                    -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*
WindowFont              -adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*
NoBoundaryWidth 0
BoundaryWidth 8
Module Wharf 
NoTitle Wharf
NoBorder Wharf
Sticky Wharf
StaysOnTop Wharf
WindowListSkip Wharf
Mouse 0         1       A       Iconify 
Mouse 0         2       A       Destroy 
*WharfGeometry 384x63+1-1
*WharfRows 1 
IconBox 0 -2 -1 -1
# end NextStep section
##########################################################################

##########################################################################
# customize your wharf (read: dock)
*Wharf start barstart.xpm Exec "-" xterm &
*Wharf clock   nil   Swallow "xclock" xclock -bg "#00001f" -geometry 45x45-1-1 -fg "gold" -hd "gold" -hl "gold" -padding 0 &
# xdip: Linux dip (SLIP) status/control icon
# *Wharf xdip    nil   Swallow "xdip" xdip 
*Wharf xbiff   nil   Swallow "xbiff" xbiff -bg "#8e8a9e" -fg "#00003f" -geometry 45x45-1-1
*Wharf term term.xpm   Exec "-" xterm &
*Wharf xv   monalisa.xpm   Exec "-" xv &
*Wharf button paint.xpm Exec "-" xpaint &
*Wharf Netscape netscape.xpm Exec "-" netscape
##########################################################################

###########################################################################
# set up the colors
#
PagerBackColor		#5c54c0
PagerForeColor		orchid

StickyForeColor		Black
StickyBackColor		#60c0a0

########################      FOCUS STUFF     ##############################
# Set windows to auto-raise after 750 milliseconds if you like it.
# Autoraise can sometimes obscure pop-up windows. Performance is now
# similar to olvwm's auto-raise feature.
#AutoRaise 750

# Normally, we'll be in focus-follows mouse mode, but uncomment this 
# for mwm-style click-to-focus
ClickToFocus

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

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

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

########################      MWM HINTS     #######################
#
# 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.
MWMFunctionHints

# 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.
MWMDecorHints

########################      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, opaque move is used. 0 <= N <= 100
OpaqueMove 50
#OpaqueResize

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

# 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 250 50


########################      WINDOW PLACEMENT     #######################
# RandomPlacement prevents user interaction while placing windows:
# RandomPlacement

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

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

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


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

##########################################################################
# Modules to be launched during initialization go here
#Module Wharf



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

#set the desk top size in units of physical screen size
DeskTopSize 1x1

# and the reduction scale used for the panner/pager
DeskTopScale 32

# Use the Fvwm Pager
#Pager -5 -5

############################################################################
# list the windows that don't want a title bar
NoTitle xclock
NoTitle Clock
NoTitle xbiff

###########################################################################
# Here's where I could list NoBorder windows that don't get frames.
# If a window shows up with NoTitle and NoBorder, it gets a simple frame
# whose width is specified by the NoBoundaryWidth option (can be 0).
#
# When windows are NoBordered, they look a bit like twm is handling them
# NoBorder xclock
NoBorder xclock
##########################################################################
# now the windows that "Stick to the glass", ie don't scroll with the
# desktop
# The pager is automatically sticky


############################################################################
# now list windows that want to "stay on top," ie stay visible until
# explicitly lowered
# I got tired of this, except for the pager.
StaysOnTop xclock


############################################################################
# now list windows that don't need to show up in the window list
WindowListSkip Clock
WindowListSkip xbiff
WindowListSkip xcloc
WindowListSkip Pager


############################################################################
# define some common icon bitmaps

# These are the color icons.
# Of course, you need to change the directory to the one where they
# really live.
# Keep m4 from barfing on my icon and bitmap paths
# undefine(`include')

Icon "rxvt"         term.xpm
Icon "xterm"        term.xpm
Icon "xcalc"        xcalc.xpm
Icon "xman"	    xman.xpm

############################################################################
# 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
Function "Move-or-Raise"
	Move 		"Motion"
	Raise		"Motion"
	Raise		"Click"
	RaiseLower	"DoubleClick" 
EndFunction

# This one maximizes vertically if you click (leaving room for the Wharf 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.
Function "maximize_func"
	Maximize	"Motion" 0 100
	Maximize	"Click" 0 92
	Maximize	"DoubleClick" 100 100
EndFunction


# 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
Function "Move-or-Lower"
	Move 		"Motion"
	Lower		"Motion"
	Lower		"Click"
	RaiseLower	"DoubleClick"
EndFunction

# This one moves or (de)iconifies:
Function "Move-or-Iconify"
	Move 		"Motion"
	Iconify		"DoubleClick"
EndFunction

# 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
Function "Resize-or-Raise"
	Resize 		"Motion"
	Raise		"Motion"
	Raise		"Click"
	RaiseLower	"DoubleClick"
EndFunction


# 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
#Function "abs_coord"
#	GoToPage "Immediate"	1,1
#	Exec	"Immediate"	exec xcalc -geometry +100+100&
#EndFunction


##############################################################################
#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.
Popup "Quit-Verify"
	Title	"Quit?"
	Quit	"Yes, Quit&Q"
	Restart "Restart&R"	bowman
	Nop	"No, Don't&N"
EndPopup

# Provides a list of modules to fire off
Popup "Module-Popup"
	Title	"Modules"
	Module	"Wharf"	Wharf
	Module	"Clean-Up"	FvwmClean
	Module	"Identify"	FvwmIdent
	Module  "SaveDesktop"   FvwmSave
	Module	"Debug"		FvwmDebug
EndPopup

# This menu will fire up some very common utilities
Popup "Utilities"
	Title 	"Utilities"
	Exec    "Xterm&x"		exec xterm -bg white -fg black &
	Exec    "Top&t"		exec rxvt -T Top -n Top -e top &
	Exec	"Calculator&c"	exec xcalc &
#	Exec	"Xman&m"		exec xman &
	Exec	"Xma&gg"		exec xmag &
#	Nop	""
	Popup	"Modules"	Module-Popup
#	Nop	""
	Refresh	"Refresh&r"
	Popup	"Quit&q"	Quit-Verify
EndPopup

# This defines the most common window operations
Popup "Window Ops2"
	Title		"Window Ops2"
	Function	"Move" 			Move-or-Raise
	Function 	"Resize" 		Resize-or-Raise
	Raise   	"Raise"
	Lower   	"Lower"
	Iconify 	"(De)Iconify" 
	Stick		"(Un)Stick"
	Maximize 	"(Un)Maximize"
#	Nop     	""
	Destroy 	"Destroy"
	Delete  	"Delete"
EndPopup

# A trimmed down version of "Window Ops", good for binding to decorations
Popup "Window Ops"
	Title		"Window Ops2"
	Function 	"Move" 			Move-or-Raise
	Function  	"Resize" 		Resize-or-Raise
	Raise   	"Raise"
	Lower   	"Lower"
	Iconify 	"Iconify"
	Stick		"(Un)Stick"
	Nop     	""
	Destroy 	"Destroy"
	Delete  	"Delete"
EndPopup

#############################################################################
# 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
Function "window_ops_func"
	PopUp 	"Click"		Window Ops
	PopUp	"Motion"	Window Ops2
# Motif would add
#       Delete  "DoubleClick"  
EndFunction


##############################################################################
# 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       PopUp "Utilities"
Mouse 2		R    	A      	PopUp "Window Ops"
Mouse 3		R    	A      	WindowList


# 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		FS	A	Function "Resize-or-Raise"
# Button 1 in the title, sides, or icon, w/ any modifiers, gives move or raise
Mouse 1		T	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

######################### 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
*FvwmIdentifyBack MidnightBlue
*FvwmIdentifyFore Yellow
*FvwmIdentifyFont -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*
