来源:
ChinaUnix博客 作者:
ChinaUnix博客 发布时间:2007-01-01 13:03:00


函数(FUNCTIONS):
任何函数都使用参数。函数能够返回字符串和数字。语法是:
(function argument1 argument2 etc)
下面是完整的参数列表:
(GetTitle id)
返回id 控件的标题。
(GetValue id)
返回id 控件的当前Value。
(GetMinValue id)
返回id 控件的当前Minvalue。
(GetMaxValue id)
返回id 控件的当前Maxvalue。
(GetFore id)
返回id 控件的当前RGB前景色,用16进制格式RRGGBB表示。
(GetBack id)
返回id 控件的当前RGB背景色,用16进制格式RRGGBB表示。
(GetHilight id)
返回id 控件的当前RGB高亮色,用16进制格式RRGGBB表示。
(GetShadow id)
返回id 控件的当前RGB阴影色,用16进制格式RRGGBB表示。
(GetOutput {str} int1 int2)
执行命令str,得到标准输出,并返回位于行int1和位置int2的单词。假如int2等于-1,返回完整的行。
(NumToHex int)
返回关于int的十六进制值。
(HexToNum {str})
返回str的十进制值,str必须是十六进制值。
(Add int1 int2)
返回(int1+int2)的结果。
(Mult int1 int2)
返回(int1*int2)的结果。
(Div int1 int2)
返回(int1/int2)的结果。
(StrCopy {str} int1 int2)
返回位于int1和int2之间的字符串。例如,(StrCopy {Hello} 1 2)返回{He}。
(LaunchScript {str})
启动名为str的脚本,并返回一个数字标识符。
(GetScriptArgument {int})
返回用于LaunchScript 参数的脚本。假如int等于0,则返回脚本的名称。
(GetScriptFather)
返回父脚本的id号。
(ReceivFromScript {int})
返回int脚本发送的消息。
(RemainderOfDiv {int1 int2}): t
返回(int1/int2)的余数。
(GetTime)
返回时间。
(GetPid)
返回脚本的进程id。
(Gettext {str})
返回翻译字符串。
(SendMsgAndGet {comId} {cmd} bool)
(Parse {str} int)
str必须是下面格式的字符串:
X1S1X2S2X3S3...SnXn
(LastString)
返回 Key 和 SendString 的“current working string”。启动时这个字符串是空的,但是当一个 Key 绑定被探测到时,这个字符串被配置为关联这个 Key 命令的字符串。
条件循环(CONDITIONAL LOOPS):
有三种条件循环。“If-Then-Else”语法是:
If $ToDo=={Open xcalc} Then
Do {Exec xcalc &} # List of instructions
Else
Begin
Do {Exec killall xcalc &} # List of instructions
Do {Exec echo xcalc killed > /dev/console}
End
其中的“Else-Begin-End”是可选的。假如这个循环仅有一个指令,Begin和End能够省略。
“While-Do”语法是:
While $i
Begin
Set $i=(Add i 1) # List of instructions
End
字符串能够使用“==”比较,数字能够用“=”,“>”比较。
“For-Do-Begin-End”语法是:
For $i=1 To 20 Do
Begin
Do {Exec xcalc &}# List of instructions
End
命令(COMMANDS):
下面的 FVWM 命令能够在任何时候执行。
SendToModule ScriptName SendString id sig str
他发送字符串给任何一个别名或名称匹配 ScriptName 的模块。
看一个例子:
Widget 50
Property
Type PushButton
Title {Quit}
...
Main
Case message of
SingleClic:
Begin
Quit
End
1 :
Begin
Set $str = (LastString)
If $str == {Quit} Then
Quit
Else
ChangeTitle 33 $str
End
End
然后,命令
SendToModule MyScript SendString 50 1 str
强制 MyScript 退出,假如str等于“Quit”且不改变 控件33 标题为str的话。
示例(EXAMPLES):
您能够在fvwm的配置目录里发现脚本的例子。
通信协议(A COMMUNICATION PROTOCOL):
FvwmScript是个弱的(但是简单)编程语言。假如您需要处理很多数据,并且/或您需要使用复杂的算法,您应该使用外部程式(例如perl),并“send”期望的信息到您的 FvwmScript脚本。第一种方式是使用 GetOutput 函数。这比较简单,但是每次您需要信息的时候,都要再次运行外部程式(这或许引发性能问题)。第二种方式是使用 SendMsgAndGet 函数,通过使用一些能够处理命名管道的编程语言扩展 FvwmScript。这个部分将描述这种方式。(第三种方式是使用 fvmw-themes-com,但事实上 SendMsgAndGet 是fvmw-themes-com在 FvwmScript 内部的一个实现,并能够得到更好的性能)。
基本上,您从您的FvwmScript脚本启动一个外部程式。这个程式在后台运行,您在您的脚本里使用 SendMsgAndGet 函数请求问题或下指令给这个程式。这个程式必须严格遵守某个通信协议。首先有一个标识符comId,他应该包括脚本的进程id。这个协议使用两个fifos,在FVWM用户目录里,名为:.tmp-com-in-comId 和 .tmp-com-out-comId。这个程式应该在.tmp-com-in-comId fifo上创建和监听。然后,当 FvwmScript 以下面的形式执行一个函数时
Set $answer = (SendMsgAndGet {comId} {cmd} bool)
FvwmScript在这个fifo上写cmd。这种方式,这个程式能够读cmd并执行相应的操作。
|
还没有关于此文章的相关评论!