LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2974|回复: 9

LINUX精彩之窗之二:FVWM-我有我精彩!-未完,待须

[复制链接]
发表于 2003-3-16 22:52:50 | 显示全部楼层 |阅读模式
说明:在阅读本文时你可能发现有些是你曾经看过的东东,但请不要误会,还有很多是你可能没有看过的,是我的经验总结了,如果问我的FVWM现在是什么样子,请看这里:
http://www.linuxfans.org/nuke/modul...=geninfo&did=59
下载下来的配置文件要我又做了修改比截图看来更好有很好的质感.
在你耐心的读完本文后相信你能做的更好!
上次写了afterstep的设置,这次重点讲明白如何设置fvwm.最后粗略讲讲window make.

1.fvwm

1.1一些基本的概念
   FVWM 是一个完全可定制的窗口管理器。这是FVWM不同于很多WM的一个特点,它的一切行为方式都是由一个配置文件: .fvwm2rc 决定的。没有了这个配置文件,FVWM 就成了一个废物: 鼠标和键盘几乎不起任何作用,没有菜单,没有窗口边框,没有按钮,甚至你根本不知道它其实正在运行!但是一旦有了配置文件,FVWM就会变得威力无比,简单的配置文件可以实现基本的功能,复杂的配置文件甚至可以模拟很多其它WM甚至 Windows XP.并且更漂亮!
你可以在http://www.fvwm.org/screenshots/ ... 那个样子。”  
   FVWM是一个复合的、巨大的虚拟窗口管理器,源头是衍生自twm(在很久很久以前)。
   FVWM 尝试用一个很小的内存脚本而拥有丰富的风格设定,拥有强大的定制和扩展性,并且在很大程度上与Motif mwm相容。
   对于早先的FVWM1.xx的用户,请小心,版本2.2拥有很多的不同之处。
   对于FVWM 2.0.x betas版的用户,请注意2.2版使用GNU autoconf/automake而不是Imake,这将导致缺省的安装位置不同。
   对于FVWM 2.2.x版的用户,请阅读ANNOUNCE和NEWS文件明白在这个版本中的改变和新的特性。
FVWM的最初作者,Rob Nation(谢谢 ROB!),已经从这工作中“退役”,请不要对于类似错误报告或者增强需求之类的小事情打扰他。注意FVWM现在被一群基于fvwm工作邮递列表的人员所管理,并且拥有很多各处爱好者的关心。
   如果你拥有任何问题、建议、错误报告、增强要求,等,请首先阅读docs子目录的文件。一般情况下,FAQ,BUGS和TODO列表。同时,仔细查阅FVWM的man手册。下一步,尝试FVWM的邮递列表。另一个优秀的资源是官方的WWW主页http://www.fvwm.org且可以发现邮递列表的历史档案。
   对于编译和安装FVWM的信息,阅读INSTALL和INSTALL.fvwm文件(INSTALL是晦涩的autoconf介绍文件;INSTALL.fvwm包含FVWM-specific的细节)
   一般的,你应该执行:
  ./configure   # 需要全部的选项列表,执行: ./configure --help
  make
  make install  # 作为用户则需要正确的文件系统权限
   最后一步对于保证FVWM是否正确工作非常重要。
   对于已知的bugs,检阅BUGS,FAQ和TODO文件
   我们先来看看一些常见的问题问答,这样你可以有些基本的了解,看不懂不要紧,后面我有更详细的解说.

1.1.1 为什么 FVWM 不能用图片作为背景?

   不熟悉Xwindow的人经常问这种问题。答案是FVWM确实不能设置复杂的高清晰图片作为背景,但是你却可以用图片作为背景。原因是:设置背景根本不是WM的职责,你需要用其它程序,比如 xloadimage, xv, ... 在根窗口上放置一幅图片,那就是所谓的“桌面背景”。你可以把它加入你的启动函数,一个 xloadimage 的例子可以在上面看到。  

1.1.2 FVWM怎么锁定屏幕呢?

   你又问到一个容易混淆的问题。锁定屏幕也不是WM必须有的功能。几乎所有WM都是调用另外一个程序,比如 xscreensaver 来锁定屏幕和提供屏幕保护,然后在它们的菜单里加入对 xscreensaver 配置程序 xscreensaver-demo 的调用。看起来好像是WM提供了屏幕保护功能,让很多用户模糊了WM的职责。  
你可以把 xsreensaver 加入到FVWM的启动函数里。参看启动函数和退出函数.

1.1.3 为什么 FVWM 的窗口标题不能显示汉字?

   FVWM当然能显示汉字了,它是一个国际化的程序。原因在于你没有设置好汉字字体。你可以在配置文件里加入汉字字体的设定:
   Style * Font  -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
   simsun 是我机器上一种同时可以支持汉字和英语编码的字体,如果你的字体只有汉字编码,那么你的英文全部都会“乱码”,这时你需要在后面再加一个英文字体。比如:
   Style * Font  -cjacker-magicsong-medium-r-*-*-14-*-*-*-*-*-gb2312.1980-0,*-r-*
   类似的,pager,windowlist 都有自己的字体设定,你需要把它们都设置为你喜欢的中文字体。  

1.1.4 FVWM 有工具条吗?

   有。启动 FvwmTaskBar 模块就行了。你还可以把它配置的非常漂亮。这里给出一个我的简陋的配置方案。
Style FvwmTaskBar HandleWidth 0, BorderWidth 0
*FvwmTaskBar: UseSkipList
*FvwmTaskBar: AutoStick
*FvwmTaskBar: DeskOnly
*FvwmTaskBar: Action Click1 DeiconifyRaiseAndFocus
*FvwmTaskBar: Action Click2 Iconify On
*FvwmTaskBar: Action Click3 Lower
*FvwmTaskBar: MailCommand Exec exec rxvt -e mutt
*FvwmTaskBar: 3DFvwm
*FvwmTaskBar: StartName FVWM
*FvwmTaskBar: StartMenu RootMenu
*FvwmTaskBar: Font  -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
*FvwmTaskBar: SelFont  -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
*FvwmTaskBar: ShowTips
*FvwmTaskBar: ClockFormat  
*FvwmTaskBar: WindowButtonsRightMargin 20  
*FvwmTaskBar: Back seagreen
*FvwmTaskBar: Fore gold2
*FvwmTaskBar: FocusFore cornsilk
*FvwmTaskBar: IconBack darkgreen
*FvwmTaskBar: IconFore white
    另外,FvwmButtons 模块提供了更加复杂的功能。你可以把很多小程序(xclock,biff...)和模块(FvwmIconMan)嵌入到它里面。形成一个复杂的工具条。详情请 man FvwmButtons.  

1.1.5 FVWM 能不能像 Windows 那样用 Alt-Tab 切换窗口?

   能。把这行加入 .fvwm2rc:
Key Tab A M WindowList Root c c NoDeskSort
   这个绑定不知道什么时候好像成了 FVWM 缺省的。如果你不喜欢,那么加入:
Key Tab A M -
   取消这个定义。

1.1.6 FVWM 能和KDE, Gnome 一起工作吗?

    KDE 和 Gnome 都是完整的桌面系统,包括了WM和其它很多东西。FVWM 只是一个WM。FVWM可以替代 KDE 缺省的 kwin,或者 Gnome 缺省的 sawfish 成为它们的WM。
    * 只用KDE和Gnome的工具条
    很多时候 Gnome 和 KDE 的程序是跟他们的桌面系统可以分开使用的。其实你有可能只需要它们漂亮的panel。
    Gnome 的工具条叫做 gnome-panel, 在 xterm 启动一个就行了。
    KDE 的工具条叫做 kicker. 注意 KDE 有些程序需要 dcopserver, 你可以先启动 dcopserver。
    KDE 和 gnome 的panel上的pager和fvwm的FvwmPager都是相通的,所以你可以用它们任何一个来切换桌面
    如果你在kde的任务条用右键选择“总在最前”可能不起作用,因为现在它们得完全听fvwm的话不过你可以给它们额外的权力,请参考fvwm manpage 的有关EWMH 的部分 .

1.2 fvwm的设置文件

