Skip to content

QingNagi/skill-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Markdown Editor

一款基于 Python + Flask + 浏览器 的本地 Markdown 编辑器,支持渲染态直接编辑(WYSIWYG)、本地版本管理(类 Git)、暗黑/亮色主题切换多标签页Agent 内容辅助(开发中)。


功能特性

  • WYSIWYG 渲染态编辑:基于 TUI Editor,在渲染后的界面中直接点击、输入、编辑
  • 源码/WYSIWYG 双模式切换:通过顶部工具栏一键切换,右下角原生切换条已移除
  • 本地版本管理:SQLite 存储历史快照,支持手动创建带标题/描述的版本、自动定时快照、Diff 对比、一键回滚、流程线时间线展示
  • 动漫风暗黑/亮色主题:以天蓝/aqua为基调的亮色模式,深蓝黑霓虹风格的暗黑模式,支持自动检测系统主题偏好
  • 字体配置:英文 Times New Roman,中文宋体(SimSun),全局统一
  • 文件管理:通过浏览器 File System Access API 打开文件/文件夹、保存/另存为、导出 HTML、多标签页编辑
  • 可拖拽标签页:标签栏支持拖拽排序,带有流畅的 CSS 过渡动画
  • 多标签页状态保留:每个标签页独立保存滚动位置和未保存内容,切换时无缝恢复
  • 可拖拽文件树:左侧项目文件树支持拖拽调整宽度,支持折叠/展开
  • 软件设置:支持修改自动快照间隔等配置,持久化保存
  • Agent 内容辅助(开发中):续写、润色、扩写、翻译、智能插入

技术架构

Flask 本地服务
├── 静态文件 (web/index.html, editor.js, style.css)
├── REST API (快照 / 设置 / 文件通知)
└── 版本管理引擎 (SQLite + diff-match-patch)
        ↓
浏览器 (Chrome / Edge)
└── TUI Editor (WYSIWYG) + 顶部内嵌工具栏 + 版本历史侧边栏
        ↓
File System Access API 读写本地文件

核心设计决策

设计点 方案 原因
桌面容器 系统浏览器 避免 Qt WebEngine 的渲染性能瓶颈,直接利用现代浏览器高性能渲染引擎
文件访问 File System Access API 浏览器原生支持本地文件读写,无需中转后端,体验更流畅
编辑器 TUI Editor (CDN) 成熟稳定的 WYSIWYG Markdown 编辑器,无需 Node 构建
后端语言 Python 版本/设置管理逻辑全部用 Python 实现
通信方式 REST API (fetch) 前端直接调用 Flask API,无需 action queue 中转
版本存储 SQLite 结构化查询、事务安全,存储在 ~/.markdown_editor/versions.db
Diff 计算 diff-match-patch Google 开源库,实时语义化 Diff,无需预存增量
主题方案 body.dark CSS 类 覆盖 TUI Editor 全部 UI 元素 + 自定义组件,两套完整样式

环境要求

  • Python 3.10+
  • Chrome / Edge 浏览器(需要支持 File System Access API)
  • Windows / macOS / Linux

安装依赖

pip install -r requirements.txt

依赖列表:

  • flask>=3.0.0 — 本地 HTTP 服务
  • diff-match-patch>=20200713 — Diff 计算

使用方法

启动应用

python main.py

启动后会自动打开系统默认浏览器,访问本地 Flask 服务。

基本操作

功能 操作
打开文件 点击 Open 选择单个 .md 文件
打开文件夹 点击 Open Folder 加载项目文件树
保存 点击 Save(Ctrl+S)
另存为 点击 Save As
创建版本 点击 Save Version,输入标题与描述
查看版本历史 点击 Version History
软件设置 点击 Settings 修改自动快照间隔
切换编辑模式 点击右上角 </> 图标
切换主题 点击右上角 ☀/☾ 图标
导出 HTML 点击 Export HTML

版本管理

  1. 点击 Save Version 手动创建版本快照,需输入版本标题和更新描述
  2. 点击 Version History 打开右侧边栏,以流程线时间线查看所有版本
  3. 点击任意版本节点查看与当前内容的 Diff 对比(绿色新增 / 红色删除)
  4. 点击 Rollback 回滚到该版本,当前内容会自动保存为新快照(不丢失历史)

自动时间快照

  • 编辑器会按照 Settings 中设置的间隔(默认 5 分钟)自动保存当前编辑状态
  • 仅在内容发生变化时才会创建新的自动快照,避免重复记录
  • 自动快照以灰色节点展示在时间线中,可与手动版本一起查看或回滚
  • 自动快照数量上限为 100 个,超出后按 LRU 自动清理旧记录

