FVWM学习笔记(更新中...20090423...)

网址:http://docs.huihoo.com/homepage/shredderyin/fvwm_frame.html

//20090323
所有FVWM的配置保存在单一配置文件里,通常位于 $HOME/.fvwm2rc 或 $HOME/.fvwm/.fvwm2rc,第一步就是建立 $HOME/.fvwm 和 .fvwm2rc 空文件。

http://docs.huihoo.com/homepage/shredderyin/fvwm_frame.html

#############20090420####################
配置文件和它的位置
配置文件叫做 ~/.fvwm/.fvwm2rc, 在你的用户目录下。
写配置文件,一个很好的出发点就是随 FVWM 源码发行的 system.fvwm2rc 文件。它的位置现在在源码包的 sample.fvwmrc/system.fvwm2rc。
下载地址:http://docs.huihoo.com/homepage/shredderyin/src/system.fvwm2rc

怎样实验新的FVWM命令
实验一个命令的作用不需要重新启动FVWM,你可以先在 .fvwm2rc 里这样定义:

Key F3 A A Module FvwmConsole

启动fvwm, 这样你在任何时候按下 <F3> 键,就会启动一个叫做 FvwmConsole 的模块,你可以在里面输入Fvwm命令,回车它们就会执行,并且立即生效。(第2个A参考菜单激活,可能是任何控制键的意思20090423)
##################
//20090422

实验一个命令的作用不需要重新启动FVWM,你可以先在 .fvwm2rc 里这样定义:
Key F3 A A Module FvwmConsole
然后启动fvwm, 这样你在任何时候按下 <F3> 键,就会启动一个叫做 FvwmConsole 的模块.在里面输入Fvwm命令,回车它们就会执行,并且立即生效。

常用命令:

Read file. 插入另外一个文件file的内容。

Exec app. 启动一个shell,并且在里面执行"app"命令。
例如:启动一个X程序最好同时使用 exec, 比如
Exec exec rxvt

Module FvwmXxx. 启动一个叫做 FvwmXxx 的模块。必须从Fvwm fork() 出来,而不能从一个 xterm 独立启动。

ImagePath path. 指定一个路径,在配置文件里要用到的图标等文件就会到这个路径里去寻找。
比如:
ImagePath +:/usr/share/icons:/usr/share/pixmaps:
$HOME/.fvwm/icons
加号是表示以前定义过的那个 ImagePath. FVWM 可以使用 .xbm, .xpm 和 .png 格式的图标.

Move, Raise, Lower, Resize, ... 这些都是常用的操纵窗口的命令。

OpaqueMoveSize x. 如果一个窗口移动时显示内容,那么它必需占屏幕面积的 x%.

MoveToDesk, MoveToPage. 可以把任何窗口移动到指定的桌面和页面。

SnapAttraction. 设定在什么距离以内,满足什么条件的窗口就被吸附在一起。

WarpToWindow x[p] y[p]. 让鼠标移动到窗口范围以内。x,y是在窗口内的坐标,用百分比表示。后面如果有后缀"p", 就用像素来表示。

IgnoreModifiers. 你可以忽略某些键盘控制键。这将影响到你的鼠标和键盘热键定义。

DesktopName desk name. 定义第desk号桌面的名字叫 name.

Scroll. 移动你在桌面上的 viewport, 这样你可以把桌面当成一个整体来浏览。看到很大的范围。

Nop. 不操作,在有些时候需要用它来占位。

PipeRead. 从一个外部命令得到输入。这可以用来根据你的系统构造许多非常高级的控制方式。其中一种叫做“菜单式文件管理器”。

SetEnv. 设置FVWM的环境变量。

------------
键盘操作的定义:

Key Keyname Context Modifiers Function
 表示:在名叫 Keyname 的键在 Context 上下文按下时,如果控制键 Modifiers 组合按下,那么执行 Function. 键盘操作后面的部分跟鼠标一样的含义,我们下面只用鼠标操作来一起说明这些命令的用途。

鼠标操作的定义:

Mouse Button Context Modifiers Function

