Files
mnote/design/11-wolai/pages/basic-editing-skills.md
T

93 lines
4.1 KiB
Markdown
Raw Normal View History

2026-05-19 08:11:58 +08:00
# 基本编辑能力
> 来源:https://www.wolai.com/wolai/qN1Bh9YjLAXs8bxCJoAJ6C
> 用途:mnote 编辑器基础交互行为参考
>
> 实现状态:**大部分已实现** ✅ 11/18 🔧 3/18 ❌ 4/18
## 实现对照
## 核心概念
wolai 的编辑能力基于**块编辑器(Block Editor)**模式而非传统的富文本编辑器。
一段文本、一个列表项、一个图片、一个文件等,都被称为"块"。不同的块承担不同的角色,组合在一起组成一篇文章或一个主页。
## 功能清单
### 块操作
| 操作 | 说明 |
|------|------|
| **拖动块** | 所有块可通过左侧 `::` 图标拖动,拖动时出现辅助线指示位置。拖到另一个块的左/右侧可形成分栏结构 |
| **选中块** | 光标输入状态按 `Esc` 选中当前块;上下方向键切换选中块;`Shift+上下` 多选块 |
| **块选中后 Enter** | 回到光标编辑状态 |
| **块选中后 Ctrl+A** | 第一次选中当前块全部文本,第二次选中所有块 |
| **在上方/下方插入块** | 鼠标悬停 `::` 上方/下方点击 `+`;或 Esc 选中块后按 `a`(上方)/ `b`(下方)|
| **块布局显示** | `Ctrl+Shift+U` 显示/隐藏所有块的虚线框布局 |
### 分栏
将一个块拖到另一个块的左边或右边,拖拽辅助线从横线变竖线时放开,即可实现分栏。分栏的块可继续拖动调整位置关系。
### 块转换
所有文本类块可互相转换:文本↔标题、待办列表↔数字列表、引述文字↔代码片段。文本类块转换为页面时,缩进结构变为页面内容。
三种转换方式:
1. **块菜单**:点击 `::` → 转换为 → 选择类型
2. **快捷键**:平台特定快捷键
3. **快捷命令菜单**:按 `/` → 选择"转换为xxx",或输入 `/zh + 块名拼音首字母`(如 `/zhlb` 转换为列表)
### 复制/粘贴
- `Ctrl+C / Ctrl+V` 标准复制粘贴
- `Ctrl+Shift+V` 粘贴并匹配样式
### 缩进/取消缩进
- `Tab` 缩进(成为上一个块的子元素)
- `Shift+Tab` 取消缩进
### 文本样式
选中文字后出现文本样式工具条,支持:粗体、斜体、下划线、删除线、行内代码、行内数学公式、文字颜色/背景颜色。
### 超链接
- `Ctrl+K` 创建超链接
- 选中文字后直接粘贴 URL 可快速创建超链接
### 在页面中添加更多块
- 键入 `/` 唤起快捷命令菜单选择块类型
- 点击空行前面的 `+` 图标选择创建块类型
---
## mnote 实现状态
### ✅ 已实现
| 功能 | 证据 |
|------|------|
| 块概念(Block Editor 模式) | `EditorBlockType` 枚举定义 14 种块类型(`core-protocol/src/editor/model.rs:7`|
| 文本输入/换行/方向键 | leptos-tiptap island`rust/spikes/leptos-tiptap-spike/src/lib.rs`|
| 拖动块(`::` 手柄) | `HANDLE_SHELL_SELECTOR` 常量,拖拽事件处理(`lib.rs:45-47`|
| 选中块(Esc / 方向键 / Shift 多选) | `TiptapSelectionState` 选择状态管理 |
| 上方/下方插入块(a / b 快捷键) | 块手柄菜单中的插入操作 |
| 块转换(文本↔标题↔列表等) | `EditorCommand` 中的 `ReplaceBlock` 命令(`editor/command.rs:22-26`|
| 复制/粘贴(含匹配样式) | `write_mnote_text_to_clipboard` 剪贴板操作 |
| 缩进/取消缩进(Tab/Shift+Tab | Tiptap 原生 `indent`/`outdent` |
| 文本样式工具条(粗体/斜体/下划线/删除线/行内代码) | `TextMark::{Bold, Italic, Underline, Strike, Code}``editor/model.rs:33-39`|
| 超链接(Ctrl+K | `TiptapLinkResource` + `TiptapMarkName::Link` |
| 行内数学公式 | `TiptapExtension` 中包含数学公式扩展 |
| 选中文字颜色/背景色 | `TiptapColorAttributes` / `TiptapHighlightAttributes` |
### ❌ / 🔧 未实现/待完善
| 功能 | 状态 | 说明 |
|------|------|------|
| 分栏 | ❌ | `columnsLayout` Tiptap 扩展未注册 |
| 块布局显示(Ctrl+Shift+U| ❌ | 无对应功能 |
| 选中文字→页面引用 | 🔧 | `PageReference` 类型存在但快捷创建交互未实现 |
| 脚注与注释 | ❌ | 无脚注/注释 Tiptap 扩展 |