1.2.1 设置文件

    (1) $HOME/.fvwmrc
    便是在你的 Home Directory 下的 .fvwmrc 这一个档案, (一般使用者应该没有该
    档), 而若你并没有此档案的话, XWM 便会去寻找 FVWM 预设的档案, 即
     (2) /usr/lib/X11/fvwm/system.fvwmrc
    此档为 FVWM XWM 的预设设定档, 而若你不喜欢该设定档所表现的视窗的话, 你可
    以复制一份到你的 Home Directory 下的 .fvwmrc 档案之後, 再修改即可。
    cp  /usr/lib/X11/fvwm/system.fvwmrc  $HOME/.fvwmrc
     (3)配置文件有点像一个脚本语言。不要怕,这种脚本语言比起 Perl, awk 简单多了。你不需要学会编程。
写配置文件,一个很好的出发点就是随 FVWM 源码发行的 system.fvwm2rc 文件。它的位置现在在源码包的 sample.fvwmrc/system.fvwm2rc。你也可以在这里下载一份 2.5.4 的system.fvwm2rc. 把它拷贝到你的 ~/.fvwm/ 目录下面, 改名为 .fvwm2rc. 作为我们的起始点。

注意sample.fvwmrc/ 这个目录下还有system.fvwm2rc-sample-95这样的配置文件,它们可以模拟 Windows 95 的操作方式,但是这个配置文件太大了,不适合用来修改成为自己的配置文件,你有兴趣可以自己看看,然后把里面某些你觉得很cool的东西贴到你的配置文件里。

1.2.2 基本的设置FVWM命令

    以下是基本档system.fvwmrc的内容,我在每部分的开头简单介绍一下它们的作用.
# this is a bare bones sample .fvwm2rc/system.fvwm2rc file for fvwm.
# It should be customized before install.  See other sample .fvwm2rc files
# for hints, as well as pointers from the various links on the official
# fvwm web page (see the FAQ).
#########################################################################################
EdgeResistance 250 10
EdgeScroll 100 100
ClickTime 750
##EdgeResistance scrolling moving  
        这是用来设定当滑鼠游标碰触到萤幕的边界的时候,FVWM应该要如
        何动作。scrolling 是告诉FVWM当滑鼠游标碰触到萤幕边界多少
        milliseconds之後,才会移动目前的工作桌面。moving则是设定当
        视窗超出画面多少像点之後,才要切换目前的工作桌面到别的桌面
        上。      

    EdgeScroll horizontal vertical
        这个命令是用来设定当滑鼠游标碰触到萤幕边界应该要移动多少百
        分比的萤幕大小。如果设为0 的话,则当滑鼠游标碰到萤幕边界的
        时候,将不会有任何动作发生。如果设成100 的话,就可以移动一
        整个画面。
    ClickTime delay
        指定在压下与放开滑鼠键的之间的时间。通常内定是150
        milliseconds。  
###########################################################################################
DeskTopSize 2x2
Menustyle * fvwm, Font -adobe-times-bold-r-*-*-14-*-*-*-*-*-*-*
MenuStyle * Foreground maroon, Background grey60, Greyed grey40
#DeskTopSize HorizontalxVertical
        这是用来定义虚拟桌面的数目与排列方式。例如,如果设定
                        DeskTopSize 4x2
        你就会有八个虚拟桌面可用,他们的排列方式是水平方向四个,垂
        直方向两排。
      Menustyle * fvwm, Font -adobe-times-bold-r-*-*-14-*-*-*-*-*-*-*
      指定了菜单(就是鼠标点击出来的那个菜单,一下雷同)的字体         
      MenuStyle * Foreground maroon, Background grey60, Greyed grey40
      前景色,背景色
MenuStyle forecolor backcolor shadecolor font style
        这个命令是是在设定选单的样式。
                forecolor       前景色。
                backcolor       背景色。
                shadecolor      禁止使用的选项的颜色。
                font            选单所使用的字形。
                style           选单的样式,有fvwm与mwm 这两种样式
                                 可以用。
   菜单的样式是由 MenuStyle 定义的,如:
MenuStyle * MWM
MenuStyle * PopupDelayed, PopupDelay 160, Animation, TitleWarp
MenuStyle * Foreground gold, Background gray40
MenuStyle * ActiveFore White
MenuStyle * Font  -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
MenuStyle * MenuFace VGradient 64 darkgray MidnightBlue
   这样我规定:所有的菜单,他们使用 mwm 的行为方式,弹出子菜单延时 160 ms,子菜单弹出时如果靠近屏幕边沿放不下,那么菜单整体移动使得子菜单刚好能弹出,前景色gold,背景色 gray40, 活动的项目(就是鼠标正在它上方的时候)前景色变为白色,菜单使用字体 -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*, 背景是垂直的梯度颜色,一共64阶,从 darkgray 变化到 MidnightBlue.  
   动态菜单定义,前面我们说过了,可以用 PipeRead 来构造一个动态菜单。现在举一个简单的例子:
AddToMenu HomeDirMenu
        PipeRead 'for i in $HOME/prog/*.c; \
        do echo "+ $i Exec xterm -e vi $i"; done'
   当你激发这个菜单 HomeDirMenu, 就会出现你主目录/prog下的所有C程序文件的列表,当你点击其中一个就会启动vi来编辑这个C程序。是不是很方便呢?你想一想,可以用怎样无穷无尽的方式来构造一个菜单呢?  
#############################################################################################
ColormapFocus FollowsMouse
ColormapFocus [followsmouse][followsfocus]
        指定FVWM控制颜色的方式。如果选用followsmouse,则滑鼠所在的
        视窗的colormap就是目前的colormap。如果是用followsfocus则目
        前拥有目前的键盘的输入控制的视窗之colormap就是目前所采用的
        colormap。
#############################################################################################
# default Styles:
# make sure these fonts exist on your system:
Style *           Font -adobe-times-bold-r-*-*-18-*-*-*-*-*-*-*
Style *           IconFont -adobe-times-bold-r-*-*-18-*-*-*-*-*-*-*
Style *           HilightFore black, HilightBack palevioletred
Style *           BorderWidth 7, HandleWidth 7
Style *           Icon unknown1.xpm, Color lightgrey/dimgrey
Style *           MWMFunctions, MWMDecor, HintOverride
Style *           DecorateTransient, NoPPosition
Style *           IconBox 0 -10 -280 -1
 楼主| 发表于 2003-3-16 22:53:29 | 显示全部楼层
Style *           FocusFollowsMouse
Style *           TileCascadePlacement
#说明所有窗口,都是鼠标移进去的时候得到键盘聚焦,鼠标移出来就失去聚焦(FocusFollowsMouse),窗口出现的时候,先试图找一个可以放下它而不挡住其它窗口的地方,如果不行再采用层叠放置的方式(TileCascadePlacement)。

# Styles for various Fvwm modules:
Style "Fvwm*"       NoTitle,  Sticky, WindowListSkip
Style "Fvwm*"       BorderWidth 2, CirculateSkipIcon, CirculateSkip
Style "FvwmPager"   StaysOnTop
Style "FvwmBanner"  StaysOnTop
Style "FvwmButtons" Icon toolbox.xpm, ClickToFocus
#Style 语句用于设定窗口的样式。你可以随心所欲的让不同的窗口有不同的样式。语法为:
   Style stylename options
   其中 stylename 是你的窗口的名字,窗口的class名字,或者窗口的resource名字。如果你不知道这些 X window 的术语,那现在就姑且当作窗口的名字好了,以后多看看 Xlib 的说明书你就会明白这些东西。窗口的名字有可能不同于程序的名字,你不知道它叫什么名字可以用 xwininfo 程序或者 FvwmIdent 模块来查询。再次说明,FvwmIdent 是模块,不能从 xterm 的命令行运行。
stylename 里可以有 "*" 作为通配符。比如你可以说
Style *term TitleAtLeft
  让所有以 "term" 结尾的那些窗口的标题拦都在左边。比如 "xterm", "cxterm", "qterm", ... 都会采用这种样式。
   options 是你想让满足条件的窗口以什么样的方式存在。options 的种类非常之多。比如:BorderWidth, HandleWidth, FocusFollowsMouse, TileCascadePlacement, ... 它们有的需要参数,比如 BorderWidth 7, 指定边框宽度为7个像素。有些不需要参数,比如 FocusFollowsMouse/ SloppyFocus/ NeverFocus/ ClickToFocus 指明了几种互相排斥的键盘聚焦方式。 先举几个例子,这些都是 system.fvwm2rc 里的内容:  
