「FVWM」- 与模块相关命令

  CREATED BY JENKINSBOT

关于模块

一个模块是一个独立的程序,作为一个单独的Unix进程运行,但是命令要传输给fvwm来执行。用户可以编写他们自己的模块来做任何操作,而不会影响fvwm本身的完整性。

模块必须由fvwm产生,以便它可以为fvwm和模块进行通信设置两个管道。管道在启动时为已经打开,管道的文件描述符作为命令行参数提供。

在X会话期间,使用Module命令可以随时通过fvwm生成模块。模块可以在X会话期间一直存在,也可以执行单个任务并退出。如果在fvwm被告知退出时,有模块仍处于活动状态,那么fvwm关闭通信管道并等待从模块传来的一个SIGCHLD信号,指示它已经检测到管道关闭并退出。如果模块无法检测到管道关闭,fvwm在大约30秒后退出。同时执行的模块数量受操作系统的最大同时打开文件数限制,通常在60到256之间。

模块只是传输命令给fvwm命令引擎。命令的格式与配置设置文件中的相同。某些辅助信息也被传送,如在示例模块FvwmButtons中。

模块的配置行

Fvwm维护着一个模块配置行的数据库,该数据库里包含了模块的配置信息。模块配置行格式如下:

*
<ModuleName>: <Config-Resource>

其中,<ModuleName>是实模块名称或别名,比如:*TopPanel: Colorset 10或者*FvwmButtons: Colorset 10,其中TopPanelFvwmButtons的别名,在加载模块的时候会用到这个别名。

这个数据库最初是从配置文件(或从-cmd config命令的输出)中加载的,并且可以之后可以由用户(通过FvwmCommand)或模块进行修改。

当模块运行时,它们读取数据库的适当部分。(这个数据库的概念类似于X resource数据库)。

以下的命令也是用于操作模块配置数据库的。

*module_config_line

用于定义模块配置。module_config_line由模块名称(或模块别名)和模块资源行组成。新的语法允许在模块名称和行的其余部分之间使用分隔符(冒号和可选空格),建议避免冲突。

*
FvwmPager: WindowBorderWidth 1

*
FvwmButtons-TopRight: Geometry 100×100-0+0

*
FvwmButtons-Bottom: Geometry +0-0

DestroyModuleConfig module_config

删除模块的配置条目,以便可以输入新的配置行,有时这也是回退到之前的模块设置的唯一方法。使用该命令这将改变模块在fvwm会话期间运行的方式,而无需重新启动。部分名称中也可以使用通配符。

新的非冲突语法允许在模块名称和行的其余部分之间使用分隔符(冒号、可选空格),在这种情况下,模块名称(或别名)不能有通配符:

DestroyModuleConfig FvwmButtons*


DestroyModuleConfig FvwmForm: Fore


DestroyModuleConfig FvwmIconMan: Tips*

比如:DestroyModuleConfig FvwmIconMan: Tips*的FvwmIconMan不能带有通配符。

KillModule modulename [modulealias]

Causes the module which was invoked with name modulename to be killed. The name may include

wildcards. If modulealias is given, only modules started with the given alias are killed.

# kill all pagers

KillModule FvwmPager

Module FvwmEvent SoundEvent

KillModule FvwmEvent SoundEvent

Module modulename [moduleparams]

指定一个应该生成的有可选参数的模块。目前有几个模块,包括FvwmButtons,FvwmEvent,FvwmForm,FvwmGtk,FvwmPager,FvwmScript,他们支持别名。如果应该生成模块的多个实例,则别名很有用。别名可以使用*语法单独配置。要使用别名为MyForm来启动模块FvwmForm,可以使用以下语法:

Module FvwmForm MyForm

