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

在统一视图中,滚动同步不会产生任何效果。

属性

属性类型默认值说明
diffstring""统一差异格式字符串
view"unified""split""unified"布局样式
syncScrollbooleanfalse在分屏视图中链接垂直滚动
filetypestring-语法高亮语言
fgstringRGBA-内部代码面板的基础前景色
syntaxStyleSyntaxStyle-代码的语法样式
wrapMode"word""char""none"-代码换行模式
concealbooleanfalse高亮时隐藏标记内容
selectionBgstringRGBA-代码面板中的选区背景色
selectionFgstringRGBA-代码面板中的选区前景色
treeSitterClientTreeSitterClient-自定义 Tree-sitter 客户端
showLineNumbersbooleantrue显示行号
lineNumberFgstringRGBA#888888行号文字颜色
lineNumberBgstringRGBAtransparent行号背景色
addedLineNumberBgstringRGBAtransparent新增行的行号背景色
removedLineNumberBgstringRGBAtransparent删除行的行号背景色
addedBgstringRGBA#1a4d1a新增行的背景色
removedBgstringRGBA#4d1a1a删除行的背景色
contextBgstringRGBAtransparent上下文行的背景色
addedContentBgstringRGBA-可选的内容背景色(新增)
removedContentBgstringRGBA-可选的内容背景色(删除)
contextContentBgstringRGBA-可选的内容背景色(上下文)
addedSignColorstringRGBA#22c55e新增行的标记颜色
removedSignColorstringRGBA#ef4444删除行的标记颜色