说明所有名字以 "Fvwm" 开头的窗口(在这里一般都是 FVWM 内部的模块),它们都没有标题栏(NoTitle),而且是sticky,也就是说即使桌面切换,它们也一直显示在屏幕上,边框宽度为 2, CirculateSkip 说明当FVWM要求轮询窗口进行批量操作时,这些窗口不被计算在内。第3,4行说明 FvwmPager, FvwmBanner 这两个模块一直显示在最上面。最后一行说明 FvwmButtons 模块使用 toolbox.xpm 的图标,需要鼠标点击才能得到键盘聚焦(ClickToFocus)。
     总的说来,options指出了控制窗口的基本样式和政策,而不包括窗口各个部件具体的样式,它包括以下几个方面内容:
    * 窗口聚焦方式。是跟随鼠标(FocusFollowsMouse),还是需要点击才聚焦(ClickToFocus)...
    * 窗口标题栏。是否给窗口加上标题拦?如果加上,是放在左边,上边,还是下边?注意这里也不是设定具体标题样式的地方,参看 TitleStyle.
    * 窗口应该显示哪些按钮。FVWM可以为每个窗口设定最多10个按钮,但是你通常用不到10个,这样你可以设定对于某一个程序那些按钮应该出现。注意这里也不是设定按钮样式的地方,参看 ButtonStyle.
    * 窗口边框样式。边框宽度,handle(就是边框角上那个用来resize的东东)的宽度,边框被鼠标按住的时候是否陷下去?...
    * 窗口图标。用那个图标作为窗口iconify时候的图标?
    * 窗口最大化,移动,改变大小操作时的样式。是显示窗口内容还是只显示一个“橡皮框”?还是让尺寸小于某个值的窗口才在拖动时显示内容?...
    * 窗口放置策略。窗口出现的时候,是层叠放置,最小遮挡放置,还是……?
    * 是否允许程序自己放置自己?这是一个政策问题,有些窗口程序启动时会自己选择一个位置出现,但是你可能会发现你不喜欢它那样做,你可以设定NoPPosition, 不允许那个程序自作聪明。
    * 对瞬时窗口(transient window)的策略。transient window 是指类似弹出菜单,对话框之类的窗口。当它们出现的时候,你是否想给它们也加上标准的边框?
    * 高级特性。还有很多很多选项比如是否允许窗口 backing store,这些如果你还不理解现在暂时不用管它。  

以上每项都包含许许多多可以设定的东西。具体还是请参考 fvwm 的manpage。
############################################################################################
# Styles for your common terminal emulator programs:
Style "XTerm"       Icon xterm.xpm, SloppyFocus, IconBox -70 1 -1 -140
Style "rxvt"        Icon term.xpm, SloppyFocus, IconBox -70 1 -1 -140
Style "rxvt"        MWMBorder, MWMButtons
# Styles for various common programs:
Style "*lock"       NoTitle, NoHandles, Sticky, WindowListSkip, ClickToFocus
Style "xbiff"       NoTitle, Sticky, WindowListSkip, ClickToFocus
Style "xcalc"       Icon xcalc.xpm, NoButton 2,ClickToFocus
Style "xmh"         Icon mail1.xpm, NoIconTitle,StickyIcon
Style "xmh"            NoButton 2
Style "xman"            Icon xman.xpm, ClickToFocus
Style "xmag"            Icon mag_glass.xpm, ClickToFocus
Style "xgraph"      Icon graphs.xpm, ClickToFocus
Style "xmosaic"     Color Green/Yellow, ClickToFocus
############################################################################################
# some simple default key bindings:
Key Next         A       SCM     Next (AcceptsFocus) Focus
Key Prior        A       SCM     Prev (AcceptsFocus) Focus

# some simple default mouse bindings:
#   for the root window:
Mouse 1        R           A       Menu RootMenu Nop
Mouse 2        R            A              Menu Window-Ops Nop
Mouse 3        R            A              WindowList

#   for the title bar buttons:
Mouse 0        1            A              Menu Window-Ops2 Close
Mouse 0        2            A             Maximize-Func
Mouse 0        4            A             Iconify

#   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
Mouse 2        I        A        Iconify
Mouse 2        FST        A        Menu Window-Ops2 Nop
Mouse 3        TSIF        A        RaiseLower
#这些是设置鼠标和按钮的
   按钮
   窗口的标题栏上都有一些按钮。那不是窗口程序自己的,而是WM给它们加上的。
   FVWM 可以给窗口加上最多10个按钮,它们不光可以实现基本的最大化,最小化,关闭,等功能。FVWM的灵活性允许你赋予按钮几乎任意的功能!
Mouse Button Context Modifiers Function  
        此命令是用来定义滑鼠的按键的意义。各参数的意义如下:
        Button          这是指滑鼠的按键。
                        0 表示任意键按下都会有反应。
                        1 表示左键。
                        2 表示中键。
                        3 表示右键。
        Context         是用来描述在什麽地方才会有用。
                        R 表示是root window ,也就是整个背景萤幕。
                        W 表示在视窗上面。
                        T 表示在Title Bar 上面,也就是显示视窗标题
                          的地方。
                        S 表示在在视窗四周的边框上面。
                        F 表示在视窗的四角上面。
                        I 表示在Icon上面。
                        A 表示在Title Bar 以外的任何地方。
                        0-9的数字则是表示在Title Bar上面的按钮。它
                        所表示的顺序如下所示:
                                1 3 5 7 9    0 8 6 4 2
                        上面的各项可以混合使用。如"FST" 表示整个视
                        窗的任何地方。除了Title Bar 的按钮之外。
        Modifiers       这个项目是指有无其他的组合键的配合。
                        N 表示没有其他的组合键。
                        C 表示CTRL键。
                        S 表示SHIFT 键。
                        A 表示ALT 键。
                        M 表示Meta键。
                        上面各项也可以混合用,例如"CA"表示CTRL+ALT
                        键。"CAS" 表示CTRL+ALT+SHIFT键
Key keyname Context Modifiers Function
        这个命令是用来设定键盘上面的按键的定义。其中Context、
        Modifiers、 Function。请参照上面Mouse设定中的说明。至於
        Keyname 请参照/usr/include/X11/keysymdef.h 所定义的按键。
        要用的时候请把前面的XK_ 去掉。
   按钮样式
   按钮的样式是用ButtonStyle定义的。比如我的那三个按钮实际上是如下几句话定义的。
ButtonStyle All -- UseTitleStyle
ButtonStyle All ActiveDown VGradient 8 palevioletred black
ButtonStyle 6 16 20x20@1 30x20@1 50x40@1 70x20@1 80x20@1 80x30@0 \
        60x50@0 80x80@0 70x80@0 50x60@0 30x80@0 20x80@0 \
        20x70@0 40x50@1 20x30@0 20x20@1
   那个X形状的关闭按钮实际上是用很简单的语句画出来的。ButtonStyle 之后的数字是按钮编号,后面一个数子表示一共有多少笔画。后面的XxY@C都是笔画的内容,XxY是坐标, 坐标都是用百分比表示的。@C 表示颜色, C是一个数字,0 表示阴影色,1 是高亮色,2 是背景色,3 是前景色,4 是移动光标而不画线。
   你可以画你自己的按钮,也可以去那别人设计好的来用 FVWM 的主页上有很多人提供这种按钮。
   第二个语句 "ActiveDown VGradient 8 palevioletred black" 设定了所有按钮按下去还没有松开鼠标时候的样式,是一个颜色梯度。  
   其它样式
   我们已经知道 Style 可以决定窗口的样式,MenuStyle 可以决定菜单的样式,ButtonStyle 按钮的样式。其实还有 CursorStyle, TitleStyle, BorderStyle. 他们决定了光标,标题栏,边框的样式。他们都有多样的语法,详细的就看 magpage 吧。这里就不照抄了。  
######################## Initialization Functions ############################
AddToFunc StartFunction
+ I Module FvwmButtons

AddToFunc InitFunction
+ I exec xsetroot -mod 2 2 -fg rgb:55/40/55 -bg rgb:70/50/70

