Skip to content

Releases: MagicalYuYu/OncePad

v1.1.3 — 笔记数据安全修复 + IPC 监听器泄漏修复

28 Jun 04:07

Choose a tag to compare

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 中 useEffect cleanup 调用移除函数,确保每次只保留一个监听器
  • checkUnsavedAndExecute 闭包捕获过期 state(防御性修复):
    • fileInfo / isFileDirty / currentNote / text / saveCurrentNote 镜像到 ref,checkUnsavedAndExecute 读取 ref 而非闭包变量,依赖数组稳定为空数组,避免闭包过期问题
    • 副作用:监听器只注册一次,性能提升
  • newShortcut 绕过未保存检查(Bug M-4):
    • handleKeyDownnewShortcut 原直接调用 handleNew(),绕过 checkUnsavedAndExecute,文件模式下未保存的修改会被静默丢弃
    • 修复:改走 handleNewWithCheck(),统一经过未保存检查
  • 未保存对话框文案不明确(UX 优化):
    • 原文案"文件内容已修改但未保存,是否保存?"未指明具体文件,用户反馈"搞不懂在说哪个文件"
    • 修复:文件模式下显示 文件 "{{fileName}}" 已修改但未保存,是否保存?,11 种语言同步新增 unsaved.messageFile

严重(数据安全,v1.1.3 第二次重新发布新增)

  • 切换笔记时文件未保存修改丢失(Bug M-5):
    • 根因handleSelectNote 在文件模式下有未保存修改时,直接加载笔记内容覆盖编辑区,不调用 checkUnsavedAndExecute 弹窗询问,导致文件未保存的修改丢失
    • 修复handleSelectNotecheckUnsavedAndExecute 包装,文件模式下有未保存修改时弹窗询问;笔记模式自动保存当前笔记后加载新笔记(不丢弃)
  • 收藏操作时文件未保存修改丢失(Bug M-6):
    • 根因togglePin(收藏按钮)在文件模式下直接调用 ensureCurrentNote,不弹窗询问,导致文件未保存的修改被意外存为草稿/收藏
    • 修复togglePincheckUnsavedAndExecute 包装,文件模式下有未保存修改时弹窗询问
  • 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 修复与性能优化

27 Jun 14:32

Choose a tag to compare

v1.1.2 — Bug 修复与性能优化

本次发布修复 3 个严重 bug 和 2 个性能问题,提升数据安全性与运行时性能。

Bug 修复

严重

  • 关闭窗口时草稿未保存(Bug S-1):beforeunload 事件中使用同步 IPC(ipcRenderer.sendSync)保存笔记,确保窗口关闭前数据已写入磁盘,避免异步保存未完成导致数据丢失
  • 语言切换无法持久化(Bug S-2):set-language IPC 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

27 Jun 13:51

Choose a tag to compare

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-window IPC),避免创建新窗口

✨ 新功能

NSIS 安装版(推荐)

  • 提供标准 Windows 安装向导,支持自定义安装目录
  • 创建桌面快捷方式和开始菜单快捷方式
  • 注册 40+ 种文件类型关联,双击 .md / .txt / .js / .py / .json / .csv / .sh / .html / .css 等文件可直接用 OncePad 打开
  • 出现在右键菜单"打开方式"中
  • 便携版不足:便携版每次启动需自解压 200 MB 到临时目录,双击文件打开延迟数秒。日常使用强烈建议选择安装版

异常日志系统

  • 捕获主进程未捕获异常、Promise 未处理拒绝、渲染进程崩溃、渲染进程无响应
  • 捕获渲染进程 window.onerrorunhandledrejection
  • 日志存储路径:%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)
  • 修复"打开日志文件夹"按钮文字超框问题(根因:.btnwidth: 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

27 Jun 09:31

Choose a tag to compare

OncePad v1.1.0

新增功能

序号补全(VS Code 风格)

  • 在行首输入序号(如 1. / a. / / 一、 / -)后按回车,下一行将显示半透明序号预览
  • TabEnter 接受建议,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

26 Jun 16:29

Choose a tag to compare

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 协作开发。