# 巴别图书馆计划（十二）：在 Calibre 阅读器中调用 macOS 原生词典

> 本文开放前 70% 正文，剩余内容会员可见。

原文：https://utgd.net/article/21199

一如不可能因为装帧朴素就丢弃一本好书，理智的人，也不会把界面作为评判电子书阅读软件的唯一标准。对于用 Calibre 管理图书——尤其是 EPUB 电子书——的人士而言，其自带阅读器尽管充满了工业气息，功能却毫无疑问最为齐全。用 Calibre 阅读器看 Calibre 库里的书，足够自然。

惜乎，Calibre 作为一款跨平台软件，抛开美学不谈，至少在交互上也与 macOS 格格不入。若说其他细节我姑且可以习惯，那么，不能调用原生词典一事，就实在说不过去。借 Look Up 机制查词，本是 macOS 的一项系统级功能，几乎在任何地方，看到不懂的词，稍稍用力按一下触控板或使用快捷键，即可调出临时的查词弹窗，恰到好处。

本文尝试借用 Keyboard Maestro，在 Calibre 阅读器中尽可能还原原生 Look Up 查词体验。您可以下载示例 macro，其中的触发方式因适用于我的电脑，建议完整阅读本文，并重新设置。

## 找回“弹窗”查词

Calibre 阅读器本无通往 Look Up 查词弹窗的途径。这一问题曾不是问题，因为在早几年的 macOS 中，你可以通过 API 轻松访问系统词典，部分自动化工具（例如 LaunchBar）还有基于原生词典数据的查词功能。但在 macOS 权限逐渐缩紧并陆续关闭一部分 API 后，我不得不重新考虑原生机制，问题是，怎样在不使用原生框架开发的 Calibre 中牵线搭桥？

我的思路完全不正常：能不能在 Calibre 阅读器中的所选文本上，覆盖一个足够小的窗口，其中就是被选中的文本，然后就窗口中文本展开查词弹窗？重要的不是某套方法实际上怎么样，而是它工作起来看上去像那么一回事。如果没有低技术贴图（Automator）的经验，我恐怕不会想到那么冷僻的方案。

碰巧，我知道 Keyboard Maestro 中有一个自定义 HTML 弹窗的模块，理论上可以制作出足够不起眼的小弹窗，进而作为查词的跳板。为了让它看上去尽可能不突兀，我取消了窗口标题、令其保持透明、缩小尺寸到半个指甲盖并将窗口置于鼠标之下。工程细节较为复杂，涉及 Token、变量和 HTML 等知识，本文无意一一分析，您只需保持示例 macro 的默认设置。

当然，如果你懂一点 HTML，可以考虑一比一仿照原生 Look Up 查词时文本被选中后的样式，但我不会太追究这些无关乎实用的细节。

读者可能已经发现，上图仅仅显示了弹窗相关的步骤，看 Keyboard Maestro macro 名字，似乎还有下文。确实，弹窗有风险，如果不带标题，将几乎没有办法消除它，为此还需另行制作一个主控 macro，在查词完成后取消弹窗 macro，确保作为跳板的弹窗不会残留的屏幕上。这样，我们画出了 Calibre 查词方案的大致轮廓：

- 选中文本，启用 macro（触发方式见下一节）；

- Keyboard Maestro 自动复制当前选中的文本；

- Keyboard Maestro 生成一个跳板弹窗，刚刚选中的文本的就在其中；

- Keyboa

---

[前往标准阅读页](https://utgd.net/article/21199?audience=web)
