Joplin 3.3 版本解析:桌面端多实例运行、快捷链接笔记对话框与 Whisper 离线语音输入
【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplin
Joplin 3.3(2025-04-28 发布)围绕桌面端与移动端做了成体系的功能升级:桌面端新增多实例并行运行、一键折叠/展开笔记本、Shift+Alt+L 快捷链接笔记对话框,并将富文本编辑器升级至 TinyMCE v6;移动端新增音频录音附件与基于 Whisper 的离线语音转文字能力。本文以该版本的发布说明为主线,结合仓库中对应的源码实现,逐项讲解这些特性的用法、限制与底层原理,读完后可完整掌握 3.3 的新功能及其在代码层面的落点。
版本总览:3.3 带来了什么
3.3 的更新集中在四个方向:
- 无障碍(Accessibility)增强:桌面端与移动端均改进了键盘导航、读屏器支持与视觉对比度;
- 桌面端效率功能:一键折叠/展开全部笔记本、链接笔记对话框、支持同时运行多个独立实例;
- 移动端能力扩展:音频录音附件、基于 Whisper 的语音输入(Beta)、重新设计的“新建笔记”菜单;
- 安全与稳定性:为富文本编辑器落地内容安全策略(CSP),本版本共修复 39 个桌面端缺陷与 17 个移动端缺陷。
完整的逐项变更列表可查阅仓库内的各端更新日志目录 readme/about/changelog/,本文仅对主线特性展开,并给出源码级印证。
桌面端:可访问性改进
3.3 的桌面端无障碍改进覆盖了键盘、读屏与视觉三个层面:
- 键盘导航:新增快捷键与更清晰的控件标签(label),简化跨界面的交互路径;
- “转到查看器”(go to viewer)菜单项:将焦点从笔记编辑器移动到笔记查看器,并且焦点会定位到查看器中与编辑器光标对应的位置,而非简单地跳到顶部——这对依赖键盘或读屏器完成“编辑后回读”的用户尤为关键;
- 读屏器支持:笔记列表(note list)与侧边栏(sidebar)等元素的切换与交互方式经过优化,便于辅助技术用户操作;
- 视觉对比度:URL、侧边栏、滚动条等 UI 组件的对比度提升,改善低视力用户的可读性;
- 富文本编辑器:代码块在键盘与触摸场景下的交互更顺畅。
桌面端:一键折叠/展开全部笔记本
3.3 在侧边栏笔记本树上新增了一个“折叠/展开全部”(Collapse/Expand All)按钮:需要定位某篇笔记时可展开全部笔记本层级,追求整洁界面时则一键全部收起。
从源码结构看,该按钮实现于侧边栏的列表包装逻辑 useOnRenderListWrapper.tsx 中,有几点实现细节值得注意:
- 按钮为状态自适应的:通过
allFoldersCollapsed属性判断当前状态,图标在far fa-caret-square-right(展开)与far fa-caret-square-down(折叠)间切换,title与aria-label也随之在Expand all notebooks/Collapse all notebooks之间变化,保证读屏器能正确播报当前动作; - 点击事件统一走
onToggleAllFolders(allFoldersCollapsed)回调,由上层状态管理批量更新文件夹折叠状态; - 当不存在子笔记本(
hasSubFolders为 false)时按钮被置为disabled,避免无意义的操作; - 出于无障碍考虑,源码注释明确指出该切换按钮被放在
role='tree'的列表区域之外,这样辅助技术可以在不干扰树形结构遍历的情况下单独访问它——这正呼应了本版本“无障碍优先”的改进主题。
桌面端:链接笔记对话框(Shift+Alt+L)
这是 3.3 桌面端最实用的效率特性之一:按下macOS 上的 Shift+Option+L,或Windows/Linux 上的 Shift+Alt+L,即可唤起一个搜索框,输入目标笔记标题,链接立即插入当前笔记。
快捷键的注册位于全局按键映射服务 KeymapService.ts 中,分别以Shift+Option+L(macOS 分支)与Shift+Alt+L(Windows/Linux 分支)映射到linkToNote命令。功能本体在 linkToNote.ts 中,其调用链非常清晰:
- 以
Mode.TitleOnly模式复用内置的Goto Anything对话框(只按标题搜索,始终显示帮助提示); - 校验返回结果必须是笔记(
ModelType.Note),否则记录警告并中止; - 用
markdownUtils.escapeTitleText与escapeLinkUrl转义标题和 ID,拼出标题形式的内部链接,再通过insertText命令插入编辑器当前光标处。
该命令的启用条件(enabledCondition)为:oneNoteSelected && (markdownEditorPaneVisible || richTextEditorVisible) && !noteIsReadOnly && !noteIsDeleted,即必须选中一篇笔记、Markdown 或富文本编辑器可见、且笔记非只读未删除。富文本编辑器工具栏中的“链接到笔记”按钮同样触发此命令,见 TinyMCE.tsx。这也意味着快捷键与工具栏按钮、菜单项三条入口最终汇聚到同一个命令实现,行为完全一致。
桌面端:支持同时运行多个 Joplin 实例
3.3 起,Joplin Desktop 允许同时运行多个独立实例:每个实例拥有独立的设置、插件与笔记数据,互不干扰。典型场景是把工作笔记与个人笔记分开,或在不同虚拟桌面各开一个实例。主实例可通过菜单File → Open secondary app instance...打开第二个实例。
仓库内多实例的实现链条完整可查:
- 命令入口:openSecondaryAppInstance.ts 声明了
openSecondaryAppInstance命令(菜单标签即 “Open secondary app instance...”),其enabledCondition为!isAltInstance——即在副实例内该菜单项会被禁用,防止无限套娃; - 进程拉起:bridge.ts 中
appLaunchCommand通过追加--alt-instance-id命令行参数构造启动命令,launchAltAppInstance固定以alt1作为副实例 ID,并以detached: true方式execCommand拉起独立进程,使副实例与主实例生命周期解耦; - 参数解析与隔离:主进程入口 main.ts 用
getFlagValueFromArgs(process.argv, '--alt-instance-id', '')解析该参数,并传入determineBaseAppDirs据此计算应用数据目录——这正是“每个实例独立设置、插件与笔记”的来源:不同实例落在不同的 profile 目录; - 实例身份识别:stateToWhenClauseContext.ts 中
isAltInstance = !!state.settings.altInstanceId,供菜单可用性等条件判断使用; - 功能取舍:从 app.ts 的结构看,剪贴板服务器(ClipperServer)会
setEnabled(!Setting.value('altInstanceId'))——副实例不启动剪贴板服务,避免两个实例抢占同一剪贴板端口,这是一个值得注意的实例间资源隔离细节。
另外,bridge.ts 中launchAppInstanceById要求 IPC 服务器已启动,否则会提示 “Cannot launch another instance because IPC server could not start.” 并提供打开日志的选项;副实例的重启也依赖主实例通过跨应用 IPC 消息(restartAltInstance)协助完成,从源码注释可见这是针对relaunch()在副实例上失效的专门处理。使用方式与更多说明参见文档 readme/apps/multiple_instances.md。
桌面端:富文本编辑器升级至 TinyMCE v6 与 Markdown 自动替换
3.3 对富文本编辑器(Rich Text Editor)做了多项改进与缺陷修复,其中两点值得单独说明:
- 升级至 TinyMCE v6:仓库中随项目维护了 TinyMCE 相关的图标包与列表定义(见 Assets/TinyMCE/ 目录),编辑器主体能力与上游 v6 对齐;
- Markdown 自动替换(auto-replacement):在富文本模式下输入
==highlight==等记号会被自动替换为对应格式,例如生成高亮文本;如不需要,可在设置中关闭该行为。
移动端:无障碍改进
移动端与桌面端同步做了一轮无障碍增强:
- 笔记操作菜单(note actions menu)与模态对话框的焦点处理改进,读屏用户导航更顺滑;
- 默认模态关闭按钮变为可访问元素,并修复了“不可见按钮却可获得焦点”的问题;
- Markdown 编辑器中淡化显示的 URL 对比度提升,低视力用户更易读;
- 加密配置界面(encryption configuration screen)的可访问性改进;
- 创建与编辑多用户资料(Profiles)的操作新增读屏器支持。
移动端:录音并作为音频附件插入笔记
3.3 起可在笔记中直接录制并附加音频:打开笔记的 kebab 菜单,选择Record audio,开始录音,结束后应用自动将录音文件作为附件插入当前笔记,适合快速记录灵感、提醒或补充语音信息。
从源码看,该入口位于移动端附件命令 attachFile.ts:Record audio作为附件操作项(AttachFileAction.RecordAudio)出现在按钮列表中,点击后调用recordAudio()完成录制与附加。
移动端:Whisper 语音输入升级(Beta)
Android 的语音输入(voice typing)在 2.11 引入后,3.3 进行了实质性重构:新版基于Whisper这一 AI 语音识别模型,识别准确率显著提升,并支持自动标点与段落格式。
该特性的实现位于独立原生模块 packages/whisper-voice-typing/:其 JS 侧 index.ts 通过 Nitro Modules 创建AudioRecorder(音频采集)与WhisperSession(识别会话)两个混合对象,Session类封装了open()(建会话并开始录音)与convertNext(duration)(等待指定时长音频数据后转换文本)的核心流程;源码中还有一处针对 whisper.cpp 的细节处理——识别前会把区域后缀(如en_US中的_US)从语言代码中剥离,因为 whisper.cpp 不支持区域标识符。
需要注意的适用前提与限制:
- 由于所依赖的 AI 模型资源占用较高,该特性目前仍处于Beta阶段;
- 默认使用更小、精度较低的模型以兼容较老设备,如需更高精度可手动下载并切换更大的模型;
- 功能完全离线运行:录音与识别均在本地完成,隐私录音不会发送到任何第三方服务器,这也是相比 Google、Apple 同类方案的核心隐私优势,同时意味着无网络连接时同样可用;
- 官方计划后续持续打磨,待稳定性提升后逐步将默认模型切换为精度更高的版本。
移动端:重新设计的“新建笔记”菜单
此前的“New Note”菜单只提供“新建笔记”与“新建待办”两个选项;3.3 重设计后的菜单直接在浮动按钮中提供了多种创建方式:拍照笔记(Camera)、附加文件(Attachment)、扫描笔记本(Scan notebook)、绘图(Drawing)、录音(Recording),分隔之后才是New to-do与New note。
源码 NewNoteButton.tsx 展示了该菜单的完整构成与实现模式:每个附件类菜单项通过makeNewNote(false, action)调用newNote命令并传入attachFileAction参数,实现“建笔记 + 触发对应附件流程”的一步完成;扫描笔记本则直接导航到DocumentScanner页面。菜单项还统一附带accessibilityHint(如 “Creates a new note with an attachment of type %s”),并通过AccessibilityActionInfo为读屏用户提供new-note、new-todo快捷动作——注释里特别说明,这是为了绕过附件类菜单项排在焦点顺序前部、且无法调整顺序的限制。
安全与稳定性:富文本编辑器 CSP 与缺陷修复
安全层面,3.3 为富文本编辑器实现了内容安全策略(Content Security Policy),以抵御编辑器内加载恶意内容的风险——这与编辑器处理外部粘贴/导入 HTML 的攻击面直接相关。
稳定性层面,本版本共修复39 个桌面端缺陷与17 个移动端缺陷。完整明细见仓库内各端更新日志目录 readme/about/changelog/(Desktop、Android、iOS 各自的 changelog 文件),以及发布说明原文 readme/news/20250428-release-3-3.md。
小结:如何在 3.3 中快速上手
- 桌面端:用侧边栏顶部的折叠/展开全部按钮管理笔记本树;用 Shift+Alt+L(macOS 为 Shift+Option+L)在当前笔记中快速插入指向其他笔记的链接;用 File → Open secondary app instance... 开出互不干扰的副实例(注意副实例不占用剪贴板服务)。
- 移动端:kebab 菜单选择 Record audio 直接录音频附件;Android 上开启 Whisper 语音输入(Beta,纯离线)获得带标点的转写文本;用重新设计的新建笔记菜单一步完成拍照、录音、绘图等笔记的创建。
- 通用:富文本编辑器已升级到 TinyMCE v6,支持
==highlight==等 Markdown 自动替换,且受 CSP 保护;如不需要自动替换可在设置中关闭。
【免费下载链接】joplinJoplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.项目地址: https://gitcode.com/GitHub_Trending/jo/joplin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考