# 基本编辑能力

> 来源：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 扩展 |
