article_image

好读书之士,常遍求于诸平台,长此以往,其书库难免处于四分五裂,或有本地电子书,或有 PDF 扫描本,或借阅自微信、多看、亚马逊等书城。终有一日,难免忘记在各处都读了什么书。在《巴别图书馆计划(二):批量索引 DEVONthink 书籍到 Calibre》一文中,我借助 item link(文件链接)打通了 Calibre 与本地数据库(以 DEVONthink 为例),得以点击链接直达某一本在 Calibre 书库外部的书籍。一旦凿出这番天梯石栈,随后直道大通也并非难事。

而在《巴别图书馆计划(三):批量索引任意书籍到 Calibre》中,Calibre 的“馆外藏书”更是拓展到电脑上的几乎任何文件夹,如有必要,你甚至可以把移动硬盘上的书籍信息登记到 Calibre 中。至此,Calibre 已然成为一间超大型藏书馆,即便书籍源文件不在其中,它也可以给出直达链接;不过,正是因为 Calibre 量级之重,每次搜索都要先等待软件加载完毕,实难让人忍受,有如在图书馆问询台前排队等候。应当设计一款轻巧的 Calibre 书库检索工具,并且直接在对应软件中打开书籍;这就像一旦有了在线查询系统,便鲜有人还愿意跑到图书馆麻烦管理员(最麻烦的,当然是亲自跑一趟图书馆了)。

本文将介绍一套基于 LaunchBar 的 Calibre 书库查询系统,可在任何界面中搜索书籍,免去频频开启 Calibre 软件之苦:

  1. 如果书籍在 Calibre 库中,则直接使用 Calibre 内置阅读器中打开;
  2. 若是在 DEVONthink 中,则使用 DEVONthink 阅读书籍;
  3. 如果在外部文件夹,则用默认阅读器打开(可自行修改);
  4. 在线书城中的图书,直接打开对应页面。
Alt text
在 LaunchBar 检索结果中直接打开 Calibre 或 DEVONthink 书籍

>>LaunchBar 动作下载<<

动作使用

Credit:“使用启动器检索 Calibre”的思路来自 涔E,他设计了一款在 Alfred 中查询 Calibre 书籍的动作。处理 Calibre 数据库部分的代码部分直接来自于他。

本文动作只需修改 DEVONthink item link^截图中将 item link 称作“UUID”,这个称呼诚然不严谨,但在 DEVONthink 中,毕竟 UUID 是 item link 的核心部分,故以此代彼所属 Column 名即可使用(即图中的 UUID,Universally Unique Identifier,通用唯一识别符)。阅读本文时,默认读者已经通过自定义 Column 之方法嵌入了 DEVONthink item link(具体方法请参阅《巴别图书馆计划(一):为什么,以及如何用 Calibre 统一管理书籍》一文)。

快速配置

修改脚本请前往 LaunchBar 动作编辑器(开启方式为快捷键 ‌⌥Option-⌘Command-E),点击“Scripts-Edit”。

Alt text
点击图示位置进入编辑脚本的界面

由于所涉 UUID Column 为用户自行设置,故在不同电脑中命名可能有异,例如某君除此之外再无其他自定义操作,则该 Column 就会被 Calibre 命名为 custom_column_1;若是已经有过自定义历史,则新创建的 Column 会紧随其后。最保险的方法是开启终端,键入以下命令以便查看各自定义 Column 的编号:

calibredb custom_columns
Alt text
在终端检查 Calibre 的自定义栏

在上图中,我所使用电脑中的 UUID Column 编号为 (3),故其对应的位置为 custom_column_3;如果你和我情况相同,自然不用任何改动;如果有异,则需前往动作脚本编辑页面,将脚本中的 custom_column_3 替换为你所查询到的结果。除此之外,一般无需对脚本做任何改动。

Alt text
将图中高亮部分换成你实际查询到的结果

检索书库

配置完毕后,即可在 LaunchBar 中使用本文动作。找到“Calibre Database”动作后,按下空格键以输入关键词,随后即可实时看到搜索结果,各项结果的副标题为书籍格式、出版社和作者的搜索结果,如果书籍来自 DEVONthink 等外部书库,本动作也会在格式部分做出标记,以便和 Calibre 内部书籍区分。

Alt text
在 LaunchBar 同时显示 Calibre 内部书籍和 DEVONthink 书籍

在搜索结果中,所有 Calibre 和 DEVONthink 中的书籍都可以直接打开(至于其他平台,请参考本文“一隅三反”部分)。此处举一个用例:同一本书可能存有多个版本,例如在 Calibre 中存一份 EPUB 电子书、用于日常阅读,而 DEVONthink 中则保留扫描版本,虽远不如 EPUB 清晰,引用时却全靠它提供准确页码;借用 LaunchBar,就可以一次性找到两个版本,视当前需要,打开所需格式。

Alt text
在 LaunchBar 检索结果中直接打开 Calibre 或 DEVONthink 书籍

**小技巧:使用通配符搜索。**本文脚本导入了 SQL(Structured Query Language,结构化查询语言)相关模块,因而也可以使用 SQL 通配符 进行搜索。通配符可以代替部分关键词,例如 % 就表示任何文字,含有该通配符的关键词组合 刑法%解释 就表示含有“刑法解释”的书籍,或同时有“刑法”和“解释”的书本。

Alt text
可以在 LaunchBar 搜索框中使用通配符

总之,借助 LaunchBar,Calibre 书库和导入 Calibre 的 DEVONthink 书籍都能一以贯之。在没有这套书籍链接&搜索系统之前,我总是需要先在 DEVONthink 中翻找一番,再去 Calibre 看看有没有漏网之鱼,踏破铁鞋才发现最初在 DEVONthink 中搜索语法有误^DEVONthink 搜索中文仍然很不可靠,并且对常见逻辑符号兼容不佳。这些辛苦,至少以后不必重蹈。

条分缕析

更快地检索本地数据库,这一话题向来是深度用户们所探索的前沿地带。几年前,涔E君和我不约而同,各自设计了一套 DEVONthink 检索系统(这个 是他的,这个 是我的),但碍于 Spotlight 索引机制本身所限,效果都不算理想(Spotlight 索引很容易崩,搜不到文件)。

一口气吃下整个 DEVONthink,似乎遥遥无期;不过,起码书籍属于 DEVONthink 和 Calibre 的交集,这部分数据完全可以取道 Calibre,再通过 item link 在 DEVONthink 中开启,既享 Calibre 统一馆藏、秩序井然,又获 DEVONthink 阅读批注之便。正巧的是,涔E也研究了 Calibre 的快速检索方法,我们又在另一个检索话题上不谋而合;最后,Hum 又往这口魔法锅里投了 UUID 这颗啤酒花^再次澄清,UUID 是 DEVONthink item link 的核心部分,终于酿出了 Calibre x DEVONthink 综合书籍检索系统。

站在 Calibre 的角度看,我们所做的事,其实是每一个图书管理员的日常工作:编制书目列表,通过它按图索骥。但凡管理妥当,每一本 Calibre 中的书籍都应当有作者、出版社和出版时间等信息,当然我们还可以添加评级、标签和注释等自定义信息,也包括给没有库内文件的书籍添加外部链接——例如 DEVONthink 链接。最终,LaunchBar 将这些信息从 Calibre 数据库中抽出来,择出最重要的几项,列成搜索结果列表,整个过程绝类使用一款馆藏查询系统。

Alt text
一个典型的在线图书馆馆藏查询系统

相比一般的馆藏查询工具,本文动作进步之处在于,其所依托的 Calibre 毕竟收录了大量书籍源文件、并且通过自定义链接关联了外部书籍,因而不仅能查询书籍,还能直接打开阅读。

由于 LaunchBar 展示空间有限,并不能把书籍的所有信息一一罗列,本文动作只选取关键信息。有代码能力的读者可以对动作展示效果做出更多调整,如有需要,可用数据库浏览工具(例如免费的 DB Browser)检查 Calibre 数据库结构,从而从中抽取所需数据,组合出理想的呈现样式。Calibre 数据库文件路径与浏览效果如下:

/Users/你的用户名/Calibre Library/metadata.db
Alt text
用 DB Browser 浏览 Calibre 数据库

一隅三反

本文从 DEVONthink 切入,只是贪工作量小,实际上,还有大量位于其他地方的图书,它们也可以用 Calibre 检索并打开。

微信等在线平台的图书

好读书者,不乏同时在微信读书、亚马逊和 Readmoo 等平台购书、借书者。凡举能够获得链接的书籍,均能通过自定义 Column 实现统一搜索、一键打开^这种情况,当然是在网页中打开,即便是在线购买或借阅的书籍也不例外。本节以微信读书为例。

本文所提供的 LaunchBar 动作由两个部分协同工作,主脚本用于检索,副脚本 open.sh 则用于打开书籍。

Alt text
编辑图示位置的副脚本

默认的副脚本只识别 Calibre 本地书籍和 DEVONthink 链接,现在来添加一项功能:自动识别、打开微信读书链接。请将下方代码插入原脚本 else 一行之前:

elif [[ "$@" =~ "weread.qq.com" ]]; then
    open "$@"
Alt text
新代码插到图示行的上方

上述代码用于检测 Calibre 中的书籍链接是否包含 weread.qq.com 字段,如果包含,通常就是微信读书的链接(毕竟 Calibre 里的链接来自用户添加,不容易闹乌龙),就在浏览器中打开。其他书城的读者也可以依样画葫,检查一下你所用平台的链接特点,将 weread.qq.com 替换为你所用书城的前缀。

Alt text
在浏览器地址栏中观察书籍链接的特点

网页链接默认会用系统浏览器开启,如果要指定使用 Chrome 等第三方浏览器,可以使用以下代码:

open -a "把你的 Chrome 浏览器拖到这里以获得其路径" "$@"

外置文件夹中的 PDF

即便我重度使用 DEVONthink,也有大量参考书并未置于其中,而是径直存于外部文件夹,例如一些业余爱好方面的图书,远不到用动用 DEVONthink 将其嚼烂吃透的地步,但同时也需要统一管理,故同样纳入 Calibre,方法与打开在线图书如出一辙,本质上就像在修改一份通讯录。

Alt text
在 LaunchBar 中检索书籍并在预览工具中打开
elif [[ "$@" =~ "file:///" ]]; then
    open "${@/file:\/\//}" -a "/System/Applications/Preview.app"

以上代码,将调用原生预览工具(Preview.app)打开目标书籍,您也可以将其更换为 PDF Expert 等第三方 PDF 阅读器。

凡此种种拓展功用,全凭读者自己想象;建立一栋综合性私人藏书馆的计划,已然蓝图初现。


author_avatar

Lawyer, macOS/iOS Automation Amateur