article_image

本文成文较早,如今在 Keyboard Maestro 11 中,可用自带 Token 抓取 Office 所打开文件的路径,预计全套 Office 软件均可使用本文方案。不过,由于我的工作几乎不涉及 Excel 和 PowerPoint,我暂时没有任何动力去研究,有兴趣的读者可以自行尝试。

最近文件(Recents)是 macOS 文件管理的金罗盘,一个人可以不懂如何组织文件夹,甚至把桌面当成沙盘游戏战场,但只要知道去哪儿找最近文件,平时常用的东西就丢不了。

最近文件在整个 macOS 系统中无处不在:长按 Dock 栏上的图标,可以看到该软件最近打开的文件;在任何程序中三指下滑(或者四指),更能全屏查看最近文件;新电脑默认打开的第一个文件夹,还是“最近文件”;启动器 LaunchBar 也能浏览最近文件,免去搜索。我们可能想不起来上次写过的草稿放在哪儿,但常用编辑器没得跑,就是那一两个,只要看看它们的最近文件列表,基本就能把草稿文件揪出来。

Alt text
三指下滑,全屏查看最近文件

然而,Office 三件套却并不支持在软件外查看最近文件,我们只能打开软件,然后在其内置文件浏览器中查看。这已经足够让 LaunchBar 用户不悦,但还没惹到我;直到我发现,Office 竟然在打开主程序后也不能正常查看最近文件,唯一途径就是它内置的浏览窗口,这些人为限制让我大为光火,下决心给它松松筋骨,并且一步到位,非得用 LaunchBar 来查看 Word 的最近文件不可。

Alt text
Word 并不能显示最近文件

而手术结果只是差强人意。在 Office 三件套中,唯独 Word 的最近文件能够调取出来,但会随机出现偏差;Excel 则使用了特殊编码,我暂时无法解析;而 PowerPoint 干脆不提供任何最近文件信息,在本文框架下令人一筹莫展。

Alt text
用 LaunchBar 检索并显示 Word 文件

本文将使用 LaunchBar、Keyboard Maestro 等自动化工具和 AppleScript、Shell Script 和 Python 等脚本,确实没指望诸君能够复现。这篇文章,只是作为挖掘 Office for macOS 自动化潜力的一块砖头。

配套动作下载

获取 Word 最近文件列表

Word 在软件内部可以浏览最近文件,这暗示着它起码存储了最近文件数据,和那些 iOS 移民软件不可等量齐观。或许 Word 将相关数据存于某个特殊文件,但比起去各个论坛刨根问底,主动提取数据似乎更有希望。Word 在 macOS 上开发历史极长,留下了大量 AppleScript 脚本遗产,获取最近文件数据的可能性就闪烁其中。检索 Word 的 AppleScript 词典后,我编写了一段脚本,成功取得最近文件列表。

Alt text
通过 AppleScript 脚本获取 Word 的最近文件列表

不过,PowerPoint 和 Excel 那边的情况却不乐观。PowerPoint 的词典中根本没有最近文件(recent file),而 Excel 的数据中则有乱码,按照正常的 URL 解码程序,总是掺入随机字符和一个 %,恕我无法参透。实际上,Word 给的数据也很糟糕,它提供最近文件路径均无后缀名,我还需要另行提取文件的全名,并将后缀截下来,以补齐路径。起码 Word 修修补补还能用,但 Excel 和 PowerPoint 实在扶不上墙。最近文件应当是一个基本元素,Office 三件套应等同视之,很难想象三个软件的态度何以如此不同。

经过在 AppleScript 的代码中的跋山涉水,多少算是拿到了 Word 的最近文件列表。但手动抽取数据并不自然,最好自动记录 Word 的最近文件。最符合直觉的思路是定时运行脚本,但 Word 在我的电脑上终归不是常驻软件,多数时间它都关着,无法直接用 AppleScript 抽取数据;我的做法是搭配 Keyboard Maestro,每次退出 Word 时保存一下。待日后 Shortcuts 的场景自动化搬到 macOS 上,估计也可以用它代替 Keyboard Maestro。

从 Word 中获得的原始数据经过了 URL 编码,所以还需要解码,才能获得日常所见的文件路径……一路的支架搭下来,整个工程已经颇为浩大,完全成了围绕 Word 的临时建筑群——而现在,我们还要处理 LaunchBar 那边的问题。

用 LaunchBar 检索 Word 最近文件

获取最近文件之后,就要考虑如何浏览和搜索。Keyboard Maestro 本身有搜索框组件,但它对搜索结果只能执行一个操作,而我有时需要直接打开文件,另一些时候则想在 Finder 中查看原始文件,这已让 Keyboard Maestro 捉襟见肘。既然此前的准备工作已经大动干戈,再往上搭一套 LaunchBar,似乎也没有那么让人反感。

LaunchBar 本职是启动器,擅长搜索——包括中文——以及搜索结果的处理。用 Keyboard Maestro 获取数据时,我顺手就将最近文件列表存储到 LaunchBar 的文件夹中,待后者调用;LaunchBar 将文件名截出来,作为搜索结果标题,文件路径同样完整保留,作为副标题。没有输入任何关键词时,LaunchBar 默认会显示最近打开过的全部 Word 文档;输入关键词后,则会实施更新搜索结果。这个效果比系统原生的最近文件浏览方式更佳,盖其支持搜索,而非只能滚动浏览。

Alt text
在 LaunchBar 中默认显示最近所有文档
Alt text
在 LaunchBar 中中文检索最近所有文档

找到目标文件后,默认的处理方式是直接打开,但我并非总是要编辑文档,有时候只想把文件翻出来整理一下,或者发给别人,这时候只需要查看原始文件。LaunchBar 本身可以在 Finder 中显示原始文件(快捷键是 ‌⌘Command-↩Return),而 Keyboard Maestro 提供给它的正好是完整路径,一拍即合。

Alt text
用 LaunchBar 检索并显示 Word 文件

结语

正如文章开头所说,我对 Word 的不满直接来自其与 LaunchBar 的龃龉。我已经习惯用 LaunchBar 浏览最近文件,甚至很少打开 Finder(把 LaunchBar 换成 Alfred,大概同样成立);而 Office 却把我拖回了文件夹管理的上古时代。

Alt text
LaunchBar 无法读取 Word 的最近文件

在 macOS 上,除了 Office,几乎只有那些 iOS 搬过来的特洛伊木马还不能显示最近文件,这一状况随着 AppKit 的推行而有所好转;至于跨平台软件那边,甚至 Obsidian 这种套壳玩意儿都支持了最近文件(严格来说是“最近文件夹”,因为 Obsidian 以数据库为浏览单位),Office 实在是格格不入。对 OS X 时代的老玩家来说,这已经是意识形态的问题;而对新用户而言,这同样是一个通用设计(universal design)的问题:一个操作系统上的软件,应该有某种逻辑连贯性。

我在 Office 和原生软件的对立中看不到逻辑连贯,在 Word、PowerPoint 和 Excel 的 AppleScript 词典中看到的更是自相矛盾,似乎三个软件是三家公司分别生产的。而这些不满,大概就是自动化玩家的原始动力:改造工具,适应自身,而不是相反。


author_avatar

Lawyer, macOS/iOS Automation Amateur