基本 FVWM 配置
如果您最近设置了 fvwm 并正在使用默认的 system.fvwmrc,您会发现单击根窗口中的任意位置会弹出一个弹出菜单。您可能还会很快沮丧地发现,这些程序项中的许多都不执行任何操作,原因可能是程序不存在或设置不正确。
因此,您可能需要删除这些菜单项。此外,迟早您会安装一些想要添加到弹出菜单中的程序。或者您可能会决定将菜单重组为类别,例如编辑器、图形、查看器、网络应用程序等等。无论出于何种原因,配置弹出菜单都很容易,而且非常有趣。那么让我们看看它是如何完成的。
假设您经常进行文本编辑或编程,并且有几个您喜欢使用的编辑器。您现在想要按程序类别组织弹出菜单,并希望将您所有喜欢的编辑器放在一个名为“编辑器”的弹出子菜单下。
为了简单起见,我们将省略关于使用命令行选项的讨论,例如几何形状、前景色和背景色、字体等等。我们将使用相当简单的示例,并假设您可以稍后返回并自定义命令行选项。
请确保您已备份当前工作版本的 .fvwmrc。之后,加载您最喜欢的编辑器并打开用于定义弹出菜单的文件 .fvwmrc。这将包括如下条目
Popup "Applications" Title "Applications" Exec "Wingz" exec Wingz & Exec "Xmgr Plot" exec xmgr -g 780x730+362+3 & Exec "Ghostview" exec ghostview & Exec "Seyon" exec seyon -modem /dev/modem & Exec "SciLab" exec scilab & Exec "X3270" exec x3270 & Exec "Xfilemanager" exec xfilemanager & Exec "Xfm" exec xfm & Exec "Xgrab" exec xgrab & Exec "Xxgdb" exec xxgdb & EndPopup
您的 .fvwmrc 可能会与此略有不同,因此请找到文件中定义 Popup "name" ... EndPopup 节。在没有完全理解事物如何工作的情况下,您可能会使用上面这样的条目作为模板,并修改条目以包含您想要的程序。但是,您会发现这并不难理解。
需要记住的重要一点是,您必须首先定义子菜单,然后再定义主菜单。这样做的原因实际上很简单:当 fvwm 启动时,它会从头到尾读取 .fvwmrc 配置文件。如果您首先定义主菜单,它会遇到对尚未定义的菜单项(您的子菜单)的引用,因此它无法正确设置菜单。此外,子菜单可以嵌套到任何深度。一旦您有了要添加到子菜单的编辑器列表,并且您已经确定了您打算使用的命令行选项,您就可以开始了。
菜单的基本条目采用以下形式
Popup "name" Title "title" Exec "program" exec command & Exec "program" exec command & Exec "program" exec command & Nop "" Exec "program" exec command & Exec "program" exec command & EndPopup
让我们简要地看一下条目的每个部分。条目以单词 Popup 和 "name" 开头,它用于引用此菜单本身(当我们谈到将子菜单添加到主菜单时,我们将看到如何使用它)。下一行以单词 Title 开头,指定菜单顶部显示的标题。请注意,标题用双引号括起来。接下来是一系列熟悉的 Exec 节,每个节都用于启动程序。但是,这次,Exec 之后和用双引号括起来的单词是将在菜单上显示的名称。xedit 编辑器的节可能如下所示
Exec "XEdit" exec xedit -font 9x15 -g +5+20 &
然后,菜单将包含一个名为 XEdit 的条目:单击此条目将使用命令行上指定的字体和几何选项启动 xedit 程序。不要忘记条目末尾的 & 符号 (&)。
您还会注意到一行以单词 Nop 开头,顾名思义(对某些人来说),它执行“无操作”。但是,它允许您在菜单项之间创建分隔线。Nop 后跟一对之间没有空格的双引号 ("") 会创建分隔线。这对于在视觉上分隔菜单中的项目列表非常有用。但是,如果 Nop 后跟之间有空格的双引号 (" "),则会在菜单项之间创建一个空条目,而不是一条线。尝试两者并查看差异。
最后,保留字 EndPopup 用于指示菜单已定义。很简单,是吧?一旦您了解了菜单是如何定义的,您就可以轻松地使用现有的菜单定义作为创建您自己的菜单的“模板”。
还有一点需要快速提及:可以从弹出菜单启动 fvwm 模块。与上个月提到的 InitFunction 条目一样,这些条目非常简单,并且使用相同的形式
Module "name" module
例如,要启动 FvwmPager,您需要添加如下内容
Module "Pager" FvwmPager
请注意两件事:模块的菜单项名称可以是您想要的任何名称——它不必与模块名称相同。其次,您不要在命令行末尾放置 & 符号 (&)。
所以,既然我们已经介绍了基础知识,让我们将所有这些放在一起,为我们的编辑器创建一个子菜单。假设我们希望菜单标题为 编辑器,并且 Popup 本身被称为 editors,那么我们可以创建类似于下面给出的示例的内容
Popup "editors" Title "Editors" Exec "XE&dit" exec xedit & Exec "X&Coral" exec xcoral & Exec "GNU &Emacs" exec emacs -g 84x47 & Exec "&XEmacs" exec xemacs & Exec "XW&PE" exec xwpe -font 9x15 & Exec "X&WE" exec xwe -font 9x15 & Exec "&aXe" exec axe -noserver & Exec "&NEdit" exec nedit & Exec "E&Z Editor" exec ez & EndPopup
到目前为止还不错,是吧。那是什么?这些 & 符号在菜单项名称条目中做什么?Fvwm 允许您定义用于菜单的键盘快捷键。在项目名称中放置 & 符号会导致 & 符号后面的字母带有下划线。然后,当菜单显示时,点击带有下划线的字母会导致程序项被执行。
在上面定义的菜单中,XEdit 中的字母“d”将带有下划线,并显示为“XEdit”。菜单显示后,点击“d”将启动 xedit。不用说,您应该避免为名称菜单中的两个项目定义相同的热键。
好的,我们快完成了。现在我们已经创建了一个子菜单,让我们将其添加到主菜单中。子菜单的条目采用以下形式
Popup "Editors" editors
很简单,对吧?到目前为止,语法应该开始让您感到非常熟悉了。该行以单词“Popup”开头,表示该项目是某种子菜单。紧随其后,用双引号括起来的是将在菜单上显示的项目名称。最后,最后一个参数是弹出菜单本身的名称。还记得我们决定将弹出窗口称为 editors 吗?这是子菜单被调用的名称。注意不要将弹出菜单的名称与菜单使用的标题(例如“编辑器”)混淆。
好了,恭喜您!您现在应该在自定义和配置方面做得很好。弹出菜单上可以包含更多内容,尽管程序、模块和子菜单可能是您最常用的内容。一旦您习惯了创建菜单条目,请浏览 fvwm 手册页并查看 fvwm 发行版附带的示例 fvwmrc 文件,以获取关于还可以做些什么的想法。
作为最后的劝告,让我建议“凡事适度”可能是明智的建议。没有必要也不明智为系统上的每个程序都创建一个条目。添加您经常使用的程序并使其可访问。嵌套子菜单超过一两层可能会使访问它们变得比值得的更麻烦。此外,单个菜单上超过 15 到 20 个项目可能会使其有点笨拙。[实际上,人机交互专家建议,当人类大脑同时处理超过 7 个项目(或项目组)时,效率会降低。—ED] 如果需要,请自行决定并进行划分。但最重要的是,玩得开心!
到现在为止,您应该开始对 fvwm 感觉相当不错了。您已经学习了创建启动桌面的基础知识,并且您已经重新组织和自定义了弹出菜单。这很不错,是吧?自定义待办事项列表中的下一个项目总是颜色。与 fvwm 关联的大多数事物一样,颜色是可广泛自定义的。但是,这样做可能有点棘手,不是因为它有多么困难,而是因为有几个条目控制着颜色如何应用于各种程序和窗口。一旦您跟踪了所有这些,并了解了一些关于颜色如何定义的简单概念,剩下的就是玩耍了。但是,一开始,了解一些关于 fvwm 如何查看窗口的信息是有帮助的(不,不是那个 Windows...)。
Fvwm 识别并区分几种不同的“类型”的窗口。这些包括“选定”窗口(即具有输入焦点的窗口)、“未选定”窗口(即不具有输入焦点的窗口)和“粘性”窗口(即“粘在玻璃上”的窗口)。可以自定义每种类型窗口的配色方案。顺便说一句,让我指出,更改根窗口的颜色或在根窗口中使用位图或像素图图像作为“壁纸”很容易。在本系列的第 1 部分中,我们看到 xsetroot 程序允许您更改根窗口的颜色(请参阅示例 .xinitrc 文件)。还有更多有趣和娱乐性的方法可以更改根窗口,但我暂时将其留给您(提示:man xpmroot 和 man xv 应该给您一些想法...)。
因此,回到自定义各种窗口。Fvwm 允许您单独自定义选定、未选定和粘性窗口,以及菜单和寻呼机。这些是使用以下保留字设置的
StdForeColor StdBackColor StickyForeColor StickyBackColor HiForeColor HiBackColor MenuForeColor MenuBackColor MenuStippleColor PagerForeColor PagerBackColor
ForeColor 代表前景色,BackColor 代表背景色。这非常典型地说明了 X 下的颜色是如何指定的——使用前景色/背景色组合来设置配色方案。以下是对其中每一个的简要说明
StdForeColor 菜单和未选定窗口标题的前景色
StdBackColor 菜单和未选定窗口框架的背景色
StickyForeColor 未选定粘性窗口标题的前景色
StickyBackColor 未选定粘性窗口框架的背景色
HiForeColor 选定窗口标题的前景色
HiBackColor 选定窗口框架的背景色
MenuForeColor 菜单的前景色
MenuBackColor 菜单的背景色
MenuStippleColor 菜单中阴影化条目的颜色
PagerForeColor 寻呼机的前景色
PagerBackColor 寻呼机的背景色
设置您想要的配色方案就是添加如下条目
StdForeColor black StdBackColor wheat
这将前景色(文本)设置为黑色,背景色设置为小麦色。
有了这些新知识,您开始自定义颜色,并找到一个如下所示的条目
StdBackColor #8a4510
如果您在闭上眼睛并想象颜色 #8a4510 的外观时遇到一点麻烦... ...请继续阅读。
由条目 #8a4510 指定的颜色(对于好奇的人来说,恰好是 SaddleBrown)是十六进制表示法。截至 X11 Release 5,有几种指定颜色的方法:两种常用的格式是 RGB 颜色名称(例如 SaddleBrown)和 RGB 十六进制值(例如 #8a4510)。首字母缩写词 RGB 代表“红色、绿色、蓝色”,与颜色的生成方式有关。
回想一下您在学校的日子,所有颜色都可以通过原色——青色、品红色和黄色的组合来产生。从技术上讲,这些是油漆的“减色”原色;当您将它们放在一起时,它们会减去所有的光并产生“黑色”(它实际上变成棕色)。也可以使用红色、绿色和蓝色的“加色”原色组合来创建颜色——当您将它们放在一起时,它们会加起来变成白色。因此,RGB 指定表示构成颜色的红色、绿色和蓝色光的量。要查看 X 下可用的颜色,您可以查看文件 /usr/lib/X11/rgb.txt。此文件包含系统上所有命名颜色的列表。这可能包含如下列表
... 139 69 19 saddle brown 139 69 19 SaddleBrown 160 82 45 sienna 205 133 63 peru 222 184 135 burlywood 245 245 220 beige 245 222 179 wheat ...
每行包含颜色名称和三列数字,这些数字表示基于 0-255 范围(可以存储在 8 位或一个字节中的数字范围)的红色、绿色和蓝色值的相对贡献。很聪明,是吧?为了参考,白色包含红色、绿色和蓝色的最大值,值为 255、255、255。黑色定义为 0、0、0。这仍然没有回答 #8a4510 的外观问题,除非您对十六进制有所了解。
十六进制系统使用以 16 为基数的位序系统,其“数字”包括数字 0-9 和字母 a-f(表示十进制值 10-16)。了解 RGB 指定必须具有每个基色的条目,您可以快速推测,通过将 8a4510 分解为三个十六进制数字并将其转换为十进制,您可以在上面的 rgb.txt 文件中找到它们的值(该文件使用十进制值表示红色、绿色和蓝色值)。手动从十六进制转换为十进制并不是很困难,但这里有一个更简单的方法
在命令行输入 bc 以启动 bc 在线计算器,然后输入
ibase=16
这会将输入设置为基数 16(十六进制)。现在,输入您要转换为十进制的数字,用分号分隔
8A;45;10
您必须对十六进制输入使用大写字母。输出应如下所示
138 69 16
按 ctrl-D 或键入 quit 退出 bc。
因此,红色值为 138,绿色值为 69,蓝色值为 16。回到上面的示例 rgb.txt 条目,我们可以看到这非常接近 SaddleBrown 的条目(rgb.txt 中的蓝色值为 19 而不是 16),而这实际上就是我们的颜色。
现在,如果所有这些看起来都过于复杂,请放心,有更简单的方法可以在 X 下查看和处理颜色。有一些必备的配置实用程序可以使使用和自定义 X-Windows 变得更加容易,而像 xcolorsel 这样的颜色查看器就是其中之一。您应该能够在 sunsite.unc.edu(或首选镜像站点之一)的 /pub/Linux/X11/xutils/colors/ 目录中找到此非常有用的程序的副本。这个非常方便的程序
1. 显示颜色补丁和每种颜色的 rgb.txt 条目。
2. 以 16 种不同的格式显示颜色条目,包括我们刚刚看过的十六进制表示法。
3. 允许用户从桌面上“抓取”颜色,并显示与其最匹配的 rgb 条目。
4. 允许用户使用其 Set foreground 和 Set background 功能“预览”特定的前景色/背景色组合可能的外观。
当您启动 xcolorsel 时,最初会显示一个显示窗口,其中包含颜色补丁、它们对应的十进制表示法的 rgb 值以及颜色名称——就像它们在 rgb.txt 文件中出现的那样。单击 Display format 按钮会显示一个不同格式的菜单——从此菜单中选择 8 bit truncated rgb 可让您查看 SaddleBrown 及其 rgb 十六进制值 #8a4510!因此,现在您可以轻松地看到每个颜色名称的外观,并且如果您好奇,还可以看到十六进制表示法。因此,以下条目是等效的
StdForeColor SaddleBrown StdForeColor saddle brown StdForeColor #8a4510
请记住,十六进制表示法需要磅号或井号 (# ) 前缀。
使用 Grab color 功能快速找出颜色的 rgb 条目是什么。为此,请单击 Grab color 按钮——光标将变为一个小放大镜。然后,将光标放在桌面上任何颜色上方并单击一次;xcolorsel 将在底部状态行显示有多少匹配项或近似匹配项,并突出显示颜色显示窗口中最接近的条目。
最后,如果您想查看特定的前景色/背景色组合可能的外观,请尝试以下操作:使用鼠标指针,突出显示您要用作前景色或背景色的颜色,然后单击底部的 Set foreground 或 Set background 按钮之一。颜色显示窗口的前景色或背景色将更改为此值。单击 Default colors 按钮会将窗口恢复为其原始配色方案。
现在您已经对颜色的定义方式有了一些了解,您可以轻松地创建自己的自定义“窗口处理”。但是,如果您进行了更改,启动了 fvwm,并且事情仍然不太符合您的预期,那么您仍然需要了解一些其他事项...
fvwm 的一个强大功能是它允许用户为任何或所有应用程序定义样式。这个想法实际上非常简单:您可以通过为其设置样式来指定应用程序窗口的外观及其几种行为。这可以包括诸如它是否具有标题栏、窗口边框的大小、它是否具有调整大小的句柄、它与之关联的图标等等。正如您可能想象的那样,一个这样的样式选项是颜色。
样式条目的语法实际上非常简单,可能如下所示
Style "xterm" Title, Handles, HandleWidth 7, Icon rxterm.xpm
也就是说,它以单词 Style 开头,后跟用双引号括起来的程序名称——在本例中为 xterm 程序。接下来是以逗号分隔的您可能希望应用于程序的各种样式选项的列表。
假设您想将应用程序窗口的颜色更改为简单的灰色背景上的黑色文本。这很简单,尽管重要的是要指出两点:首先,Styles 颜色条目仅设置 fvwm 放置在程序窗口周围的装饰性窗口框架的颜色——它不会更改应用程序本身的颜色。其次,颜色在窗口未选定时(即,它没有输入焦点)使用。当窗口被选中时,HiForeColor / HiBackColor 组合设置配色方案。也就是说,要更改应用程序窗口未被选中时的配色方案,您可以添加如下条目
Style "xterm" Color black/gray, Title, Handles, Icon rxterm.xpm
语法只是保留字 Color,后跟前景色颜色名称或十六进制数字、正斜杠和背景色颜色名称或十六进制数字。您还可以使用保留字 ForeColor 和 BackColor 指定每种颜色
Style "xterm" ForeColor black, BackColor gray, Icon rxterm.xpm
两种方法都有效。
关于模块的最后一点,我们就完成了!如前所述,fvwm 允许使用模块(例如 FvwmPager 或 GoodStuff 模块)添加其他功能。模块本身的前景色和背景色(而不仅仅是我们到目前为止一直在讨论的装饰性窗口框架)可以使用如下条目设置
*GoodStuffFore black *GoodStuffBack turquoise
模块的配置文件行必须以星号 (*) 字符开头,如上面的示例所示。要指定前景色,模块名称带有 Fore 后缀。背景色指定使用 Back 后缀。在上面的示例中,您可以看到我们将颜色组合更改为绿松石色背景上的黑色文本。同样,您可以使用颜色名称或十六进制表示法来指定要使用的颜色。
好了,这应该可以让您开始了!显然,颜色自定义比这里简要概述的要多得多。对于好奇和喜欢冒险的人,请参阅 X 和 fvwm 的手册页,以及 O'Reilly & Associates 出版的优秀书籍X-Windows 系统管理员指南(X-Windows 系列第 8 卷)。这本优秀的参考书的第 6 章更全面地讨论了颜色和 X-Windows 系统,包括从版本 5 开始实施的 X-Windows 颜色管理系统 (Xcms)。尽情享受吧!
John Fisk (fiskjm@ctrvax.vanderbilt.edu) 在范德比尔特大学医学中心担任普通外科住院医师和研究员三年后,他决定“挂起听诊器”并追求医疗信息管理事业。他目前是中田纳西州立大学的全日制学生,并希望在进入医疗信息学研究员职位之前完成计算机科学研究生学位。在他日益减少的空闲时间里,他和他的妻子 Faith 喜欢在田纳西州美丽的 Great Smoky Mountains 远足和露营。自从一年半前首次安装 Slackware 2.0.0 以来,他一直是狂热的 Linux 爱好者。