说明:本篇所罗列的功能会不定期增加,已准备好 8 个本人认为的冷门功能,会陆续分享出来
前言
本篇旨在向 Tasker 用户分享一些鲜为人知的功能,以让更多的人在编写配置时灵活地用上它们。虽然这些功能在 Tasker 用户指南中也有提及,只不过大多 Tasker 用户都未曾了解过它们,我想,当中有些功能或许连 Tasker 高级用户都不大清楚。其实,别小瞧这些冷门功能,通过它们,往往能相当简易地实现我们的需求。
功能列表
~R / !~R
注:仅适用于 5.0+ 版本
有用过条件判断功能的 Tasker 用户都知道,~R / !~R
操作符的匹配类型是正则表达式,也知道它可用于动作的 If 条件以及状态条件「变量值(Variable Value)」中。
从 5.0 版本起,Tasker 新增了一个功能,『凡是可以进行「简单匹配」的地方,只要在表达式前加上 ~R 或 !~R,便会变成正则表达式匹配』。
-
使用方法
-
状态和事件条件中文本参数的匹配
- 获取可匹配的数组索引
-
状态和事件条件中文本参数的匹配
-
实用之处
- 匹配更精准,简单匹配只能粗略匹配
- 通过文本参数的匹配,可提前判断是否满足触发条件,而无需在条件触发后再从「进入任务」中判断
-
使用场景
- 用于状态或事件条件中,要当文本参数满足指定的正则式,才允许触发。比如短信、剪贴板等条件的触发
- 用于数组索引的匹配,以返回唯一索引(或 0 ,即无索引)
温馨提示:如果配置需在 5.0 以下版本中使用,应将该功能改由其他方法实现
%evtprm
%evtprm
是事件(Event)条件触发后传递至「进入(Entry)」任务的局部数组变量,相信很多人都接触过它,但是,要如何快速确定 %evtprm
数组中每个元素的含义呢,我想,应该只有少数人才知道。比如说,当微信通知的事件触发时,你能否快速确定代表通知内容的变量是 %evtprm2
还是 %evtprm3
呢?
在 Tasker 用户指南中有一句话提到,『%evtprm 数组元素的顺序,与事件参数(项)的顺序是一致的』,其意思如下图:
由此,便可快速知道, %evtprm2
与 %evtprm3
分别代表了通知的标题和内容。
- 实用之处
- 但凡事件触发的任务,都能够通过
%evtprm
获得每个事件参数项的值,以便根据这些值做出不同的决策
- 但凡事件触发的任务,都能够通过
- 使用情景
- 可以的话,凡是在事件触发的任务中,都应使用
%evtprm
变量
例如,当在文件类的事件中指定了文件(夹)路径后,在与其关联的进入任务中,不应再手动设置一个同个路径的变量,应直接使用%evtprm1
变量(其值代表了所指定的路径)。这样,你编写出来的配置就更有水平了。
- 可以的话,凡是在事件触发的任务中,都应使用
变量引用
以下为变量引用的说明(摘自本人翻译的 Tasker 中文用户指南变量部分)
可以通过将一个或多个额外的 % 符号添加到变量名称的开头来间接引用变量。例如:
[变量设置, %colour, red] [变量设置, %varname, colour] [弹出提示, %%varname]
... 将显示 red。
使用这种表示法,可以分配那些变量名称事先未知的变量:
[读取文件, variablename.txt, 到变量, %varname] [变量设置, %%varname, red]
变量名称存储在文件
variablename.txt
中的变量将设置为 red。您可以根据需要深层嵌套引用(例如,
%%%%var
),但精神上的压力和错误肯定也会随之而来。如果(引用)链的任一部分具有无效的变量名称,则都将返回原始引用。在第一个示例中,如果
%varname
设置为!!!
,那么显示的将是 %%varname,而不是 red。
- 使用情景
- 批量设置或清空全局(或局部)变量的值,无需逐个操作,可简化任务
- 批量设置或清空全局(或局部)变量的值,无需逐个操作,可简化任务
获取任务中的局部变量
在动作「测试 Tasker(Test Tasker)」中有个局部变量(Local Variables)的类型,能用来存储正在运行任务中所有(该动作执行前的)已赋值的局部变量,如下动图所示:
本功能可对配置的编写起到一个辅助性的作用,比如,我想知道某个接收意图的 extras 参数的变量名称以用于任务的编写上,便可通过此方法获知(从上动图可知,%newrssi
为意图所带的 extra 参数)。
-
使用情景
- 收到意图时,可获知 extras 等参数的变量
- 可获知当插件条件(Event)触发时的插件变量
其他
有需要的 Tasker 用户,可导入上述动图中的任务getLocalVariables
(uri / xml),以获得任务的所有局部变量
递归变量
注:以下内容仅为个人经验总结(Tasker 用户指南似乎未提及此功能),若有错误之处,还望各位指出
递归变量(Recurse Variables)是动作「变量设置(Variable Set)」的一个可选参数(如下图所勾选的项目)
它的作用是递归替换所有已赋值的变量,效果如下面的例子所示:
假设变量 %var 设置为 It's %season,变量 %season 设置为 winter
那么 [变量设置, %sentence, %var]
在「递归变量」参数不勾选的情况下,结果会是 It's %season
反之,则为 It's winter
-
递归替换变量的方式
一般来说,当 Tasker 在文本参数中遇到变量名时,会从左至右依次替换每个合法的变量名。那么,到底怎么才算是一个合法的变量名呢?参阅 Tasker 用户指南的变量部分可知,一个合法的变量名称必须以 % 字符开头,并至少包含 3 个字母、数字或下划线字符(其中下划线不能作为开头或结尾)。根据该定义以及一些特殊情况,可将变量划分为以下三类:
- 常规变量
%fruit, %cars1, %cars2, %1_a
- 数组变量
%cars(1), %cars(2)
- 嵌套变量
%%var %%names1(先替换 %names1,再替换嵌套 %) %%names(1)(先替换 %names,再替换嵌套 %,然后将最后一个嵌套变量与索引值组合为数组变量,再替换)
当 Tasker 在文本参数中遇到以上三种类型的变量时,都将作为一个整体进行替换,即一次便会替换完毕。
通过下面的例子,可更清楚地理解递归变量的替换过程。
假设 %varname = name %varname1 = name %name1 = 一年级 %name11 = 一年级一班 %grade = 1 %class = 1 那么 - %name%grade%class 0: %name11 1: 一年级一班 - %name(%grade)%class 0: 一年级1 - %name(%grade%class) 0: 一年级一班 - %name1%class 0: 一年级1 - %%varname%grade%class 0: %name11 1: 一年级一班 - %%varname(%grade)%class 0: 一年级1 - %%varname(%grade%class) 0: 一年级一班 - %%varname1%class 0: %name1 1: 一年级 说明: - 上面的数字(0/1)代表着递归替换的次数 - 次数为 0 表示无需递归便可获得的结果,这和不勾选「递归变量」参数时获得的结果相同
- 常规变量
-
使用情景
-
获取索引值为双位数(其中的一位数用变量来表示)的数组变量
文章「从剪贴板里保存 Tasker 配置文件」中所提供的配置便是采用了「递归变量」的功能,以下为简化后的例子:
A1: Array Set [ Variable Array: %configs Values: project=prj profile=prf scene=scn task=tsk ] A2: Variable Set [ Name: %size To: %configs(#) ] A3: For [ Variable: %index1 Items: 1:%size ] A4: Variable Split [ Name: %configs(%index1) Splitter: = ] A5: Variable Set [ Name: %types(%index1) To: %configs(%index(1)1) Recurse Variables: On ] A6: End For A7: Flash [ Text: %types() ] 说明: - A5 动作勾选了「递归变量」 - A5 动作中的数组索引为什么要用 %index(1)1 来表示 原理可参看文章(https://www.jianshu.com/p/60853dc4105c)中字符串组合部分
-
更新日志
- 2/10/2019
- 新增 递归变量 功能 - 1/30/2019
- 新增 变量引用 功能
- 新增 获取任务中的局部变量 功能 - 1/26/2019
- 新增 %evtprm 功能 - 1/24/2019
- 发布
其他
作者:sung
邮箱:sdfsung@gmail.com
原创内容,转载请注明出处