这是 FvwmPerl 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
FvwmPerl - fvwm perl 操作器和预处理器
概要
FvwmPerl 应该由 虚拟机(1) 正常功能。
要运行此模块,请将此命令放在配置中的某个位置:
模块 FvwmPerl [参数]
要么:
ModuleSynchronize FvwmPerl [参数]
如果你想立即开始向 FvwmPerl 发送命令。
商品描述
该模块旨在使用 perl 脚本功能扩展 fvwm 命令。 它使
在 fvwm 配置文件中嵌入 perl 表达式并构建 fvwm 命令。
召唤
如果要调用FvwmPerl唯一持久化的实例,建议
从 启动函数. 从顶部调用它也是可能的,但涉及
一些问题这里没有讨论。
AddToFunc StartFunction I 模块 FvwmPerl
有几个命令行开关:
文件名 [ --评估 线 ] [ - 加载 文件 ] [ --预处理 [ - 引用 字符 ] [ --winid 宽] [
--cmd [ --nosend [ --不删除 ] [ 线 | 文件 ] ] [ - 出口 [姓名] ] [ - 停留 [
--诺洛克 ] [别名]
长开关可以缩写为短的单字母开关。
-e|--评估 行 - 评估给定的 perl 代码
-l|- 加载 file - 评估给定文件中的 perl 代码
-p|--预处理 [文件] - 预处理给定的 fvwm 配置文件
以下5个选项仅与 --预处理 选项。
-c|--cmd line - 要预处理的 fvwm 命令而不是文件
-q|- 引用 char - 更改默认的 '%' 引用
-w|--winid wid - 设置显式窗口上下文(应该以数字开头,可以是八进制或
十六进制形式; 此窗口 id 覆盖隐式窗口上下文(如果有)
--nosend - 不要将预处理文件发送到 虚拟机 阅读ing,默认是发送。
用于预处理非 fvwm 配置文件。
--不删除 - 将预处理文件发送至 虚拟机 阅读ing,
默认是删除。 用于调试。
-x|- 出口 [names] - 定义 fvwm 快捷函数(默认情况下,两个函数名为
“评估”和“。”)。 这个选项意味着 - 停留.
-s|- 停留 - 在之后继续执行 --评估, - 加载 or --预处理 被处理。 经过
默认情况下,模块在这种情况下不是持久的,即 --不停留 假设。
--诺洛克 - 当给出 3 个动作选项之一时,此选项会导致解锁 虚拟机
立即地。 默认情况下,请求的动作是同步执行的; 这只会让
调用时的区别如下:
ModuleSynchronous FvwmPerl --preprocess someconfig.ppp
If --诺洛克 在这里添加, 模块同步 立即返回。 注意 模块 回报
立即不管这个选项。
使用 别名
别名允许有多个模块调用并与所有调用分开工作,
这是一个例子:
模块同步 FvwmPerl FvwmPerl-JustTest
SendToModule FvwmPerl-JustTest eval $a = 2 + 2; $b = $a
SendToModule FvwmPerl-JustTest eval cmd("Echo 2 + 2 = $b")
KillModule FvwmPerl FvwmPerl-JustTest
预处理 例
有效的前处理解决方案之一是通过整个 fvwm 配置
将 perl 代码嵌入到“FvwmPerl --preprocess”中。 另一种方法是编写一个 perl
生成 fvwm 命令并发送它们以供执行的脚本,可以加载此脚本
使用“FvwmPerl --load”。 然而,有仅预处理的中间解决方案
单独的配置行(或者,执行单独的 perl 命令
生成 fvwm 命令)。
下面的代码片段增加了算术和字符串脚本的能力到某些
需要这个的行。 要使用它,您需要启动 FvwmPerl 作为您的第一个命令,以便
可能会要求预先处理其他命令。
模块同步 FvwmPerl
添加到函数。
+ I SendToModule FvwmPerl 预处理 -c -- $*
. exec exec xterm -name xterm-%{++$i}% # 使用唯一名称
. GotoDesk 0 %{ $[desk.n] + 1 }% # 转到下一张桌子
. exec exec %{ -x "/usr/bin/X11/aterm" ? "aterm" : "xterm" }% -sb
# 居中窗口
下一步 (MyWindow) 。 移动 \
%{($WIDTH - $[w.width]) / 2}%p %{($HEIGHT - $[w.height]) / 2}%p
. exec exec xmessage %{2 + 2}% # 简单的计算器
. %{main::show_message(2 + 2, "又一个计算器"); ""}%
行动
FvwmPerl 可以执行以下几种操作:
评估 perl 代码
评估一行 perl 代码。
特殊功能 指令(“命令”) 可以在 perl 代码中用于将命令发送回
fvwm。
如果 perl 代码包含错误,则会将其打印到标准错误流中
[FvwmPerl][评估]: 标题前置。
加载 文档名称
加载 perl 代码文件。 如果文件不是完全限定的,则在
用户目录 $FVWM_USERDIR(通常是 〜/.fvwm) 和系统范围的数据目录
$FVWM_DATADIR。
特殊功能 指令(“命令”) 可以在 perl 代码中用于将命令发送回
fvwm。
如果 perl 代码包含错误,则会将其打印到标准错误流中
[FvwmPerl][加载]: 标题前置。
预处理 [-q|--quote 字符] [-c|--cmd] [线 | 文件]
预处理 fvwm 配置 文件 或(如果 --cmd 给出) 线. 此文件包含的行
未触及(通常是 fvwm 命令)和特殊预格式化的 perl 代码
处理和更换。 内附的文字 %{ ... }% 分隔符,可以从任何地方开始
在同一行或另一行的任何位置结束的行上,是 perl 代码。
这款 报价 参数更改 perl 代码分隔符。 如果给出单个字符,例如
'@',分隔符是 @{ ... }@. 如果给定的报价是 2 个字符,例如 <>, 引号
旨在 <{ ... }>
perl 代码被替换为它的评估结果。 即 %{$a = "c"; ++$a}%
替换为“d”。
评价不一样 评估 和 加载 在包 PreprocessNamespace 下完成
没有 使用 严格,所以你可以自由地使用任何变量名而不必担心
冲突。 只是不要使用未初始化的变量来表示 undef 或空列表(它们
实际上可能由之前的预处理操作初始化),并在以下情况下进行清理
需要。 变量和函数 主 包仍然可用,例如
::命令() 或者 ::跳过(),但在访问它们的同时访问它们并不是一个好主意
预处理。
有一个特殊的功能 包括(文件) 加载文件,对其进行预处理,然后
返回预处理结果。 避免递归。
如果任何嵌入的 perl 代码包含错误,则将其打印到标准错误
流并以 [FvwmPerl][预处理]: 标题。 的结果
在这种情况下,替换为空。
在 perl 代码中可以使用以下变量:
$USER、$DISPLAY、$WIDTH、$HEIGHT、$FVWM_VERSION、$FVWM_MODULEDIR、$FVWM_DATADIR、
$FVWM_USERDIR
预处理时识别以下基于行的指令。 他们是
在替换 perl 代码(如果有)之后处理。
%重复新密码 数
导致以下行重复 数 倍。
%模块配置 模块名称 [ 破坏 ]
导致以下行被解释为给定的模块配置。 如果
"destroy" 指定先销毁先前的模块配置。
%字首 字首
用引用的前缀为以下行 字首.
%结束 任何可选评论
结束上述任何指令,可以嵌套。
例子:
%前缀“AddToFunc SwitchToWindow I”
关闭图标
窗户遮光
提高
变形到窗口 50 50
%结尾
%ModuleConfig FvwmPager 销毁
颜色集 0
字体 lucidasans-10
桌面秤 28
小图标
%End ModuleConfig FvwmPager
%Prefix "All (MyWindowToAnimate) ResizeMove "
100 100 %{($宽度 - 100) / 2}% %{($高度 - 100) / 2}%
%重复%{$count}%
br w+2c w+2c w-1c w-1c
%结尾
%重复%{$count}%
br w-2c w-2c w+1c w+1c
%结尾
%结束前缀
也可以给出额外的预处理参数 --nosend 和 --noremove。 看到他们的
顶部的说明。
出口 [函数名]
发送 虚拟机 快捷功能的定义,有助于激活不同的
模块的动作(即 评估, 加载 和 预处理).
函数名 (函数名) 可以用逗号或/和空格分隔。 默认情况下,
两个函数“Eval”和“.” 假设。
如果可能的话,函数中定义的实际动作是从函数名中猜测出来的,
其中函数名“.” 保留给 预处理 行动。
例如,这两个 fvwm 命令中的任何一个
SendToModule MyPerl 导出 PerlEval,PP
FvwmPerl --导出 PerlEval,PP MyPerl
定义以下两个快捷函数:
DestroyFunc PerlEval 函数
AddToFunc I SendToModule MyPerl eval $*
销毁功能 PP
AddToFunc I SendToModule MyPerl 预处理 -c -- $*
可以通过以下 4 种方式之一请求这 3 个操作: 1) 在命令行中,当 FvwmPerl 为
被调用(在这种情况下 FvwmPerl 是短暂的,除非 - 停留 or - 出口 也给出), 2)
通过使用 SendToModule 在 fvwm 配置中发送相应的消息,3) 通过调用
perl 代码中对应的 perl 函数。
职能
perl 代码可以调用几个函数:
指令($fvwm_命令)
的情况下 评估 or 加载 - 将字符串发送回 fvwm $fvwm_命令。 的情况下
预处理 - 附加一个字符串 $fvwm_命令 到嵌入式 perl 代码的输出。
做评估($perl_代码)
这个函数相当于 评估 字符串上的功能 $perl_代码,
如上所述。
加载($文件名)
这个函数相当于 加载 文件 $filename 上的功能,描述
以上。
预处理(@参数, [“-C $命令"] [$文件名])
这个函数相当于 预处理 具有给定参数的功能
和上面描述的文件 $filename 。
出口($func_names, [$do_unexport])
这个函数相当于 出口 具有给定 $func_names 的功能,
如上所述。 也可能 不出口 如果第二个参数为真,则为函数名称。
函数名称应该用逗号或/和空格分隔。 如果 $函数名称 is
空然后函数“Eval”和“。” 假设。
停()
终止模块。
跳过()
跳过其余的事件回调代码,即模块返回监听新的
模块事件。
开锁()
从 fvwm 取消同步事件回调。 这可能有助于防止死锁,
即如果事件回调不是,fvwm 通常会杀死无响应的模块
完成 模块超时 秒。 这可以防止它。
这个例子导致 FvwmPerl 暂停执行一分钟:
SendModule FvwmPerl eval 解锁(); 睡觉(60);
但是,请确认在模块处于运行状态时 fvwm 无法发送新消息
忙,fvwm 锁定这条新消息的时间太长了。 另见 DETACH
如果您需要长时间的操作,这是一个解决方案。
分离()
从主进程中分叉并分离其余的事件回调代码。 这可能
如果其事件回调需要很长时间,则有助于防止杀死模块
完成,它可以在分离的孩子中完成。 分离的孩子可能仍然
向 fvwm 发送命令(不要依赖于此),但当然不接收事件,它
回调执行完成后立即退出。
如果你使用 分离(), 最好只在一个进程中向 fvwm 发送命令(主进程或
分离的),否则可能会经常引起冲突。
显示消息($msg, $title[, $use_stderr_too=1])
显示一个带有给定消息的对话窗口,使用在
系统。
参见 FVWM::模块::工具包::显示消息 获取更多信息。
变数
有几个全局变量 主 可以在 perl 中使用的命名空间
码:
$a,$b,...$h
@a,@b,...@h
%a、%b、...%h
它们都被初始化为空值,可用于存储之间的状态
对 FvwmPerl 动作的不同调用(评估 和 加载).
如果你需要更易读的变量名,要么写“no strict 'vars';” 在开始时
每个 perl 代码或为此使用哈希,例如:
$h{id} = $h{first_name} 。 “ ”。 $h{second_name}
或使用包名称,例如:
@MyMenu::terminals = qw(xterm rxvt);
$MyMenu::item_num = @MyMenu::终端;
可能有一个配置选项来打开和关闭严格性。
留言内容
FvwmPerl 可以使用 fvwm 命令 SendToModule 接收消息。 名称、含义和
消息的参数与上面描述的相应操作相同。
另外,一条消息 停止 导致模块退出。
一个消息 不出口 [函数名] 取消效果 出口,在行动中描述
部分。
一个消息 倾倒 转储已更改变量的内容(尚未)。
示例
一个简单的测试:
SendToModule FvwmPerl eval $h{dir} = $ENV{HOME}
SendToModule FvwmPerl eval load($h{dir} ."/test.fpl")
SendToModule FvwmPerl 加载 $[HOME]/test.fpl
SendToModule FvwmPerl 预处理 config.ppp
SendToModule FvwmPerl 导出 Eval,PerlEval,PerlLoad,PerlPP
SendToModule FvwmPerl 取消导出 PerlEval、PerlLoad、PerlPP
SendToModule FvwmPerl 停止
以下示例处理 fvwmrc 中的根背景。 所有这些命令都可以添加
到启动函数。
模块 FvwmPerl --export PerlEval
# 找到所有背景像素图以备后用
PerlEval $a = $ENV{HOME} 。 "/bg"; \
opendir 目录, $a; @b = grep { /xpm$/ } readdir(DIR); 关闭目录
# 建立一个背景像素图菜单
AddToMenu MyBackgrounds "我的背景" 标题
PerlEval foreach $b (@b) \
{ cmd("AddToMenu MyBackgrounds '$b' Exec fvwm-root $a/$b") }
# 选择一个随机背景在启动时加载
PerlEval cmd("AddToFunc \
InitFunction + I Exec exec fvwm-root $a/" . $b[int(random(@b))])
逃离
发送到模块 就像任何其他 fvwm 命令一样,扩展了几个以美元为前缀的变量。
这可能与 perl 使用的美元冲突。 您可以通过为 SendToModule 添加前缀来避免这种情况
带前导破折号。 每对中的以下 2 行是等效的:
SendToModule FvwmPerl eval $$d = "$[DISPLAY]"
-SendToModule FvwmPerl eval $d = "$ENV{DISPLAY}"
SendToModule FvwmPerl 评估 \
cmd("Echo Desk=$d, display=$$d")
SendToModule FvwmPerl 预处理 -c \
回声台=%("$d")%,显示=%{$$d}%
避免转义美元和反斜杠等特殊符号的另一种解决方案是
在其中创建一个 perl 文件 〜/.fvwm 然后加载它:
SendToModule FvwmPerl 加载 build-menus.fpl
如果你需要预处理一个以破折号开头的命令,你应该在它之前使用
“——”。
# 打印当前桌子,即“0”
SendToModule FvwmPerl 预处理 -c echo "$%{$a = "c"; ++$a}%"
# 这会打印 "$d"
SendToModule FvwmPerl 预处理 -c -- -Echo "$%{"d"}%"
# 这将打印“$d”(SendToModule 将 $$ 扩展为 $)
SendToModule FvwmPerl 预处理 -c -- -Echo "$$%{"d"}%"
# 这会打印 "$$d"
-SendToModule FvwmPerl 预处理 -c -- -Echo "$$%{"d"}%"
同样,建议将您的命令放入文件并预处理文件。
洞穴
FvwmPerl 用 perl 编写并与 perl 打交道,遵循着名的 perl 座右铭:
“有不止一种方法可以做到这一点”,所以选择权在你。
以下是更多对等价线:
模块 FvwmPerl --load "my.fpl" --stay
模块 FvwmPerl -e 'load("my.fpl")' -s
SendToModule FvwmPerl 预处理 --quote '@' my.ppp
SendToModule FvwmPerl eval preprocess({quote => '@'}, "my.ppp");
警告,您可能会通过评估适当的 perl 代码来影响 FvwmPerl 的工作方式,这
被认为是一个功能而不是一个错误。 但是请不要这样做,编写自己的 fvwm 模块
在 perl 中。
使用 onworks.net 服务在线使用 FvwmPerl