calibre 深度定制指南:环境变量、Tweaks、资源覆盖与插件体系
【免费下载链接】calibreThe official source code repository for the calibre ebook manager项目地址: https://gitcode.com/GitHub_Trending/ca/calibre
本篇指南以 calibre 官方手册的 Customizing calibre 章节(manual/customize.rst)为核心骨架,系统讲解 calibre 高度模块化设计下的四大定制途径:通过环境变量改变配置目录、缓存位置、语言与界面行为;通过Tweaks(微调项)精细控制书籍管理、排序、界面显示等上百种行为;通过覆盖静态资源自定义图标、模板与 JavaScript;以及通过插件(Plugins)体系扩展转换、新闻抓取、设备连接等核心功能。读完本文,你将掌握从"换一个图标"到"编写并分发自定义插件"的完整定制技术栈,并能结合仓库源码理解每一层定制在 calibre 内部的真实生效机制。
一、定制概览:calibre 的分层可定制架构
calibre 在设计上刻意保持了高度的模块化(src/calibre/customize/__init__.py中定义了整套插件基类体系)。官方文档将定制能力划分为四个层次,从轻到重依次为:
- 环境变量:进程启动前注入,影响配置目录、缓存、数据库路径、语言、Qt 平台等全局行为;
- Tweaks(微调项):通过图形界面
Preferences->Advanced->Tweaks修改,控制各类具体行为;所有默认值集中定义在 resources/default_tweaks.py; - 静态资源覆盖:在 calibre 配置文件夹内建立
resources子目录,以同名文件覆盖内置图标、模板、脚本; - 插件体系:通过 src/calibre/customize/init.py 中定义的插件基类,向转换管线、设备连接、元数据处理、用户界面等各个环节注入自定义逻辑。
这四个层次优先级从低到高,后文依次展开。需要注意的是:图标主题与插件虽然可以通过 calibre 内置更新器下载,但它们并不属于 calibre 本体,其官方支持与源码位置在 Mobileread 论坛对应的支持帖中。
二、用环境变量定制 calibre
环境变量是 calibre 定制的最底层机制,在进程启动时即被读取。官方文档给出了完整的变量清单,下表逐一说明,并标注了仓库源码中的实际读取位置作为佐证。
| 环境变量 | 作用 | 源码依据 |
|---|---|---|
CALIBRE_CONFIG_DIRECTORY | 设置配置文件的存放/读取目录 | src/calibre/constants.py |
CALIBRE_TEMP_DIR | 设置 calibre 使用的临时文件夹 | src/calibre/ptempfile.py |
CALIBRE_CACHE_DIRECTORY | 设置跨会话持久数据的缓存文件夹 | src/calibre/constants.py |
CALIBRE_OVERRIDE_DATABASE_PATH | 指定metadata.db的完整路径,可将其从书库文件夹移出(适用于不支持文件锁的网络驱动器) | src/calibre/library/database2.py |
CALIBRE_ALLOW_PYTHON_TEMPLATES | 设为1之外的值即禁用 Python 模板 | src/calibre/utils/formatter.py |
CALIBRE_DEVELOP_FROM | 从 calibre 开发环境运行(详见 manual/develop.rst) | src/calibre/utils/resources.py、src/calibre/gui2/init.py |
CALIBRE_OVERRIDE_LANG | 强制界面语言(ISO 639 语言代码) | src/calibre/utils/localization.py |
CALIBRE_TEST_TRANSLATION | 测试翻译.po文件(值为该文件路径) | src/calibre/utils/localization.py |
CALIBRE_NO_NATIVE_FILEDIALOGS | 禁止使用系统原生文件选择对话框 | src/calibre/gui2/qt_file_dialogs.py |
CALIBRE_NO_NATIVE_MENUBAR | 在 Ubuntu Unity 等桌面环境禁用全局菜单,改为窗口内传统菜单 | — |
CALIBRE_USE_SYSTEM_THEME | 在 Linux 上改用系统 Qt 主题(默认使用内置样式以避免崩溃与挂起,代价是不跟随系统外观) | src/calibre/gui2/palette.py |
CALIBRE_SHOW_DEPRECATION_WARNINGS | 向 stdout 打印弃用警告,供开发者使用 | src/calibre/init.py |
CALIBRE_NO_DEFAULT_PROGRAMS | 阻止 calibre 在 Windows 上自动注册可处理的文件类型 | src/calibre/utils/winreg/default_programs.py |
CALIBRE_USE_SYSTEM_CERTIFICATES | 在 Windows/macOS 上改用系统证书库进行 SSL 校验 | src/calibre/constants.py |
CALIBRE_NO_ICONS_IN_MENUS | 禁用菜单中的图标 | src/calibre/gui2/init.py |
QT_QPA_PLATFORM | 在 Linux 上设为wayland强制 Wayland、xcb强制 X11 | — |
SYSFS_PATH | 当 sysfs 挂载在/sys之外的位置时使用 | — |
http_proxy/https_proxy | 在 Linux 上指定 HTTP(S) 代理 | — |
2.1 环境变量的生效细节(源码视角)
从 src/calibre/constants.py 可以看到配置目录的解析逻辑:当CALIBRE_CONFIG_DIRECTORY存在时直接采用(config_dir = os.path.abspath(cconfd));否则按平台回退——Windows 为%APPDATA%\calibre,macOS 为~/Library/Preferences/calibre,Linux 为$XDG_CONFIG_HOME/calibre(默认~/.config/calibre)。若目录不可写,则会临时创建配置目录并在退出时清理。缓存目录(_get_cache_dir)的解析也遵循同样模式:优先CALIBRE_CACHE_DIRECTORY,否则在 Windows 使用%LOCALAPPDATA%\calibre-cache,macOS 使用~/Library/Caches/calibre,Linux 使用$XDG_CACHE_HOME/calibre。这一源码逻辑印证了文档中"环境变量优先级高于平台默认路径"的说明。
2.2 在各平台设置环境变量
- Windows:通过系统"环境变量"对话框设置(官方文档指向 computerhope 的教程链接);也可用
set CALIBRE_CONFIG_DIRECTORY=C:\path\to\config形式的命令行方式临时设置。 - macOS:官方文档给出了专门的机制——创建
~/Library/Preferences/calibre/macos-env.txt文件,每行一个环境变量,例如:
CALIBRE_DEVELOP_FROM=$HOME/calibre-src/src CALIBRE_NO_NATIVE_FILEDIALOGS=1 CALIBRE_CONFIG_DIRECTORY=~/.config/calibre- Linux:在 shell 启动文件中导出,或按
env VAR=value calibre的方式单次注入。
2.3 典型应用场景
- 多实例隔离:为不同的 calibre 实例设置不同的
CALIBRE_CONFIG_DIRECTORY与CALIBRE_CACHE_DIRECTORY; - 网络驱动器书库:书库文件夹位于不支持文件锁的网络盘时,用
CALIBRE_OVERRIDE_DATABASE_PATH将metadata.db放到本地磁盘; - 界面兼容性:Linux 下遇到 Qt 版本冲突导致的崩溃/挂起时,保持默认(不要设置
CALIBRE_USE_SYSTEM_THEME);需要 Wayland 时设置QT_QPA_PLATFORM=wayland; - 语言与翻译:
CALIBRE_OVERRIDE_LANG=de强制德语界面;翻译工作者用CALIBRE_TEST_TRANSLATION=/path/to/file.po直接加载待测翻译文件。
三、Tweaks:精细行为微调
Tweaks 是 calibre 提供的一组"小开关",用于控制具体行为细节。修改入口为Preferences->Advanced->Tweaks,修改后通常需要重启 calibre 生效。所有 Tweaks 的默认值与完整注释集中在 resources/default_tweaks.py,calibre 首次启动时若该文件不存在会按默认值重建。
以下按功能域分类整理核心 Tweaks(默认值均取自当前仓库文件,可作为配置参考)。
3.1 系列编号与作者名处理
series_index_auto_increment(默认'next'):为新加入现有系列的书分配系列号的算法。可选值:next:大于现有最大编号的第一个可用整数;first_free:大于 0 的第一个可用整数;next_free:大于现有最小编号的第一个可用整数;last_free:小于现有最大编号的第一个可用整数,找不到则返回"最大+1";const:始终分配 1;no_change:不改变系列号;- 直接给一个数字(不加引号,如
16.5或0.0):始终分配该数字。
use_series_auto_increment_tweak_when_importing(默认False):导入/添加书籍时是否使用上述算法。False时,导入未显式给出系列号的书会被设为 1;True时按series_index_auto_increment分配。注意:若导入正则表达式或元数据插件已经产出了 series_index 值,则始终使用该值,不受此开关影响。authors_completer_append_separator(默认False):作者补全时是否在补全文本后自动追加分隔符以开启新一轮补全。author_sort_copy_method(默认'comma'):从 author 生成 author_sort 的算法。invert:"fn ln"→"ln, fn";copy:原样复制;comma:姓名含,时用copy,否则用invert;nocomma:"fn ln"→"ln fn"(无逗号)。
修改后需在左侧标签面板右键作者 ->
Manage authors->Recalculate all author sort values重算存量数据。作者名前后缀词表:
author_name_suffixes(默认('Jr', 'Sr', 'Inc', 'Ph.D', 'Phd', 'MD', 'M.D', 'I', 'II', 'III', 'IV', 'Junior', 'Senior'),忽略大小写与末尾句点)、author_name_prefixes(默认('Mr', 'Mrs', 'Ms', 'Dr', 'Prof'))、author_name_copywords(如'Agency'、'Corporation'、'Company'、'Inc.'等,出现时 sort 串与姓名一致,即"Acme Inc."不再排成"Inc., Acme"`)。author_use_surname_prefixes(默认False)与author_surname_prefixes(默认('da', 'de', 'di', 'la', 'le', 'van', 'von')):启用后,姓氏前的这些词被视为姓氏前缀,例如"John von Neumann"排序为"von Neumann, John"。authors_split_regex(默认r'(?i),?\s+(and|with)\s+'):拆分多位作者的匹配规则,除&外,凡匹配该正则的字符串也作为分隔符。
3.2 标签浏览器与书列表
categories_use_field_for_author_name/categories_use_field_for_series_name(默认'author'/'series'):标签浏览器(左侧作者/系列/出版社列表)中显示的字段,可改为'author_sort'/'series_sort'。注意 sort 值不保证唯一,可能出现重复项(不影响功能)。- 标签浏览器分区模板:分区(partition)后子类别标签由模板控制——
categories_collapsed_name_template(默认r'{first.sort:shorten(4,,0)} - {last.sort:shorten(4,,0)}')、categories_collapsed_rating_template(默认r'{first.avg_rating:4.2f:ifempty(0)} - {last.avg_rating:4.2f:ifempty(0)}')、categories_collapsed_popularity_template(默认r'{first.count:d} - {last.count:d}')。模板变量first/last为对象,可访问name、count、avg_rating、sort、category等子值。 sort_columns_at_startup(默认None):启动时书列表的排序列。None表示沿用保存的排序历史;否则为[('列查找名', 顺序)]列表,顺序0升序、1降序。例如[('authors',0),('title',0)]表示"作者内按书名排序"。title_series_sorting(默认'library_order'):库视图中的标题/系列排序方式。'library_order'忽略The、A等冠词(如The Client归入 C 列);'strictly_alphabetic'完全按原字符排序(归入 T 列)。该设置仅影响库显示,不影响设备端;存量书的排序需编辑标题或使用批量编辑对话框的Update title sort刷新。save_template_title_series_sorting(默认'library_order'):保存到磁盘/发送到设备时标题与系列名的格式。处理标题时,'library_order'会用 title_sort 替换标题;处理系列时会把The/An移到末尾(The Lord of the Rings→Lord of the Rings, The)。模板函数raw_field始终返回原始值,不受此开关影响。per_language_title_sort_articles:按语言配置的"冠词"正则表,默认内置英语、世界语、西班牙语、法语、波兰语、意大利语、葡萄牙语、罗马尼亚语、德语、荷兰语、瑞典语、土耳其语、南非荷兰语、希腊语、匈牙利语等语言的规则。default_language_for_title_sort(默认None)可强制使用某语言(如'deu'),None表示跟随界面语言。title_sort_articles仅为历史遗留项,已不再生效。
3.3 日期与排序行为
- 日期显示格式:
gui_pubdate_display_format(默认'MMM yyyy')、gui_timestamp_display_format(默认'dd MMM yyyy')、gui_last_modified_display_format(默认'dd MMM yyyy')。格式串支持d/dd/ddd/dddd(日)、M/MM/MMM/MMMM(月)、yy/yyyy(年)、h/hh/m/mm/s/ss(时分秒)、ap/AP/aP/Ap(12 小时制)、iso(带时区的完整时间,须独占)。例如dd MMM yyyy渲染09 Jan 2010,MM/yyyy渲染01/2010。 locale_for_sorting(默认'',即跟随界面语言):强制排序使用指定语言的 collating 顺序(ISO 639-1 小写代码),例如'fr'用法语规则、'nb'用挪威语规则。sort_dates_using_visible_fields(默认False):排序日期时是否仅使用当前显示的字段(日期值实际同时含日期与时间)。maximum_resort_levels(默认5):搜索、插入设备等操作后重排序的最大层级数。每多一层都带来性能开销,书库很大(数千本)且感到卡顿时可调低。value_for_undefined_numbers_when_sorting(默认0):数字字段无值时的排序占位值,可设负数、'minimum'、'maximum'等。
3.4 界面交互与行为
doubleclick_on_library_view(默认'open_viewer')与enter_key_behavior(默认'do_nothing'):双击与回车在书列表上的行为,可选open_viewer、do_nothing、show_book_details、show_locked_book_details、edit_cell、edit_metadata。注意除open_viewer/show_book_details/show_locked_book_details外的选项会禁用单击编辑字段。horizontal_scrolling_per_column/vertical_scrolling_per_row(默认均False):书列表是否按列/按行滚动(默认按项滚动)。preselect_first_completion(默认False):编辑作者/标签/系列时是否预选第一个补全项。为False时需按 Tab 接受补全;配合tab_accepts_uncompleted_text(默认False)可让 Tab 接受当前输入而非补全(此时用方向键选择补全;该开关在preselect_first_completion=True时被忽略)。completion_mode(默认'prefix'):补全匹配模式。'prefix'匹配输入前缀;'contains'匹配包含关系(输入asi同时命中 Asimov 与 Quasimodo);'word-prefix'仅匹配词首(asi命中 Asimov 与 "Isaac Asimov" 但不命中 Quasimodo),可用extra_word_break_chars(默认'')追加断词字符(如'-'使fic同时匹配 "Science Fiction" 与 "Science-Fiction")。many_libraries(默认10):复制到书库/快速切换菜单中超过该数量时改为按字母序排列。auto_connect_to_folder(默认''):启动时自动连接的文件夹完整路径;不存在则忽略。示例:Windows'C:/Users/someone/Desktop/testlib',其他系统'/home/dropbox/My Dropbox/someone/library'。calendar_start_day_of_week(默认'Default'):日历弹窗一周起始日,可填Sunday、Monday等英文全名。openers_by_scheme(默认{}):按 URL 类型指定打开程序,如{ "http*": "firefox %u" }使 calibre 用 Firefox 打开网页链接,%u会被替换为 URL;scheme 支持 glob 匹配。- macOS 工具栏:
unified_title_toolbar_on_osx(默认False)启用后工具栏与标题栏合并,但存在最小宽度翻倍等已知缺陷,自行承担风险。 - 字体与显示:
change_book_details_font_size_by(默认0)与change_ai_chat_font_size_by(默认0)调整书籍详情面板/AI 对话字体大小(正负值表示增减);template_editor_tab_stop_width(默认4)设置模板编辑器 Tab 宽度(以平均字符计);gui_view_history_size(默认15)控制"查看"按钮右键菜单中最近查看书籍的数量。 hide_ai_features(默认False):隐藏界面中所有提及 AI 的菜单项(AI 功能本身是可选启用,未配置后端时相关代码根本不会加载)。
3.5 转换、封面与文件行为
restrict_output_formats(默认None):限制转换对话框中的可用输出格式,如['EPUB', 'AZW3'];None表示全部可选。save_original_format/save_original_format_when_polishing(默认均True):同格式转换(EPUB→EPUB)或润色时是否保存原始文件,便于设置不满意时重跑。default_tweak_format(默认None):"Unpack book(拆书)"功能的默认格式。None用首选输出格式;可固定'EPUB'/'AZW3';'remember'记住上次选择。cover_trim_fuzz_value(默认10):封面裁剪的模糊距离(绝对强度单位),该距离内的颜色视为相同。maximum_cover_size(默认(1650, 2200)):书库内所有封面按比例缩放至该尺寸以内,防止超大封面拖慢性能。cover_drop_exclude(默认()):拖放到"书籍详情"面板时,按扩展名集合排除某些图片格式不当作封面而存为电子书,例如{'tiff', 'webp'}。exclude_fields_on_paste(默认[]):Edit metadata->Copy/Paste metadata时跳过粘贴的字段列表,如['cover', 'timestamp', '#mycolumn']。send_news_to_device_location(默认'main'):自动发送下载新闻到设备的位置,可选'main'、'carda'、'cardb';所选位置空间不足时自动改发到剩余空间最大的位置。skip_network_check(默认False):下载新闻前跳过联网检查(适用于系统联网检测不可靠的场景,如 Linux 的 NetworkManager)。
3.6 网络、内容服务器与杂项
public_smtp_relay_delay(默认301秒)与public_smtp_relay_host_suffixes(默认['gmail.com', 'live.com', 'gmx.com', 'outlook.com']):使用公共邮件服务器(GMX/Hotmail/Gmail 等)发送邮件前的等待秒数,改小易触发对方 SPAM 防护导致发送失败;后缀列表用于判定哪些中继主机属于公共邮件服务器。改动需重启生效。content_server_thumbnail_compression_quality(默认75,范围 50–99):内容服务器缩略图压缩质量,值越大画质越好、文件越大。allow_template_database_functions_in_composites(默认False):是否允许在复合列中使用book_values()、book_count()等模板数据库函数(开启后在复合列中使用可能非常慢)。east_asian_base_language(默认''):东亚语言音译为英语时的"基准"语言,可设'ja'(日语)、'kr'(韩语)、'vn'(越南语)、'zh'(中文);其他值回退到界面语言,列表外的基准语言按中文处理。qt_webengine_uses_gpu(默认False):Qt WebEngine(阅读器/编辑器渲染引擎)是否启用 GPU。默认关闭以避免老硬件上的崩溃/黑屏,常规使用下性能差异可忽略。sort_columns_at_startup之外的另一组排序相关项:sony_collection_renaming_rules(默认{})、sony_collection_name_template(默认'{value}{category:| (|)}')、sony_collection_sorting_rules(默认[])——这三个用于配置 Sony 设备"自动元数据管理"模式下集合(Collections)的命名与排序规则(详见 resources/default_tweaks.py 内注释,含将多个字段合并进同一集合的完整示例)。
3.7 Tweaks 修改的正确姿势
修改 Tweaks 时应直接编辑Preferences->Advanced->Tweaks对话框中的 Python 字典/值,保存后重启 calibre。由于 resources/default_tweaks.py 是"默认值模板",直接改它会在下次更新时被覆盖;正确做法是通过图形界面修改,calibre 会把自定义值持久化到配置文件中。文件头部的注释也明确警告:"Only edit this file if you know what you are doing. If you delete this file, it will be recreated from defaults."
四、覆盖静态资源:图标、模板与脚本
4.1 机制与目录约定
calibre 的所有静态资源(图标、JavaScript、元数据封套模板、目录模板等)存放在安装目录的resources子文件夹中。常见位置:
- Windows:
C:\Program Files\Calibre2\app\resources - macOS:
/Applications/calibre.app/Contents/Resources/resources/ - Linux(官方二进制安装):
/opt/calibre/resources
关键原则:不要直接修改安装目录中的资源文件——任何更新都会将其覆盖。正确做法是:
- 进入
Preferences->Advanced->Miscellaneous,点击Open calibre configuration folder打开配置文件夹; - 在其中创建名为
resources的子文件夹; - 把要覆盖的文件按相同相对结构放入(图片放
resources/images,其他资源同理); - 重启 calibre,它会自动优先使用你的自定义文件而非内置文件。
仓库源码证实了这一点:calibre 在启动时解析资源路径时,会优先检查配置目录下的覆盖资源(src/calibre/utils/resources.py 中的CALIBRE_DEVELOP_FROM分支及配置目录资源查找逻辑),即"配置目录覆盖 > 内置资源"。
4.2 实战示例:更换"移除书籍"图标
官方文档给出了一个完整示例:想更换"Remove books(移除书籍)"动作的图标——
- 在内置资源目录中确认相关文件为
resources/images/remove_books.png; - 准备一张替代 PNG,命名为
my_remove_books.png; - 将其保存到配置文件夹下的
resources/images/remove_books.png(保持与内置文件相同的相对路径与文件名); - 重启 calibre 生效。
所有界面图标都位于resources/images及其子目录。放在这里的覆盖文件优先级高于任何自定义图标主题——这是覆盖个体图标时最直接的手段。
4.3 亮色/暗色主题双版本图标(calibre 6+)
从 calibre 6 开始,可为亮色与暗色模式分别提供图标:只需制作两个版本,文件名带-for-dark-theme与-for-light-theme后缀即可,例如modified-for-dark-theme.png与modified-for-light-theme.png。calibre 会根据当前主题自动选用对应版本。当前仓库中可以看到大量此类成对文件,如 imgsrc/modified-for-dark-theme.svg 与 imgsrc/modified-for-light-theme.svg(源 SVG 会被构建流程渲染为 PNG 图标)。此外,在测试自定义图标时,记得清空resources/images中的对应图片,否则覆盖文件会盖过主题图标。
4.4 优先使用图标主题
calibre 对图标主题有原生支持:Preferences->Interface->Look & Feel->Change icon theme可切换社区制作的多种图标主题。官方建议优先使用图标主题而不是逐个覆盖图标,因为主题更易于维护与共享。
五、创建并分发自己的图标主题
如果你想把自己制作的一组图标打包分享给其他 calibre 用户(通过 calibre 内置的图标主题系统),操作步骤如下:
- 进入
Preferences->Miscellaneous->Create icon theme; - 选择存放图标的文件夹;
- 填写主题元数据(名称、作者等),点击 OK;
- calibre 会生成一个包含主题图标的 ZIP 文件;
- 将该 ZIP 上传到 Mobileread 论坛(对应主题板块),作者会将其加入 calibre 内置图标主题系统,供全球用户下载。
默认情况下,刚创建的主题也会被安装为当前主题,便于即时测试。当前仓库的 imgsrc 目录与 icons/make_ico_files.py、imgsrc/generate.py 展示了 calibre 自身如何从 SVG 源生成多尺寸图标资源——这也是社区图标主题作者可以借鉴的构建流程。
六、插件体系:扩展 calibre 功能
6.1 插件在 calibre 中的角色
calibre 的几乎所有功能都以插件形式存在:格式转换、新闻下载(此时称 recipes)、用户界面组件、设备连接、添加书籍时的文件处理等。在Preferences->Advanced->Plugins可以查看完整的内置插件列表。插件架构非常简单,官方教程见 manual/creating_plugins.rst(其中包含完整的插件编写示例与分发说明)。
6.2 插件基类体系(源码视角)
从 src/calibre/customize/init.py 可以看到,所有插件都继承自统一的Plugin基类,并按照职责划分为多种专业基类:
FileTypePlugin(src/calibre/customize/init.py):在添加/导入文件时处理文件内容;MetadataReaderPlugin(L481)与MetadataWriterPlugin(L516):读取/写入各格式的元数据;CatalogPlugin(L552):生成目录(Catalog);InterfaceActionBase(L697):在用户界面中添加菜单/工具栏动作;- 转换与设备相关的基类定义在 src/calibre/customize/conversion.py(如输入/输出格式插件、转换器)与
builtins.py、ui.py中。
每个插件通过name、description、version、author等类属性声明自身信息,并可通过is_customizable()(L303)提供配置对话框。插件分发采用 ZIP 打包(见 src/calibre/customize/zipplugin.py),安装后由 calibre 加载器动态导入。
6.3 插件的获取与发布
- 获取:
Preferences->Advanced->Plugins中可浏览、启用/禁用、更新所有内置与已安装插件;社区插件通过 calibre 内置的插件更新器下载。 - 发布:编写完成插件后,将其上传到 Mobileread 的 calibre 插件论坛(对应板块),经维护者审核后会通过内置更新器向所有用户推送。
6.4 与 Recipes 的关系
"添加在线内容源"(新闻抓取)也属于插件机制的范畴,但这类插件被专门称为recipes。如何为 manual/news.rst(新闻下载)与 manual/news_recipe.rst(recipe 编写)编写新 recipe,请参见对应手册章节;本仓库 recipes 目录中收录了上千个现成 recipe 可作为参考范本。
七、定制优先级与最佳实践总结
综合全文,calibre 各定制层次的生效优先级从高到低为:
- 配置目录中的资源覆盖(
resources/...同名文件)——高于图标主题; - 图标主题(通过
Change icon theme切换); - Tweaks(
Preferences->Advanced->Tweaks持久化到配置); - 环境变量(进程级,影响全局路径与平台行为);
- 内置默认值(resources/default_tweaks.py 等)。
实践建议:
- 需要快速改行为(排序、日期格式、补全方式)→ 用Tweaks;
- 需要整体换肤或换图标 → 优先图标主题,单个图标例外才用资源覆盖;
- 需要跨平台/多实例的路径与语言控制 → 用环境变量;
- 需要全新的功能(新格式、新设备、新界面动作)→ 编写插件;
- 任何自定义内容都应放到配置文件夹下,而非安装目录,以免升级时丢失。
如需进一步深入,可继续阅读仓库中的相关文档:manual/plugins.rst(插件 API 参考)、manual/creating_plugins.rst(插件编写教程)、manual/news_recipe.rst(recipe 编写)、manual/develop.rst(开发环境,配合CALIBRE_DEVELOP_FROM使用)。
【免费下载链接】calibreThe official source code repository for the calibre ebook manager项目地址: https://gitcode.com/GitHub_Trending/ca/calibre
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考