在这个月的早些时候 Contrast 发布了 Launch Center Pro 2.3,通过整合 IFTTT 服务,实现 iOS 设备与网络服务的联动。在同一次更新中 LCP 2.3 新增了对标签 [ ] 以及编码符 {{ }} 的嵌套功能,详情可以参考少数派对此次更新进行介绍的这篇文章 。而就在两天前 Contrast 又再次发布了 LCP 的 2.3.1 更新,单从版本号来看的话,这次更新似乎微不足道,但是如果你查看了 Contrast 对此次更新制作的官方文档,你或许能从中看出此次更新的重要意义。
《Launch Center Pro 2.3.1 for Power Users》 是 Macstories 对此次更进行介绍时所使用的标题,我想足以概括此次更新面对的主要对象。而我对此次更新的注解是:
Everyone could be power user since LCP 2.3.1 !
忘记编码(URL Encoding)
之所以说从 LCP 2.3.1 开始,人人都能成为它的 Power User,是因为此次更新给 LCP 的 URL 解析器(URL Handler)带来了巨大的改变,而这些改变大到足以让你忘记编码(URL Encoding)这回事。现在你只需专注于如何构建自己需要的 Action,以及它的逻辑性问题,至于 URL 的编译问题, LCP 会自动在后台帮你完成。在这之前很多入门的 LCP 用户准备进一步掌握 LCP 的时候,看到那些类似于无字天书的 URL 编码之后望而却步。
在此前的版本中,因为要考虑编码的问题,如果要实现「发送微博的同时将相同内容同步到 Twitter 上」的功能,需要以下的 URL:
launch://x-callback-url/clipboard?text=[prompt:Text]&x-success={{launch://?url=launch%3A%2F%2Fx-callback-url%2Fsinaweibo%3Ftext%3D%255Bclipboard%255D%26x-success%3D%7B%7Blaunch%3A%2F%2Ftweet%3Ftext%3D%255Bclipboard%255D%7D%7D}}
而在新版本中,无需再考虑 URL 的编译问题,只需将逻辑罗列出来,就可以实现相同的功能(点击这里安装该 Action):
launch://x-callback-url/clipboard?text=[prompt:Text]&x-success={{launch://x-callback-url/sinaweibo?text=[clipboard]&x-success={{launch://tweet?text=[clipboard]}}}}
运行效果如图:
相比之下应该每个人都会更喜欢新版本的 URL,无论是视觉上,还是从可读性的方面都要好很多。
更加灵活多变的标签(Input Tags)
新版本中,LCP 会根据 URL 的上下文进行判断是否需要对标签进行编译操作。因此将 List Builder 中的已经不需要的 Encode Output 选项移除掉了。我们通过一个小例子来观察新旧版本的 LCP 对标签操作时的差异。
首先,我们先创建一个 Action:launch://clipboard?text=[prompt]
并复制这段 URL。然后在 LCP 2.3 及之前的版本中触发该 Action,在弹出的文本对话框中,再粘贴刚才复制的 URL,点击 Launch 将会再次出现文本输入框。而我们其实只是想将放置在文本框里的 URL 导入到剪切板中而已。
造成这种情况的原因,是因为我们粘贴在文本框里的内容是一个有效的 URL,此时 [prompt] 标签实际上已经被替换为了launch://clipboard?text=[prompt]
,旧版的 LCP 并不会逻辑性的对标签里的内容里进行编译,继而将我们存放在 [prompt] 标签里的 URL 再执行了一次 。但是如果你在新版本中做同样的操作,LCP 会智能的对标签里的内容进行编译然后导入到剪切板中,而不会再次执行我们粘贴进去的 URL。
因为标签会自动根据 URL 的上下文进行判断是否需要编译,所以对标签进行手动的编译或者嵌套编译符实际上并不会产生任何的效果。因此即使我们替换上面提到的微博和 Twitter 同步的 URL 结尾处的[clipboard]
为{{{{[clipboard]}}}}
或者%5Bclipboard%5D
并不会影响原本的运行效果。在 LCP 2.3.1 中单括号的标签与双括号的标签效果上已经没有任何的区别。也就是说在一段 URL 中使用[clipboard]
和[[clipboard]]的效果是一样的
。
在了解了以上的这些变化之后让我们分析一下下面的这个 Action,这个 Action 实现的功能是在 LCP 中弹出一个列表,我们选择一个选项后,1Password 会自动搜索选型相对应的内容,如果选项中并没有我们需要的,可以选择最后一个选项,在弹出的文本框中手动输入我们想需要的内容。要是实现这个 Action,在 2.3 以及之前的版本和 2.3.1 及之后的版本略有不同。
运行效果如图:
LCP 2.3 及之前版本:
onepassword://search/[[list:1Password Logins|Twitter=Twitter|Weibo=Weibo|Apple ID={{Apple ID}}|Dropbox=Dropbox|Feed Wrangler=Feed%20Wrangler|Search=[prompt:Login Name]]]
LCP 2.3.1 最新版本:
onepassword://search/[list:1Password Logins|Twitter=Twitter|Weibo=Weibo|Apple ID=Apple ID|Dropbox=Dropbox|Feed Wrangler=Feed Wrangler|Search=[prompt:Login Name]]
(点击这里安装新版本 Action)
根据上面提到的,新版本 LCP 中单方括号和双方括号的标签是没有任何实质上的区别,所以我们将旧版本 URL 中最外围的方括号移除掉。再看 [List] 标签内选项的区别,旧版本的 LCP 并不会自动对标签内的内容进行的编码操作,也因此 LCP 2.3 版本里的 List Builder 才有一个 Encode Output 的选项。所以我们必须给像 Apple ID=Apple ID
这样选项等号后的赋值进行手动编码,或者套加编码符 {{ }}。如果不这样做的话,Apple 和 ID 中间存在一个空格,会造成 URL Scheme 的断裂。倒数第二个选项 Feed Wrangler,基于相同的原因,我对他进行了手动的编码操作。无论是套加编码符还是手动进行 URL 编码,它们的效果是相同的。
标签操作器
因为标签的自动化,为了能够手动控制标签,此次更新首次引入了标签操作器的概念。在大多数情况下,我们并不会经常使用到这些操作器。操作器一共有五种:+ - ^ ! ~
需要使用时,只需在标签的前括号后插入相应的操作器即可,比如 [+clipboard]。+ -
分别可以对标签进行逐级增加和逐级递减的编译操作。~
则是直接将编译等级归零。这三个操作器我们只有在对标签输出的结果不满意时,才会用到。
另外两个操作器可以实现对触发标签的时刻进行控制。在通常情况下,一个 URL 里面如果含有多个标签的话,LCP 会按照顺序进行触发。但是你如果在靠后的标签中,插入!
操作器的话,那么后面的标签就会与第一个标签同时触发。同样以第一个微博和 Twitter 的 URL 为例,如果你在后面的两个 [clipboard]标签内插入!
符号,然后执行该 Action,你就会发现,微博和 Twitter 的内容和弹出的文本框里你输入的内容是不同的,如果你多运行几次就会发现,LCP 总是会将上次你放置在剪切板里的内容导入到微博和 Twitter 的正文中。这是因为三个标签在同一时刻触发,LCP 还没有来得及将你输入的内容放入剪切板,就已经将上次剪切板里的内容导入到微博和 Twitter 的正文中。
最后一个操作器 ^
则可以无视标签的可执行性,比如下面这个URL:
simplenote://new?content=[^prompt]
当你在 LCP 中运行这个 URL 的时候,并不会弹出文本框,让你输入内容。而是直接在 Simplenote 里面创建一条内容为 “[prompt]” 的笔记。而如果你在任意一个 URL 中使用这样的标签 [^clipboard]
,LCP 并不会去读取剪切板内的数据,而是直接输出 “[clipboard]” 这一结果。
更加丰富的 Prompt
默认文本与光标定位
现在我们可以利用新增的 [prompt:标题=默认文本]
标签格式,给弹出的文本框设置默认的文本内容。而在文本内容中插入\|
则可以控制光标在文本中的位置。结合以上两个新的 Prompt 参数,我们可以实现下面这个 Action:
launch://messaging?to={{0785868032}}&body=[prompt:购物清单=记得买 \| 在沃尔玛的时候。]
运行这个 Action 之后,在弹出的文本框中,已经自动填入了默认的文本内容即「记得买 在沃尔玛的时候」,并且光标自动的设定在了「记得买」和「在沃尔玛的时候」之间,我们只需输入我们要买的东西,然后 Launch,信息就会发送到指定的联系人那里。利用这两个标签可以节省我们许多重复性的输入以及调整光标的操作。
运行效果如图:
自定义列表分隔符
在 2.3.1 中,如果使用 [prompt-list]
标签,那么你在弹出的文本框中按下键盘上的换行按钮,LCP 会自动在文本后插入一个逗号作为分隔符。在此前版本中,你按下换行,并不会在文本框中实时的插入逗号。新版本新增了自定义分隔符功能,标签格式如下 [prompt-list(分隔符)]
,将标签括号内的「分隔符」替换成任意你想要的类型,就可以实现自定义分隔符。比如 [prompt-list(-)]
每次按下换行便会自动的插入“-” 符号,我们可以利用这个标签来分割长段的数字或者软件的产品密匙,以便更好的辨识。