“打开方式不对”,已经从一句系统提示语升级为网络meme(迷因),用于调侃各种不恰当的处理方式。
而“打开方式不对”这个问题本身,其实还未被解决:同一种格式(拓展名)的文件在不同情景下可能需要更换打开方式,例如,同样是 Markdown 文件,一般用编辑器开启,但部分 Markdown 文件系参考文档,则更适合用 Marked 2 等预览工具开启——可惜,macOS 仅提供单个文件和所有文件两种选择范围,忽视了情景之切换。
虽说即便打开方式错了,也不过是关掉软件、重新开一次的功夫,但这种摩擦日积月累,在潜移默化中仍然会干扰工作。对于喜用纯文本的我而言,任务管理、笔记、文稿、参考文档咸用 Markdown 格式存储,每次都要手动选择打开方式,不满就在这个萨拉热窝爆发了。
如果你乐意,当然也可以逐个打开目标文件,在其属性窗口中修改打开方式,但此方法显然太繁琐。调整文件打开方式,料想应有几个自动化层级,而本系列文章,也循此线路:
- 脚本化阶段:通过脚本修改文件的默认打开方式,绕开限制过多的图形界面;
- 批量化理阶段:批量调整文件打开方式,同时不对其他文件产生任何影响;
- 文件自动化阶段:自动为目标文件夹内的文件设置打开方式,以求工作流程较为稳定后,可以免去部分人工操作。
以上三个阶段,恰好对对应了常见操作自动化的生命周期,也涉及到 AppleScript、Shortcuts、Automator、LaunchBar 和 Keyboard Maestro 等常见自动化工具,遂以掌控 macOS 文件默认打开方式为线,引出相关自动化探索的整套故事。
找到调整 macOS 文件打开方式的脚本
我在 UNTAG 的会员栏目中曾短暂提及,自动化主要有两个方向,要么依托真正的脚本(Script)、直接下命令,要么假借 GUI Scripting 模拟键鼠操作。之所以难以绕开脚本,盖多数自动化工具都支持运行脚本,且各个品种的脚本之间往往可以相互调用,打通一个,就总有办法移植到自己惯用的工具中。
而谈及修改文件默认打开方式时,各路玩家几乎穷尽了各种方法,有人模拟点击画面,有人取道系统配置文件,甚至有人挖出文件背后那长长的一串 Hash 值1……只可惜,恐怕放出前述任何一个方案的代码(比如下图那样的),大概都会吓跑绝大多数读者,让人叹息:我还是乖乖手动点击吧!
我并未涉入上述方案过多,但已感到阻力重重。万幸,有过两本文件管理(信息管理)杂文集子的写作经验,我已经养成了凡事求诸元数据的习惯,我基本确定,打开方式是文件的元数据(属性)之一,既然如此,则应当可以从相对简明的 AppleScript 入手,而无需过问晦涩的数据或语法。
读懂 AppleScript 词典
开始前,需注意,最近几代的 macOS 权限控制严格,即便您使用系统自带的自动化工具,凡举涉及控制其他软件,基本都要先在系统隐私设置的“App Management”栏中为其开启自动化权限。
设置妥当后,可转入传统的自动化讨论。思考方式在于,文件本身有些抽象,但如果考虑日常处理文件的环境——Finder 或 System Events(系统事件),则有迹可循。相对于折腾配置文件或直捣 Hash 值,AppleScript 更贴近人类的思维方式,其语法也近乎于英语,基本上就是告诉某个软件或其他进程你想做什么——只要这些命令存在于它们的 AppleScript 词典中。实际尝试后,我发现 System Events 的词典条目下包含了文件2的“default application”这一属性,从词典释义上看,这应当就是许多玩家遍寻不得的打开方式。
不妨验证一下。任意取一个文件,效仿上述词条的语法写一段获取文件 default application 属性的 AppleScript 代码,我发现内容与 Finder 文件信息中所显示的一致。这是一个好兆头。
tell application "System Events" to get default application of alias "目标文件的路径"
随后,我尝试在图形界面下修改了测试文件的打开方式,前述代码返回的属性值也随之改变;反过来,当我用 AppleScript 设置文件的 default application 属性时,Finder 图形界面中所示的内容也萧规曹随。
tell application "System Events" to set default application of alias "目标文件的路径" to alias "用以打开文件的软件的路径"
这些经验已经足够让我相信,AppleScript 足以修改任意文件的打开方式。
小结
本文从 AppleScript 入手,介绍如何调用 AppleScript 脚本修改文件的默认打开方式,从而避开低效的图形界面。这一小步可能效果不明显,但接下来关于批量修改和全自动操作的文章,将推倒文件操作中诸多藩篱,让人闭着眼睛或双击或回车打开文件,总能跳到合适的软件,仿佛和电脑心意相通。
诚然,要想到 AppleScript,得先意识到最终要修改的是文件元数据(属性);而要修改文件属性,则要先想到 AppleScript 是最合适——有时是唯一——的方法。在思绪尚处混沌状态时,想到 AppleScript 和想到修改文件属性,简直就是先有鸡还是先有蛋的问题。自动化玩家总是处于这种尴尬的境地中,但真正的乐趣,也恰恰来自解决这些“知道就是知道,不知道想破脑袋也不知道”的问题。