# For some SM-s (like gnome-session) there is an internal background setter.
AddToFunc SessionInitFunction
+ I Nop
###在 FVWM 启动和重新启动时都会调用 StartFunction, 而且在首次启动时会调用 InitFunction, 在重新启动时会调用 RestartFunction, InitFunction 和 RestartFunction 都是在 StartFunction 之后调用。每次重起和完全退出时都要执行 ExitFunction.
如果你有什么程序需要在FVWM启动时启动,那么就把它加到合适的函数里面去。比如,我的配置文件有这些内容:
DestroyFunc StartFunction
AddToFunc StartFunction         
+ I Module FvwmButtons MainPanel
+ I Module FvwmAuto 500 Raise Nop
+ I Module FvwmAnimate
+ I Module FvwmTaskBar
+ I Exec exec xdaliclock  
+ I Exec exec xloadimage -onroot -fullscreen ~/pic/cat_20.jpg
+ I Exec exec xsim

DestroyFunc InitFunction
AddToFunc InitFunction     
+ I Exec exec xscreensaver -no-splash

DestroyFunc ExitFunction
AddToFunc ExitFunction
+ I All (xdaliclock) Close
+ I All (xscreensaver) Close
+ I All (xsim) Close

可见,我在第一次启动时会启动 xscreensaver 屏幕保护程序。-no-splash 是 xscreensaver 的参数。在每次重新启动和第一次启动时都要运行 FvwmButtons, FvwmAuto, FvwmAnimate, FvwmTaskBar 几个模块和 xdaliclock,一种 morph 数字的时钟,然后用 xloadimage 放一张漂亮的图片作为桌面背景,最后启动 xsim 中文输入法。

退出和重起时,我特意关闭了那几个启动时打开的程序,因为如果不关闭他们,像 xwin32, Exceed 这样的 Windows X server 不会 Reset.

每个命令前的 "I" 表示 Imediately, 立即执行,联想上面提到的 "C" 和 "M", 这个操作不等待任何鼠标动作。  
######################## Menus ###################
AddToMenu RootMenu        "Root Menu"        Title
+                        "XTerm"                Exec exec xterm
+                        "Rxvt"                Exec exec rxvt
+                        ""                Nop
+                        "Remote Logins"        Popup Remote-Logins
+                        ""                Nop
+                       "Utilities"     Popup Utilities
+                        ""                Nop
+                        "Fvwm Modules"                  Popup Module-Popup
+                       "Fvwm Window Ops"         Popup Window-Ops
+                       "Fvwm Simple Config Ops"  Popup Misc-Ops
+                        ""                Nop
+                       "Refresh Screen"   Refresh
+                       "Recapture Screen" Recapture
+                        ""                Nop
+                        "Exit Fvwm"        Popup Quit-Verify

AddToMenu Utilities     "Utilities" Title
+                        "Top"                Exec exec xterm -T Top -n Top -e top
+                        "Calculator"        Exec exec xcalc
+                        "Xman"                Exec exec xman
+                        "Xmag"                Exec exec xmag
+                       "Editres"       Exec exec editres
+                        ""                Nop
+                        "XEmacs"        Exec exec xemacs
+                       "Mail"          MailFunction xmh "-font fixed"
+                        ""                Nop
+                       "XLock"         Exec exec xlock -mode random
+                        ""                Nop
+                       "Reset X defaults" Exec xrdb -load $HOME/.Xdefaults

AddToMenu Misc-Ops "Misc Config Opts" Title
+                  "Sloppy Focus"        ChangeDefaultFocus SloppyFocus
+                  "Click To Focus"      ChangeDefaultFocus ClickToFocus
+                  "Focus Follows Mouse" ChangeDefaultFocus FocusFollowsMouse
+                  "" Nop
+                  "Colormap Follows Mouse" ColormapFocus FollowsMouse
+                  "Colormap Follows Focus" ColormapFocus FollowsFocus
+                  "" Nop
+                  "Full Paging ON"         EdgeScroll 100 100
+                  "All Paging OFF"         EdgeScroll 0 0
+                  "Horizontal Paging Only" EdgeScroll 100 0
+                  "Vertical Paging Only"   EdgeScroll 0 100
+                  "artial Paging"         EdgeScroll 50 50
+                  "Full Paging && Edge Wrap" EdgeScroll 100000 100000

AddToMenu Window-Ops        "Window Ops"        Title
+                        "Move"                Move
+                        "Resize"        Resize
+                        "Raise"                Raise
+                        "Lower"                Lower
+                         "(De)Iconify"        Iconify
+                        "(Un)Stick"        Stick
+                        "(Un)Maximize"        Maximize
+                        ""                Nop
+                        "Delete"        Delete
+                        "Close"                Close
+                        "Destroy"        Destroy
+                        ""                Nop
+                        "Refresh Window" RefreshWindow

AddToMenu Window-Ops2        "&Move"                Move
+                        "&Resize"        Resize
+                        "R&aise"        Raise
+                        "&Lower"        Lower
+                        "(De)&Iconify"        Iconify
+                        "(Un)&Stick"        Stick
+                       "(Un)Ma&ximize" Maximize
+                        ""                Nop
+                        "&Delete"        Delete
+                        "&Close"        Close
+                        "Destroy"        Destroy
+                        ""                Nop
+                        "ScrollBar"         Module FvwmScroll 2 2
+                        "rint"         PrintFunction
+                       "rint Reverse" PrintReverseFunction

# be sure to fill these in with your correct machine names:
AddToMenu Remote-Logins        "dopey"         Exec rsh dopey rxvt -display $HOSTDISPLAY &
+                        "snoopy" Exec rsh snoopy rxvt -display $HOSTDISPLAY &
+                        "grumpy" Exec rsh grumpy rxvt -display $HOSTDISPLAY &
+                        "happy"         Exec rsh happy rxvt -display $HOSTDISPLAY &
+                        "bailey" Exec rsh bailey rxvt -display $HOSTDISPLAY &
+                        "barnum" Exec rsh barnum rxvt -display $HOSTDISPLAY &
+                        "joker"         Exec rsh joker rxvt -display $HOSTDISPLAY &
+                        "signal" Exec rxterm signal

AddToMenu Module-Popup        "FvwmModules"        Title
+                        "Identify"        Module        FvwmIdent
+                        "Talk"          Module        FvwmTalk
+                        ""                Nop
+                        "Button-Bar"        Module        FvwmButtons
+                        "ager"                Module  FvwmPager 0 0
+                        "ager (2 desks)" Module  FvwmPager 0 1
+                        "WinList"        Module  FvwmWinList
+                        ""                Nop
+                        "Banner"        Module        FvwmBanner
+                       "ScrollBar"     Module  FvwmScroll 50 50
+                        "Background"        Module  FvwmBacker
+                       "AutoRaise"     Module  FvwmAuto 200 Raise Nop
+                       "Stop AutoRaise" KillModule FvwmAuto
+                        ""                Nop
+                        "IconBox"        Module        FvwmIconBox
+                       "IconMan"       Module  FvwmIconMan
+                        ""                Nop
+                       "Form - Rlogin"      Module FvwmForm Rlogin
+                       "Form - MyFvwmTalk"  Module FvwmForm MyFvwmTalk
+                       "Form - QuitVerify"  Module FvwmForm QuitVerify

AddToMenu Quit-Verify         "Really Quit Fvwm?" Title
+                              "Yes, Really Quit"  Quit
+                              ""                    Nop
+                       "Restart Fvwm"      Restart
+                              "Restart Fvwm 1.x"  Restart fvwm -s
+                              ""                    Nop
+                              "Start twm"         Restart twm
+                              "Start ctwm"        Restart ctwm
+                        "Start tvtwm"       Restart tvtwm
+                        "Start vtwm"        Restart vtwm
+                              "Start mwm"                Restart mwm
+                                    "Start olwm"        Restart /usr/openwin/bin/olwm
+                              ""                    Nop
+                              "Start dummy"       Restart xterm
+                              ""                    Nop
+                              "No, Don't Quit"    Nop
###菜单了,如下:
   菜单是由AddToMenu命令定义的,比如这样一个菜单
