当前位置: 首页 > 工具软件 > FVWM > 使用案例 >

一篇不错的fvwm入门教程.

伊富
2023-12-01
原文出处:
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/fvwm.html

FVWM 的旅程
先去看看王垠写的 Fvwm简明使用手册 ,然后到 FVWM 看看 screenshots ,最好挑一个自己喜欢的下手(我觉得还是不要自己完全重来,别人的代码里面有许多精彩的东西)。我把自己用到的几个东西写下来:

topTheme
你可以到 FVWM Themes Project 去下载一个省事的,不用配置就可以得到非常棒的桌面环境。个人配置最好集成在 ~/.fvwm/themes/personal 里面,所有相关的配置可以参看其说明文档,最好以 FILE-extra 来命名。比如要定义自己的启动函数,在 ~/.fvwm/themes/personal/ 建立 startup 文件(fvwm-themes本身没有定义启动函数,所以不用加extra),里面就可以定义 AddToFunc StartFunction ... ;要定义自己的样式风格则建立 styles 和 menustyle-extra ,里面就随自己的喜好了;要定义自己的快捷键绑定则建立 bindings-extra ,定义自己的函数则建立 functions-appbind-extra ,以及自己的菜单 menus-programs-extra 。把 ~/.xsession 或 ~/.xinitr 中的 fvwm2 改成 fvwm-themes-start 即可,选择某种样式后,再从 Personal 列表里选择需要应用的样式或者快捷键等。那么这次的配置就被记录下来,下次启动就自然恢复到这样的配置了。刚刚接触FVWM的时候,fvwm-themes还是非常顺手贴心的,如果想完全定制自己的工作环境,就需要继续深入FVWM。这里是两张我比较喜欢的截图:
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/fvwmthemes1.png
http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/fvwmthemes2.png

另外一个比较不错的个人网页是 Fvwm Theme ,作者写了个非常好的perl script,你可以进去看看,把里面的路径改成适合你自己环境的,并按照它说的方法修改.fvwm2rc。这里我遇到一个问题,就是 Piperead '~/scripts/fvwm-theme -init' 中script的路径必须写全,Fvwm似乎不能利用 $PATH ,所以为了让script工作,fvwm-theme源文件中的路径也需要修改。这时就可以通过 fvwm-theme 命令方便的更改主题,背景等等。如果想要更方便一点,在你需要的菜单里加一项:

+ "Themes" Popup ThemesMenu

fvwm-theme会记住当前的theme,并在下次启动的时候直接启动这个。其实很简单,作者就是写了一个 ~/.fvwm-theme 文件,里面记录着theme的名字,下次启动时,-init参数就要读取这个文件,然后动态生成一些style。

