athlonxhy 发表于 2004-5-15 10:53:32

《FVWM FAQ中文版》--第6,7部分完成

Athlonxhy & Hydra & Sixroom:
第四部分 由Hydra完成
第六、七部分由Sixroom完成

请不要在这里跟帖子,有意见和建议请到置顶里面告诉我。多谢大家支持!!!

官方链接:
http://www.fvwm.org/documentation/faq/

FAQ问题索引:

0.最常见问题-The most frequently asked questions :)
    0.1 fvwm启动几分钟以后,我的键盘和鼠标的绑定设置(bindings)失效了。我需要怎么做?
    0.2 在使用XMMS的时候,总有一些窗口样式被忽略。
    0.3 我喜欢透明效果。我需要怎么做?

1.关于Fvwm-About Fvwm
1.1 Fvwm意味着什么?
1.2 我在哪里能找到最近版本的fvwm?
1.3 和fvwm有关的WWW网站?
1.4 我要去哪里问fvwm的问题呢?
1.5 FVWM 1.xx 和 2.xx有什么区别和不同?
1.6 相比之下,不同的窗口管理器使用内存的情况如何?
1.7 为什么把这些文件重新命名了(fvwm2,fvwm2rc,fvwm2.man)?
1.8 什么时候fvwm放出X.Y.Z版本?

2.安装-Installation
2.1 我想使用FVWM,但是我没有机器的root权限。那我还能安装和使用么?
2.2 我尝试在CDE/COSE下面使用fvwm,但是遇到了困难。有什么建议?
2.3 我尝试在SunOS下用cc编译FVWM,但是编译过程出现很多问题。出什么事啦?
2.4 我需要彩色图标,但是无效。为什么呢?当我运行configure的时候,提示 "no" to "Have XPM support?"那么请问怎样使自己得到XPM支持?
2.5 我是系统管理员,我希望让fvwm先尝试使用一个系统rc文件然后是用户自己的rc文件,要怎么做呢?
2.6 我是系统管理员,我希望fvwm在一个叫做~/.fvwm的隐藏目录下面像CDE那样查找rc文件,要怎么做呢?
2.7 如何使FVWM和GNOME(version<=1)一起工作?
2.8 如何使FVWM和GNOME(version>=2)或者KDE(version>=2)一起工作?

3.特点、配置、函数以及命令-Features, Configuration, Functions & Commands
3.1 我在RedHat Linux上使用FVWM,但不知如何改变我的FVWM的配置。我阅读了FVWM的man page,但是当我编辑 .fvwm2rc的时候却发现好像没有什么改变。怎么回事呢?
3.2 我能够通过点击窗口本身而不是点击边框就能使窗口升起来么?
3.3 我如何能够像其他的GUI那样使用Alt-Tab习惯?
3.4 Focus与FlipFocus命令有什么区别?
3.5 我能够把鼠标的移动帮定到keystrokes,但是如何绑定鼠标的点击事件呢?
3.6 我想把一个键绑定为粘贴当前选择(usr the current selection),怎么办呢?
3.7 FVWM会为每一个桌面提供colormap的支持么?
3.8 我很喜欢在sticky window标题栏里面的水平条。我能在其他的窗口也使用它么?
3.9 我如何设置Sun的键盘,才能让XXXX绑定到一个FVWM命令?总之,我在键盘绑定方面有问题。我要怎么作呢?
3.10 我的1.xx的 .fvwmrc文件不能工作了。我要怎么作呢?
3.11 FVWM 1.xx系列的‘include’命令都做了什么?
3.12 我要如何才能够让窗口的标题应用于子窗口?
3.13 我升级到了version>=2.3.2,然后发现原来的配置失效了。怎么才能找回来呢?
3.14 一些程序(比如:Eterm)为何不使用我定义的图标呢?
3.15 我不喜欢为程序自定义图标时,icons box的那个空隙。是否有自动排列图标的函数呢?
3.16 如何在菜单里设置一个关机的选项?
3.17 尽管Recapture命令已经废除了,那我还需要特别的去适应这个改变么?
3.18 当我指定的窗口(或者说所有的窗口)弹出时,如何使它聚焦、移动、改变大小、关闭、暗化...
3.19 当我指定的窗口(或者说所有的窗口)关闭的时候,我如何能切换桌面、隐藏X程序、打开菜单、启动X程序...
3.20 我使用了多显示设置(X下使用多个显示屏幕)。如何告诉fvwm为每个Screen应用不同的配置文件呢?
3.21 如何在不覆盖FwmTaskBar的情况下最大化窗口?
3.22 为何按钮在一些窗口的titlebar上显示不出来?
3.23 如何定义透明的菜单?
3.24 如何定义透明的模块?
3.25 如何定义透明的窗口装饰?
3.26 如何定义应用程序的透明?
3.27 如何在fvwm里定义Emacs方式的键盘绑定?

4.模块-Modules
4.1 我在使用FvwmButtons模块(或1.xx版的GoodDtuff模块)。为什么有时这些按钮会一直保持按下的状态,有时却不是?
4.2当点击FvwmButtons来取消一个程序的时候,是否能够通过定义按键(鼠标的某个键) 来同时启动其他的程序?比如,我希望在用我定义的鼠标按键关闭xload的时候, 按下时能启动xterm;又或是关闭xbiff的时候,同时启动消息列表。
4.3 当我用FvwM4/Cpp模块预处理文件时,发生了奇怪的事情...
4.4 我听说过一个FvwmFileMgr模块。哪里可以找到它?
4.5 我习惯于使用FVWM 1.xx版的GoodStuff模块,但在2.xx的发布包中没有这个模块了。 现在我该用什么?
4.6 我可以把FvwmButtons的字幕托盘放在屏幕的其它地方而不是默认的按钮周围的地方吗?
4.7 怎样用键盘快捷键来在FvwmButtons中按按钮和开启字幕盘?

5.开发,已知问题与Bug报告
5.1我非常期望看到FVWM拥有简洁的XYZ功能,我甚至有一个patch补丁,什么时候可以加进去呢?
5.2我怎样才能创建/提交/应用patches补丁呢?
5.3我如何能够提交bug报告呢?
5.4我发现一个窗口在FVWM下表现异常,而在其他窗口管理器中却没有问题,或是这只是一个随机的Bug.那我需要作什么呢?   
5.5为何NumLock,CapsLock和ScrollLock键会与ClickToFocus或是我的鼠标绑定冲突呢?
5.6 使用渐变色彩背景的菜单闪耀或者特别慢的情况。
5.7为何StartIcconic Style不能和Netscape等一同工作?
5.8我如何能够捕捉到fvwm的输出(比如错误输出)?
5.9   我在试图在FVWM运行一些程序的时候,会因为像BadAccess这样的X11错误而“死掉”。同样的程序在MWM或者OLWM下却运行正常。这是怎么回事呢?
5.10每次我更新我的install文件时,我正在运行中的fvwm会话会“死掉”。这是为什么?
5.11我重启特定窗口或者图标时,它们会提高到所有窗口之上,并且无法用任何办法使之下降。例如:KFM(KDE的文件管理器)的快捷方式。这种情况下我需要怎么作呢?
5.12StartsOnPage Style不能为我工作。为什么?
5.13我重启fvwm的时候一些modules模块无法启动。
5.14我运行Rational Rose程序的时候fvwm却忽略了它的窗口。
5.15尽管我为自己的模块使用了WindowListSkip style,但是他们仍然在FvwmIconMan或者FvwmWinList等模式中显示。

6.各种各样的问题
6.1 DESK,PAGE和SCREEN之间的确切差别是什么?
6.2 我喜欢{OpenWindows,NeXT,WIn95,Mac等等}的外观和感觉,你们准备支持这些吗?
6.3 我可以从哪找到更多的用作图标的XPM图片?
6.4 Linux X86 虚拟屏幕大小和fvwm交互....
6.5 我知道这个问题与fvwm不相关,但是Rob Nation曾经支持的rxvt和rclock现在怎么样了,去哪里可以找到它们?
6.6 我如何使用fvwm设置桌面背景?
6.7 使用fvwm时,我的颜色设置"XYZ"得不到正确的颜色,哪里的问题?
6.8 我刚弄到一个57键的鼠标,如何在fvwm中使用?
6.9 为什么fvwm更改了我的X鼠标指针主题?

7 - 开发者的一些提示和示例
7.1 测试新配置的简单方法。
7.2 在配置里使用shell命令
7.3 如何在非当前desk或page启动程序。
7.4 如何在非当前desk或page打开一个应用程序,且不切换观察口(viewport)到打开程序的page或desk。
7.5 更高效的MWM菜单
7.6 关于在屏幕上放置菜单
7.7 当鼠标接近屏幕边缘,有时候会发生flipping pages,你遇到过吗?
7.8 给你的窗口和图标排队
7.9 使用键盘移动鼠标/聚焦/page.
7.10 防猫安全桌面^_^
7.11 下降并移动窗口。
7.12 Toggling windows on and off.
7.13 通过点击打开程序(称为docking程序)
7.14 精确定位窗口
7.15 隐藏鼠标指针
7.16 寻找鼠标指针
7.17 自动隐藏FvwmButtons或其它窗口
7.18使用应用程序的快照作为图标或者小图标缩略图

athlonxhy 发表于 2004-5-15 10:56:09

=========================================
                                        0-最常见问题:)
=========================================
0.1 fvwm启动几分钟以后,我的键盘和鼠标的绑定设置(bindings)失效了。我需要怎么做?

A:可能是你的NumLock,CapsLock或者ScrollLock键被不小心按下了。更详细的见问题5.5

在作为一名fvwm开发者这些年里,这是到现在被问及最多的问题了。(官方注)(牢骚:略)
-----------------------------------------
0.2 在使用XMMS的时候,总有一些窗口样式被忽略。

