Releases: MagicalYuYu/OncePad
Releases · MagicalYuYu/OncePad
v1.1.3 — 笔记数据安全修复 + IPC 监听器泄漏修复
v1.1.3 — 笔记数据安全修复 + IPC 监听器泄漏修复
本次发布修复笔记/文件保存逻辑中的严重数据安全问题,并修复由此衍生的 IPC 监听器累积问题。确立核心设计原则:笔记模式(草稿/收藏)永远实时保存,不弹窗、不丢弃。
Bug 修复
严重(数据安全)
- 打开外部文件时收藏笔记内容被覆盖(Bug 2/5):
checkUnsavedAndExecute重构为区分文件模式和笔记模式- 文件模式(fileInfo 存在)且有修改:弹窗询问是否保存文件
- 笔记模式(fileInfo 为空)且有修改:自动保存笔记后执行操作(不弹窗,不丢弃)
- 收藏笔记内 Ctrl+S 弹出文件保存框(Bug 3):笔记模式下 Ctrl+S 调用
saveCurrentNote()保存到笔记数据库 + toast 反馈,不再弹出另存为对话框 loadFileFromExternal/handleDrop打开外部文件时清除currentNote/currentNoteId,避免后续自动保存用文件内容覆盖旧笔记handleNew/handleSelectNote在文件模式下不调用saveCurrentNote,避免把文件内容误存为草稿handleUnsavedDialogSave区分文件模式和笔记模式,笔记模式走笔记数据库保存
严重(交互体验,v1.1.3 重新发布新增)
- 新建文本后打开 TXT 文件重复弹出保存确认框(Bug M-2,根因修复):
- 根因:
onRequestClose/onLoadFileInWindow使用ipcRenderer.on()无法移除特定监听器,每次 state 变化(text/fileInfo/currentNote 等)触发useEffect重新注册监听器,旧监听器闭包捕获过期 state(如isFileDirty=true),导致后续打开文件时所有累积的监听器全部触发,旧监听器误判为"文件已修改未保存"弹出确认框 - 修复:preload.ts 中
onRequestClose/onLoadFileInWindow返回移除函数;App.tsx 中useEffectcleanup 调用移除函数,确保每次只保留一个监听器
- 根因:
- checkUnsavedAndExecute 闭包捕获过期 state(防御性修复):
- 将
fileInfo/isFileDirty/currentNote/text/saveCurrentNote镜像到 ref,checkUnsavedAndExecute读取 ref 而非闭包变量,依赖数组稳定为空数组,避免闭包过期问题 - 副作用:监听器只注册一次,性能提升
- 将
- newShortcut 绕过未保存检查(Bug M-4):
handleKeyDown中newShortcut原直接调用handleNew(),绕过checkUnsavedAndExecute,文件模式下未保存的修改会被静默丢弃- 修复:改走
handleNewWithCheck(),统一经过未保存检查
- 未保存对话框文案不明确(UX 优化):
- 原文案"文件内容已修改但未保存,是否保存?"未指明具体文件,用户反馈"搞不懂在说哪个文件"
- 修复:文件模式下显示
文件 "{{fileName}}" 已修改但未保存,是否保存?,11 种语言同步新增unsaved.messageFile键
严重(数据安全,v1.1.3 第二次重新发布新增)
- 切换笔记时文件未保存修改丢失(Bug M-5):
- 根因:
handleSelectNote在文件模式下有未保存修改时,直接加载笔记内容覆盖编辑区,不调用checkUnsavedAndExecute弹窗询问,导致文件未保存的修改丢失 - 修复:
handleSelectNote用checkUnsavedAndExecute包装,文件模式下有未保存修改时弹窗询问;笔记模式自动保存当前笔记后加载新笔记(不丢弃)
- 根因:
- 收藏操作时文件未保存修改丢失(Bug M-6):
- 根因:
togglePin(收藏按钮)在文件模式下直接调用ensureCurrentNote,不弹窗询问,导致文件未保存的修改被意外存为草稿/收藏 - 修复:
togglePin用checkUnsavedAndExecute包装,文件模式下有未保存修改时弹窗询问
- 根因:
- checkUnsavedAndExecute 笔记模式分支优化(防御性修复):
- 原笔记模式分支
else if (!fi && cn && tx !== cn.content)只处理currentNote存在且内容变化的情况,currentNote为 null 但text有内容(刚输入未自动保存的草稿)时不会保存,切换笔记会丢失 - 修复:改为
else if (!fi && tx && tx.trim() && (cn ? tx !== cn.content : true)),处理currentNote为 null 但text有内容的情况
- 原笔记模式分支
下载
| 文件 | 说明 |
|---|---|
OncePad-Setup-1.1.3.exe |
Windows 安装版(推荐,注册 40+ 文件类型关联) |
OncePad-1.1.3.exe |
Windows 便携版(免安装,直接运行) |
Full Changelog: v1.1.2...v1.1.3
v1.1.2 — Bug 修复与性能优化
v1.1.2 — Bug 修复与性能优化
本次发布修复 3 个严重 bug 和 2 个性能问题,提升数据安全性与运行时性能。
Bug 修复
严重
- 关闭窗口时草稿未保存(Bug S-1):beforeunload 事件中使用同步 IPC(
ipcRenderer.sendSync)保存笔记,确保窗口关闭前数据已写入磁盘,避免异步保存未完成导致数据丢失 - 语言切换无法持久化(Bug S-2):
set-languageIPC handler 的语言白名单从仅 2 种(zh-CN/en)扩展到全部 11 种支持语言,修复繁体中文、日语、韩语等 9 种语言切换后不生效的问题 - 保存失败后继续执行导致数据丢失(Bug S-3):另存为对话框中保存失败时添加
alert提示并中止后续动作,避免在保存失败的情况下继续切换文件或关闭窗口
性能
- 标题栏周期性检查(Bug M-4):每 3 秒运行的标题栏 DOM 测量(
getBoundingClientRect+elementsFromPoint+getComputedStyle)用debugMode开关包裹,生产环境不再执行无意义的周期性 DOM 操作 - Minimap 诊断日志(Bug M-5):每次滚动触发的 minimap 诊断日志(Range API 测量 + IPC 写入)用
debugMode开关包裹,生产环境不再产生诊断 IPC 调用
下载
| 文件 | 说明 |
|---|---|
OncePad-Setup-1.1.2.exe |
Windows 安装版(推荐,注册 40+ 文件类型关联) |
OncePad-1.1.2.exe |
Windows 便携版(免安装,直接运行) |
Full Changelog: v1.1.1...v1.1.2
OncePad v1.1.1
OncePad v1.1.1
🐛 Bug 修复
1. 关闭 Markdown 文件卡死(严重)
- 问题:打开部分 Markdown 文件后,点击右上角关闭按钮无法关闭文件,程序直接卡死,只能通过任务管理器强制结束进程
- 修复:引入
forceClose机制,在 close 事件中跳过未保存检查的递归调用,避免死循环
2. Ctrl+S 保存无反馈
- 问题:新建 TXT 文档用本软件打开后,按 Ctrl+S 保存无任何反馈
- 修复:保存成功后显示 toast 视觉反馈("已保存"),支持 11 种语言本地化。无文件路径时自动触发另存为对话框
3. 双击文件打开缓慢(严重)
- 问题:软件已常驻后台运行时,从资源管理器双击 TXT/MD 文件打开需要几十秒
- 根因:portable 便携版是 7z 自解压可执行文件(约 200 MB),每次启动都会解压到临时目录,导致严重延迟
- 修复:
- 新增 NSIS 安装版(推荐),永久安装到
AppData\Local\Programs\OncePad\,启动新进程无需自解压 - 同时保留 portable 便携版供免安装使用
- 实现双击文件复用已有窗口机制(
load-file-in-windowIPC),避免创建新窗口
- 新增 NSIS 安装版(推荐),永久安装到
✨ 新功能
NSIS 安装版(推荐)
- 提供标准 Windows 安装向导,支持自定义安装目录
- 创建桌面快捷方式和开始菜单快捷方式
- 注册 40+ 种文件类型关联,双击
.md/.txt/.js/.py/.json/.csv/.sh/.html/.css等文件可直接用 OncePad 打开 - 出现在右键菜单"打开方式"中
- 便携版不足:便携版每次启动需自解压 200 MB 到临时目录,双击文件打开延迟数秒。日常使用强烈建议选择安装版
异常日志系统
- 捕获主进程未捕获异常、Promise 未处理拒绝、渲染进程崩溃、渲染进程无响应
- 捕获渲染进程
window.onerror和unhandledrejection - 日志存储路径:
%APPDATA%\OncePad\logs\oncepad-YYYY-MM-DD.log(按天分割) - 设置 → 管理 → 高级中提供"打开日志文件夹"入口,支持 11 种语言
广泛文件关联
注册为以下 40+ 种文件类型的默认编辑器:
- 文档类:md / markdown / txt / text / log
- JavaScript:js / ts / jsx / tsx / mjs / cjs
- 源代码:py / rb / php / java / c / cpp / h / hpp / cs / go / rs / swift / kt / scala / clj / ex / exs
- Web 标记:html / htm / xml / svg / vue / svelte
- 样式表:css / scss / sass / less
- 配置文件:json / yml / yaml / toml / ini / conf / cfg / properties
- 数据文件:csv / tsv / sql
- 脚本:sh / bash / zsh / fish / ps1 / bat / cmd
- 差异文件:diff / patch
🎨 UI 优化
- 统一设置→管理→高级页面样式(switch / setting-description / settings-row)
- 修复"打开日志文件夹"按钮文字超框问题(根因:
.btn类width: 32px锁死按钮宽度) - 语言选项"中文(简体)"改为"简体中文"
🌐 国际化
新增 3 个翻译键(logs / openLogsFolder / logsHint),覆盖全部 11 种语言:
简体中文 / 繁體中文 / English / 日本語 / 한국어 / Deutsch / Français / Español / Português (Brasil) / Русский / Italiano
下载说明
| 文件 | 说明 | 适用场景 |
|---|---|---|
OncePad-Setup-1.1.1.exe |
NSIS 安装版(推荐) | 日常使用,注册文件关联,启动速度快 |
OncePad 1.1.1.exe |
Portable 便携版 | 免安装使用,但双击文件打开有延迟 |
升级建议:如果您正在使用 1.1.0 便携版,建议下载安装版以获得更快的使用体验。
v1.1.0
OncePad v1.1.0
新增功能
序号补全(VS Code 风格)
- 在行首输入序号(如
1./a./①/一、/-)后按回车,下一行将显示半透明序号预览 - 按 Tab 或 Enter 接受建议,Backspace/Esc 取消
- 支持数字序号、字母序号、中文序号、无序列表等多种格式
文件菜单与格式兼容
- 标题栏新增"文件"菜单:打开 / 保存 / 另存为 / 关闭
- 支持拖拽文本文件到编辑器直接打开
- 广泛格式支持:40+ 扩展名(.md / .txt / .log / .json / .py / .js / .yml 等代码和配置文件)
- 内容检测:后缀名未收录时,检测文件内容是否为纯文本,纯文本即可打开
- MD 默认浏览:Markdown 文件打开时默认进入阅读模式,其他格式默认编辑模式
关于对话框
- 查看应用版本和系统信息(Electron / Chrome / Node 版本)
- 附 GitHub 仓库快捷链接(调用系统默认浏览器打开)
其他新增
- 工作区、标签、颜色标记、置顶收藏
- 回收站(自动清理 1/2/3/7 天)
- 大纲导航、缩略图(minimap)
- 行号显示(逻辑/视觉模式)
- 字体定制(中英文分离)、界面缩放(80%-150%)
- 开机自启、失焦隐藏
- 导航栏按钮自定义、深色/浅色主题
- 未保存确认对话框
改进
- 默认快捷键从
Ctrl+J改为Alt+Q(单手可触) - 新增 9 种语言本地化(zh-TW / ko / de / fr / es / pt-BR / ru / it),共支持 11 种语言
- dev 模式独立 userData 路径,避免与打包版单实例锁冲突
Bug 修复
- 修复菜单背景透明问题(CSS 变量未定义)
- 修复菜单点击外部区域不消失问题(层叠上下文冲突)
- 修复 GitHub 链接在 Electron 内部打开问题(改用 shell.openExternal)
- 修复中文输入法下序号补全兼容性问题(方案 B:仅 Tab/Enter 接受)
Full Changelog: v1.0.0...v1.1.0
OncePad v1.0.0
OncePad v1.0.0
轻量级、随叫随到的临时笔记本,用于起草消息、AI 提示词和快速笔记。
按下全局快捷键唤出,输入文字,再按一次——内容已复制到剪贴板,随时粘贴到任何地方。
功能亮点
- ⚡ 即时唤出 — 全局快捷键从任何应用中唤出编辑器
- 📋 隐藏即复制 — 窗口隐藏瞬间文本已复制到剪贴板
- 🗂️ 工作区 — 将笔记组织到不同工作区
- 🏷️ 标签 — 为笔记添加标签,便于筛选和查找
- 🎨 颜色标记 — 6 种颜色直观分类笔记
- 📌 置顶收藏 — 重要笔记始终触手可及
- 📝 Markdown 支持 — 完整 Markdown 渲染 + 实时预览切换
- 📖 代码/阅读模式 — 在编辑视图和阅读视图之间切换
- 🔢 行号显示 — 逻辑行号或视觉行号模式
- 📑 大纲 — 通过文档标题快速跳转
- 🗺️ 缩略图 — 文档概览,快速滚动定位(试验性)
- 🌐 11 种语言 — 简体中文 / 繁體中文 / English / 日本語 / 한국어 / Deutsch / Français / Español / Português (Brasil) / Русский / Italiano
- 🎛️ 导航栏自定义 — 显示/隐藏标题栏按钮
- 🔤 字体定制 — 中英文字体分离,可调字号、行高、内边距
- 🔍 界面缩放 — 80%–150% 全界面缩放
- 🌙 深色/浅色主题 — 一键切换主题模式
- 🚀 开机自启 — 系统启动时自动运行,可隐藏到托盘
- 👻 失焦隐藏 — 窗口失去焦点时自动隐藏到托盘
- 🗑️ 回收站自动清理 — 可配置保留时长(1/2/3/7 天)
- ⌨️ 可配置快捷键 — 自定义唤出、新建、复制快捷键
下载
| 平台 | 文件 | 说明 |
|---|---|---|
| Windows | OncePad.1.0.0.exe |
便携版,直接运行,无需安装 |
| macOS | OncePad-1.0.0-arm64.dmg |
未签名,若被阻止运行 xattr -cr "/Applications/OncePad.app" |
| Linux | OncePad-1.0.0.AppImage |
赋予执行权限后运行 |
技术栈
Electron 28 · React 18 · TypeScript 5 · Vite 5 · i18next · markdown-it
致谢
OncePad 是受 One-Time Editor 启发的衍生项目,经深度重构与大幅扩展,新增 12 个独立功能模块,采用 GNU 通用公共许可证 v3.0 发布。
本项目使用 AOS — Agent Operating System 协作开发。