网上还有一个不错的fvwm-decors配置( http://www.twobarleycorns.net/fvwm-decors.html ),作者通过 menuB3.fvwm 来完成Decor的动态切换。里面的一个关键函数是 SwitchDecor ,其作用就是先把当前的Modules都Kill掉,然后Read新的Decor配置,最后重新加载各个Modules。每个decor的配置文件都通过 AddToDecor 定义了一个Decor,最后通过 Style * UseDecor DecorName 将新的样式应用到全局。实际上我们使用的时候,没有必要将所有的Modules都Kill,只要更改样式就可以了。

fvwm-theme做得非常精致,而fvwm-decors里面有个非常不错的Mac模拟,所以我想将二者结合起来一起用,但多次试验之后发现简单的合在一起问题多多:要么样式不变,要么是只变一部分,要么就是乱七八糟。找来找去也没有找到问题究竟出在那里,所以只好准备修改程序。

fvwm-theme中作者没有定义Decor,只是把ButtonStyle,TitleStyle罗列出来。而fvwm-decors给人感觉比较模块化,所以第一步就动手改造fvwm-theme的perl脚本,对原来的命令用 AddToDecor 进行包装,取名与文件夹相同1。此外,还需要对每种样式的decor描述文件进行一点改动(样式行前加加 + ,合并到到 AddToDecor , 并在文件最后添加 Style * DecorName 一行):这些操作可以sed通过一个简单的脚本顺利完成。这样修改以后二者就能一起用了,而且你还可以随便添加新的Decor。

上面两个小工具主要是更改Decor样式,其中fvwm-themes也可以更改桌面。另外还有一个也不错的选择桌面的perl脚本fvwm-wallpaper。使用比较简单只需要针对存放wallpaper的文件夹运行这个脚本,它会生成 $HOME/.fvwm-wallpaper 这么一个文件夹。这个文件夹里面有一个 menu 文件,需要被Read到你的.fvwm2rc中以便选择桌面。另一个是 thumbnail 文件夹,里面都是被convert(别忘了安装ImageMagick)过来的缩小版wallpaper。这个脚本方便的地方是在更改桌面的时候可以看到缩略图,不好的地方是如果你有成千上百张桌面,它就会生成同样数目的缩略图,而且新添加图片以后必须重来一次才能看见:这个convert的过程会非常漫长。而且它不支持嵌套文件夹,水都不希望自己的wallpaper里面一团糟,分类是必须的。基于这两点不爽的地方我就不再用它了!如果你的图片比较少,完全可以试一试,感觉还是挺刺激的!不要忘了修改里面的设置背景的命令,最好用 fvwm-root。 这样可以保证你的透明效果正常。


topIconify图标
有些程序自己提供了Iconify的图标,如果要自己指定需要使用 IconOverride 参数,比如替换firefox的默认地球仪可以用:

Style "Firefox-bin" Icon myfirefox.png, IconOverride

另外,诸如firefox之类的很多程序在指定style的时候不能凭自己的猜测用firefox或firefox-bin,最保险的就是用: xprop ¦ grep CLASS 然后点击标题栏,就可以得到标准的CLASS名称,这也就是为什么上面用Firefox-bin。

top透明
如果在Windows上看到一个透明的term那才叫实实在在的惊讶,对于UNIX家族而言,绝大多数WM都可以轻松实现透明效果。对于FVWM自然容易的很,两步走:(1)在使用的 Colorset 里面加上 RootTransparent Buffer ;(2)背景设置使用 fvwm-root 或 wmsetbg ,就是不能用 xsetroot 。更详细的信息请参看:Using Transparency。 此外, term想要支持透明,必须以-tr参数启动! 看看我的一个截图

http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/trans2.png

topAutohide
自动隐藏可以很方便的节省桌面空间,我把常用的工具放到一个Autohide的Button里面,让它挂在右上角,鼠标移过去的时候自动显示,移走的时候自动隐藏。这个功能也很简单,看一下 http://www.fvwm.org/documentation/faq/#7.17 。后来我发现桌面上还是什么都没有的好,所以索性这个悬挂按钮也不要了,改成了一个自动隐藏的Pager,这样清新爽利,鼠标往右上角一挪,Pager就出来露个脸,鼠标拿走,Pager又缩回头去:自动隐藏方便不少。

topDocApp


本来是 Windows Maker 的特色,但FVWM可以天衣无缝的把它们给融合进来。FvwmButtons可以配置为“吸收”某类程序,比如:

*FvwmButtons: (Size 11x5, Swallow wmcpuload, '')

就可以把名为 wmcpuload 的程序吸收过来,就是说当你启动 wmcpuload 后,它的界面会显示在这个FvwmButtons上面。这样的话你可以通过操作FvwmButtons来操作这个docapp,就像装了个框,当然这个框也可以被你配置的不存在。如果想一启动就让这个docapp运行,那么可以这样:
*FvwmButtons: (Size 11x5, Swallow wmcpuload, 'Exec exec wmcpuload -bw -bl -lc rgb:ee/82/ee')

这些小玩意儿特别有意思,尤其是刚刚接触,视觉效果非常棒。我曾经在桌面上放了十几个这样的东西,就像看Matrix一样,动静皆有,色彩绚烂,赏心悦目,是美观和便利的完美结合。可以到 http://www.bensinclair.com/dockapp/ 看看这个 http://www.dockapps.org 。基本上每个工具都配有一个-config工具,比如wmmaiload对应的配置工具是wmmaiload-config,简单好用。

top字体设置
FVWM 可以为英文和中文指定不同的字体,比如英文使用verdana,而汉语使用simsun字体。

MenuStyle * Font "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-14-*-*-*-*-*-*-*"

top字体太小
有些gtk程序在fvwm下面菜单栏上的字体可能比较小,那么在~/.gtkrc-2.0里面写这样一句:

gtk-font-name = "SimSun 12"

当然前题是系统上装好了sim字体(一般都没有问题,默认已经安装了),否则的话可以换一个xlsfonts中有的。

另外还可能遇到的一个问题就是openoffice菜单栏的字体不能正常显示或者太小,这个在 FAQ中有解决,就是在 工具->选项->OpenOffice.org->字体 中将 使用字体替换 打勾,然后在下面左边的框里填 Andale Sans UI ,右边的框里找一个系统有的字体,然后确定。如果这时字体还显小,那就在 视图 中将 显示比例 调大一些,如下图:

http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/images/ooffice.png

另外一种解决openoffice字体小的办法就是启动 gnome-settings-daemon 。

top如何使用Windows键
如果你习惯左手使用鼠标(比如我),FVWM怎样配置呢?如果你希望使用Windows特有的那几个键,FVWM怎样配置呢?实际上这些工作都由xmodmap完成,它的功能就是完成键盘的物理键映射到计算机内部的逻辑键,也就是说,如果你愿意,可以将A映射成B,每当你按下A的时候,计算机就当B处理(估计爱因斯坦也不会这么折腾自己)。xmodmap完成键映射的命令格式是: xmodmap -e "keycode NUMBER = KEYNAME" 。其中 keycode 是关键字, NUMBER 是键的编号,也即物理名称, KEYNAME 是逻辑名称,即计算机内部把序号为 NUMBER 的键当 KEYNAME 处理(具体可以参考man xmodmap)。

下一步就是获得键的编码和名字了,这可以通过 xev 来完成。在 xev 的那个小窗口上按键然后观察提示信息,可以很方便的找到 keycode NUMBER 和 KEYNAME 。比如在我的系统上按下左边的Windows键屏幕显示:

KeyRelease event, serial 30, synthetic NO, window 0x2000001,
root 0x8d, subw 0x0, time 4314898, (40,69), root:(885,658),
state 0x50, keycode 115 (keysym 0xffeb, Super_L), same_screen YES,
XLookupString gives 0 bytes: ""

对于pc104键盘而言,Windows特有的那些键一般对应于: keycode keyname
Windows Left Super_L, Hyper_L
Windows Right Super_R, Hyper_R
Windows Menu Menu

要在FVWM里面用这些键,最好把它们当成跟C,M,S一样的Modifier。这可以通过下面这一段完成:

xmodmap -e 'keycode 115 = Super_L' # Left windows key
xmodmap -e 'keycode 116 = Super_R' # Right windows key
xmodmap -e 'keycode 117 = Menu' # Windows menu key
xmodmap -e 'add Mod3 = Super_L' # Make left windows key a modifier
xmodmap -e 'add Mod4 = Super_R' # Make right windows key a modifier

上面的keycode是十进制的,也可以使用十六进制写法,比如 xmodmap -e 'keycode 0x73 = Super_L' 。为了启动时自动加载,你可以把这些配置写到 ~/.xinitrc 或 ~/.xsession 中(具体看系统启动时用哪个);也可以把它写到 ~/.Xmodmap ,因为在启动X的脚本 /etc/X11/xinit/xinitrc 里已经包含了 xmodmap ~/.Xmodmap (可能不同的系统不一样,我的Debian中就没有这条命令,所以如果没有生效就自己改一改)。xmodmap是跟X相关的,所以如果你不启动X,这些配置有可能不管用,所以不要对把它们写到 ~/.bashrc 里寄予太大的希望(或者你可以看看关于dumpkeys和loadkeys的内容,我不是很了解)。

这时就可以在FVWM中把这些键当作普通的Modifier来用了,跟C,M,S对应,它们的表示是3或者4。比如上边定义了Mod3为Super_L,那么3就表示Super_L。看这个例子,把Windows Left + L帮定到 Screen Lock(如同WindowsXP一样),就可以这样来:

Key L A 3 Exec exec xscreensaver-command -lock

是不是突然明白了为什么看不懂别人配置文件里的3和4?原来是它们在作怪!闲话修提,这样一来又可以做出不少快捷键来,鼠标基本可以放在一边了。

最后,左手鼠标很简单 xmodmap -e "pointer = 3 2 1 4 5" 。 不要用xfce里面的“左撇子”设置,糟糕得很,在桌面上和窗口上正常,但是到了工具栏就ytht了。

top把鼠标动作绑定到键盘
一般情况下绑定都是将组合键绑定到函数,而这个函数通常都不包含鼠标操作。但有时我们却希望模拟鼠标动作,虽然这种情况不多,但也不独特。比如我的桌面配置中有个悬挂按钮,点击这个按钮弹出一个常用程序按钮列(参见我的屏幕截图),再点击就可以将其收缩。非常直观的想法就是将这个操作绑定到某个键上(类似Windows的开始菜单,只要按下Windows键就可将其激活或者相反)。在FVWM的FAQ( http://fvwm.org/documentation/faq/#toc_4.7 )中看到个非常棒的函数 press_fvwmbuttons ,专门就是用来处理这种情况的。这个自定义函数主要调用了 FakeClick 。为了说明清楚,摘抄man Fvwm上的一段话:

FakeClick [command value] ...
This command is mainly intended for debugging fvwm and no guarantees are
made that it works for you. FakeClick can simulate mouse button press and
release events and pass them to fvwm or the applications. The parameters
are a list of commands which consist of pairs of command tokens and
integer values, The press and release commands are followed by the
appropriate mouse button number and generate a button press or release
event on the window below the pointer. The wait commands pauses fvwm
for the given number of milliseconds. The modifiers command simulates
pressing or releasing modifier keys. The values 1 to 5 are mapped to Mod1
to Mod5 while 6, 7 and 8 are mapped to Shift, Lock and Control. The
modifier is set for any further button events. To release a modifier
key, use the corresponding negative number. The depth command determines
to which window the button events are sent. With a depth of 1, all
events go to the root window, regardless of the pointer's position. With
2, the event is passed to the top level window under the pointer which is
usually the frame window. With 3, events go to the client window. Higher
numbers go to successive sub windows. Zero (0) goes to the smallest window
that contains the pointer. Note that events propagate upward.
FakeClick depth 2 press 1 wait 250 release 1
This simulates a click with button 1 in the parent window (depth 2) with
a delay of 250 milliseconds between the press and the release. Note: all
command names can be abbreviated with their first letter.

为了适应不同的配置, press_fvwmbuttons 函数可能需要一些修改。如果需要将鼠标点击操作指定到某个特殊的窗口或者Module,那么直接按照FAQ将depth设置为2就不合适,1可能是一个比较好的选择。此外,比较关键的就是 Next 中的 conditions ,一定要将期望接受鼠标操作的窗口或Module写到里面,即他们的属性能够匹配 conditions 。比如我将悬挂按钮的属性添加了 CirculatedHit ,这样就可以在 Next (MyStartMenu, CirculatedHit) 中被识别。

做好函数定义后就可以随意绑定了,比如使用左Windows键控制我的悬挂按钮就可以这样:

Key Super_L A N press_fvwmbuttons 1 50 50

top如何取色
颜色可以使用 xcolors 和 xcolorsel 。或者 FireFox 有个 ColorZilla 的插件也可以,不过它只能取网页内的颜色。这里不错Color Scheme。

topFvwm怎么乱了?
如果通过gdm运行了其它Window Manager,再回来选择Fvwm之后,可能出现异常:Fvwm不能正常显示Module和菜单上的字,而且 .xsession 也没有被执行,因为 .xsession 应该是通过 /usr/bin/ssh-agent /home/xrn/.xsession 启动。我不太清楚具体原因是什么,修改的办法是:

update-alternatives --config x-window-manager

选择Fvwm,然后注销显示gdm登录画面,在 会话 中选择 系统默认 ,这里直接选择fvwm还是有问题(个人猜测可能是gdm的机制,如果直接选择fvwm,它就会自己启动fvwm而不是按照我们期望的通过 .xsession 启动)。如果不喜欢用gdm,直接通过 startx 或 xinit 都不会出现这种问题。

topFvwmTaskbar
如果嫌自己配置FvwmTaskbar太罗索,那就试试这个小工具吧: http://fbpanel.sourceforge.net

topFvwmPager 怎么设置边框颜色
设置好它的 Style FvwmPager BackColor YourColor, BorderWidth 1 ,或者看一下这里: http://www.hpc.uh.edu/fvwm/archive/0209/msg00191.html

topFvwmIconMan
IconMan集中管理所有的窗口(当然可以有选择的管理),基本配置可以参考manpage中的说明,但是 bif 这个命令很不好理解。我自己的体会是这样的。man page中关于 bif 的描述是这样一段:

bif Button Integer/String
A relative branch instruction. If Button is Select or Focus, then take the branch if there is a selected button or a focused button. If Button is an integer, then branch if nonzero. If it is one of Up, Down, Right, Left, Next, Prev, then the branch is taken when the current button can move in that direction. If the branch is taken, then Integer commands are skipped. No backwards branches are allowed.


这段话写的非常模糊,只告诉了什么情况跳转,但是跳到哪里并不明确。实际上 bif Button Integer/String 不是一个完整的分支描述,它只相当于C语言中的:

if (expression)

根本没有说明 expression 为真时到哪里,为假时到哪里。所以问题的关键就是找到分支跳转的分界线,对应C语言里面的 then,else 。先看一下man page给出的例子:

bif Next 3, gotobutton 0, select, ret, gotobutton Next, select
If a button is selected, and it's the last button, go to button 0. If it's not the last button, go to the next button. Otherwise, do nothing. Basically, this action cycles through all buttons in the current manager.
从这个例子可以大致估计跳转的分界线在于 ret ,但是与常规的跳转正好相反,翻译为伪码基本上是:
if Next 3 then
gotobutton Next, select
else
gotobutton 0, select
end if

即ret把命令序列分为两部分,后半部分是条件为真时的执行分支,而前半部分是条件为假时的执行序列。这个猜测可以从后面的例子进一步得到验证。
bif select 7, bif focus 3, gotomanager 0, select, ret, gotobutton focus, select, ret, gotobutton down, select
This is good for sending to FvwmIconMan with a SendToModule command. If there is a selected button, it moves down. Otherwise, if there is a focused button, it is selected. Otherwise, button 0 of manager 0 gets selected.
按照上面的规则翻译结果是:
if select 7 then
gotobutton down select
else
if focus 3 then
gotobutton focus, select
else
gotomanager 0, select
end if
end if
跟man page中的说明是一致的,不过需要注意的是ret是从后往前数的,即第一个条件判断与最后一个ret匹配,整个语句被分割成两部分(相当于then一部分,else一部分),每一部分仍然按照上面所说的匹配原则。

这样的话,bif就好用了,可以单独为FvwmIconMan绑定快捷键,方便的实现窗口定位操作。

另外,如果在不同的Pager或者Desk启动了不同的程序,那么FvwmIconMan需要配置 Resolution属性,比如:

*FvwmIconMan: Resolution desk

来收集整个桌面的程序,而不管它在哪个Pager。类似的有Pager以及Global。如果你想在 IconMan上点击某个应用程序就能转到那个程序(如同Window List一样),可以简单的配置如下:
*FvwmIconMan: Action Mouse 1 N sendcommand "Iconify off", sendcommand RaiseLower, sendcommand FlipFocus

当然你可以把它帮定到其它键。我的.fvwm2rc关于IconMan的配置如下:
DestroyModuleConfig FvwmIconMan: *
# 只要一个IconMan
*FvwmIconMan: Nummanagers 1
# 要收集所有的程序
*FvwmIconMan: Resolution global
*FvwmIconMan: Background steelblue4
*FvwmIconMan: Foreground white
*FvwmIconMan: Font "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-12-*-*-*-*-*-*-*"
# 设置大小,并把它放在左下角
*FvwmIconMan: ButtonGeometry 233x0
*FvwmIconMan: ManagerGeometry 1x0+0-21
# 如果某类程序使用了WindowListSkip属性,那么IconMan就不收集它们
*FvwmIconMan: UseWinList true
*FvwmIconMan: DrawIcons true
*FvwmIconMan: Shape true
*FvwmIconMan: FollowFocus true
*FvwmIconMan: Sort name
*FvwmIconMan: PlainButton flat white steelblue
*FvwmIconMan: SelectButton up white dodgerblue4
*FvwmIconMan: FocusButton up white brown
*FvwmIconMan: FocusAndSelectButton down white maroon
*FvwmIconMan: TitleButton raisededge white steelblue
*FvwmIconMan: Tips always
*FvwmIconMan: TipsFont "-*-verdana-medium-r-normal-*-12-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-12-*-*-*-*-*-*-*"
*FvwmIconMan: NoIconAction "SendToModule FvwmAnimate animate"
*FvwmIconMan: ReliefThickness 1
*FvwmIconMan: Action Mouse 1 N sendcommand "Iconify off", sendcommand RaiseLower, sendcommand FlipFocus
*FvwmIconMan: Action Mouse 2 N sendcommand "WarpToWindow 50 50"
*FvwmIconMan: Action Mouse 3 N sendcommand "Popup MenuFvwmWindowOps rectangle $widthx$height+$left+$top 0 -100m"
*FvwmIconMan: Action Mouse 4 N bif Prev 3, gotobutton -1, warp, ret, gotobutton Prev, warp
*FvwmIconMan: Action Mouse 5 N bif Next 3, gotobutton 0, warp, ret, gotobutton Next, warp
*FvwmIconMan: Action Key Up N bif Prev 3, gotobutton -1, warp, ret, gotobutton Prev, warp
*FvwmIconMan: Action Key Down N bif Next 3, gotobutton 0, warp, ret, gotobutton Next, warp
*FvwmIconMan: Action Key Return N sendcommand "Iconify off, Raise, WarpToWindow 50 50"

top一点笔记
自定义函数在动作命令前面常有I,M,C,D等指示符其作用是:
,---------------------
| man fvwm (AddToFunc)
`---------------------
The letter before the action tells what kind of action triggers the command
which follows it.
'I' stands for "Immediate", and is executed as soon as the function is invoked.
'M' stands for "Motion", i.e. if the user starts moving the mouse.
'C' stands for "Click", i.e., if the user presses and releases the mouse.
'H' stands for "Hold", i.e. if the user presses a mouse button and holds it down
for more than ClickTime milliseconds.
'D' stands for "Double-click".
The action 'I' causes an action to be performed on the button-press, if the
function is invoked with prior knowledge of which window to act on.

top我的桌面
基本桌面,透明特显, 邮件通知, 自动隐藏,不错的一个,另一种风格基本的,炫一点的。看看这几张奇怪的图吧,你能发现错误么?First,Second,Third。最后补一张Emacs。再来一张用了FvwmIconMan的。

这里是目前2我的 .fvwm2rc 。我把自己的所有配置,包括.fvwm2rc以及相关修改过得script等打包xrn-fvwm。解压以后把scripts放到 $HOME ,其它统统丢进 $HOME/.fvwm ,并把fvwm2rc改名.fvwm2rc。如果图标显示不正常,请参看.fvwm2rc里面的 ImagePath 。

top写在尾巴上
新鲜事物给人的感觉是刺激的,总想在最短时间内探其究竟,用其所有,追求一种不断的“进步”。当这种激情逐渐消退,当工具的功能更多的便利于你的工作而不是过分的在乎它的界面时,就会发现很多努力都是徒劳。FVWM也是这样。刚开始接触FVWM,无论如何都要搞透明,搞主题,搞动态效果,搞这个搞那个,昨天晚上我才突然之间醒悟原来我所需要的就是一个桌面:上面最好有个任务栏,还得有个虚拟桌面切换器。这些工作顶多就用到两个Module:FvwmTaskbar和FvwmPager。实际上,gnome-panel、fbpanel、peksystray等工具都可以胜任。我把以前那些好多好多没用的设置都去掉了,除了快捷键的定义。有了快捷键就算桌面什么都没有我仍然可以操作自如:Mouse2最大化,Mod3+I最小化,Mod3+D全部最小化,Mouse+3图标化,Mod3+M最大化,Mod3+R放缩窗口,Mod3+(1,2,3,4)切换虚拟桌面,Mod3+(Left,Right)切换Pager,Mod3+X关闭窗口,Mod3+Q拉出qterm灌水,Alt+F1执行terminal,Alt+F2启动firefox,Alt+F6启动gvim,Alt+F7启动Emacs,Alt+F8用xmms听歌,Alt+F9用stardict查字典,Alt+F10上QQ,Alt+F11打开Putty,Alt+F12启动thunderbird收信,等等。太多了,太方便了。再也不花时间折腾了,踏踏实实用它吧!


--------------------------------------------------------------------------------

[1]. 第一次尝试的时候为了方便我让所有的fvwm-theme都使用MyDecor这个名字,虽然在更改Theme的时候我也添加了DestroyDecor,但最终效果仍然不好:这个问题一直困扰了好久。我一直以为是自己包装的过程有语法错误,所以就仔细对照fvwm-decors的decor文件观察。其实一开始就发现它给每个Decor都取不同的名字,以为影响不大。后来实在没有办法,孤注一掷,决定把fvwm-theme的每个Theme采用不同的Decor Name。为了适合作Decor Name,第一步就是把所有的Theme文件夹名称修改,然后将每个文件夹中decor文件关于Decor的行前面添加 + ,然后加一行 Style * UseDecor FoldName= 。没想到,问题就是在这里!真是解决问题不一定难,可是找到问题的所在就费劲了!

[2] 这个文件每天都有改动,已经成了毛病,所以最新只能是基本框架如此。
 类似资料: