随手记工作区与边界
0.5.0 对照 Electron 的 QuickNoteTool.tsx、QuickNoteTree.tsx、QuickNoteCodeEditor.tsx、quickReplace.ts 及其测试实现,界面使用 SwiftUI / AppKit。本产品自带算法副本,构建和运行不读取 next 源码、资源或用户数据。
布局和文档设置
- 左侧文档库、中间编辑区、右侧可折叠快速替换面板。顶部依次为编辑/分栏/预览、颜色、语法、字体、字号、行距、换行、格式化、列表、查找、保存、图片附件、快速替换、删除;底部显示字符/行数、操作状态和语法。
- 文档库开关放在文档标题行。窄编辑区工具栏分两行;文档库和快速替换通过原生弹出面板使用,保留操作入口。
- 颜色用于文档树图标分类,与 Electron 的含义一致。提供默认、珊瑚、黄、绿、蓝、紫、红;正文采用系统文本色与语法高亮。
- 语法包含 Text、Markdown、JSON、Java、JavaScript、TypeScript、Python、XML、YAML、SQL。支持系统字体、等宽字体和本机字体,字号 8–48,行距 1.0/1.2/1.4/1.6/1.8/2.0 倍;编辑行高使用字号 × 1.65 × 行距。
- 设置按文档自动保存,复制文档保留设置,切换或重启恢复各自值;编辑/分栏/预览、查找参数、快速替换面板开关按随手记工作区保存。分栏模式下编辑/预览宽度(
quick-note-editor-preview)与快速替换侧栏相对主栏宽度(quick-note-no-tree-replace)写入本产品workspace.json,与 Electron pane 键同语义。 - 旧版本没有新增字段时仍可读取,旧笔记默认 Markdown、14 号系统字体、1.0 倍行距和自动换行。新文档按
.md/.markdown/.json/.xml后缀推断语法,其余为 Text;用户可修改语法。批量导入仍限于 README 列出的文本类型。
编辑语义
24 项快速替换与 Electron 的顺序和输入输出对应:去除首尾空格、空行、Tab,科学计数/普通数字/千分位转换,下划线/驼峰转换,大小写,换行/逗号/引号列表/Tab 转换,清除换行,按行去重/计数,转义/还原,反转和排序。
有非空选区时仅处理选区;没有选区时处理全文。结果在原生编辑器中原地应用并自动保存,支持系统撤销。列表按钮为选区所覆盖的行添加无序或从 1 开始的有序前缀;无选区时处理当前行。JSON 格式化使用 4 空格,XML 使用本产品的严格 XML 格式化实现。
查找替换支持区分大小写、全词、JavaScript 正则、前后导航、捕获组和替换换行。高亮使用临时显示属性,不写入正文;替换当前项后继续查找下一项,全部替换作为一次可撤销编辑。
编辑/分栏/预览切换保留同一个输入编辑器与撤销记录。切换文档清理撤销栈,跨窗口正文更新会清理接收窗口的旧撤销记录,重启不恢复撤销栈。异步操作绑定文档、正文及恢复代次,过期结果不会覆盖新文档。
Markdown 预览
支持 ATX/Setext 标题、段落、引用、简单嵌套列表、有序/无序/任务列表、分隔线、围栏代码块及复制、行内强调/代码/链接,新增表格表头、列对齐、转义竖线和代码中的竖线。表格超出宽度时横向滚动。非 Markdown 语法显示只读文本,与 Electron 的预览方式对应。
解析在后台进行,编辑时合并刷新并取消过期解析。预览最多 2 MB、2 万行和 1 万表格单元格,超过限制给出说明,正文仍可编辑和导出。HTTP/HTTPS/mailto 链接由系统打开;不会执行 HTML 或脚本。0.6.0 已加入段落中的本地 Markdown 图片、长图和点击缩放,见 图片附件与备份。
独立依赖与实际差异
QuickNoteTools.js 是纯文本算法的独立副本,随本产品资源打包,在已有 MooToolJSONWorker 的系统 JavaScriptCore 中运行,无需 Node.js。每次调用有 3 秒父进程超时及辅助进程自身 4 秒终止计时;输入和进程边界同 JSON 引擎。快速替换另限制处理区域的展开结果为 8 × 1024 × 1024 个 UTF-16 单元,整个请求/结果仍受 16 MB 限制;科学计数指数绝对值最多 100 万,避免异常输入无界扩展。
尚未实现 Electron 风格附件文件名与磁盘双向同步、全部语法格式化、列编辑及完整编辑装饰。文档库已支持镜像到 quick-notes/、FSEvents 监听、Finder 定位与 Git 面板(含自动检查点/Pull 设置)。编辑区、Markdown 预览(代码块/任务列表/图片附件)与图片插入相关 UI/错误随 general.language 三语(见 parity 随手记行)。语法着色采用原生规则,超过 15 万 UTF-16 单元停止着色;不是完整语言解析器。Markdown 不是完整 CommonMark/GFM 实现,HTML、远端图片、脚注、复杂嵌套块与全部扩展语法仍有差异。格式化目前仅启用 JSON/XML,其余语法按钮明确禁用。
文档保存为原生版独立工作区中的虚拟文档,导入复制内容,后续修改不回写来源文件。原生版保留此前可直接编辑草稿的方式;Electron 版的文件系统元数据、附件目录和 Git 仓库不会被共享或自动迁移。
验证
核心测试覆盖全部 24 项动作、UTF-16 选区、数字扩展边界、无效转义、列表行范围、XML 格式化、文档设置/复制/旧工作区,以及 Markdown 表格、列表、代码和大小边界。
原生验收操作实际按钮与 NSTextView,检查设置应用、选区/全文替换、自动保存、查找计数/高亮、替换与列表撤销、预览切换保留撤销、多窗口设置同步、文档隔离及新进程恢复。双主题和窄窗口截图见 README。这不代表所有菜单和系统对话框均已完成端到端验收。