A:XMMS喜欢自己搞定所有东西而且无视很多窗口管理器的偏好设定。试试看能否通过XMMS
的设置菜单解决,如果不行就去问问这里(http://xmms.org/)的XMMS的家伙们吧:)。

请不要在fvwm的mailing lists里面问XMMS的问题,也不要在这里发Bug的报告...(ft,又是牢骚,略)
-----------------------------------------
0.3 我喜欢透明效果。我需要怎么做?

A:请参阅关于透明效果的问题3.23,3.24,3.25,3.26。

也可以看看fvwm-themes包里面提供的配置文件,有些themes使用了透明效果的菜单、模块以及
窗口装饰(decorations).F.e.(下面是效果图):
        http://fvwm-themes.sf.net/screenshots/full/transparent.png
        http://fvwm-themes.sf.net/screenshots/full/transparent.jpg

athlonxhy 发表于 2004-5-15 12:12:18

====================================
                                                1.关于Fvwm
====================================

1.1 Fvwm意味着什么?

A:“Fill_in_the_blank_with_whatever_f_word_you_like_at_the_time Virtual Window Manager”(全称)。
Rob Nation (FVWM创始人)不记得F最开始到底表示什么了,所以我们有些可能的解释:
Feeble, Fabulous, Famous, Fast, Foobar, Fantastic, Flexible, F!@#$%, Flashy, FVWM (the GNU recursive approach), Free, Final, Funky, Fred's (who the heck is Fred?), Freakin', Flawed, Father-of-all, Feivel (the mouse from "An American Tail"), Frungy (hey, where does that come from?), Floppy, Foxy, Frenzied, Funny, Fumbling 等等。

选择你感兴趣的那个就是了。(后面又是罗嗦的,略了)不过现在'Feline'比较流行。这很可能宇六个核心开发者之中的四个养猫有关{ft}平均每人1.17只?喵~

看看这个吧:http://fvwm.org/fvwm-cats/
-----------------------------------------
1.2 我在哪里能找到最近版本的fvwm?

A: 更新的发行版主站在这里(官方+测试代码):

ftp://ftp.fvwm.org/pub/fvwm/

镜像站点:

美国:
ftp://sunsite.unc.edu/pub/Linux/X11/window-managers/
ftp://ftp.cs.columbia.edu/pub/cheah/
欧洲:
ftp://unix.hensa.ac.uk/pub/walnut.creek/FreeBSD/incoming/
ftp://ftp.jussieu.fr/pub/X11/fvwm/
ftp://ftp.loria.fr/pub/unix/fvwm/

另外,1.24使1.xx系列的最后一个版本,2.2则是正式的2.xx里的第一个版本。第二个数字如果奇数,则代表是开发版本;相反,偶数则是代表稳定的版本(多数软件发行都是这样约定)。
---------------------------------------------
1.3 和fvwm有关的WWW网站?

A:当然有。官方站点是:

http://www.fvwm.org/

那里有许多和fvwm有关站点的链接。
---------------------------------------------
1.4 我要去哪里问fvwm的问题呢?

A:如果你周围的FVWM使用者(maintainer)无能为力的时候,那么新闻组comp.windows.x.apps是个好去处。不过通常,fvwm的邮件组是更好的选择。新的FVWM邮件讨论组地址是:

[email protected]

还有这是发布邮件组地址:

[email protected]

他们是由Jason Tibbitts维护的大官家型的邮件组。如需要订阅,发送“subscribe fvwm”到<list>[email protected]。比如订阅fvwm mailing list,发送一个请求到:
[email protected]

退订的话,则在消息内发送“unsubscribe fvwm”到<list>[email protected]。报告问题,发送邮件到[email protected]

下面jason对是邮件列表的介绍和说明:

   Description
   -----------
   This list is for discussion relating to the FVWM window manager,
   which is intended to have a small memory footprint and a rich
   feature set, be extremely customizable and extendable and have a
   high degree of Motif MWM compatibility.All relevant discussion
   is encouraged.Posting of binaries or irrelevant discussion is
   strongly frowned upon.Posting of short patches (less than 200
   lines) is acceptable, but all patches should also be sent to the
   fvwm-workers list (see Q5.2, below) for inspection and possible
   inclusion in the distribution.

   Instructions
   ------------
   To send a message to the list, mail to [email protected] help on
   dealing with the mailing list software (for getting the archives or
   other files which may be made available) send the message "help" to
   [email protected] you have problems with the mailing list
   itself and need to talk to a human, send mail to [email protected].
   This address is for mailing list issues only; reports on the FVWM
   software will be sent to /dev/null.
   Archives of previous messages are available; to get them send the
   above mentioned help message and investigate the "index" and "get"
   commands or ftp them from ftp://ftp.fvwm.org/pub/fvwm/list-archive/.
   (fvwm-announce)
   This list is for announcements relating to the FVWM window manager,
   which is intended to have a small memory footprint and a rich
   feature set, be extremely customizable and extendable and have a
   high degree of Motif MWM compatibility.
   Replies to messages from this list are set by default to go the
   FVWM discussion list, [email protected].
   The current FVWM distribution is available for ftp at
   ftp://ftp.fvwm.org/pub/fvwm/
---------------------------------------------
1.5 FVWM 1.xx 和 2.xx有什么区别和不同?

A:有很多方面。这里只提一些主要的:
-修正Bug。1.xx 已经停止维护。
-更好的rc文件格式。无需指出dependent。
-更加的强大和灵活。比如,过去的一些只能用Global设置的选项,现在可以单个窗口组(window group)的级别来代替了。
-更多、更好的模块更能。
-M4预处理机制部分已经从fvwm exec组取消,并被转移到了一个模块中。而且还保有一个使用cpp的模块。请参看FvwmM4和FvwmCpp 的manpage手册。
---------------------------------------------

1.6 相比之下,不同的窗口管理器使用内存的情况如何?

A:下面是一个比较他们的表格。同样IBM RS6000 model 355的AIX上开启3个窗口和用XSession在他们之间切换。

SIZES RES
545K652K fvwm2 (fvwm 2.0.35)
457K528K fvwm(fvwm 1.24rb)
856K960K ctwm(ctwm 3.2p1)
1004K 1156K mwm   (mwm 1.2)
543K632K twm   (???)
263K328K aixwm (a simple ugly window manager included w/ aix)

   Note: This information is terribly outdated.(ft!信息已经过时)
---------------------------------------------
1.7 为什么把这些文件重新命名了(fvwm2,fvwm2rc,fvwm2.man)?
(略!因为2.5.1版本开始,又开始使用fvwm2了。)
---------------------------------------------
1.8 什么时候fvwm放出X.Y.Z版本?

A:这个问题很难回答。因为是志愿工作,所以我们在有时间的时候才会有成果。

鼓励加入fvwm工作邮件组!
---------------------------------------------

athlonxhy 发表于 2004-5-15 21:33:28

============================================
2.安装
============================================

2.1 我想使用FVWM,但是我没有机器的root权限。那我还能安装和使用么?

A:很容易,在configure的时候使用"--prefix"参数。

假设你的home目录为/home/sam。解压fvwm源码包后,键入"./configure --prefix=/home/sam[其他参数]","make"和"make install"。
现在你能在/home/sam/bin下看到可编译好的文件(The binaries),在/home/sam/man下看到man pages,在/home/sam/libexec下看到modules等等。
--------------------------------------------
2.2 我尝试在CDE/COSE下面使用fvwm,但是遇到了困难。有什么建议?

A:这是一个来自Graeme McCaffery的建议:

---
我现在终于知道如何从CDE启动fvwm了。
首先把你的home session设置成Dtwm。尽管你可能用CDE session管理器代替FvwmSaveDesk等来储存desktop设置,但默认情况这通常是一个空session。
而后你需要在 .Xdefaults文件中设置下面两条:
Dtsession*wmStartupCommand: /home/orion/spxgm/bin/Fvwm
Dtsession*waitWmTimeout: 1
这样的话,我用shell脚本程序来启动fvwm,以便使lib等变量适合每一个使用者。waltWm Timeout告诉session 管理器启动window manager前等待多少时间。我设成了1秒钟,而默认情况下是60秒。

最后你需要这样退出:
/usr/dt/bin/dtaction ExitSession (用你的dtaction目录代替)

至此,你可以开心的使用CDE和fvwm了。
---
另一方面,这里有一个web连接描述如何添加多种window管理器到CDE登陆菜单中:

http://twirl.mcc.ac.uk/~zzassgl/wm.html

--------------------------------------------
2.3 我尝试在SunOS下用cc编译FVWM,但是编译过程出现很多问题。出什么事啦?

A:SunOS下的cc不是ANSI C编译器。试试使用acc或者gcc来代替。

--------------------------------------------
2.4 我需要彩色图标,但是无效。为什么呢?当我运行configure的时候,提示 "no" to "Have XPM support?"那么请问怎样使自己得到XPM支持?

A:FVWM用XPM(X PixMap)库来提供彩色的和可变形的图标的支持。由Open Group of XFree86提供的基本的X发行版没有包括XPM部分,但是很多零售商都将它作为一个发行版的标准部分(像Redhat等)。
实在没有的话,可以到这里下载源码包ftp://ftp.x.org/contrib/libraries/,并且自己编译。

如果你的系统现在已经安装了XPM,那么有些configure方法可以选择是否使用它(XPM)。

首先,如果把XPM安装到了非标准的地方(既没有安装到/opt/xpm 或者/usr/local这样的地方)那么需要告诉configure到哪里去找。用参数“--with-xpm-library and with-xpm-includes”(参看INSTALL.fvwm)。否则会碰到“Xpm library or header not found”的错误提示。

其次,你的XPM的版本过低会得到如此的提示“Xpm library version is too old!”。如此,你需要安装新的版本。

第三,如果XPM可能安装有误,那么会提示“Xpm library version and header file version don't match!”。使用参数“--with-xpm-library”和“with-xpm-includes”来确定,或者重现安装XPM。

最后,可能会有连接错误。尤其是那些把XPM编译为shared library和非标准目录。在INSTALL.fvwm里面有关于这些的描述。

如果还是不能搞定,那么和FVWM的邮件组联系。请提供你使用的系统和硬件信息,包括config.log文件里的XPM部分。

--------------------------------------------
2.5 我是系统管理员,我希望让fvwm先尝试使用一个系统rc文件然后是用户自己的rc文件,要怎么做呢?

A:来跟我这么做:

-包每个用户的.fvwm2rc文件的第一行加上'Read global.fvwm2rc'并把系统的global.fvwm2rc文件放到"datadir"/fvwm里面。

--------------------------------------------
2.7 如何使FVWM和GNOME(version<=1)一起工作?

A:最近的fvwm和GNOME配合的很好,你可以直接在FVWM里单独运行诸如:gnome panel, gmc, gnome-terminal这样的程序。

脚本文件fvwm-menu-desktop能够帮你在菜单里添加gnome程序。

确认你运行了FVWM并且没有余兴gnome-session,在你的用户目录下创建 .Xclients文件并加入启动fvwm条目。如果你希望避开管理员设置的系统级别的设置,那么~/.xinitrc能起到同样的效果。

另一个折中的解决/usr/bin/gnome-session里运行FVWM方法是这样:启动gnome-session以后,在pannel的主菜单里面选择

系统菜单/设置/桌面/窗口管理器

并创建一个FVWM的快捷项。FVWM支持session 管理器。

如果你运行gnome-session,则调用SessionInitFunction和SessionRestartFunction用来代替InitFunction和RestartFunction,可以查看fvwm的man pages。

用来运行modules的StartFunction,像通常一样被调用。

这是FVWM提供的对GNOME窗口管理器的支持情况的例子:

-如果没有对GNOME的支持,那么在fvwm里运行panel,那么就无法得到完全的GNOME page applets(窗口页面切换工具);当然如果有了GNOME的支持,你就可以在pages/desks正确的看到和移动窗口。你也可以在窗口里使用GNOME Tasklist applet和manage。

-如果你运行gmc和bind GnomeButton(参阅man page),你能用root权限执行一个gnome程序。(就像gmc)

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

2.8 如何使FVWM和GNOME(version>=2)或者KDE(version>=2)一起工作?

A:绝大多数应用程序可以在FVWM里面运行。但是,有些程序的特点和特殊的程序比如:panels、pagers、taskbars和desktops需要特别的支持。窗口管理器之间的关联、桌面环境和应用程序在扩展窗口管理器的特例Hints里进行了标准处理。从2.5.x系列开始,FVWM支持这种特例(GNOME,GTK,KDE和QT的大于2的版本里面)。更多细节请参阅fvwm的manual pages里面关于 "Extended Window Manager Hints"的章节和以“EWMH”开头的commands和styles。

你可以用fvwm作为GNOME的窗口管理器。首先启动GNOME(gnome session)。这样做是用fvwm替换默认运行的窗口管理器(sawfish 或者 metacity)。在终端中键入 "fvwm --replace&"。如果这样失败的话,那么杀死fvwm进程并打开session properties对话窗口(终端里运行"gnome-session-properties&"),在第二个标签页里,把metacity(或者sawfish) Style 的值从“Restart”改为"Normal"(记得“应用”一下),这样gnome-session就不会在你杀死它的时候重新启动它了。现在在终端键入"killall metacity; sleep 1; fvwm &"。当你成功以后,你需要保存session(在注销的时候指定)。下一次启动FVWM的时候,fvwm就被默认使用为窗口管理器了。注意,如果你使用gnome-smproxy登陆,并且在一些使用旧session协议的程序里应用了FvwmButtons被gnome-session重启,那么这些程序会和FwmButtons引起冲突!

同样,你也可以在KDE里fvwm窗口管理器。KDE是用一个叫做"startkde"的脚本程序启动的。这个脚本启动了ksmserver及其默认窗口管理器(kwin)。要启动fvwm需要在ksmserver命令行里加上“-w fvwm”的参数。你可以拷贝一份startkde作为startkde_fvwm在你的目录下,编辑这个脚本程序,然后用它替代startkde作为X启动脚本的选项(例如:~/.xinitrc,~/.Xclients或者~/.xsession)。注意ksmserver不支持fvwm的Restart命令。你可以使用“Restart fvwm”来重启fvwm。但是如果你这么作了那么建议不要在后面储存设置。

athlonxhy 发表于 2004-5-16 00:58:09

============================================
3 .特点、配置、函数以及命令(Features, Configuration, Functions & Commands)
============================================

3.1 我在RedHat Linux上使用FVWM,但不知如何改变我的FVWM的配置。我阅读了FVWM的man page,但是当我编辑 .fvwm2rc以后却发现好像没有什么改变。怎么回事呢?

A:RedHat Linux在默认情况下用一个配置管理器来安装X server。它的早期版本是TheNextLever,而现在的版本叫做AnotherLever。更多的TheNextLever的信息可以查询/usr/doc/TheNextLevel/下的文档,后者可以用命令查看“man AnotherLever”。

--------------------------------------------
3.2 我能够通过点击窗口本身而不是点击边框就能使窗口升起来么?

A:在2.0.46版以后已经具有了这种功能。在2.2.x系列,使用下面方法:

        GlobalOpts MouseFocusClickRaises

在2.3.x betas以后使用这个方法:

Style * MouseFocusClickRaises

--------------------------------------------
3.3 我如何能够像其他的GUI那样使用Alt-Tab习惯?

A:内建命令WindowList提供了一个和其它GUI非常近似的机制来实现Alt-Tab功能。虽然看起来有些不同,但是下面的.fvwm2rc的例子提供了类似的接口:

Key Tab A M WindowList Root c c NoDeskSort

2.3.2版,上述的绑定是作为内建方式来实现的。

2.3.15版,可以先按下Alt然后敲击Tab键来实现窗口轮换。单独按下Alt+Tab键则表示选择前一个窗口。本FAQ条目主要来描述2.3.2的情况。

敲击Alt-Tab将激活WindowList菜单。和其它的GUI不同,你无需一直按着Alt键,在按下Return/Enter/Space或者Escape这些键之前,此菜单都不会消失。你可以用上、下方向键在WindowList菜单里选择并用Return或Enter键来确认你的选择。按下Escape键则直接关闭这个菜单。WindowList为前26个窗口提供了热键,你可以直接用热键直接选择窗口。

除非你使用Focus命令,被激活菜单的靠上部分将显示最近聚焦过的窗口(参见Q3.4)。它包括了每个窗口的名称和坐标还有一些与Sticky、OnTop以及图符化窗口特性相关的参数。

下面是一个更简单的使用方法:

Key Tab A M WindowList Root c c CurrentDesk NoGeometry

这样将会仅仅显示当前桌面的窗口(只显示标题)。

在其他GUI里,如果按下Alt-Tab并快速松开,那么会切换到前一个窗口去。在此我们无法照搬这种操作,但是可以通过短时间内双击Alt-Tab来实现(就像鼠标双击一样):

DestroyFunc my_dbltab2
      AddToFunc   my_dbltab2
      + I WindowListFunc

      DestroyFunc my_dbltab
      AddToFunc   my_dbltab
      + I Prev (CurrentDesk) my_dbltab2

      Key Tab A M WindowList Root c c CurrentDesk NoGeometry my_dbltab

WindowList命令有很多选项可以来控制窗口的排列方式,但却无法在双击按键的时候为Prev命令提供可靠的选择能力。WindowList命令没有在CurrentPage,Transient,Visible,Maximized以及pattern matching里面的对应物,同样Prev命令也不支持OnTop,Alphabetic和desk sorting。WindowList菜单支持WindowListSkip样式的属性,同时Prev支持CirculateSkip和CirculateSkipIcon样式的属性。

--------------------------------------------
3.4 Focus与FlipFocus命令有什么区别?

A: 这两个命令都是用来把键盘的焦点转移到目标窗口的。它们只是在内部窗口列表保存方式上表现出了不同的处理机制。这个窗口列表被Next,Prev和WindowList这些命令所使用。这个列表是把最近聚焦的窗口按照一定顺序排列的(最新的加在最下面)。FlipFocus命令把目标窗口从上面提到的那个窗口列表里面抽出来放到了最开始的位置(默认是最下面),而Focus命令只是使列表循环而已,知道目标窗口到了最开始的位置。在用鼠标聚焦和用ClickToFocus style自动聚焦的时候也采用FlipFocus命令的方式。

如果你永远不使用Focus命令,那么列表一直保持着最近聚焦窗口的顺序。而当你用了Focus命令以后那么列表(Window List)就会回到你最后一次使用FlipFcus那时候的状态。

Focus命令在和Next、Prev命令配合使用的时候非常有效:

      Key KP_Add A M Next (AcceptsFocus CurrentDesk !Iconic) Focus
      Key KP_Subtract A M Prev (AcceptsFocus CurrentDesk !Iconic) Focus

   在FVWM 2.4.1以前,这样:

      Key KP_Add A M Next Focus
      Key KP_Subtract A M Prev Focus

这种绑定方法使你能够循环双向切换目前桌面(Desk)前后的窗口。例如:使用Prev FlipFocus,焦点就会在列表(Window List)里的前后两个窗口之间切换。

如果你在一个桌面上有多个窗口,你想要为Next和Prev命令设置循环次序,你可以用鼠标或者FlipFocus命令设置你希望的次序。Fvwm会记住这个次序,并在使用Next和Prev命令的时候使用它。如果你随后再次使用鼠标或者FlipFocus命令,那么先前制定次序就会丢失。

--------------------------------------------
3.5 我能够把鼠标的移动帮定到keystrokes,但是如何绑定鼠标的点击事件呢?

A:尽管FVWM有用来把移动动作帮定到键盘的命令,但是用键盘控制鼠标指针的移动需要X server的支持。下面是来自X FAQ在这个方面的经验总结:

如果你拥有XKB(X Keyboard Externsion),那么你可以把鼠标的各种事件绑定到键盘上(移动或者按下)。只要拥有XKB,不论应用程序本身是否使用XKB机制,那么各种鼠标事件对我们都是透明的-使应用程序直接和sever打交道。

在X11R6.1 上,XKB是默认使用的。
   
首先,按起Num Lock键,使用Shift+Num_Lock绑定鼠标按键:
   
xmodmap -e "keysym Num_Lock = Num_Lock Pointer_EnableKeys"

你可能需要关闭Num Lock键来使之在工作的时候生效。现在按下"Shift+Num_Lock"来模拟鼠标按键。当鼠标按键开启后:

      o)   The keypad arrow keys move the pointer(方向键移动鼠标指针)
      o)   The keypad '5' key behaves like the 'default' pointer button(默认的鼠标按键-我用左键)
      o)   The keypad '0' key locks the default pointer button (for easy
         dragging)(拖动)
      o)   The keypad '.' key unlock the default pointer button (to release
         a drag)(表示拖动结束)
      o)   The keypad '+' key double-clicks(双击左键) the default pointer button.
      o)   The keypad '/' key sets the 'default' button to Button1
      o)   The keypad '*' key sets the default button to Button2
      o)   The keypad '-' key sets the default button to Button3