DestroyMenu RootMenu
AddToMenu RootMenu        "Root Menu"        Title
+                        "&xterm%mini.display.xpm%"        Exec exec xterm
+                        "&Rxvt%mini.monitor.xpm%"        Exec exec rxvt  
+                        "&Big Rxvt"        Exec exec rxvt -geometry  78x43
+                        ""                Nop
+                       "&rograms"      Popup ProgramsMenu
+                       "&Utilities"     Popup Utilities
+                        ""                Nop
+                       "Re&fresh Screen"   Refresh
+                       "Re&capture Screen" Recapture
+                        ""                Nop
+                       "&Lock"         Exec exec xscreensaver-command -lock
+                        "&Exit Fvwm%mini.exit.xpm%"        Popup Quit-Verify
   除了第一行,后面的行都以一个+号开头,这说明以下是上一个命令的继续。这样我们定义了一个菜单,它的名字叫 "RootMenu", 它有一个标题叫"Root Menu", 里面有一些程序。当我们选中 "XTerm" 时,会使用FVWM 的 Exec 命令启动一个shell,这个shell马上会执行"exec xterm", 也就是启动一个 xterm。空字串"" 表示在菜单里画一条分隔线。Popup 可以弹出子菜单,子菜单也是用同样的方法定义的。"&"后面的那个字母会变成键盘的热键而被加上下划线,"%"括起来的是图标文件的名字,你需要设置 ImagePath 指向图标文件所在的目录。你还可以在菜单里加入侧面图标,等等等等。
# 菜单的消灭
   随后的AddToMenu命令会把内容附加到菜单的末尾。所以如果你想重新定义一个菜单,就需要先把它销毁掉。用
   DestroyMenu RootMenu
   就可以把刚才那个 "RootMenu" 菜单消灭掉。
# 菜单的激活
  光是定义了一个菜单你是不能马上使用它的。这个菜单在什么情况下出现?这个问题是需要你自己来决定,这也是显示FVWM的完全可定制性的地方。比如,我们可以这样定义一个激活菜单的方式:
  Mouse 1 R       A       Menu RootMenu Nop
  这句话的意思是:“当鼠标(Mouse)左键(1)在根窗口(R)上点击,同时有任何控制键(A)按下,这个时候显示叫做 RootMenu 的菜单。”
  但是有时候我们不容易在屏幕上找到一个可以看到根窗口的地方来点击鼠标。我们可以再加一个定义:
  Mouse 3 A       MC      Menu RootMenu Nop
 楼主| 发表于 2003-3-16 22:54:12 | 显示全部楼层
这样,当右键(3) 在任何地方(A)点击, 同时有Alt(M)和Ctrl(C)按下,那么弹出名叫 "RootMenu" 的菜单。
  上面的 "Nop" 表示的是鼠标在菜单上进行双击时的操作。我定义为不操作。另外 Menu 还可以随意定义菜单出现的位置,详细请看 fvwm manpage。  

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

AddToFunc MailFunction           I Next (AcceptsFocus $0) Iconify -1
+                           I Next (AcceptsFocus $0) Focus
+                           I None (AcceptsFocus $0) Exec $0 $1

AddToFunc Move-or-Raise                I Raise
+                                M Move
+                                  D Lower

AddToFunc Move-or-Raise2        M Raise
+                                M Move
+                                  D Lower

AddToFunc Maximize-Func                M Maximize         0 100
+                                C Maximize         0 80
+                                D Maximize         100 100

AddToFunc Move-or-Iconify        I Raise
+                                M Move
+                                D Iconify

AddToFunc Resize-or-Raise        I Raise
+                                M Resize
+                                D Lower

AddToFunc Resize-or-Raise2        M Raise
+                                M Resize
+                                D Lower

AddToFunc PrintFunction                I Raise
+                                I Exec xdpr -id $w

AddToFunc PrintReverseFunction  I Raise
+                               I Exec xdpr 1/2 -h -rv -id $w

AddToFunc Iconify-and-Raise     I Iconify
+                               I Raise

# RLOGIN machine fg bg
AddToFunc RLOGIN I Exec xterm -fg $1 -bg $2 -e rlogin $0 -8

# TELNET machine fg bg
AddToFunc TELNET I Exec xterm -fg $1 -bg $2 -e telnet $0

AddToFunc FocusAndWarp I Focus
+                      I WarpToWindow 2p 2p

AddToFunc DeiconifyFocusAndWarp I Iconify -1
+                               I FocusAndWarp

AddToFunc ChangeDefaultFocus I Style * $0
+                            I Recapture
###设置了如何控制窗口的大小及消灭
####其中 Maximize-Func2 是用了 system.fvwm2rc 里一个函数:
DestroyFunc Maximize-Func2         
AddToFunc Maximize-Func2        "M" Maximize         100 0
+                                "C" Maximize         80 0
+                                "D" Maximize         100 100
    如果鼠标右键在“最大化”按钮上点击(C)那么高度增长为屏幕的 80%, 宽度不变。如果按下鼠标右键后有拖动(M), 那么高度增长为屏幕高度(100%), 宽度不变。如果双击(D), 就是一般的最大化。

############## FvwmButtons button-bar ################################
*FvwmButtons: Geometry 520x100-1-1
*FvwmButtons: Back bisque3
*FvwmButtons: (Frame 2 Padding 2 2 Container(Rows 2 Columns 5 Frame 1 \
                                             Padding 10 0))
*FvwmButtons: (3x2 Frame 2 Swallow "FvwmIconMan" "Module FvwmIconMan")
*FvwmButtons: (1x2 Frame 2 Swallow(UseOld) "FvwmPager" "Module FvwmPager 0 0")
*FvwmButtons: (1x2 Frame 0 Container(Rows 2 Columns 2 Frame 0))
*FvwmButtons: (Frame 2 Swallow(UseOld,NoHints,Respawn) "xbiff" `Exec exec xbiff -bg bisque3`)
*FvwmButtons: (Frame 3 Swallow(UseOld,NoHints,Respawn) "xclock" `Exec exec xclock -bg bisque3 -fg black -hd black -hl black -padding 0 -update 1`)
*FvwmButtons: (2x1 Frame 2 Swallow(UseOld,NoHints,Respawn) "xload" `Exec exec xload -bg bisque3 -fg black -update 5 -nolabel`)
*FvwmButtons: (End)
*FvwmButtons: (End)
###这个模块是按钮了,不是指窗口上的那个按钮了,是桌面上的
########################## Icon Manager ####################################
# this FvwmIconMan setup is for swallowing in above button bar example
*FvwmIconMan: numManagers 1
*FvwmIconMan: Resolution  page
*FvwmIconMan: background  bisque3
*FvwmIconMan: foreground  black
*FvwmIconMan: font        7x13bold
*FvwmIconMan: format      "%t"
*FvwmIconMan: action      Mouse   1 N sendcommand Focus, sendcommand "Iconify"
*FvwmIconMan: action      Mouse   2 N sendcommand "Iconify 1"
*FvwmIconMan: action      Mouse   3 N sendcommand "FvwmIdent"
*FvwmIconMan: followfocus true
*FvwmIconMan: sort        name
*FvwmIconMan: plainbutton          up black bisque3
*FvwmIconMan: selectbutton         down black bisque3
*FvwmIconMan: focusbutton          up yellow firebrick
*FvwmIconMan: focusandselectButton down yellow firebrick
*FvwmIconMan: dontshow icon=Untitled title=Untitled
#*FvwmIconMan: drawicons true
*FvwmIconMan: buttongeometry  300x0
*FvwmIconMan: managergeometry 1x5

########################## Window-Identifier ###############################
# Just choose colors and a fonts
*FvwmIdent: Back MidnightBlue
*FvwmIdent: Fore Yellow
*FvwmIdent: Font -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*