多标签页

  • 从文件树点击文件或打开新文件时,会自动在标签栏创建新标签
  • 标签栏显示未保存状态(橙点提示)
  • 切换标签时保留每个文件的编辑状态(包括未保存修改和滚动位置),无需确认即可自由切换
  • 支持拖拽标签进行排序,带有流畅的推出动画过渡效果
  • 支持关闭当前标签后自动切换到相邻标签

编辑模式说明

  • WYSIWYG 模式:直接渲染态编辑,所见即所得
  • Source 模式:纯 Markdown 源码编辑,适合高级用户精细调整

项目结构

markdown-editor/
├── main.py                 # 应用入口(启动 Flask 并打开浏览器)
├── requirements.txt        # Python 依赖
├── README.md               # 本文件
├── editor/                 # Python 核心模块
│   ├── __init__.py
│   ├── server.py           # Flask 本地服务(API + 静态文件)
│   └── version_manager.py  # 版本管理引擎(SQLite + Diff)
└── web/                    # 前端资源
    ├── index.html          # 页面框架
    ├── editor.js           # TUI Editor 初始化 + 主题/模式/版本/标签管理逻辑
    └── style.css           # 亮色/暗色两套完整主题样式 + 动画过渡

配置与数据

  • 版本数据库~/.markdown_editor/versions.db(SQLite)
  • 软件设置~/.markdown_editor/settings.json,支持配置自动快照间隔等
  • 主题偏好:保存在浏览器 localStorage
  • 自动快照上限:默认保留最近 100 个自动快照,手动标记版本无上限

近期维护记录

架构重构(重大变更)

  • 移除 PySide6/Qt 依赖:将渲染层从 QWebEngineView 迁移至系统浏览器,消除 Qt Web 内核的性能瓶颈
  • 采用 File System Access API:文件打开、保存、文件夹选择全部由浏览器原生处理,无需后端中转文件 I/O
  • 简化后端 API:移除 action queue、/api/file/switch/api/file/save_disk 等遗留接口,后端仅负责版本管理与设置存储
  • 前端文件树遍历:由后端扫描改为浏览器端递归遍历 FileSystemDirectoryHandle

性能优化

  • 滚动位置缓存:缓存编辑器滚动容器引用,避免每次读写时重复 querySelector
  • 滚动恢复去风暴化:将切换标签后的滚动恢复从 13 次重试降至最多 3 次,并加入提前退出(到位即停)
  • 标签栏增量渲染renderTabs 改为增量更新,仅创建/更新/删除变更的标签,避免全量 innerHTML 重建
  • 拖拽节流:标签拖拽的 dragover 事件加入 40ms 节流,降低 DOM 插入与数组重排频率
  • 文件树高亮轻量更新:标签切换时不再全量重建文件树 DOM,仅更新 .active 高亮类
  • 版本列表懒加载:版本侧边栏折叠时,跳过版本列表的网络请求与 DOM 重建
  • Python 文件扫描优化_scan_md_files 改用 os.scandir,减少冗余 stat 系统调用
  • 保存去阻塞化:保存后的快照请求移至后台线程,避免阻塞 Qt 主线程
  • 关闭事件递归修复closeEvent 中通过 QTimer.singleShot 延迟二次关闭,消除递归调用栈

UI 重构

  • 工具栏内嵌化:移除 Qt 原生工具栏,所有操作按钮(Open / Save / Versions / Theme / Mode 等)全部集成到网页顶部工具栏
  • 模式切换位置调整:Markdown/WYSIWYG 切换从右下角移至右上角工具栏,并隐藏 TUI Editor 原生底部切换条
  • 窗口主题同步:Qt 窗口背景色随网页主题切换同步变化(亮色 #f0f9ff,暗色 #0f172a

开发计划

  • WYSIWYG 渲染态编辑
  • 文件打开/保存/导出(File System Access API)
  • 本地版本管理(手动版本 / 自动快照 / Diff / 回滚 / 流程线时间线 / 侧边栏折叠展开 / 拖拽调整宽度)
  • 暗黑/亮色主题切换
  • 源码/WYSIWYG 模式切换
  • 文件树侧边栏(可拖拽 / 折叠恢复)
  • 多标签页编辑(未保存提示 / 切换无确认 / 状态缓存 / 拖拽排序)
  • 软件设置(自动快照间隔)
  • 动漫风格 UI 全面改版(天蓝/aqua/橙/红/绿霓虹配色 / 渐变按钮 / 发光时间线)
  • 性能优化(滚动恢复 / 增量渲染 / 拖拽节流 / 去阻塞化)
  • 架构重构为纯浏览器模式(移除 PySide6,采用 File System Access API)
  • Agent 内容辅助(续写 / 润色 / 扩写 / 翻译)
  • Agent 修改 Diff 预览与确认
  • 斜杠命令菜单(/ 快速插入块)
  • 打包发布(PyInstaller / 单文件可执行程序)

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors