MooTool

Handy tool set for developers

View on GitHub

随手记工作区与边界

0.5.0 对照 Electron 的 QuickNoteTool.tsxQuickNoteTree.tsxQuickNoteCodeEditor.tsxquickReplace.ts 及其测试实现,界面使用 SwiftUI / AppKit。本产品自带算法副本,构建和运行不读取 next 源码、资源或用户数据。

布局和文档设置

编辑语义

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。这不代表所有菜单和系统对话框均已完成端到端验收。