########################### Pager #########################################
*FvwmPager: Back #908090
*FvwmPager: Fore #484048
#*FvwmPager: Font -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*
# turn off desktop names for swallowing in above button bar example:
*FvwmPager: Font none
*FvwmPager: Hilight #cab3ca
*FvwmPager: Geometry -1-1
*FvwmPager: Label 0 Misc
*FvwmPager: Label 1 Maker
*FvwmPager: Label 2 Mail
*FvwmPager: Label 3 Matlab
*FvwmPager: SmallFont 5x8
*FvwmPager: Balloons            All
*FvwmPager: BalloonBack         Yellow
*FvwmPager: BalloonFore         Black
*FvwmPager: BalloonFont         lucidasanstypewriter-12
*FvwmPager: BalloonYOffset      +2
*FvwmPager: BalloonBorderWidth  1
*FvwmPager: BalloonBorderColor  Black
####既然 fvwm 有很多工作区。能不能有一个东西可以方便的看到那些工作区上有哪些程序,而且可以方便的切换工作区呢?FvwmPager就是为这个目的设计的。
FvwmPager有很多可以设定的参数,现在你可以试试这个简单的配置,然后修改看看,这样你可以知道如何准确设置它了.
*FvwmPager: Rows 4
#启动多少个
*FvwmPager: Columns 1
#多少列
*FvwmPagerBack #908090
*FvwmPagerFore #484048
#前景色,背景色
*FvwmPager:Font  -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
#字体设定
*FvwmPagerHilight #cab3ca
#颜色设定了
*FvwmPagerLabel 0 Main
*FvwmPagerLabel 1 Internet
*FvwmPagerLabel 2 Program
*FvwmPagerLabel 3 Amusement
*FvwmPager:SmallFont  -*-simsun-medium-r-*-*-12-*-*-*-*-*-*-*
#每个工作区的名字
*FvwmPagerBalloons            All
*FvwmPagerBalloonBack         Yellow
*FvwmPagerBalloonFore         Black
*FvwmPager:BalloonFont         -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
*FvwmPagerBalloonYOffset      +2
*FvwmPagerBalloonBorderWidth  1
*FvwmPagerBalloonBorderColor  Black
#改改看看就知道了,要设置的美观大方需要细心
这些行是对 FvwmPager 的配置,模块的配置命令都是 "*" 号开始的。 在 FVWM 里启动它:
Module FvwmPager 0 3
#启动了4个工作区
上面的Pager不错吧?不过它总是在屏幕上占那么一块位置,有没有办法让它可以在需要的时候才伸出来呢?你可以用 FvwmButtons 把FvwmPager包装起来实现这个功能。
这里是一个简单的配置:
*FvwmButtonsBack bisque3
*MainPanel: Geometry 80x18+40+4
*MainPanel: Back SeaGreen
*MainPanel: (Panel(down, indicator, delay 0, steps 1) \
                PagerPanel "Module FvwmButtons PagerPanel")
*MainPanel: Font  -*-simsun-medium-r-*-*-16-*-*-*-*-*-*-*
*PagerPanel: Geometry 80x352
*PagerPanel: (Swallow FvwmPager "Module FvwmPager 0 3")
*PagerPanel: Font  -*-simsun-medium-r-*-*-16-*-*-*-*-*-*-*
   这个FvwmButtons设置了一个 button 叫做 "MainPanel". 你可以用:
Module FvwmButtons MainPanel
   来启动它. 它启动时是这个样子:挂在屏幕左上偏右一点的地方,既没有挡住左边的按钮,又不会挡住窗口的下拉菜单。点一下就会展开,展开以后就是这个样子:再点就会缩回去。
   FvwmButtons 可以提供的功能远远不止这些。FvwmButtons 是一个非常强大的模块。你有兴趣可以看看它的 manpage.  
##########################FvwmWinList##################################
*FvwmWinList: Back #908090
*FvwmWinList: Fore Black
*FvwmWinList: Font -adobe-helvetica-bold-r-*-*-10-*-*-*-*-*-*-*
*FvwmWinList: Action Click1 Iconify -1,Focus
*FvwmWinList: Action Click2 Iconify
*FvwmWinList: Action Click3 Module "FvwmIdent" FvwmIdent
*FvwmWinList: UseSkipList
*FvwmWinList: Geometry +0-1


*FvwmBacker: Desk 0 -solid steelblue
*FvwmBacker: Desk 1 -solid midnightblue

*FvwmScroll: Back grey40
*FvwmScroll: Fore green

############################################################
############################################################
# Note that icons are shown in the module
#    only if NoIcon commnand is applied.
#Style     *  NoIcon

############################################################
*FvwmIconBox: IconBack    #cfcfcf
*FvwmIconBox: IconHiFore  black
*FvwmIconBox: IconHiBack  LightSkyBlue
*FvwmIconBox: Back        #5f9ea0
#*FvwmIconBox: Fore       blue
*FvwmIconBox: Geometry    5x1+0+0
*FvwmIconBox: MaxIconSize 64x38
*FvwmIconBox: Font        -adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*
*FvwmIconBox: SortIcons   IconName
*FvwmIconBox: Padding     4
*FvwmIconBox: Lines       10
*FvwmIconBox: SBWidth     11
*FvwmIconBox: Placement   Left Top
*FvwmIconBox: Pixmap      fvwm.xpm
#*FvwmIconBo: xHideSC Horizontal
*FvwmIconBox: SetWMIconSize
*FvwmIconBox: HilightFocusWin
#*FvwmIconBox: Resolution          Desk
*FvwmIconBox: Mouse       1       Click           RaiseLower
*FvwmIconBox: Mouse       1       DoubleClick     Iconify
*FvwmIconBox: Mouse       2       Click           Iconify -1, Focus
*FvwmIconBox: Mouse       3       Click           Module FvwmIdent
*FvwmIconBox: Key         r       RaiseLower
*FvwmIconBox: Key         space   Iconify
*FvwmIconBox: Key         d       Close
*FvwmIconBox: Key         n       Next
*FvwmIconBox: Key         p       Prev
*FvwmIconBox: Key         h       Left
*FvwmIconBox: Key         j       Down
*FvwmIconBox: Key         k       Up
*FvwmIconBox: Key         l       Right
#
# Icon file specifications
#
# Mostly, you don't have to specify icon files, as FvwmIconBox now
# reads icon files specified in Style commands.
#
*FvwmIconBox            "Fvwm*"         -

# FvwmForm alias - rlogin or telnet to host via xterm
*Rlogin: WarpPointer
*Rlogin: Font         *helvetica*m*r*n*12*
*Rlogin: ButtonFont   *helvetica*m*o*n*12*
*Rlogin: InputFont    *cour*m*r*n*12*
*Rlogin: Fore         Black
*Rlogin: Back         Light Gray
*Rlogin: ItemFore          Wheat
*Rlogin: ItemBack          Gray50
# begin items
*Rlogin: Line         center
*Rlogin: Text         "Login to Remote Host"
*Rlogin: Line         center
*Rlogin: Text         "Host:"
*Rlogin: Input        HostName  30   ""
*Rlogin: Line         center
*Rlogin: Selection    meth single
*Rlogin: Choice       TN TN off "telnet"
*Rlogin: Choice       RL RL on "rlogin"
*Rlogin: Selection    UserSel   single
#*Rlogin: Choice       Default   Default   on   "same user"
#*Rlogin: Choice       Custom    Custom    off  "user:"
*Rlogin: Text         "(Userid:"
*Rlogin: Input        UserName  10   ""
*Rlogin: Text         ")"
*Rlogin: Line         center
*Rlogin: Text         "FG:"
*Rlogin: Input        FgColor 15 ""
*Rlogin: Text         "BG:"
*Rlogin: Input        BgColor 15 ""
*Rlogin: Line         expand
*Rlogin: Button       quit "Login" ^M
*Rlogin: Command Exec xterm  $(FgColor?-fg $(FgColor)) $(BgColor?-bg $(BgColor)) -T xterm@$(HostName) -e $(RL?rlogin) $(TN?telnet) $(HostName) $(RL?-8 $(UserName?-l $(UserName)))
*Rlogin: Button       restart   "Clear"
*Rlogin: Command Beep
*Rlogin: Button       quit "Cancel"
*Rlogin: Command Nop

# FvwmForm alias - query exit ala mwm
*QuitVerify: GrabServer
*QuitVerify: WarpPointer
*QuitVerify: Font          *helvetica*m*r*n*14*
#*QuitVerify: ButtonFont    *helvetica*m*o*n*14*
*QuitVerify: ButtonFont    7x13bold
*QuitVerify: Fore          Black
*QuitVerify: Back          Light Gray
*QuitVerify: ItemFore Wheat
*QuitVerify: ItemBack Gray50
# begin items
*QuitVerify: Line          center
*QuitVerify: Text          "Do you really want to exit FVWM?"
*QuitVerify: Line          expand
*QuitVerify: Button   quit      " Exit "
*QuitVerify: Command  Quit
*QuitVerify: Button   quit      "Cancel"
*QuitVerify: Command  Nop