这是默认的配置,但是配置机制可以说是毫无限制的(足够满足你的需要)。
      [多谢 Erik Fortune ([email protected]), 6/96]

--------------------------------------------
3.6 我想把一个键绑定为粘贴当前选择(use the current selection),怎么办呢?

A:直接依靠fvwm还不行,但是有一个解决方案:从这里ftp://ftp.x.org/contrib/utilities/ 或者镜像网站下载'XBC'程序,它或许可以出色的完成这个任务。这个对把选择传递给运行的程序是非常有用的(例如-把当前选择传递给你喜欢的浏览器作为URL链接)。如果你需要'semi-generic'这样的粘贴机制,你需要使用‘XSE’(参考Q3.5)。如果你有什么这方面的好例子,请给我们的邮件列表发信。

--------------------------------------------
3.7 FVWM会为每一个桌面提供colormap的支持么?

A: 虽然我也很想这样,但是恐怕还有些问题。我认为可以用切换桌面这个事件来启动适当的程序以改变默认的colormap,但是当移动窗口到新的桌面时就无法实现这个功能了。

而且,FVWM自己也需要一定的colormap通道用来显示drwing(边框,菜单等等)。所以,这些颜色必须事先在所有的colormaps里面定位。

虽然这些在技术上都是可能的,但是我想现在还是无法实现这个功能(需要添加很多的代码,而且变得异常复杂),特别是当那些消耗色彩量庞大的程序(像Netscape)还需要单独的colormaps。

尽管如此,我以后还是会在这一点上作一些探索的。   
   
--------------------------------------------
[]3.8 我很喜欢在sticky window标题栏里面的水平条。我能在其他的窗口也使用它么?

A: 当然。在 2.3.14 及其以后的版本,把下面这行:

   Style * StippledTitle

加入你的 .fvwm2rc文件.对于更早的版本:

   GlobalOpts StipledTitles

--------------------------------------------
3.9 我如何设置Sun的键盘,才能让XXXX绑定到一个FVWM命令?总之,我在键盘绑定方面有问题。我要怎么作呢?

A: 来自 Jon Mountjoy, 一个FVWM的用户:
   - Sun 键盘的功能键是在键盘顶端的: F1 - F8
   - Sun的键盘 F11 == Stop, F12 == Again, ..., F20 == Cut

他的设置是这样的:

   # Function keys on Sun Keyboard on Top Row
   Key F1   A   N       Exec me(netscape) &
   Key F2   A   N       Exec me(netscape -install) &
   Key F5   A   N       Exec makex(Adder)
   Key F6   A   N       Exec makex(Lambda)
   Key F7   A   N       Exec makex(Castor)
   Key F8   A   N       Exec xterm -T Local &

   # Keys on the function keypad on the Left of the Sun Keyboard:
   # F11 = Stop, F12 = Again, ..., F20 = Cut
   Key F11    AWF   N       Next (!iconic CurrentPage) Focus
   Key F12    AWF   N       Prev (!iconic CurrentPage) Focus
   Key F13    WF    N       Maximize   100 100
   Key F15    WF    N       RaiseLower ""
   Key F17    WIF   N       Iconify ""
   Key F18    WF    N       Stick ""
   Key F20    WIF   N       Delete ""
   Key Help   AWF   N       Iconify ""

更加通用的做法是使用'XEV'(和w/X11一起发布) 或者'xkeycaps'(一个Jamie Zawinski写的X11 xmodmap的接口程序,在ftp.x.org)来查找你用keysym来代表的按键(REALLY),并用它来绑定FVWM的命令。

--------------------------------------------
3.10 我的1.xx的 .fvwmrc文件不能工作了。我要怎么作呢?

A: 你要么需要使用一个新的,要么就得转换你旧的 .fvwmrc文件。你可以自己手动完成,当然也可以让utiles目录里面的“fvwm-convert-2.2”程序帮忙。

这里有一个 Makoto 'MAR_kun' MATSUSHITA编译的rc文件实例,里面显示了命令改变情况的列表。或许不是100%的准确和完整-特别是今后有FVWM再次升级的时候,但这的确是一个很好的开始。