它表示:在鼠标编号为 Button 的键在 Context 上下文按下时,如果键盘控制键 Modifiers 组合按下,那么执行 Function.
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 是为了消除以前有可能定义过的函数体。
    * 如果是一个鼠标点击(C), 那么关闭这个窗口(Close), 但是如果现在不是在窗口上下文,也就是说,函数调用的时候没有一个确定的目标,那么不进行操作,而不是出现一个"+"字瞄准器让用户选择窗口。 这就是 "Silent" 的含义。
    * 如果鼠标点下去之后移动了,也就是“拖动”(M),那么不进行操作。


启动函数和退出函数
在 FVWM 启动和重新启动时都会调用 StartFunction, 而且在首次启动时会调用 InitFunction, 在重新启动时会调用 RestartFunction, InitFunction 和 RestartFunction 都是在 StartFunction 之后调用。每次重起和完全退出时都要执行 ExitFunction.
如果你有什么程序需要在FVWM启动时启动,那么就把它加到合适的函数里面去。比如加到StartFunction中去(和上面的例子形式一样)。
########20090423
(接上)
每个命令前的 "I" 表示 Imediately, 立即执行,联想上面提到的 "C" 和 "M", 这个操作不等待任何鼠标动作。
--------
窗口样式
Style 语句用于设定窗口的样式。
语法为:
Style stylename options
stylename就姑且当作窗口的名字好了(有 "*" 作为通配符),以后多看看 Xlib 的说明书你就会明白这些东西。
可以用 xwininfo 程序或者 FvwmIdent 模块来查询窗口的名字(FvwmIdent 是模块,不能从 xterm 的命令行运行)。
例如:
Style *term TitleAtLeft
让所有以 "term" 结尾的那些窗口的标题栏都在左边。

options 是你想让满足条件的窗口以什么样的方式存在。
ptions 的种类非常之多。比如:BorderWidth, HandleWidth, FocusFollowsMouse, TileCascadePlacement, ... 它们有的需要参数,比如 BorderWidth 7, 指定边框宽度为7个像素。有些不需要参数,比如 FocusFollowsMouse/ SloppyFocus/ NeverFocus/ ClickToFocus 指明了几种互相排斥的键盘聚焦方式。例如:
Style *           FocusFollowsMouse
Style *           TileCascadePlacement
Style "Fvwm*"       NoTitle,  Sticky, WindowListSkip
Style "Fvwm*"       BorderWidth 2, CirculateSkipIcon, CirculateSkip
Style "FvwmPager"   StaysOnTop
Style "FvwmBanner"  StaysOnTop
Style "FvwmButtons" Icon toolbox.xpm, ClickToFocus
开头的两行说明所有窗口,都是鼠标移进去的时候得到键盘聚焦,鼠标移出来就失去聚焦(FocusFollowsMouse),窗口出现的时候,先试图找一个可以放下它而不挡住其它窗口的地方,如果不行再采用层叠放置的方式(TileCascadePlacement)。
下面是说明所有名字以 "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。

--------------
菜单
菜单是由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
+                       "&Programs"      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 指向图标文件所在的目录。你还可以在菜单里加入侧面图标,等等等等。
用:
DestroyMenu RootMenu
就可以把刚才那个 "RootMenu" 菜单消灭掉。

---------
菜单的激活
这个菜单在什么情况下出现?这个问题是需要你自己来决定.
例如:
Mouse 1 R       A       Menu RootMenu Nop
意思是:“当鼠标(Mouse)左键(1)在根窗口(R)上点击,同时有任何控制键(A)按下,这个时候显示叫做 RootMenu 的菜单。”
又:
Mouse 3 A       MC      Menu RootMenu Nop
这样,当右键(3) 在任何地方(A)点击, 同时有Alt(M)和Ctrl(C)按下,那么弹出名叫 "RootMenu" 的菜单。
上面的 "Nop" 表示的是鼠标在菜单上进行双击时的操作。我定义为不操作。另外 Menu 还可以随意定义菜单出现的位置,详细请看 fvwm manpage。

---------
菜单的样式

你可能感兴趣的:(shell,function,Module,button,menu,文件管理器)