3.3 KiB
3.3 KiB
文本粘贴功能
功能概述
Opentu 现在支持智能文本粘贴功能,当你从外部复制文本并粘贴到画布时,系统会自动控制文本宽度,避免文本过长。
功能特点
1. 自动换行
- 当文本行超过 50 个字符时,自动换行
- 优先在空格处断行,保持单词完整性
- 如果空格位置不合适,则在最大字符数处强制断行
2. 智能断行
- 在空格处断行时,会检查空格位置是否在合理范围内(70% 以上)
- 避免在行首或行尾留下过短的单词片段
- 自动去除断行后的多余空格
3. 保留原有格式
- 保留原文本中的换行符
- 每个原始行独立处理,不会合并多行
技术实现
核心文件
packages/drawnix/src/plugins/with-text-paste.ts- 文本粘贴插件packages/drawnix/src/plugins/with-common.tsx- 插件注册
配置参数
const TEXT_CONFIG = {
/** 最大字符数(超过则换行) */
MAX_CHARS_PER_LINE: 50,
/** 默认文本框宽度(像素) */
DEFAULT_WIDTH: 400,
/** 最大文本框宽度(像素) */
MAX_WIDTH: 600,
/** 估算字符宽度(像素) */
CHAR_WIDTH: 8,
};
插件链顺序
// 在 with-common.tsx 中
return withTextPastePlugin(withImagePlugin(newBoard));
插件按以下顺序处理粘贴事件:
withTextPastePlugin- 检查是否为纯文本,如果是则处理并返回withImagePlugin- 检查是否为图片,如果是则处理并返回- 默认处理 - 处理其他类型的粘贴(如 Plait 元素)
使用方法
基本使用
- 从任何地方复制文本(浏览器、编辑器、文档等)
- 在 Opentu 画布上按
Ctrl+V(Windows/Linux) 或Cmd+V(Mac) - 文本会自动插入到鼠标位置,并自动换行
示例
输入文本:
This is a very long line of text that exceeds the maximum character limit and should be automatically wrapped to multiple lines.
输出效果:
This is a very long line of text that exceeds
the maximum character limit and should be
automatically wrapped to multiple lines.
注意事项
-
不影响现有功能
- 图片粘贴功能正常工作
- Plait 元素复制粘贴正常工作
- 只处理纯文本粘贴
-
文本宽度限制
- 默认最大 50 字符/行
- 可以通过修改
TEXT_CONFIG.MAX_CHARS_PER_LINE调整
-
中英文混排
- 当前按字符数计算,中文字符和英文字符同等对待
- 中文文本可能需要调整
MAX_CHARS_PER_LINE参数
未来改进方向
-
智能宽度检测
- 根据实际字符宽度(中文 vs 英文)动态调整
- 支持等宽字体和比例字体的不同处理
-
用户配置
- 在设置中允许用户自定义最大字符数
- 支持开启/关闭自动换行功能
-
富文本支持
- 保留粘贴文本的格式(粗体、斜体等)
- 支持 Markdown 格式自动转换
相关文件
packages/drawnix/src/plugins/with-text-paste.ts- 文本粘贴插件实现packages/drawnix/src/plugins/with-common.tsx- 插件注册packages/drawnix/src/plugins/with-image.tsx- 图片粘贴插件(参考实现)packages/drawnix/src/mcp/tools/canvas-insertion.ts- 画布插入工具(文本插入参考)