Diff
渲染统一或分屏的差异对比,支持语法高亮和可选的行号显示。
基本用法
Renderable API
import { DiffRenderable, SyntaxStyle, RGBA, createCliRenderer } from "@opentui/core"
const renderer = await createCliRenderer()
const syntaxStyle = SyntaxStyle.fromStyles({
default: { fg: RGBA.fromHex("#E6EDF3") },
string: { fg: RGBA.fromHex("#A5D6FF") },
keyword: { fg: RGBA.fromHex("#FF7B72"), bold: true },
})
const diff = new DiffRenderable(renderer, {
id: "diff",
width: "100%",
height: 16,
diff: `diff --git a/app.ts b/app.ts\nindex 1111111..2222222 100644\n--- a/app.ts\n+++ b/app.ts\n@@ -1,3 +1,3 @@\n-const a = 1\n+const a = 2\n`,
view: "split",
filetype: "typescript",
syntaxStyle,
showLineNumbers: true,
})
renderer.root.add(diff)
Construct API
暂未提供。目前请使用
DiffRenderable。
分屏视图滚动同步
当启用 view: "split" 时,可以链接两个面板的垂直滚动。滚动一个面板会同步移动另一个:
const diff = new DiffRenderable(renderer, {
id: "diff",
view: "split",
syncScroll: true,
diff: patch,
syntaxStyle,
})
// Toggle at runtime
diff.syncScroll = false
在统一视图中,滚动同步不会产生任何效果。
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
diff | string | "" | 统一差异格式字符串 |
view | "unified" 或 "split" | "unified" | 布局样式 |
syncScroll | boolean | false | 在分屏视图中链接垂直滚动 |
filetype | string | - | 语法高亮语言 |
fg | string 或 RGBA | - | 内部代码面板的基础前景色 |
syntaxStyle | SyntaxStyle | - | 代码的语法样式 |
wrapMode | "word"、"char" 或 "none" | - | 代码换行模式 |
conceal | boolean | false | 高亮时隐藏标记内容 |
selectionBg | string 或 RGBA | - | 代码面板中的选区背景色 |
selectionFg | string 或 RGBA | - | 代码面板中的选区前景色 |
treeSitterClient | TreeSitterClient | - | 自定义 Tree-sitter 客户端 |
showLineNumbers | boolean | true | 显示行号 |
lineNumberFg | string 或 RGBA | #888888 | 行号文字颜色 |
lineNumberBg | string 或 RGBA | transparent | 行号背景色 |
addedLineNumberBg | string 或 RGBA | transparent | 新增行的行号背景色 |
removedLineNumberBg | string 或 RGBA | transparent | 删除行的行号背景色 |
addedBg | string 或 RGBA | #1a4d1a | 新增行的背景色 |
removedBg | string 或 RGBA | #4d1a1a | 删除行的背景色 |
contextBg | string 或 RGBA | transparent | 上下文行的背景色 |
addedContentBg | string 或 RGBA | - | 可选的内容背景色(新增) |
removedContentBg | string 或 RGBA | - | 可选的内容背景色(删除) |
contextContentBg | string 或 RGBA | - | 可选的内容背景色(上下文) |
addedSignColor | string 或 RGBA | #22c55e | 新增行的标记颜色 |
removedSignColor | string 或 RGBA | #ef4444 | 删除行的标记颜色 |