MujicaUI

Agent · #270

FileChangeCard 浅色主题渲染快照
浅色 · 渲染快照
FileChangeCard 深色主题渲染快照
深色 · 渲染快照

270 FileChangeCard 文件变更卡片

用途

预览一个文件的变更:增删行数、首处修改附近的差异行,提供接受、拒绝和打开完整差异的入口。

最小示例

decision := agent.FilePending
change := agent.FileChange{Path: "ledger.md", Old: "Guests: 40\n", New: "Guests: 42\n"}
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	if agent.FileChangeCard(c, &decision, change, agent.FileChangeCardOptions{}).OpenDiff {
		fmt.Println("open the full diff")
	}
}
ui.Render(view, 400, 300, 1)

签名:func FileChangeCard(c *ui.Context, decision *FileDecision, change FileChange, opts FileChangeCardOptions) FileChangeResult。decision 为 nil、Path 为空或 Preview 为负时 panic。

参数

字段类型默认值含义
Previewint8从首处修改前两行起显示的差异行数。
Disabledboolfalse禁止决定与打开差异。

状态

  • FileChange 字段:Path、Old、New;Old 为空表示新文件,New 为空表示删除。
  • 差异由 internal.LineDiff(Myers 行差异)计算,文本不变时只算一次。
  • 新增行带“+”、删除行带“−”和行号,颜色只是辅助。
  • 决定状态 FilePending、FileAccepted、FileRejected 以图标和文字显示;已决定后显示“撤销”。

事件

  • Decided:*decision 被用户改变。
  • OpenDiff:请求调用方打开完整差异。

键盘操作

  • Tab 依次到“打开差异”“拒绝”“接受”(或“撤销”),Enter / Space 触发。

限制

  • 只做行级差异;词级高亮由 Git 组扩展。