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-语法高亮语言
fgstring 或 RGBA-内部代码面板的基础前景色
syntaxStyleSyntaxStyle-代码的语法样式
wrapMode"word"、"char" 或 "none"-代码换行模式
concealbooleanfalse高亮时隐藏标记内容
selectionBgstring 或 RGBA-代码面板中的选区背景色
selectionFgstring 或 RGBA-代码面板中的选区前景色
treeSitterClientTreeSitterClient-自定义 Tree-sitter 客户端
showLineNumbersbooleantrue显示行号
lineNumberFgstring 或 RGBA#888888行号文字颜色
lineNumberBgstring 或 RGBAtransparent行号背景色
addedLineNumberBgstring 或 RGBAtransparent新增行的行号背景色
removedLineNumberBgstring 或 RGBAtransparent删除行的行号背景色
addedBgstring 或 RGBA#1a4d1a新增行的背景色
removedBgstring 或 RGBA#4d1a1a删除行的背景色
contextBgstring 或 RGBAtransparent上下文行的背景色
addedContentBgstring 或 RGBA-可选的内容背景色(新增)
removedContentBgstring 或 RGBA-可选的内容背景色(删除)
contextContentBgstring 或 RGBA-可选的内容背景色(上下文)
addedSignColorstring 或 RGBA#22c55e新增行的标记颜色
removedSignColorstring 或 RGBA#ef4444删除行的标记颜色