当前可用的模块(包含在fvwm中的)有:

  • FvwmAnimate(当窗口被图标化或f反图标化时,产生动画效果);
  • FvwmAuto(一个自动提升模块);
  • FvwmBacker(当你改变桌面时改变背景);
  • FvwmBanner (显示一个漂亮的XBM,XPM,PNG,SVG);
  • FvwmButtons(可定制的工具栏);
  • FvwmCommandS(与shell的FvwmCommand客户端一起使用的命令服务器);
  • FvwmConsole(直接执行fvwm命令);
  • FvwmCpp(使用cpp预处理配置文件);
  • FvwmEvent(触发各种事件);
  • FvwmForm(调出对话框)
  • FvwmIconMan(一个灵活的图标管理器);
  • FvwmIdent(获取窗口信息);
  • FvwmM4(用m4预处理你的配置);
  • FvwmPager(一个迷你版本的桌面);
  • FvwmPerl(Perl的操纵器和预处理器);
  • FvwmProxy(通过使用小代理窗口来定位和控制隐藏的窗口);
  • FvwmScript(另一个强大的对话框工具包);

这些模块有自己的手册页。当然还有一些其他的模块:FvwmDebug(帮助调试fvwm),FvwmDragWell(拖放到的地方),FvwmGtk(调出GTK菜单和对话框),FvwmIconBox(如mwm IconBox),FvwmRearrange (to rearrange windows),FvwmSave(将桌面状态保存为.xinitrc风格),FvwmSaveDesk(将桌面状态保存在fvwm命令中)

模块可以是短暂的临时程序,或者像FvwmButton一样可以在X会话期间一直存在。如果可能,在重新启动和退出之前,模块将由窗口管理器终止。请参阅每个模块的介绍部分。如果modulename与所有fvwm命令不同,则可以省略Module关键字。

ModuleListenOnly modulename [moduleparams]

This command works like the Module command, but fvwm never sends any messages to the module. This may

be handy to write a module as a shell script that is triggered by external events without the burden

to answer packets sent by fvwm. For example, a module written as a shell script may change labels of

the FvwmButtons module to implement a simple clock.

ModulePath path

Specifies a colon separated list of directories in which to search for modules. To find a module,

fvwm searches each directory in turn and uses the first file found. Directory names on the list do

not need trailing slashes.

The ModulePath may contain environment variables such as $HOME (or ${HOME}). Further, a ‘+’ in the

path is expanded to the previous value of the path, allowing easy appending or prepending to the path.

For example:

ModulePath ${HOME}/lib/fvwm/modules:+

The directory containing the standard modules is available via the environment variable

$FVWM_MODULEDIR.

ModuleSynchronous [Expect string] [Timeout secs] modulename

The ModuleSynchronous command is very similar to Module. Fvwm stops processing any commands and user

input until the module sends a string beginning with “NOP FINISHED STARTUP” back to fvwm. If the

optional Timeout is given fvwm gives up if the module sent no input back to fvwm for secs seconds. If

the Expect option is given, fvwm waits for the given string instead. ModuleSynchronous should only be

used during fvwm startup to enforce the order in which modules are started. This command is intended

for use with the (currently hypothetical) module that should be in place before other modules are

started.

Warning: It is quite easy to hang fvwm with this command, even if a timeout is given. Be extra

careful choosing the string to wait for. Although all modules in the fvwm distribution send back the

“NOP FINISHED STARTUP” string once they have properly started up, this may not be the case for third

party modules. Moreover, you can try to escape from a locked ModuleSynchronous command by using the

key sequence Ctrl-Alt-Escape (see the EscapeFunc).

ModuleTimeout timeout

Specifies how many seconds fvwm waits for a module to respond. If the module does not respond within

the time limit then fvwm kills it. timeout must be greater than zero, or it is reset to the default

value of 30 seconds.

SendToModule modulename string

Sends an arbitrary string (no quotes required) to all modules, whose alias or name matching

modulename, which may contain wildcards. This only makes sense if the module is set up to understand

and deal with these strings though. Can be used for module to module communication, or implementation

of more complex commands in modules.

参考文献

Documentation/Module Commands