注意,2.1.x以后的情况还没有反应到下面的脚本之中。
   
   ** Fvwm-1.xx commands **                   ** Fvwm-2.0.x equivalent **

   AppsBackingStore                           (obsoleted)
   AutoRaise delay                            (obsoleted, use FvwmAuto)
   BackingStore                               (obsoleted)
   BoundaryWidth Width                        Style (BorderWidth width)
   ButtonStyle button# WidthxHeight         <-
   CenterOnCirculate                        (obsoleted)
   CirculateSkip windowname                   Style (CirculateSkip)
   CirculateSkipIcons                         Style (CirculateSkipIcon)
   ClickTime delay                            <-
   ClickToFocus                               Style (ClickToFocus)
   Cursorcursor_num cursor_type             CursorStyle context cursornum
   DecorateTransients                         Style (DecorateTransient)
   DeskTopScale Scale                         (obsoleted, use FvwmPager)
   DeskTopSize HorizontalxVertical            <-
   DontMoveOff                              (obsoleted)
   EdgeResistance scrolling moving            <-
   EdgeScroll horizontal vertical             <-
   Font fontname                              MenuStyle (arg4)
   Function FunctionName                      AddToFunc (not compatible)
   HiBackColor colorname                      Style (HilightFore color)
   HiForeColor colorname                      Style (HilightFore color)
   Icon windowname bitmap-file                Style (Icon iconname-file)
   IconBox left top right bottom            Style (IconBox l t r b)
   IconFont fontname                        Style (IconFont fontname)
   IconPath path                              ImagePath path
   Key keyname Context Modifiers Function   <-
   Lenience                                 Style (Lenience)
   MenuBackColor colorname                  MenuStyle (arg2)
   MenuForeColor colorname                  MenuStyle (arg1)
   MenuStippleColor colorname               MenuStyle (arg3)
   Module ModuleName                        <-
   ModulePath path                            <-
   Mouse Button Context Modifiers Function    <-
   MWMBorders                                 Style (MWMBorder)
   MWMButtons                                 Style (MWMButtons)
   MWMDecorHints                              Style (MWMDecor)
   MWMFunctionHints                           Style (MWMFunctions)
   MWMHintOverride                            Style (HintOverride)
   MWMMenus                                 MenuStyle (arg5)
   NoBorder windowname                        Style (NoBorder)
   NoBoundaryWidth Width                      Style (HandleWidth width)
   NoPPosition                              Style (NoPPosition)
   NoTitle windowname                         Style (NoTitle)
   OpaqueMove percentage                      OpaqueMoveSize percentage
   OpaqueResize                               (obsoleted)
   PagerX_Location Y_Location               (obsoleted, use FvwmPager)
   PagerForeColor colorname                   (obsoleted, use FvwmPager)
   PagerBackColor colorname                   (obsoleted, use FvwmPager)
   PagerFont fontname                         (obsoleted, use FvwmPager)
   PagingDefault pagingdefaultvalue         (obsoleted)
   PixmapPath                                 ImagePath path
   Popup PopupName                            AddToMenu (not compatible)
   RandomPlacement                            Style (RandomPlacement)
   SaveUnders                                 (obsoleted)
   SloppyFocus                              Style (SloppyFocus)
   SmartPlacement                           Style (SmartPlacement)
   StartsOnDesk windowname desk-number      Style (StartsOnDesk desk-number)
   StaysOnTop windowname                      Style (StaysOnTop)
   StdBackColor colorname                     Style (BackColor color)
   StdForeColor colorname                     Style (ForeColor color)
   StickyBackColor colorname                  (obsoleted)
   StickyForeColor colorname                  (obsoleted)
   Sticky windowname                        Style (Sticky)
   StickyIcons                              Style (StickyIcon)
   StubbornIcons                              (obsoleted)
   StubbornIconPlacement                      (obsoleted)
   StubbornPlacement                        (obsoleted)
   Style windowname options                   <-
   SuppressIcons                              Style (NoIcon)
   WindowFont fontname                        Style (Font fontname)
   WindowListSkip windowname                  Style (WindowListSkip)
   XORvalue number                            <-

   ** fvwm-1 built-in functions ***

   Beep                                       <-
   CirculateDown [ name window_name ]         Next (not compatible)
   CirculateUp [ name window_name ]         Prev (not compatible)
   Close                                    <-
   CursorMove horizonal vertical            <-
   Delete                                     <-
   Desk arg1 arg2                           <-
   Destroy                                    <-
   Exec name command                        <-
   Focus                                    <-
   Function                                 <-
   GotoPagex y                              <-
   Iconify [ value ]                        <-
   Lower                                    <-
   Maximize           <-
   Module name ModuleName                     Module ModuleName
   Move [ x y ]                               <-
   Nop                                        <-
   Popup                                    <-
   Quit                                       <-
   Raise                                    <-
   RaiseLower                                 <-
   Refresh                                    <-
   Resize [ x y ]                           <-
   Restartname WindowManagerName            <-
   Stick                                    <-
   Scroll horizonal vertical                  <-
   Title                                    <-
   TogglePage                                 (obsoleted)
   Wait name                                  <-
   Warp [ name window_name ]                  Next or Prev (not compatible)
   WindowsDesk new_desk                     (obsoleted, use MoveToDesk)
   WindowList arg1 arg2                     <-

   *** New in fvwm-2 **

   All
   AnimatedMove
   BugOpts
   BusyCursor
   DefaultColors
   DefaultColorset
   DefaultFont
   DefaultIcon
   DefaultLayers
   Destroy
   DestroyMenu
   EdgeThickness
   Emulate
   EscapeFunc
   ExecUseShell
   HideGeometryWindow
   KillModule
   Layer
   Menu menu-name double-click-action
   MoveToDesk
   MoveToPage
   Next (conditions) command
   None (arguments) command
   Pick
   PointerKey
   Prev (conditions) command
   QuitSession
   Read filename
   Recapture
   RecaptureWindow
   SaveQuitSession
   SaveSession
   Silent
   SnapAttraction
   SnapGrid
   StrokeFunc
   XORPixmap
   +
(很多函数一直在补充,所以需要查看man page和News文件)

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

athlonxhy 发表于 2004-5-21 22:02:34

3.11 FVWM 1.xx系列的‘include’命令都做了什么?

A:这是M4预处理的一部分。你可以用内建的‘Read’命令或者FvwmM4模块代替它实现同样的功能。

--------------------------------------------
3.12 我要如何才能够让窗口的装饰也应用于临时窗口?

A:这种窗口是暂时性('transient')的,因为它们通常只使用很短的时间。如果想让这种临时窗口使用窗口装饰,可以使用如下命令:

   Style * DecorateTransient

   或者要关闭它:

   Style * NakedTransient

--------------------------------------------
3.13 我升级到了version>=2.3.2,然后发现原来的配置失效了。怎么才能找回来呢?

A:系统级配置文件的目录从原来的${sysconfdir}(默认/usr/local/etc,除非在configure时专门设定过)转移到了一个子目录${sysconfdir}/fvwm。因此你需要手动移动你的配置文件并重启FVWM。

这个改变是因为FVWM现在安装了很多的文件到这个目录。(注:保持目录的调理性!)

--------------------------------------------
3.14 一些程序(比如:Eterm)为何不使用我定义的图标呢?

A:Eterm使用自己的图标,而且FVWM也不清楚它使用的是普通图标还是即时绘出图标(就像当你收到邮件时,xbiff所作的那样)。你显然可以忽略这个应用程序提供的图标,而换成你自己的:

   Style <application-name> IconOverride

--------------------------------------------
3.15 我不喜欢为程序自定义图标时,icons box的那个空隙。是否有自动排列图标的函数呢?

A:如果你是使用IconBox的Style命令的选项,那么你可以使用一个fvwm function的技巧来实现你的要求。把下面的DeiconifyAndRearrange function放入你的配置文件中:

   AddToFunc DeiconifyAndRearrange
      + C Iconify off
      + C All (CurrentPage Iconic) PlaceAgain Icon

   这个在 fvwm-2.5.3 及其以后的版本有效.老版本可以这样做:

   AddToFunc DeiconifyAndRearrange
      + C Iconify off
      + C All (CurrentPage Iconic) RecaptureWindow

但是,像Recapture 和 RecaptureWindow 这样的命令以后可能会取消,那么可以使用PlaceAgain来代替Recapture命令。

同样,把所有调用Iconify builtin function 的地方替换成为在调用一个新函数时de-iconify一个图标。例如,把-》

   AddToFunc IconFunc
      + C Iconify off
      + M Raise
      + M Move
      + D Iconify off

   替换为-》

   AddToFunc IconFunc
      + C DeiconifyAndRearrange
      + M Raise
      + M Move
      + D DeiconifyAndRearrange

   把-》

   Mouse 1 I A Iconify off

   替换为-》

   Mouse 1 I A DeiconifyAndRearrange


--------------------------------------------
3.16 如何在菜单里设置一个关机的选项?

A:写一个shell脚本程序来运行关机命令。
1)在系统里安装sudo(看man手册)。
2)设置sudoers配置文件使你或者其他人以root权限来运行这个脚本。
3)在root菜单里面(或者其他地方)添加菜单项启动 "sudo /my/script/name".

--------------------------------------------
3.17 尽管Recapture命令已经废除了,那我还需要特别的去适应这个改变么?

A: 摘自man手册:

有很多的命令会影响特定窗口或者一类窗口,也许所有窗口的视觉效果,比如:Style, Mouse,FvwmTheme 模块以及其他。因为一些执行的原因,他们可能不能立即生效,而是要等到fvwm空闲的时候,比如没有用户互动或者模块输入的时候。特别的,诸如像function里面的新设置的Style选项需要到函数执行完成以后才能生效。这些有可能会导致不可预料的后果。要强制所有的改变立即生效可以使用UpdateStyles, Refresh或者RefreshWindow命令。

--------------------------------------------
3.18 当我指定的窗口(或者说所有的窗口)弹出时,如何使它聚焦、移动、改变大小、关闭、暗化...

A: 下面是一个通用的解决方法,你需要用你需要的应用程序名称和命令来替换下面例子里面的那些(Move, Iconify, Close)。要取得一个应用程序的名称,需要用 FvwmIdent模块。

第一个实现目标的方法需要你先建立一个用于启动应用程序的专门的函数,像这样:
   
   DestroyFunc StartKedit
   AddToFunc   StartKedit
   + I Exec kedit
   + I Wait kedit
   + I Next (kedit) Resize 100p 200p

   这种方法有3个问题:
   1) 你必须StartKedit function来启动你的应用程序,如果从命令栏启动则会无效。
   2) 如果因为某些原因这个应用程序没有启动,那么FVWM将会等待,你需要按下Ctrl-Alt-Esc来停止。
   3) 如果你有不止一个kedit的窗口,则无法保证那个窗口是否改变了尺寸。

但这个方法还有一个补充,它能够使你在执行任何fvwm命令之前实现一些特殊功能。比如,如果要以iconic方式启动kedit窗口而又不作用到子窗口的话,你可以这样:

   DestroyFunc StartAppIconic
   AddToFunc   StartAppIconic
   + I Style $0 StartIconic
   + I Exec exec $0 $1
   + I Wait $0
   + I Style $0 StartNormal

   StartAppIconic kedit /tmp/my.txt

第二种方法使使用FvwmEvent,这样能够解决上面在fvwm 2.2中的前两个问题或者fvwm 2.3及以后版本的所有问题。
   
这是使用fvwm 2.2.3+的例子(假设你只有一个这样的窗口,这会改变一个新建的叫做“My Window”的窗口):
   
   DestroyModuleConfig FvwmEvent*
   *FvwmEvent add_window SetGeometryForMyWindow

   DestroyFunc SetGeometryForMyWindow
   AddToFunc   SetGeometryForMyWindow
   + I Next ("My Window") Move +10p +10p
   + I Next ("My Window") Resize 100p 200p

   AddToFunc StartFunction I Module FvwmEvent

这是 fvwm 2.3.21 到 2.4.15 版本的例子。移动一个新建的叫做“My Window”的窗口,并使用一个变形的指针来指示(忽略新窗口的名称):

   *FvwmEvent-NewWindow: Cmd
   *FvwmEvent-NewWindow: PassId
   *FvwmEvent-NewWindow: StartDelay 4
   *FvwmEvent-NewWindow: add_window FuncFocusWindow

   DestroyFunc FuncFocusWindow
   AddToFunc   FuncFocusWindow
   + I WindowId $0 ("My Window") Move 200p 100p
   + I WindowId $0 Focus
   + I WindowId $0 WarpToWindow

   AddToFunc StartFunction I FvwmEvent FvwmEvent-NewWindow

