Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.21)
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" NEXTNOTES_VERSION LIMIT_COUNT 1)
project(NextNotes VERSION ${NEXTNOTES_VERSION} LANGUAGES CXX)
set(NEXTNOTES_RELEASE_DATE "2026-11-09" CACHE STRING "AppStream release date")
set(NEXTNOTES_RELEASE_DATE "2026-11-12" CACHE STRING "AppStream release date")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 6.8 REQUIRED COMPONENTS Core Gui Qml Quick QuickControls2 QuickDialogs2 Svg WebEngineCore WebEngineQuick WebChannel)
Expand All @@ -21,7 +21,7 @@ target_link_libraries(nextnotes-storage PUBLIC Qt6::Core SQLite::SQLite3)
qt_add_executable(nextnotes src/main.cpp src/EditorSession.cpp src/EditorSessionWeb.cpp src/EditorSession.h src/NotesController.cpp src/NotesLibrary.cpp src/EditorExport.cpp src/PdfExport.cpp src/NotesOrganizer.cpp src/NotesKnowledge.cpp src/NotesController.h)
target_sources(nextnotes PRIVATE src/EditorRenderLifecycle.cpp src/EditorRenderLifecycle.h)
qt_add_qml_module(nextnotes URI NextNotes VERSION 1.0 RESOURCE_PREFIX /qt/qml
QML_FILES qml/NotesSelectionBox.qml qml/FolderIcons.js qml/PopupPlacement.js qml/NotesPopover.qml qml/NotesContentPopover.qml qml/NotesSettings.qml qml/LibraryActions.qml qml/NotesWindowControls.qml qml/KnowledgePanel.qml qml/RecycleBin.qml qml/Main.qml qml/NoteNameEditor.qml qml/NotesOrganizer.qml qml/SourceEditor.qml qml/EditorTools.qml qml/CommandRegistry.qml qml/NotesTokens.qml qml/NoteReadingView.qml)
QML_FILES qml/FolderBrowser.qml qml/NotesBrowser.qml qml/NotesSelectionBox.qml qml/FolderIcons.js qml/PopupPlacement.js qml/NotesPopover.qml qml/NotesContentPopover.qml qml/NotesSettings.qml qml/LibraryActions.qml qml/NotesWindowControls.qml qml/KnowledgePanel.qml qml/RecycleBin.qml qml/Main.qml qml/NoteNameEditor.qml qml/NotesOrganizer.qml qml/SourceEditor.qml qml/EditorTools.qml qml/CommandRegistry.qml qml/NotesTokens.qml qml/NoteReadingView.qml)
qt_add_resources(nextnotes window-controls PREFIX /nextnotes/platform BASE qml FILES qml/NativeWindowControls.qml)
qt_add_resources(nextnotes app-icon PREFIX /nextnotes/icons BASE packaging FILES packaging/org.nextks.notes.svg)
file(GLOB_RECURSE EDITOR_ASSETS CONFIGURE_DEPENDS web/editor/dist/* web/editor/vendor/*)
Expand All @@ -33,7 +33,7 @@ if(NEXTNOTES_BUILD_TESTS)
enable_testing()
qt_add_executable(notes-chrome-test tests/chrome/main.cpp)
qt_add_qml_module(notes-chrome-test URI NextNotes.ChromeTests VERSION 1.0 RESOURCE_PREFIX /qt/qml
QML_FILES qml/NotesWindowControls.qml qml/NotesOrganizer.qml qml/FolderIcons.js qml/NotesTokens.qml
QML_FILES qml/NotesWindowControls.qml qml/NotesOrganizer.qml qml/FolderIcons.js qml/NotesTokens.qml qml/FolderBrowser.qml qml/NotesBrowser.qml qml/NotesSettings.qml
qml/NotesPopover.qml qml/NotesContentPopover.qml qml/PopupPlacement.js)
qt_add_resources(notes-chrome-test test-window-controls PREFIX /nextnotes/platform BASE qml FILES qml/NativeWindowControls.qml)
target_compile_definitions(notes-chrome-test PRIVATE QUICK_TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}/tests/chrome")
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@
- GFM 表格:输入完整表头与分隔行后按 Enter、粘贴 Markdown 表格,或输入 `|3x3| ` 建立三列三行表格。顶部“表格与行列操作”提供增删行列、列对齐、删表和退出;表格内 Tab / Shift+Tab 导航,Ctrl+Enter 退出。
- Markdown 及富文本粘贴、统一撤销/重做;格式按钮和快捷键调用同一编辑内核命令。

笔记浏览栏上方“更多”菜单提供列表/画廊切换,各文件夹分别记住视图;子文件夹同步显示为列表或卡片。画廊显示紧凑的标题、摘要和日期卡片,沿用排序、多选、右键及拖放归类。设置入口位于左侧栏底部。设置按通用、笔记管理、数据分组,具体入口见[界面交互说明](docs/notes-interaction-model.md)。

本轮块拖动、上下文菜单、完整斜杠菜单与紧凑查找栏的调整、验证范围和效果图见[编辑器交互复查](docs/editor-interaction-review.md)。

正文工具已补齐:`/` 双语过滤与键盘选择、块拖动/移动/复制/多选、大纲与标题折叠、`[toc]` 实时目录、查找替换与字数统计、图片/附件导入与可恢复清理、图片显示宽度、代码语言/高亮/复制、离线 Mermaid、KaTeX 行内/块公式、脚注、英文拼写检查,以及独立 HTML / PDF 导出与 PDF 打印预览。工具入口为格式栏“正文编辑与导出”;Ctrl+H 打开替换。公式可通过工具菜单或 `/` 插入,双击公式编辑。图片/表格宽度保存在应用偏好中,不扩展 Markdown 语法。折叠仅影响编辑视图,导出会展开全文。附件清理先等待正文保存,再检查磁盘引用,移入专用回收区,可恢复。
正文工具已补齐:`/` 双语过滤与键盘选择、块拖动/移动/复制/多选、大纲与标题折叠、`[toc]` 实时目录、查找替换与字数统计、图片/附件导入与可恢复清理、图片显示宽度、代码语言/高亮/复制、离线 Mermaid、KaTeX 行内/块公式、脚注、英文拼写检查,以及独立 HTML / PDF 导出与 PDF 打印预览。常用格式操作直接位于顶部按钮组,“列表”“表格”“插入”各自独立;唯一“更多”提供文档操作、源码、大纲及图片/代码/附件管理;Ctrl+H 打开替换。公式可通过工具菜单或 `/` 插入,双击公式编辑。图片/表格宽度保存在应用偏好中,不扩展 Markdown 语法。折叠仅影响编辑视图,导出会展开全文。附件清理先等待正文保存,再检查磁盘引用,移入专用回收区,可恢复。

`web/editor/editor.js` 负责上游插件配置与命令适配;`qml/SourceEditor.qml` 通过 WebChannel 传递主题、焦点与工作区位置;`src/EditorSessionWeb.cpp` 缓存已提交 Markdown,并按文档代次和递增序号拒绝过期消息。现有 `EditorSession::execute/link/undo/redo` 和 controller 存储接口保留。切换笔记、切库和关闭前先向编辑区取得最新已提交状态;自动保存回包不重建编辑器或撤销栈。

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.1
0.1.2
16 changes: 10 additions & 6 deletions docs/notes-interaction-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,34 @@

## 日常界面

- 顶部左侧放新建和当前笔记操作,中间用一个公共按钮组统一承载撤销/重做、段落样式、粗体/斜体/删除线、插入、表格和更多编辑工具,右侧放搜索和设置;正文不再单独占用一行格式工具栏。编辑按钮组优先居中,空间不足时避开左右操作并支持横向滚动,键盘聚焦时跟随显示;格式状态并入底部状态栏。
- 顶部左侧放新建,中间公共按钮组提供配套的撤销/重做、段落样式、粗体/斜体/删除线、行内代码,以及独立的引用、代码块、链接和任务清单。列表菜单只放列表与缩进;插入菜单放图片/附件、公式、脚注、目录和分隔线;表格保留全部行列操作。唯一正文“更多”位于按钮组末尾,按钮组支持横向滚动和键盘焦点显露;右侧搜索默认收起为图标按钮,点击或按搜索快捷键后展开输入框;宽窗口不自动展开。顶部液态按钮统一使用中档强度,按钮组竖线高 12px、在主题边框原有透明度上再乘 0.65,正文区域最小宽 720px;缩小窗口时正文不再继续变窄:先收起左侧导航,再收起笔记列表,最后只剩正文单栏,窗口最小宽度即正文最小宽度。侧栏隐藏时(列表+正文或仅正文)不再显示“笔记”标题和“全部/收藏/最近删除”分类按钮,顶部只保留侧栏按钮;列表+正文时点击该按钮展开侧栏并由列表让出位置,再点一次返回列表。拖动浏览栏分隔条同样不会把正文压到该宽度以下,设置放在左侧栏底部,使用普通导航按钮。
- 侧栏分为“视图”和“文件夹”:视图包含全部笔记、收藏、最近删除及已保存的搜索筛选;文件夹包含“随手记”、初始化时添加的“默认文件夹”和用户创建的顶层文件夹;子文件夹放在对应笔记列表上方,通过返回上一级逐层导航。侧栏底部不显示新建文件夹,暂不增加“新建视图”入口;保存搜索仍从设置进入。
- “随手记”和“默认文件夹”都是仅初始化一次的普通文件夹,支持重命名、移动、删除和恢复,之后不自动补回。升级时将原收件箱的正常笔记一次性归入“随手记”,保留笔记 ID 并调整路径链接;有待恢复草稿或无法调整的链接时,整批保留原位并提示。在具体文件夹中新建归入当前文件夹;新建或导入未指定文件夹时显示为“未分类”,可在“全部笔记”中找到,不会隐式重建“随手记”。
- 正文左右各保留 48px 留白,笔记名称与正文左对齐;块操作按钮放在左侧留白内,与正文相隔 8px,并至少离开编辑区边界 12px。
- 正文上方提供独立的“笔记名称”输入框,按 Enter 或“保存名称”提交;新建笔记的名称默认为“未命名笔记”,正文为空。名称保存在 Markdown 元数据的 `title` 字段中,修改名称不改写正文标题,也不将名称列入正文大纲。正文标题仍通过格式工具或 Markdown 设置。
- 笔记菜单包含置顶、收藏、移动、修改笔记名称、笔记信息、分享与导出、创建副本和最近删除。分享与导出以二级菜单提供当前笔记的 PDF、Markdown、HTML 和打印。自动保存不再占用普通笔记菜单的首位。
- 唯一“更多”合并当前笔记和编辑工具:改名、信息、分享与导出、源码/正文切换、大纲、图片属性、代码语言与复制、附件管理。置顶、收藏、移动、副本和删除保留在列表/画廊右键菜单。分享与导出仍提供 PDF、Markdown、HTML 和打印;外部文件额外显示保存与导入。
- 列表右键菜单沿用邮件列表的定位:在鼠标点击位置弹出无箭头 LiquidPopover,只在接近窗口边缘时收进可见区域。笔记、子文件夹及最近删除列表使用同一规则;键盘打开笔记行菜单时以当前行中点作为位置,工具栏按钮仍就近弹出。
- 全部菜单与浮动表单采用统一触发规则:右键无箭头,按钮下方居中并指向按钮,后续菜单继承最初入口;空间不足时向上调整。完整范围和检查边界见 [菜单与浮动表单](popover-interactions.md)。
- 标签、关联和历史是当前笔记的信息,保留在“笔记信息”;模板管理从这套标签页中移出。
- 正文插入/表格/图片/公式等操作保留在编辑现场。编辑工具菜单不再夹杂整库管理和应用设置;当前笔记的输出在笔记菜单,不混入全局设置。
- 文件夹标题显示分类名称,不将完整分类路径当作页面标题。选择移动/导入目标时仍保留层级以区分同名分类。
- 空笔记空间提供次级“导入已有笔记”引导;普通使用时导入从设置进入。启动文案不再叫“打开我的笔记”。

## 列表与画廊

浏览栏上方的“更多”菜单提供“列表视图”和“画廊视图”,显示当前选项。全部笔记和各个文件夹分别记住偏好;文件夹中的子文件夹同步以列表或卡片呈现,保持键盘导航、多选、右键与拖放。列表保留时间分组;画廊为紧凑文字卡片,显示标题、最多两行摘要、一行日期及置顶/收藏状态。卡片高度 104px,行列间距 12px,默认浏览栏宽 448px,至少保持两列。两种视图共用笔记模型、排序、多选、右键和拖放归类,切换保留游标与选择。画廊宽度独立保存,回收站仍用列表。方向键移动游标,画廊上下键跨行,Enter 打开。

## 设置

设置位于顶部,快捷键 Ctrl+,;采用公共 LiquidDialog、LiquidSegmentedControl、SettingsGroup、SettingsItem 和既有控件,无独立自绘弹窗背景。
设置位于左侧栏底部,使用普通导航按钮,快捷键 Ctrl+,;采用公共 LiquidDialog、LiquidSegmentedControl、SettingsGroup、SettingsItem 和既有控件,无独立自绘弹窗背景。

| 分区 | 内容 |
| --- | --- |
| 通用 | 阅读主题、正文字号、减少透明/动画、自动保存说明、快捷键 |
| 数据 | 笔记导入、整夹收集、导入记录、旧笔记迁移;全部笔记导出;完整备份恢复 |
| 高级 | 模板、视图、批量标签重命名、恢复草稿;临时编辑外部 Markdown、当前笔记源码 |
| 笔记管理 | 模板、保存搜索为智能视图、批量标签重命名、恢复草稿 |
| 数据 | 笔记导入、整夹收集、导入记录、旧笔记迁移;全部笔记导出;完整备份恢复;临时编辑外部 Markdown |

选择一项管理操作后先退出设置,再打开相应表单;不在设置上层连续堆叠操作窗口。设置正文可滚动,底部完成按钮固定,键盘聚焦到下方控件时跟随滚动。
三个页签保持相同高度,按窗口可用空间缩小。选择管理操作后等待设置关闭动画完成,再打开相应表单;不在设置上层连续堆叠操作窗口。设置正文可滚动,底部完成按钮固定,键盘聚焦到下方控件时跟随滚动。

保留 Ctrl+O 的外部 Markdown 快捷操作;新增 Ctrl+Shift+I 导入。外部文件不加入聚合,只在明确导入后纳管;其身份和保存动作仅在实际打开外部文件时出现。

Expand Down
Loading
Loading