美文网首页Tasker
Tasker 的这些功能,被您「冷落」了吗

Tasker 的这些功能,被您「冷落」了吗

作者: blackspot | 来源:发表于2019-01-24 18:56 被阅读676次

    说明:本篇所罗列的功能会不定期增加,已准备好 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 数组元素的顺序,与事件参数(项)的顺序是一致的』,其意思如下图:

    通知事件中,每个 %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 用户,可导入上述动图中的任务 getLocalVariablesuri / 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

    原创内容,转载请注明出处

    相关文章

      网友评论

        本文标题:Tasker 的这些功能,被您「冷落」了吗

        本文链接:https://www.haomeiwen.com/subject/cxpujqtx.html