FvwmPerl - 云端在线

这是 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

# 居中窗口
下一步(我的窗口)。移动
%{($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



最新的 Linux 和 Windows 在线程序