AddToMenu menu-name [menu-label action]
定义一个菜单。典型的定义像这样:
AddToMenu Utilities Utilities Title
+ Xterm Exec exec xterm -e tcsh
+ Rxvt Exec exec rxvt
+ "Remote Logins" Popup Remote-Logins
+ Top Exec exec rxvt -T Top -n Top -e top
+ Calculator Exec exec xcalc
+ Xman Exec exec xman
+ Xmag Exec exec xmag
+ emacs Exec exec xemacs
+ Mail MailFunction xmh "-font fixed"
+ "" Nop
+ Modules Popup Module-Popup
+ "" Nop
+ Exit Fvwm Popup Quit-Verify
菜单可以这样触发:
Mouse 1 R A Menu Utilities Nop
或
Mouse 1 R A Popup Utilities
并没有一个符号表示菜单定义的结束,也不需要在配置文件中连续的定义。上面实例中,被引号引用的部分(或者第一个词)是菜单的标签,出现在菜单中。剩下的
部分是fvwm命令,菜单选中时被执行。一个空的菜单标签("")和一个Nop函数用来在菜单中插入一个分隔条。
关键字DynamicPopUpAction和DynamicPopDownAction被用作菜单标签时有特殊的意义,菜单弹出和关闭时,它后面的命令
会被执行。通过这种方法可以实现动态菜单。甚至使用DestroyMenu把它自己销毁,然后在重新建立都是可以的。菜单销毁后(除非销毁菜单时你使用了
recreate选项)不要忘了新建菜单时也要含有相应的DynamicPopUpAction或DynamicPopDownAction项。
注意:不要执行需要和用户交互的动作。它可能会失败,搞乱菜单。见Silent命令.
警告:不要在动态菜单的命令中使用MenuStyle命令,fvwm很有可能因此而崩溃。
随fvwm一起安装的有几个自动配置菜单的脚本。它们有自己的man
page。其中fvwm-menu-directory和fvwm-menu-desktop可以和DynamicPopupAction配合使用,创建
目录列表或者GNOME/KDE的应用程序列表。
例(文件浏览器):
#You can find the shell script fvwm_make_browse_menu.sh
#in the utils/ directory of the distribution.
AddToMenu BrowseMenu
+ DynamicPopupAction Piperead 'fvwm_make_browse_menu.sh BrowseMenu'
Example (Picture menu):
# Build a menu of all .jpg files in
# $HOME/Pictures
AddToMenu JpgMenu foo title
+ DynamicPopupAction Function MakeJpgMenu
AddToFunc MakeJpgMenu
+ I DestroyMenu recreate JpgMenu
+ I AddToMenu JpgMenu Pictures Title
+ I PipeRead 'for i in $HOME/Pictures/*.jpg; \
do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done'
关键字MissingSubmenuFunction有类似的用途。当你弹出一个不存在的子菜单时,就执行它指定的命令。利用这个函数可以随时定义和销毁
菜单。MissingSubmenuFunctionhou后可以使用任何命令,but the name of an item (that is
a submenu) defined with AddToFunc follows it,并按下面方式执行指定的命令:
Function
那个不存在的菜单名作为第一个参数传给函数,可以用引用。
上面曾提到的fvwm-menu-directory脚本可以和MissingSubmenuFunction搭配,产生即时的递归目录列表。如:
# There is another shell script fvwm_make_directory_menu.sh
# in the utils/ directory of the distribution. To use it,
# define this function in your configuration file:
AddToFunc MakeMissingDirectoryMenu
+ I Exec fvwm_make_directory_menu.sh
AddToMenu SomeMenu
+ MissingSubmenuFunction MakeMissingDirectoryMenu
+ "Root directory" Popup /
这是另一个文件浏览器,用子菜单显示子目录。
Titles命令可以定义菜单的标题,如果后面跟top选项,标题将被放在菜单的顶部,并覆盖原有的标题。
AddToMenu Utilities Tools Title top
在菜单标签中第一个Tab左侧的字符与菜单左侧对齐,第一个Tab右侧的字符与第二个标签栏左侧对齐,标签中的其它字符与第三标签栏右侧对齐。所有其它的Tab替换为空格。这种格式不是固定的,你可以使用MenuStyle的ItemFormat选项改变它。
如果菜单的标签包含'&',它的下一个字符就被作为热键,并且字符下面加一个下划线来标识。要想在标签中使用'&',需插入'&&'。
菜单的标签中用'*'标识的字符串,被解释为一个图片文件名,并插入到菜单里。要在标签里使用'*',需插入'**'。例如:
+ Calculator*xcalc.xpm* Exec exec xcalc
菜单中插入一项,以"Calculator"为标签,上面有一个图片。 下面的:
+ *xcalc.xpm* Exec exec xcalc
只留下一个图片,没有标签。
菜单的标签中用'%'标识的字符串,被解释为一个图片文件名(称为mini icon),并插入到标签左侧。以同样的方式给出第二个mini icon被放在标签的右侧。要在标签里使用'%',需插入'%%'。例如:
+ Calculator%xcalc.xpm% Exec exec xcalc
菜单中插入一项,以"Calculator"为标签,标签左侧有一个图片。 下面的:
+ %xcalc.xpm% Exec exec xcalc
只留下一个图片,没有标签。
使用这种方式指定的图片应该小一些(如16x16)。
菜单名(不是标签)中用'@'标识的字符串,被解释为一个xpm或bitmap的图片文件名,并出现在整个菜单的左侧(side pixmap)。使用MenuStyle的SidePic选项也可以实现同样的效果。要在标签里使用'@',需插入'@@'。例如:
AddToMenu StartMenu@linux-menu.xpm@
创建一个左下角带图片的菜单。
菜单名中用'^'标识的字符串被解释为X11的一个颜色名,菜单中包含side picture的部分用该颜色填充。这个颜色也可以用MenuStyle的SideColor选项指定。要在标签里使用'^',需插入'^^'。例如:
AddToMenu StartMenu@linux-menu.xpm@^blue^
创建一个左下角带图片的菜单,包含图片的部分用蓝色填充。
在上面的各种情况下,最终的菜单名是去掉以上特殊部分后的结果。