最后,这是2.5.7+ 和 2.4.16+版本的配置建议。移动一个新建的叫做“My Window”的窗口,并使用一个变形的指针来指示(忽略新窗口的名称):
   
   *FvwmEvent-NewWindow: StartDelay 4
   *FvwmEvent-NewWindow: add_window FuncFocusWindow

   DestroyFunc FuncFocusWindow
   AddToFunc   FuncFocusWindow
   + I ThisWindow ("My Window") Move 200p 100p
   + I Focus
   + I WarpToWindow

   AddToFunc StartFunction I FvwmEvent FvwmEvent-NewWindow
--------------------------------------------
3.19 当我指定的窗口(或者说所有的窗口)关闭的时候,我如何能切换桌面、隐藏X程序、打开菜单、启动X程序...

A:阅读前面问题的答案会加深对这个问题的理解。

还是有两种方法。第一种在一种情况下很好,但是其他情况则相反:

   DestroyFunc StartKedit
   AddToFunc   StartKedit
   + I Exec kedit; xmessage -name DummyWindow -g +10000+10000 "dummy"
   + I Wait DummyWindow
   + I Exec xmessage -timeout 10 "Sorry, you can't close kedit"
   + I StartKedit

   第二种方法依然是使用FvwmEvent:

   *FvwmEvent-OldWindow: Cmd
   *FvwmEvent-OldWindow: PassId
   *FvwmEvent-OldWindow: destroy_window FuncPopupMyMenu

   DestroyFunc FuncPopupMyMenu
   AddToFunc   FuncPopupMyMenu
   # go to the desk 0 when any window is closed
   + I GotoDesk 0
   # popup my menu when "panel" is closed
   + I WindowId $0 ("panel") Popup MenuFvwmRoot

   AddToFunc StartFunction I FvwmEvent FvwmEvent-OldWindow
--------------------------------------------
3.20 我使用了多显示设置(X下使用多个显示屏幕)。如何告诉fvwm为每个Screen应用不同的配置文件呢?

A:FVWM会对所有找到的屏幕进行显示,除非使用 -s 这样的命令行参数来指定(man手册里面有相关阐述)。所有fvwm种子的默认显示进程在每个屏幕上使用同样的配置。有许多方法改变这个默认的行为。

如果你有一个显示屏幕,你可以随意书写你的配置文件。然后把关于screen的行分配到独立的“屏幕配置文件”(需要自建)里面并调用它们,比如,.fvwm2rc.<screen>(<screen>是屏幕序号)。通常数字0代表主屏,1是辅屏。把这些“屏幕配置文件”移动到目录$HOME/.fvwm下或者特定$FVWM_USERDIR,现在,在你的 .fvwm2rc文件中,加入这一行:

   Read .fvwm2rc.$

将$ 用fvwm每一个启动的屏幕号码所代替。

   Another method, which should work for older fvwm versions as well,
   is to specify a separate file for each screen explicitly.For this,
   start a separate fvwm for each screen in your .xinitrc (or .Xclients):

   fvwm -s -d :0.0 -f .fvwm2rc-0 &
   fvwm -s -d :0.1 -f .fvwm2rc-1 &
   fvwm -s -d :0.2 -f .fvwm2rc-2

注意,只有最后一行命令没有"&"符号。如果你愿意,可以用"Read .fvwm2rc-common"加载所有的 .fvwm2rc-*文件。

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

athlonxhy 发表于 2004-5-26 22:56:44

3.21 如何在不覆盖FwmTaskBar的情况下最大化窗口?

A:用"Maximize 100 -30p"来替代你的FvwmTaskBar宽度("Maximize 30")。

或者在Fvwm 2.5.x及其以后的版本里面使用EwmhBaseStruts 来解决。

--------------------------------------------
3.22 为何按钮在一些窗口的titlebar上显示不出来?

A:Fvwm内部有些对buttons的操作方法,有些应用程序能够使某个特定的键不进行显示。比如,在一个临时窗口(如dialog)禁止iconify button对fvwm来说是再平常不过了。(button 2 ,右面第二个button)。

这个命令:

   Style * DecorateTransient

告诉Fvwm你希望titles和buttons显示在临时窗口里面。

   Style * MwmFunctions

告诉Fvwm接受应用程序不显示特定button的请求。

   ButtonStyle 2 - Clear MWMDecorMin

让button 2 充当最小化的功能.

   Mouse 0 2 A Iconify

使用任何鼠标按键按下button 2来使窗口图标化。 Buttons在有操作任务之前是不显示的。

在man page手册查看这些:

   DecorateTransient, MwmDecorXXX, MwmFunctions

所以,如果你要使用像Windows一样的buttons,则重新定义这些案件出发事件:   

   ButtonStyle 1 - MwmDecorMenu
   ButtonStyle 6 - MwmDecorMin
   ButtonStyle 4 - MwmDecorMax

--------------------------------------------
3.23 如何定义透明的菜单?

A: 首先,阅读一下fvwm和FvwmTheme手册里面关于colorsets的部分是很有帮助的。

我们在这里讨论的是透明,而不是半透明。这意味着父窗口(比如:root window)是我们应用透明的区域,但它并非总是在当前窗口之下。然而,通过打一个补丁并使用新的Colorset Translucent选项就可以实现真正的透明(也就是半透明效果)。我们不在此讨论,但是你可以从这里得到这个patch和README文件。

    http://fvwm-themes.sf.net/patch/

要定义透明,像这样:

   Colorset 23 Transparent, fg rgb:ff/ff/c4, bg darkgray

(你可以使用任意大于0的数字替代23)

用RootTransparent替代Transparent也是定义透明的一种方法,但是请注意,你玉箫使用比较好的root背景图片设置工具比如:fvwm-root -r" 或者 "Esetroot" 和 "wmsetbg",否则RootTransparent将不会正常工作:

   Colorset 23 RootTransparent, fg rgb:ff/ff/c4, bg darkcyan

使用RootTransparent的好处是可以自动的重算背景的平均颜色(用于highlighting/shading),并有效地对root图象的可视部分进行染色:

   Colorset 23 RootTransparent, fg rgb:ff/ff/c4, bg average, Tint black 20, bgTint black 20

如果你的内存允许,你可以使用"RootTransparent buffer"来加速你的透明的菜单(menus),模块(modules)或者窗口装饰(decorations)。   

如果你无法肯定能构使用 "fvwm-root -r" 或是了相似的工具设置root背景,那就不要使用RootTransparent选项,而用不带tinting的Transparent选项并明确设置bg color。

如果设置好了透明颜色,那么在菜单中可以这样使用:

   MenuStyle * MenuColorset 23

在man手册里查看关于colorset的内容。
--------------------------------------------
3.24 如何定义透明的模块?

A:在问题3.23中介绍了如何定义透明色彩。(你可以使用同样的透明色彩设置或者为不同的模块定义不同的色彩)

然后在man手册中阅读你希望使用透明效果的模块的部分,并像这样定义透明色彩:

   *FvwmPager: Colorset * 23
   *FvwmButtons: Colorset 23
   *FvwmIconMan: Colorset 23

   Style FvwmPager ParentalRelativity
   Style FvwmButtons ParentalRelativity
   Style FvwmIconMan ParentalRelativity

注:ParentalRelativity 选项并非总是必要的。如果你使用RootTransparent或者你不打算在上层窗口里移动模块等等,那你就不需要定义它。否则你需要为透明窗口定义Style ParentalRelativity,但是为所有窗口定义是非常麻烦的。

注意:过去的"Pixmap none"选项习惯于来定义透明的;现在Pixmap选项已经废弃不用了,使用colorsets来替代。
   
如果你将FvwmPager(或者FvwmIconMan)添加到FvwmButtons,那么你可以配置FvwmPager和FvwmButtons都透明,或者只让它们其中一个透明,那要看你的需求了。

--------------------------------------------
3.25 如何定义透明的窗口装饰?

A:在问题3.23中介绍了如何定义透明色彩。只有RootTransparent方法能够用于窗口装饰的透明。这就意味着你需要使用"wmsetbg" 或者 "Esetroot"工具来设置使用JPG/GIF/TIFF格式的背景图片和使用"fvwm-root -r"来设置XPM/PNG格式的背景图片。

定义透明的窗口装饰,使用如下设置:

   AddToFunc StartFunction
   + I Exec fvwm-root -r $HOME/wallpapers/sea.png

   Colorset 41 RootTransparent buffer, fg white, bg average,Tint cyan 15, bgTint cyan 15# tint is optional
   Colorset 42 RootTransparent buffer, fg white, bg average,Tint red15, bgTint red15# tint is optional

   Style * Colorset 41, HilightColorset 42# to use fg and bg
   BorderStyle Inactive Colorset 42 -- flat
   BorderStyle Active   Colorset 41 -- flat
   TitleStyle AllInactive Colorset 42 -- flat
   TitleStyle AllActive   Colorset 41 -- flat
   ButtonStyle All -- UseTitleStyle flat

同样也可以局部的定义透明的窗口装饰。你可以加入"AddTitleStyle Colorset NN PP”或者只是"TitleStyle Colorset NN PP"来实现。请阅读man手册。也可以参考fvwm-themes 里和你想要的样式类似的配置。

--------------------------------------------
3.26 如何定义应用程序的透明?

A: 这实际上并非是FVWM的问题,你可以看的X应用程序是否支持透明,并阅读它们的文档。

在这种情况下,你需要设置root image。通常使用fvwm-root(使用“-r”参数),Esetroot或者wmsetbg。

有很多的终端模拟器可以设置成为透明,比如 Eterm, aterm, gnome-terminal 等等。使用这个命令行:

   aterm -ls -sh 70 -bg black -fg white -tr +sb -fn 7x14 -fb 7x14bold

有些程序有透明的主题,比如:gkrellm and xmms.

有些程序能够透明的在root image上显示文字,比如:root-tail。

还有许多其它支持透明的程序就不列举了, 请到FreshMeat查看, http://freshmeat.net/.

--------------------------------------------
3.27 如何在fvwm里定义Emacs方式的键盘绑定?

A:在emacs里,按键可以被设置成为prefix keys,当你按下prefix keys后,后面接着的那个按键将赋予特别的功能。比如,Control-a 通常可能将光标聚焦的行首,但是Control-c Control-a则有其它含义。FVWM至少有2种方式用来实现这个功能。

最简单的方法是使用prefix key 来激活一个菜单,而后用菜单的热键来绑定第二次的按键。因为菜单的热键无法修饰,你可以用一个普通的按键来实现。
   
第二个方法是你可以自由的定义第二次按键,但是只能在2.5.x及以后的版本里面实现。这个方法定义在按下第一组按键后调用一个函数,此时可以按下第二组按键或者过多久以后使绑定失效:

   DestroyFunc Ctrl-Alt-F-Action
   AddToFunc   Ctrl-Alt-F-Action
   + I Key X A A Exec xterm
   + I Key C A A Exec xcalc
   # optionally popup a prompt window here
   + I Schedule 5000 Key X A A -
   + I Schedule 5000 Key C A A -

   # Press Ctrl-Alt-F and then "x" or "c"
   Key F A CM Ctrl-Alt-F-Action

现在,你要按下第二个键5秒钟,否则绑定操作将会被移除。

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

athlonxhy 发表于 2005-2-27 10:49:36


4.1 我在使用FvwmButtons模块(或1.xx版的GoodDtuff模块)。为什么有时这些按钮会一直保持按下的状态,有时却不是?
A:引自FvwmButtons的帮助页:
        假如命令是FVWM的内部命令,那么按钮按下后就会保持按下的
状态直到一个名字或类别与该命令引用部分相符的窗口出现。这么做是
为了给使用者一个看得见的回馈以表示他要求的动作正在被执行。如果
命令引用部分为空,那么按钮按下后会立即弹起。需要注意的是,使用者
可以不断的按此按钮以不断的执行这个命令,甚至在该按钮是按下的状态
时亦可。

--------------------------------------------
4.2当点击FvwmButtons来取消一个程序的时候,是否能够通过定义按键(鼠标的某个键) 来同时启动其他的程序?比如,我希望在用我定义的鼠标按键关闭xload的时候, 按下时能启动xterm;又或是关闭xbiff的时候,同时启动消息列表。
A:对于alpha 2.5.0发行版及其以后的版本是这样的。要是使用更老的版本,请继续往下看。

   The button presses normally get passed through to the swallowed
   application, but if you put a title on the button, you can
   assign actions to that. Here's an example that someone sent to
   the mailing list once:

一般情况下,按键的按下信息会传递给被关闭的程序,但是如果你给按钮(程序按钮) 添加一个标签,你便能够对它指定一定的行为。下面是一个某人发送一次邮件列表的例子:

   *FvwmButtons(1x4,       \
   Title         'System Info', \
   Swallow         "xload" 'Exec xload', \
   Action(Mouse 1) 'Exec xosview -cua0 -net 200 -ul -l -geometry 325x325',
\
   Action(Mouse 2) 'Exec xcpustate -interval 1 -bg "#a4978e" -fg black', \
   Action(Mouse 3) 'Exec rxvt -fg "khaki" -bg "dark olive green" \
                           -fat -n top -T Top -7 -e top' )


And you could come up with something similar for xbiff (untested)
对xbiff所作的工作应该和上面的非常类似,对吗?(未经测试的):

   *FvwmButtons(1x2, \
   Title 'Check Mail' Swallow "xbiff" 'Exec xbiff', \
   Action(Mouse 1) 'Exec from | xmessage -file -' )

   plus you could bind another button (say Mouse 3) to run your
   mail program.
   这样一来(对于3键鼠标来说)你就可以把邮件程序绑定到另外的按键上了。

   Sometime in the future I'll probably try and fix it so that you can
   actually assign a button press over the application itself...
   未来的某个时候,我可能会尝试修改一下以便你能真正的在应用程式里指定一个按下后可以关闭自己按钮...

--------------------------------------------
4.3 当我用FvwM4/Cpp模块预处理文件时,发生了奇怪的事情...
A:对,我可以想象到。比如InitFunction没有被调用或者在FVWM之前运行的窗口没有被设定边界和风格等等...
   所有这些是因为FvwmM4是一个模块。Fvwm只会在它触发主循环代码的时候,才会 针测到从模块传回的命令,并且首先要保证启动startup过   程已经全部完成已 经准备好执行InitFunction函数了。
   
强制同步执行FvwmM4/Cpp请用:
ModuleSunchronous FvwmM4/Cpp -lock filename

更多细节请见帮助页。

--------------------------------------------
4.4 我听说过一个FvwmFileMgr模块。哪里可以找到它?
A:FvwmFileMgr模块已经没有了。因为文件管理器不需要和窗口管理器整合到一起。在这方面像xfm类的程序做得更好。我推荐用它来替代这个模块(从ftp.x.org
或其镜像)。

--------------------------------------------
4.5 我习惯于使用FVWM 1.xx版的GoodStuff模块,但在2.xx的发布包中没有这个模块了。 现在我该用什么?
A:GoodStuff现在叫FvwmButtons了。同样的模块,不同的名字而已(为了配合其它模块的更名)。

--------------------------------------------
4.6 我可以把FvwmButtons的字幕托盘放在屏幕的其它地方而不是默认的按钮周围的地方吗?
A:答:可以。但不是本专题讨论的内容。请参阅7.12。

--------------------------------------------
4.7 怎样用键盘快捷键来在FvwmButtons中按按钮和开启字幕盘?
A:FvwmButtons本身并不支持键盘快捷键。从2.3.24版FVWM开始,可以用FakeClick命令

    在FvwmButtons窗口中模拟鼠标的点击。

2.3.24版及其后
   DestroyFunc press_fvwmbuttons
   AddToFunc press_fvwmbuttons
   + I Next (FvwmButtons, CirculateHit) WarpToWindow $1 $2
   + I FakeClick depth 2 press $0 release $0

2.5.1版及其后(移动指针回初始位置)
   AddToFunc press_fvwmbuttons
   + I SetEnv pointer_x $
   + I SetEnv pointer_y $
   + I Next (FvwmButtons, CirculateHit) WarpToWindow $1 $2
   + I FakeClick depth 2 press $0 release $0
   + I WindowId root WarpToWindow $p $p

   使用下面这个函数可以将指针移动到想要的按钮并模拟一次单击。如下
   调用
   press_fvwmbuttons btn xoff yoff
                         ^    ^    ^
                         |    |    |___ 按钮的y位移
                         |    |________ 按钮的x位移
                         |_____________ 要模拟的鼠标键

比如:设托盘按钮在FwvmButtons宽度的30%,高度的10%处,你想模拟鼠标1键:
    press_fvwmbuttons 1 30 10

    You can bind this to a key.For example:
    你可以把它绑定到一个键。比如:
   Key f1 a n press_fvwmbuttons 1 30 10
   
注意:当鼠标同时移动的时候,这个方法不起作用。

cnhnln 发表于 2005-2-27 23:36:40

支持斑竹,顶先

athlonxhy 发表于 2005-4-4 09:51:55

==============================================
                     6.各种各样的问题
==============================================

6.1 DESK,PAGE和SCREEN之间的确切差别是什么?
A:命名惯例是造成它们之间混淆的一个原因,当讨论问题或做其它的事情时,我们希望一个词一直保持它原来的意思。要说明fvwm的特性,就要谈到:fvwm有多个分开的DESKTOP,每个DESKTOP由MxN个PAGE组成,而每个PAGE和物理屏幕(SCREEN)一样大小。物理屏幕(SCREEN)就是当前DESK的一个PAGE的观察口。下面的图可以说明这个问题(可以再看一看FvwmPager模块):

             Desk 0                     Desk 1
   +----------+----------+    +----------+----------+
   |          |           |    |          |          |
   | Page 0 0 | Page 1 0 |        |          |          |
   |          |          |    |          |          |
   |          |          |    |          |          |
   +----------+----------+    +----------+----------+
   |+--------+|          |    |          |          |
   ||Page 0 1|| Page 1 1 |    |          |          |
   ||      ||          |    |          |          |
   |+--------+|          |    |          |          |
   +----------+----------+    +----------+----------+

上面的图显示了两个2x2的DESKTOPS。如果当前DESK是0号,当前PAGE是(0,1),那么SCREEN将只显示在当前DESK当前PAGE上的程序窗口。

桌面从0开始连续编号。用户并不需要去创建新桌面,这些细节都在fvwm内部处理。可以配置键绑定来决定显示哪个桌面,在不同的桌面间切换。例如,要使Meta-1到Meta-4分别显示桌面0到3,可以把下面几行添加到配置文件里:
   Key 1 A M GotoDesk 0
   Key 2 A M GotoDesk 1
   Key 3 A M GotoDesk 2
   Key 4 A M GotoDesk 3
同理也可以这样设置page.例如每个桌面有2x2个pages,你可以用Meta-F1到 Meta-F4分别切换到各个page:
   DeskTopSize 2x2
   Key F1 A M GotoPage 0 0
   Key F2 A M GotoPage 1 0
   Key F3 A M GotoPage 0 1
   Key F4 A M GotoPage 1 1

可以创建一个pager把每个桌面都显示出来(这样便于用鼠标在它们之间切换)。显示前4个桌面的命令是:
   Module FvwmPager 0 3

或者你只想在pager中看到当前的桌面:

   Module FvwmPager * *
-------------------------------
6.2我喜欢{OpenWindows,NeXT,WIn95,Mac等等}的外观和感觉,你们准备支持这些吗?
A:这不是我们的首要任务,但是我想fvwm在这方面做的很好.
你可以看看下面地址:
http://fvwm-themes.sourceforge.net/
--------------------------------
6.3 我可以从哪找到更多的用作图标的XPM图片?
A:如果你需要彩色图标,可以从ctwm(ftp.x.org)上抓取,那里有很多漂亮图片。你也可以在ftp.x.org上找到很多其它窗口管理器的图标,还有在http://www.sct.gu.edu.au/~anthony/icons/也有。(我相信哪里有很多).
在fvwm的网站上,你可以找到一些随fvwm一起发布的基本的图标,还有一些关于图标资源的链接。
你可以看看下面地址内容:
http://wm-icons.sourceforge.net/
----------------------------------------------------------------------
6.4Linux X86 虚拟屏幕大小和fvwm交互....
A:如果你不喜欢linux的虚拟屏幕可以从配置文件XF86Config里把它关掉.XFree86的虚拟屏幕特性,加上在一些显卡上的缺乏支持,就是没什么用。如果你使用了窗口管理器,它已经帮你实现了虚拟桌面。
----------------------------------------------------------------------
6.5 我知道这个问题与fvwm不相关,但是Rob Nation曾经支持的rxvt和rclock现在怎么样了,去哪里可以找到它们?
A:rxvt的官方站点:
http://www.rxvt.org/
rclock也可以在那个rxvt发行上找到。
------------------------------------------
6.6我如何使用fvwm设置桌面背景?
A:其实设置桌面背景不是窗口管理器的任务。如果你使用的是linux的某一个发行版,里面会有个程序为你设置背景。
fvwm也自带了一个程序(fvwm-root,以前叫作xpmroot),你可以用它把XPM或PNG格式的图片设为桌面背景。还有象xv,xli,xloadimage,display和Esetroot都可以帮你设置背景,它们支持一些fvwm-root不支持的图片格式。
如果你只想要一个静态的背景,可以在.xsession或.xinitrc文件里使用上面的某个程序进行设置。也可以在fvwm的初始化函数initFunction里设置。

fvwm模块FvwmBacker可以利用外部程序根据你的当前所在桌面改变桌面背景。用外部程序的一个缺点是速度比较慢。FvwmBacker能使用定义在colorset里的图片,并进行缓冲以提高改变背景的速度。例如:

   Colorset 10 TiledPixmap foo.xpm
   Colorset 11 Pixmap bar.png
   FvwmBacker: Command (Desk *, Page * 0) Colorset 10
   FvwmBacker: Command (Desk *, Page * 1) Colorset 11

然而,fvwm只能处理xpm,xbm,png格式的图片,其它格式须转换后方可使用。
----------------------------------------------------------------------
6.7使用fvwm时,我的颜色设置"XYZ"得不到正确的颜色,哪里的问题?
A:我们已经提到过关于FvwmForm全是白色,图标不能显示和不能正确分配颜色等等的问题。

一些老的硬件使用了8位色深,或者由于你没有设置好新的硬件导致它们只能使用8位色深。这种情况下在同一时刻只能使用256种颜色。
下面的链接有非常详细的解释:
      http://www.sunhelp.org/faq/FrameBuffer.html

如果你的显示器可以支持多于256种的颜色,照做就可以了。需要的时候用"man X"查看一下X服务器的文档。
如果你只能使用8为色深,fvwm可以帮你解决问题。在2.2.x版本,使用"ColorLimit"命令可以减少fvwm在图标上使用的颜色数。在2.3.x及其以后各版本,ColorLimit是自动的,但仍然可以用它进一步减少使用的颜色数。

除此外,你还可以:

-运行Netscape时加上“-install”参数。

-如果你使用了背景图片,减少图片使用的颜色数。对于xv加“-nc nn”参数,对于xli加“-colors nn”参数

-不要使用颜色渐变。

-Some applications are color hungry.像TK构建的程序,默认设置下的FrameMaker都是这样的。

如果你还是有问题,试一下fvwm的邮件列表。
----------------------------------------------------------
6.8我刚弄到一个57键的鼠标,如何在fvwm种使用?

A:呵呵,我知道你没有57键的鼠标,目前最多只有7个键的。从Fvwm2.4.0开始Fvwm支持所有X官方支持的5键鼠标,从2.5.11开始默认支持9键鼠标。

2.5.11及以后版本:

要使用多于9键的鼠标(最多31键),修改文件 libs/defaults.h,把下面这行
       #define NUMBER_OF_EXTENDED_MOUSE_BUTTONS      9

改为
       #define NUMBER_OF_EXTENDED_MOUSE_BUTTONS      15

2.4.10 到 2.5.10版本:

使用多于5键的鼠标,修改文件 libs/defaults.h,把下面这行
       #define NUMBER_OF_MOUSE_BUTTONS               5

改为
       #define NUMBER_OF_MOUSE_BUTTONS               7

然后重新编译安装fvwm。然而数值编号大于5的键可能不会正常工作,这是因为X没有在一些函数里提供必要的界面支持,来处理大于5的键。这就意味着一些使用第6键或更大键的功能不能使用。

你可以使用的最大值是31,更大的值可能不会起作用,甚至可能使fvwm或它的模块崩溃。
---------------------------------
6.9为什么fvwm更改了我的X鼠标指针主题
A:并没有更改。始终有一个标准的鼠标指针集可以使用,象十字状的,左指箭头状的,铅笔状等。你的主题应该提供这些,但有些可以没有。如果有程序(如一个应用程序或fvwm)需要一个指针而你的主题有没有,X就使用默认值。如果你看到fvwm使用了不属于你主题的指针,可以使用CursorStyle更改,或者找一个更全的主题。注意,fvwm不控制应用程序使用什么样的指针。

athlonxhy 发表于 2005-4-4 10:02:06

=====================================================================
                                  7 - 开发者的一些提示和示例
======================================================================
7.1 测试新配置的简单方法。
你知道吗,对于大部分配置命令要看它们做了什么,并不需要重启X或者fvwm。有一些模块可以让你在任何时候向fvwm发送命令,其中有FvwmCommand,"FvwmForm-Tolk"和FvwmConsole.我个人比较喜欢FvwmCommand和FvwmConsole。
当打开FvwmConsole时,你看到一个shell,通过它你可以向fvwm发送配置命令。如下配置,就可以在菜单里加一个启动FvwmConsole的选项:

        AddToMenu main_menu
        + "FvwmConsole" Module FvwmConsole

更巧妙的方法是使用FvwmCommand。在配置文件里添加下面一句启动FvwmCommand服务器:

        Module FvwmCommandS

确保FvwmCommand模块在你的搜索路径里。服务器启动后,就可以在你喜欢的shell输入命令了:
        FvwmCommand "MenuStyle * Font 6x9"

注意要把命令放在引号里。FvwmCommand的优点是可以使用你喜欢的shell,利用shell的特性(如命令行补全和历史),缺点是有点慢,因为FvwmCommand每次只能启动一条命令。

其它相关的模块和命令是FvwmScript和PipeRead。
----------------------------------------------------------------------

7.2 在配置里使用shell命令

有时侯你也许想在配置文件config里使用shell命令或脚本的输出,比如你想要一个菜单,菜单的各项是某个目录下的所有文件名。这种效果可以使用PipeRead和FvwmCommand得到。我推荐使用PipeRead,因为使用FvwmCommand创建20个菜单项就需要相当的时间。

例:
   # make the background menu
   AddToFunc MakeBackgroundMenu
      + "I" DestroyMenu BackgroundMenu
      + "I" AddToMenu BackgroundMenu Backgrounds Title
      + "I" PipeRead 'for i in `/bin/ls $HOME/.fvwm/backgrounds/*.bg.*`; \
            do echo -e AddToMenu BackgroundMenu `basename $i | sed -e \
            "s/\.bg\..*$//"` Function SetDefaultBackground $i; done'

   # set the default background
   AddToFunc SetDefaultBackground
      + "I" Exec echo -e $0 > $HOME/.fvwm/background
      + "I" Function SetBackground

   # set a new background
   AddToFunc SetBackground
      + "I" Exec test -r $HOME/.fvwm/background && xv -root -quit -viewonly \
            `cat $HOME/.fvwm/background|tr -d "\n"`

   # activate setting from last session and build the menu
   AddToFunc InitFunction
      + "I" Function SetBackground
      + "I" Function MakeBackgroundMenu

MakeBackgroundMenu函数创建一个菜单,各菜单项是在目录$HOME/.fvwm/backgrounds下的且匹配"*.bg.*"模式的文件名,后缀.bg.*被删除。当我们选择其中一项时,使用xv把对应的文件设置为桌面背景,并把该文件名和路径存到文件$HOME/.fvwm/background中,当我们开始下一个fvwm会话时,就可以把桌面设为和上次会话同样的背景。

我还有一个更加复杂的关于调色版的设置。
----------------------------------------------------------------------

7.3如何在非当前desk或page启动程序。

使用'StartsOnDesk'或'StartsOnPage' style:
   
        Style Netscape* StartsOnPage 0 1

   or

   Style Netscape* StartsOnDesk 1

这样标题以'Netscape'开始的窗口都会被放在page 0 1(desk 1).你可能希望使用下面的选项:
   Style * RecaptureHonorsStartsOnPage, CaptureHonorsStartsOnPage

如果你想在其它的page启动程序,但是并不切换到那个page,这需要使用'SkipMapping' style:
   Style Netscape* StartsOnPage 0 1, SkipMapping

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

7.4如何在非当前desk或page打开一个应用程序,且不切换观察口(viewport)到打开程序的page或desk。

使用SkipMapping style:

        Style Netscape* StartsOnPage 0 1, SkipMapping
----------------------------------------------------------------------

7.5 更高效的MWM菜单

可能你已经注意到,对于MWM菜单,只要指针移到菜单项子菜单就会弹出,即使你只想移动到下面。这种情况可以使用MenuStyle的 'PopupDelay' 和 'PopupDelayed'选项:
   MenuStyle mwm
   MenuStyle PopupDelayed, PopupDelay 80

这样,子菜单会在指针移动到菜单项的80毫秒后打开。你很难感觉到这个延迟。注意只是在我的机器上,80毫秒足够指针经过菜单了,你可能需要实验一下找到一个合适的值。
----------------------------------------------------------------------

7.6 关于在屏幕上放置菜单
你有过想打开主菜单但却找不到地方的时候吗?还得关闭窗口或者满屏幕的移动鼠标?
如果是的话,你可以使用下面的快捷键:

   Keyspace A M   Menu root c c main_menu

这样设置后,当你按下Alt-space就会在屏幕的中心弹出名为main_menu的菜单。或者你想给window menu设置一个快捷键:

   Keyspace A SMMenu root c c WindowMenu

你可以把菜单放到任何地方,不仅是鼠标指针所在的位置。细节请看man page中的Menu命令。
----------------------------------------------------------------------
7.7当鼠标接近屏幕边缘,有时候会发生flipping pages,你遇到过吗?

可以使用EdgeScroll命令禁止flipping pages:

   EdgeScroll 0 0
----------------------------------------------------------------------

7.8给你的窗口和图标排队

SnapAttraction和SnapGrid命令可以用来保持桌面的整洁。使用SnapAttraction可以使窗口(或者图标)互相紧贴在一起。当拖动窗口(图标)临近另一个窗口(图标)的时候,就紧贴到那个窗口(图标)上,边缘之间没有任何间隙。把下面的命令放到配置文件里:

SnapAttraction 8 SameType


这个命令的意思是如果窗口间的距离小于8个象素时,就互相贴在一起,图标和图标间也是如此。或者你只想应用到窗口/图标上,可以使用:
   SnapAttraction 8 Windows

   or

   SnapAttraction 8 Icons

或者你想窗口与图标之间也可以相互紧贴:
   SnapAttraction 8 All

SnapGrid命令也很有用:

   SnapGrid 8

这个命令告诉fvwm使用8个象素大小的格子放置窗口和图标。试一下看看你喜不喜欢。

提示:SnapGrid的参数最好选用桌面的宽和高的约数.
----------------------------------------------------------------------

7.9使用键盘移动鼠标/聚焦/page.

移动鼠标的键绑定:
   # shift-<direction> to move a few pixels
   Key   Left   A   S   CursorMove -1 0
   Key   RightA   S   CursorMove +1 +0
   Key   Up   A   S   CursorMove +0 -1
   Key   Down   A   S   CursorMove +0 +1

   # shift-meta-<direction> to move 1/4 page
   Key   Left   A   SMScroll -25 +0
   Key   RightA   SMScroll +25 +0
   Key   Up   A   SMScroll +0-25
   Key   Down   A   SMScroll +0+25

移动pages的键绑定:
   # shift-control-<direction> to move a full page
   Key   Left   A   SCCursorMove -10 +0
   Key   RightA   SCCursorMove +10 +0
   Key   Up   A   SCCursorMove +0-10
   Key   Down   A   SCCursorMove +0+10

   # Alt-Fn to go to a specific page (like on the Linux console)
   Key F1 A M GotoPage 0 0
   Key F2 A M GotoPage 1 0
   Key F3 A M GotoPage 0 1
   Key F4 A M GotoPage 1 1

按指定方向改变focus到一个窗口:
   # number keys on keypad to move the focus
   Key KP_1 A C Direction SouthWest Focus
   Key KP_2 A C Direction South Focus
   Key KP_3 A C Direction SouthEast Focus
   Key KP_4 A C Direction West Focus
   Key KP_6 A C Direction East Focus
   Key KP_7 A C Direction NorthWest Focus
   Key KP_8 A C Direction North Focus
   Key KP_9 A C Direction NorthEast Focus

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

7.10 防猫安全桌面^_^

如果你的猫总是趁你煮咖啡的时候爬上键盘,下面的某个设置可能会帮上忙:

使用'Style * MouseFocus',在你离开的时候把鼠标指针放到桌面背景上(根窗口)。
如果你不想改变‘SloppyFocus’的设置,那就把鼠标指针移动到一个永远不会得到键盘输入的窗口,使它成为focused的窗口。更狂热的想法是用猫的图片做一个窗口^_^
----------------------------------------------------------------------

7.11下降并移动窗口。

在一些配置里,使用鼠标中键移动窗口后,窗口会下降。如果是先下降,然后移动窗口会有很好的视觉效果:

   Mouse2 T AFunction MoveOrLower

   AddToFunc MoveOrLower
      + "Click"         Lower
      + "Motion"      Lower
      + "Motion"      Move
      + "DoubleClick"   Lower

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

7.12Toggling windows on and off.
固定、解除固定窗口


如果有一个按钮或菜单项,第一次使用时它打开程序,第二次使用时它关闭程序,那将是令人期待的。如何实现这个效果好像不太容易想到,但确实是可以的。假设你需要一个菜单项用来打开和关闭FvwmConsole.
把下面的内容放到配置文件里(fvwm-2.5.11及后续版本):
   AddToFunc ToggleFvwmConsole
   + I ToggleWindow FvwmConsole "Module FvwmConsole"

   # Application toggling function
   # 第一个参数是窗口名,第二个是启动程序的命令
   AddToFunc ToggleWindow
   + I None ($$0, CirculateHit) $$1
   + I TestRc (Match) Break
   + I Next (currentpage, visible, !iconic, $$0, CirculateHit) Close
   + I TestRc (Match) Break
   + I Next ($$0, CirculateHit) Function MakeVisible

   # Helper function
   AddToFunc MakeVisible
   + I MoveToDesk
   + I MoveToPage
   + I MoveToScreen
   + I Raise
   + I Iconify off
   + I WindowShade off


要使用这个函数,把它放到菜单里:
   AddToMenu <some menu>
   + "toggle FvwmConsole" Function ToggleFvwmConsole

如果你更喜欢按钮,就放到FvwmButtons里:
   *FvwmButtons: (Action ToggleFvwmConsole)

对于不可见的窗口,并不关闭它们,而是由包含MoveToDesk, MoveToPage和Raise的行把它带到当前page的顶层。

如果你只想针对特定的窗口,比如某个xterm,但是其它的xterm还保持原来的样子,那么你必须给这个窗口一个唯一的名字:

   AddToFunc RunXMessages
   + I Exec exec xterm -T XMessages -n XMessages \
         -e tail -f /var/adm/?* ~/.X.err

   AddToFunc ToggleXMessages
   + I ToggleWindow XMessages "Function RunXMessages"

值的注意的是,这个函数只是简单的查找是否有指定名字的窗口存在。所以该函数可能关闭手动打开的窗口,或者因为程序启动太慢而多次启动同一个程序(像netscape)。