# MyTalk & MyFvwmTalk from Dave Goldberg
# MyTalk Form - dissappears after use
*MyTalk: WarpPointer
*MyTalk: Font *helvetica*m*r*n*14*
*MyTalk: ButtonFont *helvetica*m*o*n*14*
*MyTalk: InputFont *cour*m*r*n*14*
*MyTalk: Fore Red
*MyTalk: Back Gray
*MyTalk: ItemFore Blue
*MyTalk: ItemBack Gray
*MyTalk: Line center
*MyTalk: Text "Fvwm Function"
*MyTalk: Input Func 40 ""
*MyTalk: Line expand
*MyTalk: Button quit "Run" ^M
*MyTalk: Command $(Func)
*MyTalk: Button restart "Clear" ^R
*MyTalk: Button quit "Cancel" ^C
*MyTalk: Command Nop
# MyFvwmTalk Form - sticks around
*MyFvwmTalk: WarpPointer
*MyFvwmTalk: Font *helvetica*m*r*n*14*
*MyFvwmTalk: ButtonFont *helvetica*m*o*n*14*
*MyFvwmTalk: InputFont *cour*m*r*n*14*
*MyFvwmTalk: Fore Red
*MyFvwmTalk: Back Gray
*MyFvwmTalk: ItemFore Blue
*MyFvwmTalk: ItemBack Gray
*MyFvwmTalk: Line center
*MyFvwmTalk: Text "Fvwm Function"
*MyFvwmTalk: Input Func 40 ""
*MyFvwmTalk: Line expand
*MyFvwmTalk: Button restart "Run" ^M
*MyFvwmTalk: Command $(Func)
*MyFvwmTalk: Button restart "Clear" ^R
*MyFvwmTalk: Command Nop
*MyFvwmTalk: Button restart "Iconify" ^Z
*MyFvwmTalk: Command Next [MyFvwmTalk] Iconify
*MyFvwmTalk: Button quit "Quit" ^C
*MyFvwmTalk: Command Nop

# to change banner pixmap
#*FvwmBanner: Pixmap fvwm3.xpm
#*FvwmBanner: Timeout 2
####以上都是模块了,我也不太懂,还好fvwm中我没有设置这些也有很好的效果了,具体你可以去www.fvwm.org上来了解这些模块的作用.
 楼主| 发表于 2003-3-16 22:54:44 | 显示全部楼层
1.2.3 一些其它的命令

  这些是上面未曾讲到的:
FVWM 可以有很多个虚拟桌面(desk)(几乎无穷多!),每个虚拟桌面可以被分成很多个页("page")。这些page相当于把你的屏幕扩大了很多倍。这一行就是设定每个desk包含多少page.
DeskTopSize 这类语句指定了整个FVWM的某种行为方式,类似的语句还有很多。比如:
    * Read file. 插入另外一个文件file的内容。如果你会C语言,你就知道这个语句相当于 #include . 当你的配置文件在某一方面有很长内容时,比如我的配置文件里有大量stroke,你就可以把这些都写到另一个文件里,这样使主配置文件容易修改。
    * Exec app. 启动一个shell,并且在里面执行"app"命令。这时用菜单和按钮来启动程序时经常用到的命令。
      如果你要启动一个X程序最好同时使用 exec, 比如
Exec exec rxvt
      这样shell会执行"exec rxvt", 用rxvt替代自己的正文段,这样才不会出现很多shell在那里等待X程序返回。
    * Module FvwmXxx. 启动一个叫做 FvwmXxx 的模块。一个模块是一个程序,它直接通过管道与Fvwm通信,所以必须从Fvwm fork() 出来,而不能从一个 xterm 独立启动。模块可以无限制的扩展Fvwm的功能,只要 Xlib 允许。
    * ImagePath path. 指定一个路径,在配置文件里要用到的图标等文件就会到这个路径里去寻找。比如:
ImagePath +:/usr/share/icons:/usr/share/pixmaps:
$HOME/.fvwm/icons
      加号是表示以前定义过的那个 ImagePath. FVWM 可以使用 .xbm, .xpm 和 .png 格式的图标。
    * Move, Raise, Lower, Resize, ... 这些都是常用的操纵窗口的命令。
    * Close, Delete, Destroy, Iconify, Maximize, WindowShade. 关闭窗口,图标化窗口,最大化窗口,shade 化窗口. 你会发现Xwindow关闭窗口的方式有很多种,其中 Close 是最文明的一种,这会发给窗口一个消息让它收拾干净然后退出。Destroy 是立即杀死这个窗口,跟 xkill 的功能一样。Delete介于两者之间,先礼后兵,如果窗口不知道怎么收拾干净,那么就强行杀死它。
    * OpaqueMoveSize x. 如果一个窗口移动时显示内容,那么它必需占屏幕面积的 x%.
    * MoveToDesk, MoveToPage. 可以把任何窗口移动到指定的桌面和页面。
    * SnapAttraction. 设定在什么距离以内,满足什么条件的窗口就被吸附在一起。biaji~~~~~
    * WarpToWindow x[p] y[p]. 让鼠标移动到窗口范围以内。x,y是在窗口内的坐标,用百分比表示。后面如果有后缀"p", 就用像素来表示。
    * IgnoreModifiers. 你可以忽略某些键盘控制键。这将影响到你的鼠标和键盘热键定义。详细情况见鼠标和键盘一节。
    * DesktopName desk name. 定义第desk号桌面的名字叫 name.
    * Scroll. 移动你在桌面上的 viewport, 这样你可以把桌面当成一个整体来浏览。看到很大的范围。
    * Nop. 不操作,在有些时候需要用它来占位,下面我们会遇到这样的例子。
    * PipeRead. 从一个外部命令得到输入。这可以用来根据你的系统构造许多非常高级的控制方式。其中一种叫做“菜单式文件管理器”。我们在菜单一节会遇到这个用法。
    * SetEnv. 设置FVWM的环境变量。  
    就举这些吧……我只是举出了我有时会用到的,其实还有很多很多,你看看 FVWM 的manpage就知道了。  
# 鼠标和键盘
  FVWM几乎可以以无穷的方式组合,来进行鼠标和键盘的操作。你还可以加入窗口上下文来进行更方便的动作。
键盘操作的定义:
Key Keyname Context Modifiers Function
它表示:在名叫 Keyname 的键在 Context 上下文按下时,如果控制键 Modifiers 组合按下,那么执行 Function. 键盘操作后面的部分跟鼠标一样的含义,我们下面只用鼠标操作来一起说明这些命令的用途。
鼠标操作的定义:
Mouse Button Context Modifiers Function
它表示:在鼠标编号为 Button 的键在 Context 上下文按下时,如果键盘控制键 Modifiers 组合按下,那么执行 Function.
鼠标键编号的方法是:1 左键,2 中键,3 右键。如果你的鼠标有轮子,那么一般4表示往上滚动,5表示往下滚动。
Context是鼠标按下的位置,它可以是:
    * R(Root Window) 根窗口
    * n (n 是0...9 之间的一个数)。第 n 号窗口按钮。按钮是这样编号的:
      1 3 5 7 9     0 8 6 4 2
      左边是奇数右边是偶数, 外面的大中间的小。
    * T(Title)标题栏
    * S(Sidebar)也就是边框. 也可以用 '[', ']', '-' , '_' 分别表示左,右,上,下的边框。
    * F(Frame)就是用来resize的那四个角落. 也可以用 '<', '^', '>' and 'v' 分别表示左上,右上,右下,左下的角落。
    * W(Working Area) 应用程序窗口工作区域
    * I(Icon window) 图标化的窗口。  
