一生醉生忘死,就让他继续下去吧!
分类:
2011-09-07 14:54:12
原文地址:fvwmFAQ中文版(二) 作者:xuanjunxuan
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 [CurrentDesk !Iconic] Focus
Key KP_Subtract A M Prev [CurrentDesk !Iconic] 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 (erik@westworld.engr.sgi.com), 6/96]
--------------------------------------------
3.6 我想把一个键绑定为粘贴当前选择(use the current selection),怎么办呢?
A: 直接依靠fvwm还不行,但是有一个解决方案:从这里[url]ftp://ftp.x.org/contrib/utilities/ [/url]或者镜像网站下载'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的接口程序,在)来查找你用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)
Cursor cursor_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)
Pager X_Location Y_Location (obsoleted, use FvwmPager)
PagerForeColor colorname (obsoleted, use FvwmPager)
PagerBackColor colorname (obsoleted, use FvwmPager)
PagerFont fontname (obsoleted, use FvwmPager) %
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 $[pointer.x]
+ I SetEnv pointer_y $[pointer.y]
+ I Next (FvwmButtons, CirculateHit) WarpToWindow $1 $2
+ I FakeClick depth 2 press $0 release $0
+ I WindowId root WarpToWindow $[pointer_x]p $[pointer_y]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
注意:当鼠标同时移动的时候,这个方法不起作用。