如何用 calibre:// URL 让其他程序或文档打开 calibre 中的书籍和执行搜索
【免费下载链接】calibreThe official source code repository for the calibre ebook manager项目地址: https://gitcode.com/GitHub_Trending/ca/calibre
如果你需要从一个 HTML 文件、Word 文档或其他程序里,用一次点击就让 calibre 打开指定书籍、跳到书中某个位置,或者执行一次搜索,可以借助 calibre 内置的 URL 协议。calibre 会把自己注册为calibre://URL 的处理程序,因此这类链接既可以放在命令行中直接运行,也可以嵌进 HTML 文件或 Word 文档,操作系统会自动调用 calibre 执行链接指定的操作(参见 url_scheme.rst)。
本文覆盖以下 URL 类型:
| URL | 作用 |
|---|---|
calibre://switch-library/ | 切换到指定书库 |
calibre://show-book/ | 在 calibre 中定位并显示一本书 |
calibre://view-book/ | 在阅读器中打开一本书的指定位置 |
calibre://search/ | 在指定书库中执行搜索 |
calibre://book-details/ | 打开某本书的书籍详情窗口 |
calibre://show-note/ | 打开作者/系列等字段的备注窗口 |
准备条件
只需一台已安装 calibre 的电脑。calibre 安装后会注册calibre://协议,命令行方式调用形如:
calibre calibre://switch-library/Some_Library这条命令会打开 calibre 并切换到名为Some Library的书库。注意规则:书库名取书库文件夹的文件夹名,空格替换为下划线;特殊值_表示当前书库。
如果书库名包含空格或特殊字符,需要改用十六进制编码(hex encoding),语法形如calibre://switch-library/_hex_-AD23F4BC,其中_hex_-前缀后面跟的是书库名的 UTF-8 字节、每个字节用两个十六进制字符表示。文档给出的真实示例是:
calibre://switch-library/_hex_-4c6962726172792e746573745f736d616c6c这个值对应书库名Library.test_small。编码方法就是把参数编码为 UTF-8 字节序列,再把每个字节替换为对应的两个十六进制字符;例如字符串abc的 UTF-8 字节是0x61 0x62 0x63,编码结果就是616263。
定位并显示某本书:show-book
URL 语法:
calibre://show-book/Library_Name/book_idbook_id是书的数字 ID。获取方式:在 calibre 界面中,把鼠标悬停在Book details(书籍详情)面板里的Click to open链接上,书籍文件夹路径末尾括号中的数字就是 ID。
另一个更省事的做法:在Book details面板上右键,选择Copy link to book,即可复制当前显示书籍的链接。
使用show-book链接时文档说明了几种边界情况:
- 如果当前有激活的搜索且该书不匹配该搜索,搜索会被清除;
- 如果当前选中了某个虚拟书库(Virtual library),calibre 会在该虚拟书库中查找此书,找不到则清除虚拟书库。
如果希望在显示书籍的同时切换到指定虚拟书库,使用查询参数:
calibre://show-book/Library_Name/book_id?virtual_library=Library%20Name或把虚拟书库名做十六进制编码:
calibre://show-book/Library_Name/book_id?encoded_virtual_library=hex_encoded_virtual_library_name虚拟书库名中的空格要替换为%20。如果该书不在指定虚拟书库中,则忽略该虚拟书库参数。
在阅读器中打开书籍的指定位置:view-book
URL 语法:
calibre://view-book/Library_Name/book_id/book_format?open_at=locationbook_format是书籍格式,例如EPUB或MOBI;open_at=location是可选参数,指定书中的位置。
文档给出的最实用的获取方式是:先在阅读器中打开这本书,然后在阅读器控制栏选择Go to->Location,界面上会给出一个可直接复制的 URL,粘贴到别处即可(参见 viewer.rst)。点击该 URL 会用 calibre 阅读器在当前位置打开这本书。同样的 URL 也可以通过快捷键Ctrl+Shift+C复制当前位置到剪贴板(Copy current location as calibre:// URL to clipboard)。
执行搜索:search
URL 语法有两种:
calibre://search/Library_Name?q=query calibre://search/Library_Name?eq=hex_encoded_queryquery是任意合法的 calibre 搜索表达式。搜索表达式的基本用法参见 gui.rst 的The search interface一节,例如Asimov Foundation format:lrf会匹配元数据中同时含Asimov和Foundation且有 LRF 格式的书籍。表达式较复杂时,按前述方法编码为十六进制字符串并改用eq参数。
不带查询参数时,calibre://search/Library_Name会清除当前搜索。
虚拟书库的默认行为:执行搜索前 calibre 会清除当前选中的虚拟书库,以确保能搜到所有书籍。要保留当前虚拟书库,追加参数:
calibre://search/Library_Name?q=query&virtual_library=_要切换到指定虚拟书库再搜索,则使用:
calibre://search/Library_Name?virtual_library=Library%20Name或
calibre://search/Library_Name?encoded_virtual_library=hex_encoded_virtual_library_name如果已经在 calibre 中执行了一次搜索,想生成对应的链接:右键单击搜索栏,选择Copy search as URL。
打开书籍详情窗口和字段备注
打开某本书的详情窗口(不改变当前书库和已选书籍):
calibre://book-details/Library_Name/book_id打开作者、系列等字段的备注窗口:
calibre://show-note/Library_Name/Field_Name/id_Item_IdField_Name是列名,例如authors或tags;自定义列要把字段名开头的#替换为下划线,例如#mytags写作_mytags。条目除了可以用数字 ID 指定外,还可以用名称指定,形式为val_Item_Name或hex_Hex_Encoded_Item_Name。文档中的示例:
calibre://book-details/Library_Name/authors/val_John%20Doe生成show-note链接最方便的方式:在 calibre 中显示你想要的那条备注,点击Copy URL按钮,URL 会被复制到剪贴板。
在模板中批量构造 calibre:// 链接
如果你的目标不是手工写一两条链接,而是从书籍模板自动生成(比如把链接写入元数据列或目录页),template_lang.rst 给出了完整的模板构造方式。核心思路是用to_hex()函数编码书库名,再拼接成 URL。以switch-library为例:
program: strcat('calibre://switch-library/_hex_-', to_hex(current_library_name()))文档示例中该模板生成的 URL 为:
calibre://switch-library/_hex_-4c6962726172792e746573745f736d616c6c其中current_library_name()也可以替换成实际书库名字面量,如to_hex('Library.test_small')。
其他 URL 的模板示例(均来自文档,$id是模板可访问的书籍数字 ID):
- 定位书籍:
program: strcat('calibre://show-book/_hex_-', to_hex(current_library_name()), '/', $id)- 生成搜索链接(搜索表达式为
tags:"=.AA",含空格和特殊字符,必须十六进制编码后用eq传递):
program: strcat('calibre://search/_hex_-', to_hex(current_library_name()), '?eq=', to_hex('tags:"=.AA"'))生成结果:
calibre://search/_hex_-4c6962726172792e746573745f736d616c6c?eq=746167733a223d2e414122同一 URL 也可以用make_url_extended构造:
program: make_url_extended('calibre', '', 'search/_hex_-' & to_hex(current_library_name()), 'eq', to_hex('tags:"=.AA"'))- 打开书籍详情窗口:
program: strcat('calibre://book-details/_hex_-', to_hex(current_library_name()), '/', $id)- 打开字段备注(示例为
#authtest自定义列中Boy-Żeleński, Tadeusz的备注,文档示例输出为calibre://show-note/_hex_-4c6962726172792e746573745f736d616c6c/_authtest/hex_426f792dc5bb656c65c584736b692c205461646575737a):
program: strcat('calibre://show-note/_hex_-', to_hex(current_library_name()), '/_authtest/hex_', to_hex('Boy-Żeleński, Tadeusz'))文档同时提醒:没有模板函数能返回show-note所需的Item_Id,因此模板通常采用hex_Hex_Encoded_Item_Name这种按名称编码的形式。
验证方式与限制
- 验证是否生效:以上每种 URL 的文档都给出了"反向生成"路径,可以作为验证手段——用
show-book打开一本书后,在Book details面板右键Copy link to book,对比复制出的链接与你手写的 URL 是否一致;在阅读器中用Go to->Location或Ctrl+Shift+C复制位置链接;在搜索栏右键Copy search as URL复制搜索链接。链接执行后,calibre 会完成对应动作(切换书库、选中书籍、打开阅读器位置、执行搜索、弹出详情/备注窗口)。 - 书库名规则:必须与书库文件夹名一致(窗口标题栏显示的名称,注意大小写),空格替换为下划线,含特殊字符时用
_hex_-编码;_代表当前书库。 - book_id 的来源:只能通过界面悬停Click to open链接时查看,或复制现有链接获取;文档没有提供按书名反查 ID 的命令。
- 虚拟书库行为是各 URL 的差异点:
show-book找不到书时清除虚拟书库,view-book无虚拟书库参数,search默认清除虚拟书库、可用&virtual_library=_保留。 - 文档中的示例值(如
Library.test_small、ID1353、Boy-Żeleński, Tadeusz)都是文档示例,你的书库会产生不同的编码值和 ID,需按上述方法自行生成。
如果你需要在链接中区分不同书库或含特殊字符的名称,始终优先用_hex_-编码形式;如果只是想快速拿到一条可用链接,优先用界面上对应的"Copy"入口(Book details 面板、搜索栏、阅读器 Location 对话框),再把这些链接嵌入 HTML 文件或文档即可。
【免费下载链接】calibreThe official source code repository for the calibre ebook manager项目地址: https://gitcode.com/GitHub_Trending/ca/calibre
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考