这些上下文可以组合。比如 "FST" 表示在frame, sidebar, 或者 title.
Modifiers 是鼠标操作时同时的键盘控制键。M 表示 "Meta",在PC上就是Alt,S: shift, C: ctrl. 还有 A: any, N: none. 也可以组合,比如"MS" 表示同时按下Alt-Shift.
Function 就是任意的FVWM操作了,可以是一个直接的命令,也可以是一个 FVWM 函数。
现在我们分析一下下面这个定义:
Mouse 3 W       SC      CloseOrNot
这个定义是说,在窗口上点击鼠标右键,并且先按下 Shift-Ctrl,那么调用 CloseOrNot 这个FVWM函数。这个函数会作用与当前鼠标所在的上下文,也就是一个窗口。函数是这样定义的:
# 函数
DestroyFunc CloseOrNot
AddToFunc CloseOrNot
+ C Silent Close
+ M Nop
你可以把一系列的操作有条件的加入到一个叫做“函数”的结构里,以后这个函数就可以像命令一样被使用了。
AddToFunc 把动作附加到函数, 如果函数不存在就先创建这个函数。除了第一行,后面的行都以一个"+"号开头,这说明以下是上一个命令(AddToFunc)的继续。DestroyFunc 是为了消除以前有可能定义过的函数体。这个函数 CloseOrNot 表示:
    * 如果是一个鼠标点击(C), 那么关闭这个窗口(Close), 但是如果现在不是在窗口上下文,也就是说,函数调用的时候没有一个确定的目标,那么不进行操作,而不是出现一个"+"字瞄准器让用户选择窗口。 这就是 "Silent" 的含义。
    * 如果鼠标点下去之后移动了,也就是“拖动”(M),那么不进行操作。  
#条件命令
All, Any, Cond, Current, Direction, Next, None, Pick, WindowId, ... 这些命令是条件选择窗口的办法,它们让你可以用非常多样的方法,来确定你的操作需要对哪一个或者哪些窗口进行。比如:
All (Iconic) MoveToPage -1 -1
把所有图标化的窗口都移动到桌面右下角的那一页。
Key F5 A A Direction North Maximize True 0 growdown
以后按 F5 就可以让当前聚焦窗口上面(North)那个窗口往下长大,直到被当前窗口挡住去路。你有时候想在VIM里抄 Acrobat Reader 里的内容,安排窗口大小的时候就可以用这招。  

1.3 模块的功能

   这里是重点了,很多你看到的漂亮的东东都是通过模块来实现的,我将按照模块名结合实例来讲讲如何设置,你可以一边看一边试验.

1.3.1 一些准备工作

&:如何选定颜色
fvwm中许多的地方需要配置颜色,简单的判定颜色的方法是:在kde的控制中心-观感-背景-颜色1,点击弹出的菜单的右下角有个HTML方框,有类似这样的数值:#8A94C6,这就是你选定的颜色了.我们以几个菜单的背景设定来看:
MenuStyle *  Font -*-lucida-bold-r-*-*-12-*-*-*-*-*-*-*
#字体的设定
MenuStyle *  HilightBackOff, Hilight3DThickness -2, ActiveForeOff, PopupOffset -3 100
#菜单的样式设定,你可以取消这项看看是什么效果
MenuStyle *  SidePic linux.net.png,SideColor black
#那张图片就是菜单左面的那个东东了
MenuStyle *  ItemFormat "%s%10p%|%i%12p%l%|%6p%>%10p%s"
#菜单中字体的放置格式,改改数值发现了什么变化,注意:每个字母是有含义的,
MenuStyle *  MenuFace VGradient 128 1 #807C77 50 #908B86 50 #807C77
#这就是颜色的设定了,可以将128改为256,512,颜色的变化就更加柔和了
我再给出几种菜单的样式,你可以选其中的语法来试验看看
1:MenuStyle * Foreground gray90, Background royalblue3, SeparatorsShort
MenuStyle * Hilight3DOff, HilightBack royalblue2, ActiveFore gray17
MenuStyle * Animation
#MenuStyle * TrianglesSolid
MenuStyle * Font -mdk-helvetica-medium-r-normal--12-120-75-75-p-64-tis620.2533-1, PopupOffset 1 90
MenuStyle * MenuFace VGradient 128 1 royalblue3 50 royalblue1 50 royalblue1
2:MenuStyle * Foreground White, Background Black, SeparatorsShort
MenuStyle * Hilight3DOff, HilightBack White
MenuStyle * Animation, TrianglesSolid, SideColor White
MenuStyle * Font -adobe-helvetica-medium-r-*-*-20-*-*-*-*-*-*-*, PopupOffset 1 90
MenuStyle * MenuFace VGradient 256 2 rgb:0/40/67 50 steelblue 50 rgb:AA/AA/FF
#MenuStyle * MenuFace VGradient 256 2 rgb:5b/73/38 50 rgb:c8/c7/43 50 rgb:cf/df/83
3:Menustyle * fvwm, Font -adobe_koi8_ru-helvetica-medium-r-normal-*-*-120-*-*-p-*-koi8-r
MenuStyle * MenuFace, ActiveFore, HilightBack
MenuStyle * MenuColorset 50, ActiveColorset 51, GreyedColorset 52
MenuStyle * Foreground black, Background grey80, Greyed grey40
MenuStyle * Hilight3DThickness 1
MenuStyle * PopupDelayed, PopupDelay 50, PopdownImmediately, PopdownDelay 50
MenuStyle * Popupoffset 2 200, TitleWarpOff
MenuStyle * VerticalItemSpacing, VerticalTitleSpacing
MenuStyle * TitleUnderlines2, SeparatorsLong, TrianglesRelief
MenuStyle * Animation, AutomaticHotkeysOff, DoubleClickTime
MenuStyle * BorderWidth 1, SidePic, SideColor
MenuStyle * PopupAsSubmenu, HoldSubmenus
4:MenuStyle *                ForeGround rgb:00/00/30, Background rgb:a0/a0/a0, Greyed rgb:4e/4e/4e
MenuStyle *                Font defaultfont(18)
MenuStyle *                MenuFace YGradient 512 4 yellow 5 rgb:00/ff/ff 5 lightgrey 50 lightblue 90 yellow
MenuStyle *                PopupImmediately, SubmenusLeft, TrianglesSolid, SeparatorsShort
MenuStyle *                HilightBackOff, Hilight3DThickness -2, ActiveForeOff, PopupOffset -3 100
MenuStyle *                TitleWarp, TitleUnderlines1
MenuStyle *                SidePic sidepic.xpm, SideColor #0000ff
MenuStyle *                ItemFormat "%10p%<%6p%|%i%12p%l%|%12p%s"
5:MenuStyle * Foreground grey90
MenuStyle * Background #1c5572
# diverses options
MenuStyle * SeparatorsShort
MenuStyle * Hilight3DOff, HilightBack #424164, ActiveFore white
MenuStyle * Animation
MenuStyle * TrianglesSolid
MenuStyle * Font -adobe-helvetica-medium-r-*-*-11-*-*-*-*-*-*-* fvwm, PopupOffset 1 90
MenuStyle * MenuFace VGradient 128 1 #2c80A0 1 #1c5572
#MenuStyle * MenuFace VGradient 128 2 grey85 50 grey70 50 grey50 -- Flat
BorderStyle -- HiddenHandles NoInset
6:MenuStyle * Win
MenuStyle * MenuColorset 0, HilightBack darkblue
MenuStyle * ItemFormat "%2.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"
MenuStyle * Font "Shadow=1:xft:Arial:size=10:encodig=iso8859-15;" \
                   "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"
如何,对比这些变化后,你可以发现你已经能控制自己的菜单样式了^-^
发表于 2003-3-17 19:45:17 | 显示全部楼层
FVWM现在是什么样子,请看这里:
http://www.linuxfans.org/nuke/modul...=geninfo&did=59
Not Found
The requested URL /nuke/modul...=geninfo&did=59 was not found on this server.

Apache/1.3.27 Server at www.linuxfans.org Port 80
 楼主| 发表于 2003-3-17 23:30:32 | 显示全部楼层
发表于 2003-4-8 19:54:24 | 显示全部楼层
不错,我也很喜欢fvwm
 楼主| 发表于 2003-4-9 14:51:01 | 显示全部楼层
不过fvwm比enghlitenment慢和
发表于 2003-4-11 16:37:15 | 显示全部楼层
你对FvwmTaskBar能再做得好看点吗????
发表于 2003-4-14 11:49:18 | 显示全部楼层
good
多谢probing兄。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表