########
#set Environment variables
SetEnv fvwm_img $[FVWM_USERDIR]/images
SetEnv fvwm_icon $[FVWM_USERDIR]/icons
SetEnv fvwm_scrpt $[FVWM_USERDIR]/scripts
SetEnv fvwm_wallpapers $[FVWM_USERDIR]/wallpaper
SetEnv fvwm_webbrowser /usr/bin/firefox
SetEnv fvwm_term /usr/bin/urxvtc
SetEnv fvwm_mail /usr/bin/mutt
#SetEnv fvwm_media_player /usr/bin/xmms
SetEnv fvwm_video_player /usr/bin/mplayer
#这部分设置fvwm的一些变量,这样方便以后如果有变化的话,不需要全文去修改,只修改这里就可以了。
#后面使用 $[var_name] 来引用
##################################

#####
# Set the image path
#ImagePath +:$HOME/.fvwm/icons:
ImagePath $[fvwm_icon]:$[fvwm_icon];.png:$[fvwm_wallpapers]:+
#设置图片路径,没有指明路径的图片来这里查找。
#可以使用变量指定。
##################################
#####
# Virtual Desktops
DesktopSize 3x1
DesktopName 0 Main
DesktopName 1 Work
DesktopName 2 Games
EdgeThickness 1
EdgeScroll 0 0
EdgeResistance 250 100
#DesktopSize 设置桌面大小和数目,3x1表示三个桌面,每个桌面1页。水平方向上面切换的是桌面,竖直方向上面是一个桌面内部切换。
#DesktopName 设置各个桌面的名称。
#EdgeScroll 设置拖动窗口到桌面左右两边上时,百分之多少的桌面开始滚动切换到下一个。0表示不滚动。
#EdgeResistance scrolling moving 这是用来设定当滑鼠游标碰触到萤幕的边界的时候,FVWM应该要如何动作。scrolling 是告诉FVWM当滑鼠游标碰触到萤幕边界多少milliseconds之後,才会移动目前的工作桌面。moving则是设定当视窗超出画面多少像点之後,才要切换目前的工作桌面到别的桌面上。
#EdgeThickness 设置当 EdgeScroll 效果出现的时候,桌面的周围显示的边框线的像素。
################################
#####
# Mouse and Focus Behavior
###########
ClickTime 350
MoveThreshold 3
Style * SloppyFocus,MouseFocusClickRaises
IgnoreModifiers L25
#ClickTime 设置fvwm认为是单击的按下鼠标和放开鼠标的时间间隔,单位是毫秒。如果超出这个时间,就认为是“hold”。
#MoveThreshold 设置移动几个像素的时候,fvwm才认为你是在移动窗口。上面这些主要是后面在写函数的时候有用,那里对不同的操作响应不同的动作。
#style 用来给fvwm里面配置各种各样的风格,比如你想让窗口如何响应动作,窗口显示的内容、外观等。 * 是一个通配符,表示所有窗口。第三个参数是风格参数,用逗号间隔。SloppyFocus 表示当鼠标进入窗口的时候窗口就获得焦点,但是除去root window等一些特殊窗口(比如conky的窗口,你不希望他获得焦点吧)。和他同类的,比如还有ClickFocus,表示当鼠标单击窗口的时候窗口获得焦点,这些都可以查 fvwm 的man page可以看到,同类的属性一般用 / 间隔。
# style里面的选项很多都可以直接从字面理解其意思,关于style的其他选项的意思就去看看man page吧,后面涉及到这部分的也不多讲了。
################################
############ default Styles: ####################
Style * BorderWidth 1, HandleWidth 1, DepressableBorder
Style * MWMFunctions, MWMDecor, MWMButtons, HintOverride
Style * DecorateTransient, NoPPosition, SmartPlacement
Style * Font "xft:Sans:Bold:pixelsize=12:minispace=True:encoding=iso10646-1"
Style * HilightFore black, HilightBack gainsboro
Style * IconBox 0 0 200 -260, IconFill t l, StickyIcon
Style * WindowShadeShrinks, WindowShadeSteps 100
#Style "beep*" Icon bmp.xpm, MiniIcon i_bmp.xpm
#Style "Firefox*" Icon firefox.xpm, MiniIcon i_firefox.xpm
#Style "Gaim" Icon gaim.xpm, MiniIcon i_gaim.xpm
#Style "gqview" Icon gqview.xpm, MiniIcon i_gqview.xpm
#Style "rox" Icon rox.xpm, MiniIcon i_rox.xpm
#Style "stardict" Icon stardict.xpm MiniIcon i_stardict.xpm
#Style "urxvt" Icon rxvt.xpm, MiniIcon i_term.xpm
#Style "gvim" Icon vim.xpm, MiniIcon i_vim.xpm
#Style "Xpdf" Icon xpdf.xpm, MiniIcon i_xpdf.xpm
#####
# Basic Functions
#
#fvwm 里面的函数格式类似下面的,先用 DestroyFunc 清除掉可能已经应用的效果,然后用 AddToFunc 来创建新的。
#在别的地方调用函数的时候可以使用 FuncName "$0" "$1" "$2" "$3" "$4" ,$0-4是传递给这个函数的参数,可以在函数里面引用。
#
# DestroyFunc FuncName
# AddToFunc FuncName
# + I (立即执行的动作)
# + C (鼠标单击时执行的动作)
# + D (鼠标双击时执行的动作)
# + H (鼠标 hold 时执行的动作)
# + M (鼠标 motion 时执行的动作)
#
###########
DestroyFunc FvwmDeleteOrDestroy
AddToFunc FvwmDeleteOrDestroy
+ H Nop
+ M Nop
+ C Delete
+ D Destroy
# 在单击的时候 Delete 窗口,在双击的时候 Destroy 窗口。Nop表示不动作。
DestroyFunc FvwmIconifyOrShade
AddToFunc FvwmIconifyOrShade
+ C Iconify
+ D WindowShade
DestroyFunc FvwmMaximize
AddToFunc FvwmMaximize
+ H Nop
+ M Nop
+ C Maximize $0 $1
# 你可以使用类似 FvwmMaximize 100 100 这种格式来调用这个函数,这样表示在单击的时候,将窗口在水平和垂直方向都100%占用屏幕。100 0 将在水平方向100%,垂直方向保持不变。
DestroyFunc FvwmMoveOrIconify
AddToFunc FvwmMoveOrIconify
+ M Move
+ D Iconify
DestroyFunc FvwmWindowShade
AddToFunc FvwmWindowShade
+ D WindowShade $0
######################## Initialization Functions ############################
#当fvwm启动或者退出的时候,会执行下面几个函数
#
#
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Exec exec fvwm-root $[fvwm_wallpapers]/0.png
+ I Exec exec conky
DestroyFunc InitFunction
AddToFunc InitFunction
+ I Exec exec xscreensaver -no-splash
DestroyFunc ExitFunction
AddToFunc ExitFunction
+ I All (conky) Close
+ I All (xscreensaver) Close
###################### Key bindings ####################
# 按键绑定,也就是设置快捷键。
# Key X Context Modifier Action
# Mouse X Context Modifier Action
# 上面两行是绑定命令的格式,X 表示是哪个按钮, Context 是指当前鼠标在屏幕或者窗口的哪个位置,这个位置可以参考这个图 http://www.zensites.net/fvwm/guide/window_layout.png。图中 R - the root window, I - Icon, F - frame corners, S - frame sides, T - title bar, W - application window 和 0-9 - buttons 。A 表示所有的地方。
# Modifier 是指 (A)ny, (C)ontrol, (S)hift, (M)eta, (N)othing, 或者 1-5( X Modifiers mod1-mod5 参看 xmodmap的man)。
#
Key Tab A M WindowList Root c c CurrentDesk, NoGeometry, CurrentAtEnd, NoIcons
Key T A 4 Exec exec urxvtc # win+t -> run terminal
Key W A 4 Menu RootMenu root o0 o100 # Win+S -> pop main manu from left-bottom
Key M W 4 Menu Window-Ops Nop # Win+M -> pop win menu
Key M WI M Iconify # Alt+M -> Iconfy
Key F4 A M Close # Alt+F4 -> close window
Key X W M Maximize 100 0 # Alt+f3 -> max window in H
Key R W M Resize # Alt+R -> resize window
#Key 1 A M GotoPage 0 0
#Key 2 A M GotoPage 0 1
#Key 3 A M GotoPage 0 2
#Key 4 A M GotoPage 0 3
Mouse 1 R A Menu RootMenu Nop
Mouse 1 A M Menu RootMenu Nop
Mouse 3 WI SC CloseOrNot
Mouse 3 A S Move
Mouse 3 R N WindowList CurrentAtEnd, NoIcons Nop
Mouse 3 A M Menu Window-Ops Nop # Alt+RightMouse -> win ops
DestroyFunc CloseOrNot
AddToFunc CloseOrNot
+ C Silent Close
+ M Nop
DestroyFunc RaiseFocus
AddToFunc RaiseFocus
+ I Raise
+ I Focus
# for other parts of the window/borders/icons:
Mouse 1 F A Resize-or-Raise
Mouse 1 TS A Move-or-Raise
Mouse 1 I A Move-or-Iconify
######################## Menus ###################
#
# Menu Style
Colorset 0 fg black, bg grey, Translucent #c6cbd6 90
Colorset 1 fg black, bg #6b83b5, hi #dcdcdc, sh #dcdcdc
MenuStyle * Hilight3DThin, PopupOffset 0 100, PopupDelay 300
MenuStyle * Font "8x16"
MenuStyle * MenuColorset 0, HilightBack, ActiveColorset 1
MenuStyle * BorderWidth 1, TitleUnderlines1, SeparatorsLong,
TrianglesSolid, Animation
MenuStyle * ItemFormat "%.2|%.5i%.5l%.5i%2.3>%2|"
MenuStyle * VerticalItemSpacing 3 4
CopyMenuStyle * WindowList
MenuStyle WindowList VerticalItemSpacing 1 2
ChangeMenuStyle WindowList Window-Ops
#####
# FvwmRootMenu
###########
DestroyMenu RootMenu
AddToMenu RootMenu "Root Menu" Title
+ "Programs%menu/programs.png%" Popup FvwmProgramsMenu
+ "Console%menu/terminal.png%" FvwmATerm
+ "FVWM Console%menu/terminal.png%" Module FvwmConsole
+ "" Nop
+ "Help%menu/help.png%" Popup FvwmManPagesMenu
+ "Restart FVWM%menu/restart.png%" Restart
+ "Quit FVWM%menu/quit.png%" Quit
# 这里定义了 menu 之后还需要绑定一个按键调用这个menu才行。
#
########################
################ Window Decor ##################
# 这部分设置窗口标题栏的样式,那些 ButtonStyle n 是设置窗口标题栏那些按钮的样子。
# FVWM预设了10个按钮的位置。标题栏按扭的排列是 1 3 5 7 9 0 8 6 4 2 ,可以参考上面的那个图。
# Vector 画如何画图 google 一下吧,我理解的也不是很深刻,或者说就没去理解,呵呵。
#
DestroyDecor MyDecor
AddToDecor MyDecor
+ TitleStyle LeftJustified Height 18
+ ButtonStyle 1 ActiveUp Vector 4 30x30@3 60x60@3 60x30@4 30x60@3 -- Flat
+ ButtonStyle 1 ActiveDown Vector 4 30x30@3 60x60@3 60x30@4 30x60@3 -- Flat
+ ButtonStyle 1 Inactive Vector 4 30x30@3 60x60@3 60x30@4 30x60@3 -- Flat
+ ButtonStyle 3 ActiveUp Vector 5 30x60@3 60x60@3 60x50@3 30x50@3 30x60@3 -- Flat
+ ButtonStyle 3 ActiveDown Vector 5 30x60@3 60x60@3 60x50@3 30x50@3 30x60@3 -- Flat
+ ButtonStyle 3 Inactive Vector 5 30x60@3 60x60@3 60x50@3 30x50@3 30x60@3 -- Flat
+ ButtonStyle 5 ActiveUp Vector 7 30x30@3 30x60@3 60x60@3 60x30@3 30x30@3 30x35@3 60x35@3 -- Flat
+ ButtonStyle 5 ActiveDown Vector 7 30x30@3 30x60@3 60x60@3 60x30@3 30x30@3 30x35@3 60x35@3 -- Flat
+ ButtonStyle 5 Inactive Vector 7 30x30@3 30x60@3 60x60@3 60x30@3 30x30@3 30x35@3 60x35@3 -- Flat
+ TitleStyle -- Flat
+ BorderStyle Simple -- NoInset Flat
+ ButtonStyle All -- UseTitleStyle
Style "*" UseDecor MyDecor
Mouse 1 1 A FvwmDeleteOrDestroy
Mouse 1 3 A FvwmIconifyOrShade
Mouse 1 5 A FvwmMaximize 100 100
Mouse 2 5 A FvwmMaximize 0 100
Mouse 3 5 A FvwmMaximize 100 0
#给各个按钮绑定鼠标动作,必须绑定了动作,才会在标题栏显示。
#
#############################################
######################## Sample Functions ##########################
DestroyFunc Move-or-Raise
AddToFunc Move-or-Raise I Raise
+ "M" Move
+ "D" WindowShade
DestroyFunc Move-or-Raise2
AddToFunc Move-or-Raise2 "M" Raise
+ "M" Move
+ "D" Lower
DestroyFunc Maximize-Func
AddToFunc Maximize-Func "M" Maximize 0 100
+ "C" Maximize 0 80
+ "D" Maximize 100 98
DestroyFunc Maximize-Func2
AddToFunc Maximize-Func2 "M" Maximize 100 0
+ "C" Maximize 80 0
+ "D" Maximize 100 98
DestroyFunc Move-or-Iconify
AddToFunc Move-or-Iconify I Raise
+ "M" Move
+ "D" Iconify
DestroyFunc Resize-or-Raise
AddToFunc Resize-or-Raise I Raise
+ "M" Resize
+ "D" Lower
DestroyFunc Resize-or-Raise2
AddToFunc Resize-or-Raise2 "M" Raise
+ "M" Resize
+ "D" Lower
DestroyFunc Iconify-and-Raise
AddToFunc Iconify-and-Raise I Iconify
+ I Raise
########## END ############
#
# 到这里就都结束了,这个是基于 http://www.zensites.net/fvwm/guide/index.html 网站的介绍写的。
# 这个rc文件比网站介绍的还要简单,所以还可以去看看那个网站的内容。
# 有错误的地方,给我发邮件指出来 wd<at>wdicc.com 。