在fvwm-2.5.10及早些的版本中,下面的函数也可以实现这个功能:
   AddToFunc ToggleFvwmConsole
   + I None (FvwmConsole, CirculateHit) Module FvwmConsole
   + I Next (FvwmConsole, CirculateHit, CurrentPage, Visible) Close
   + I Next (FvwmConsole, CirculateHit) MoveToDesk
   + I Next (FvwmConsole, CirculateHit) MoveToPage
   + I Next (FvwmConsole, CirculateHit) Raise

   AddToFunc ToggleXMessages
   + I None (XMessages, CirculateHit) Exec exec \
       xterm -T XMessages -n XMessages -e tail -f /var/adm/?* ~/.X.err
   + I Next (XMessages, CirculateHit) Close

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

7.13通过点击打开程序(称为docking程序)

通常一个图标代表一个最小化的程序。但是如果你想通过点击图标来启动程序,也是可以的。使用FvwmButtons实现:
   # FvwmButtons icon launcher:
   DestroyFunc Launcher
   AddToFunc Launcher
   + I DestroyModuleConfig $0Launch: *
   + I *$0Launch: Geometry 64x68
   + I *$0Launch: Columns 1
   + I *$0Launch: Rows    4
   + I *$0Launch: Frame   0
   + I *$0Launch: (1x3+0+0, Icon $1, Action (Mouse 1) `Exec $2`)
   + I *$0Launch: Pixmap none
   + I *$0Launch: (1x1+0+3, Font 9x15, Fore White, Back DarkBlue, \
                  Title $0, Action (Mouse 1) `Exec $2`)
   + I Style $0Launch HandleWidth 0, NoTitle
   + I Module FvwmButtons $3 $0Launch
   # Examples:
   Launcher RXVT xterm.xpm "rxvt -bg black" "-g +0+0"
   Launcher XV   xv.xpm    "xv"   "-g +0+100"

GNOME和KDE也有实现同样功能的程序gmc和kfm。这些程序同样可以在fvwm中运行。在fvwm-2.5.1及后续版本中可以使用Nautilus(版本>=2)和kdesktop。
----------------------------------------------------------------------

7.14精确定位窗口

这个例子演示了如何把窗口放到屏幕中心。注意这里是如何使用PipeRead的,以及如何使用$(())进行算数计算的。
   DestroyFunc CenterWindow
   AddToFunc   CenterWindow
   + I ThisWindow Piperead "echo Move \
       $(( $/2-$/2 ))p \
       $(( $/2-$/2 ))p"

如果你有一个名为"MyWindow"的窗口,使用下面的命令把它放到屏幕中心
   Next (MyWindow) CenterWindow

去掉ThisWindow,可以在没有窗口上下文而调用CenterWindow时避免一些错误。

在fvwm-2.5.11中,可以使用“Style X CenterPlacement”把窗口放到屏幕中心。
----------------------------------------------------------------------

7.15 隐藏鼠标指针

有些用户不喜欢鼠标总是挡在前面。你可以安装unclutter程序,它会在鼠标不移动时隐藏鼠标。
----------------------------------------------------------------------

7.16 寻找鼠标指针

有的时候怎么也找不到鼠标指针,下面给出一个找到它的方法:
   Key Super_L A A Exec xmessage -name "SmallBlob" -bg red \
       -fg white -nearmouse -timeout 1 'I am here!'
   Style SmallBlob UsePPosition, NoTitle, NoHandles, BorderWidth 10

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

7.17 自动隐藏FvwmButtons或其它窗口

有些应用程序有自动隐藏的特性,就是把窗口放到一个特定区域而不占用宝贵的桌面空间。在fvwm中可以通过写一些小的函数来隐藏任何窗口。

fvwm-2.5.11或后续版本:

   # 自动隐藏函数
   AddToFunc autohide
   + I ThisWindow ($0) Deschedule $
   + I ThisWindow ($0) KeepRc ThisWindow (shaded) WindowShade off
   + I TestRc (!Match) All ($0, !shaded) autohide_hide $1 $2

   AddToFunc autohide_hide
   + I Schedule $0 $ WindowShade $1
   + I Schedule $0 $ Deschedule $

   # 打开FvwmAuto
   AddToFunc StartFunction
   + I Module FvwmAuto FvwmAutohide -menter enter_handler

   # 添加你想自动隐藏的窗口
   AddToFunc enter_handler
   + I autohide FvwmButtons 500 S
   #            ^         ^   ^
   #            |         |   |___Shade direction (可选的)
   #            |         |_______ 隐藏延迟 (毫秒)
   #            |___________________ 唯一的窗口名/资源

照着上面的例子,添加你想自动隐藏的窗口到enter_handler函数。autohide函数需要两个或三个参数。第一个是窗口或者类的名字,必须是唯一的名字。第二个是隐藏延迟,从指针离开窗口算起到窗口隐藏的时间,以毫秒为单位。最后一个参数是可选的,表示窗口隐藏的方向(N, S, E, W, NW, NE, SW or SE)。

下面是一个稍复杂一点的版本。和上面的不同在于不是立即显示窗口,而是有一点延迟。
   fvwm-2.5.11及后续版本:

   AddToFunc autohide
   + I ThisWindow ($0) Deschedule $
   + I TestRc (!Match) Deschedule -$
   + I ThisWindow ($0) KeepRc ThisWindow (shaded) \
         autohide_show $1 $3
   + I TestRc (!Match) All ($0, !shaded) autohide_hide $2 $3

   AddToFunc autohide_show
   + I Schedule $0 -$ WindowShade $1 off
   + I Schedule $0 -$ Deschedule $
   + I Schedule $0 -$ Deschedule -$

   AddToFunc autohide_hide
   + I Schedule $0 $ WindowShade $1 on
   + I Schedule $0 $ Deschedule $
   + I Schedule $0 $ Deschedule -$

   AddToFunc StartFunction
   + I Module FvwmAuto FvwmAutohide -menter enter_handler

   AddToFunc enter_handler
   + I autohide FvwmButtons 250 500 S
   #            ^         ^   ^   ^
   #            |         |   |   |__Shade direction (optional)
   #            |         |   |______Hide delay
   #            |         |__________Show delay
   #            |______________________Unique window name/resource

从2.5.8到2.5.10这些函数都可以使用,但是你不得不从autohide函数中删除KeepRc命令。
----------------------------------------------------------------------

7.18Using application screenshots as icon or mini icon
      thumbnails.
使用程序的截图作为图标或缩略图?

通过脚本,fvwm可以在窗口最小化和改变大小时取得程序窗口的截图,并把它作为程序的图标。有一些程序本身就有这个能力,我们建议使用程序本身的功能。
对于xterm,可以在启动时加上 +ai(表示active icon)选项:
   $ xterm +ai

对于XEmacs,有一个live-icon elisp包可以使用。安装后把下面几行放到XEmacs配置文件里
   (load-library "live-icon")
   ; Control size, same as max icon size, uncomment if you want
   ; this feature.
   ;(setq live-icon-max-height 48)
   ;(setq live-icon-max-width 48)

确保你没有对这些程序使用style IconOverride,这个选项禁止使用动态图标。除此外,可能还有许多其它程序有这类特性。

如果你想利用fvwm来使用程序的缩略图作为图标,那么fvwm的版本不能低于2.5.8,这是因为要使用WindowStyle命令。此外还需要ImageMagick工具集(注:一些处理图像的工具),设置好环境变量$PATH,让fvwm可以找到它。<URL:http://www.imagemagick.org/>

下面的函数Thumbnail用来代替Iconify,可以在键绑定里使用它提升窗口,获取窗口截图并设置截图为窗口的图标。获取窗口截图可能需要几秒钟。窗口会立即最小化,但新的缩略图只有截图准备好了才能显示出来。

注意,截图只能从窗口的可视部分获得。如果窗口有一部分在屏幕外,在另外一个桌面或被其它窗口挡住了,缩略图可能比预期的小,或者挡住的部分显示不出来。这个没什么办法可以解决。

相同的办法也可以用于mini icon,只要把下面出现的icon都换成miniicon就可以了。
   DestroyFunc Thumbnail
   AddToFunc Thumbnail
   + I Raise
   + I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead \
         "xwd -silent -id $ | convert -scale 64 -frame 1x1 \
         -mattecolor black -quality 0 xwd:- \
         png:$/icon.tmp.$.png \
         && echo WindowStyle IconOverride, \
         Icon $/icon.tmp.$.png \
         || echo Nop"
   + I Iconify

窗口返回到通常状态时,可以使用模块FvwmEvent删除Thumbnail产生的图标。
   DestroyFunc DeThumbnail
   AddToFunc DeThumbnail
   + I Exec rm -f $/icon.tmp.$.png
   + I DestroyWindowStyle

   *FvwmEvent: deiconify DeThumbnail

   AddToFunc StartFunction I Module FvwmEvent

如果你想把DestroyWindowStyle用作其它目的而不能使用它时,可以先把窗口的当前图标保存起来,一会需要的时候再恢复它。这种方法只能用在fvwm2.5.9及后续版本。

下面是Thumbnail函数
   DestroyFunc Thumbnail
   AddToFunc Thumbnail
   + I Raise
   + I SetEnv Icon-$ $
   + I ThisWindow (!Shaded Iconifiable !Iconic) PipeRead \
         "xwd -silent -id $ | convert -scale 64 -frame 1x1 \
         -mattecolor black -quality 0 xwd:- \
         png:$/icon.tmp.$.png \
         && echo WindowStyle IconOverride, \
         Icon $/icon.tmp.$.png \
         || echo Nop"
   + I Iconify

DeThumbnail函数用来恢复存的图标:
   DestroyFunc DeThumbnail
   AddToFunc DeThumbnail
   + I PipeRead "echo WindowStyle Icon \\$\\\\]"
   + I UnsetEnv Icon-$
   + I Exec rm -f $/icon.tmp.$.png

要想在重启fvwm后还能使用这些缩略图标,可以在StartFunction里加入下面的几行
   AddToFunc StartFunction I Test (Restart) All (Iconic) \
       Test (f $/icon.tmp.$.png) WindowStyle \
       IconOverride, Icon $/icon.tmp.$.png

你也可以检查一下忘了删除的缩略图,并在ExitFunction函数里删除它们。
   AddToFunc ExitFunction I Test (!ToRestart) \
       Exec rm -f $/icon.tmp.*

相同的办法也可以用于mini icon,只要把出现的icon都换成miniicon就可以了。

sunu 发表于 2005-5-23 14:38:42

:roll: 好文章不能沉了,呵呵
看了这里的文字,越来越想试试fvwm了,哈.

线头 发表于 2006-1-3 13:03:11


AddToFunc autohide
+ I ThisWindow ($0) Deschedule $
+ I TestRc (!Match) Deschedule -$
+ I ThisWindow ($0) KeepRc ThisWindow (shaded) \
autohide_show $1 $3
+ I TestRc (!Match) All ($0, !shaded) autohide_hide $2 $3

AddToFunc autohide_show
+ I Schedule $0 -$ WindowShade $1 off
+ I Schedule $0 -$ Deschedule $
+ I Schedule $0 -$ Deschedule -$

AddToFunc autohide_hide
+ I Schedule $0 $ WindowShade $1 on
+ I Schedule $0 $ Deschedule $
+ I Schedule $0 $ Deschedule -$

AddToFunc StartFunction
+ I Module FvwmAuto FvwmAutohide -menter enter_handler

AddToFunc enter_handler
+ I autohide FvwmButtons 250 500 S


如何控制两个对象的显示或隐藏?我在AddToFunc enter_handler里加上类似的代码后,之前的fvwmbuttons就不行了

phisics0872 发表于 2006-5-24 09:10:24

:mrgreen:

neilton 发表于 2006-10-12 21:56:06

好贴,最好能搞个单独的手册。 :-D
页: [1]
查看完整版本: 《FVWM FAQ中文版》--第6,7部分完成