Git: components 301-320
This commit is contained in:
121 files changed
+7031
-2
No files matched your search
@@ -0,0 +1,52 @@
|
||||
# 301 DiffViewer 差异查看器
|
||||
|
||||
## 用途
|
||||
|
||||
按行比较两段文本,统一或并排显示:行号、增删高亮、折叠较长的未变更区;大文件只构建可见行。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.DiffViewerState
|
||||
from := "func main() {\n\tprintln(\"hi\")\n}\n"
|
||||
to := "func main() {\n\tprintln(\"hello\")\n}\n"
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.DiffViewer(c, &state, from, to, mujica.DiffViewerOptions{Language: "go", SideBySide: true}).Height(240)
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func DiffViewer(c *ui.Context, s *DiffViewerState, from, to string, opts DiffViewerOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`DiffViewerOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| SideBySide | bool | false | 并排两栏;否则统一一栏。 |
|
||||
| Context | int | 0(即 3) | 变更前后保留的未变更行数;为负 panic。 |
|
||||
| Language | string | "" | 语法高亮语言,如 go;空为纯文本。 |
|
||||
|
||||
`DiffViewerState` 由调用方持有,保存差异、已展开的折叠与滚动位置。差异只在 from 或 to 改变时重新计算(Myers 行差异)。给返回元素一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 删除行:Danger 浅色底与 − 号;新增行:Success 浅色底与 + 号;不只靠颜色。
|
||||
- 统一视图显示新旧两列行号;并排视图每侧一列,缺行的一侧为空底。
|
||||
- 超过 2×Context 的未变更区折叠为“N 行未更改”按钮,点击展开,悬停 120 ms 过渡。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无;展开折叠保存在状态中。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 列表可获得焦点并滚动;折叠按钮用 Tab 到达,Enter 或 Space 展开。
|
||||
|
||||
## 限制
|
||||
|
||||
- 只做行级差异;词级差异见 InlineDiff。
|
||||
- 长行不换行,超出部分裁剪。
|
||||
- 文本换成新字符串后折叠全部重置。
|
||||
@@ -0,0 +1,44 @@
|
||||
# 302 InlineDiff 行内差异
|
||||
|
||||
## 用途
|
||||
|
||||
并列显示一行的旧版与新版,标出词级的删除与新增。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.InlineDiff(c, "The court meets at noon", "The court meets at dusk", mujica.InlineDiffOptions{})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func InlineDiff(c *ui.Context, from, to string, opts InlineDiffOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`InlineDiffOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Mono | bool | false | 使用等宽字体,适合代码。 |
|
||||
|
||||
词按字母数字、空白与单个标点切分;差异只在 from 或 to 改变时重新计算。
|
||||
|
||||
## 状态
|
||||
|
||||
- 旧行以 − 开头,删除的词带浅色底与删除线;新行以 + 开头,新增的词带浅色底与下划线。
|
||||
- 两行分别以“原文”“新文”加全文朗读。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无:纯展示。
|
||||
|
||||
## 限制
|
||||
|
||||
- 只比较一行;多行请用 DiffViewer。
|
||||
@@ -0,0 +1,53 @@
|
||||
# 303 ThreeWayMerge 三方合并
|
||||
|
||||
## 用途
|
||||
|
||||
以本地、基准、远端三栏和结果栏显示三方合并,逐块采纳本地、远端、两者或基准。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ThreeWayMergeState
|
||||
base, local, remote := "a\nb\nc", "a\nB1\nc", "a\nB2\nc"
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.ThreeWayMerge(c, &state, base, local, remote, mujica.ThreeWayMergeOptions{})
|
||||
r.Element.Height(280)
|
||||
if done, total := state.Resolved(); r.Changed() && done == total {
|
||||
_ = state.Result() // write the merged file
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func ThreeWayMerge(c *ui.Context, s *ThreeWayMergeState, base, ours, theirs string, opts ThreeWayMergeOptions) ChoiceResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`ThreeWayMergeOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Disabled | bool | false | 禁用采纳。 |
|
||||
|
||||
`ThreeWayMergeState.Result()` 返回合并文本,未解决的冲突保留冲突标记;`Resolved()` 返回已解决与总冲突数。分块只在三段文本改变时计算。给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 只有一侧修改或两侧相同修改的块自动合并,来源一侧以浅色底标出。
|
||||
- 冲突块在结果栏显示 Danger 色“未解决”与警示图标。
|
||||
- 已采纳的按钮为 Selection 底、AccentText 边框与对勾。
|
||||
- 较长的未变更块只显示首尾各两行。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()`:某个冲突的选择改变。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 列表可获得焦点并滚动;采纳按钮用 Tab 到达,Enter 或 Space 选择。
|
||||
|
||||
## 限制
|
||||
|
||||
- 按行合并,不做词级合并。
|
||||
- 相邻(中间没有未变更行)的两侧修改视为冲突。
|
||||
@@ -0,0 +1,51 @@
|
||||
# 304 ConflictResolver 冲突解决
|
||||
|
||||
## 用途
|
||||
|
||||
读取带 git 冲突标记的文本,列出冲突块,逐块采纳当前、传入或两者,并显示已解决计数。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ConflictResolverState
|
||||
text := "a\n<<<<<<< HEAD\nmine\n=======\ntheirs\n>>>>>>> feature\nb"
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
if mujica.ConflictResolver(c, &state, text, mujica.ConflictResolverOptions{}).Changed() {
|
||||
_ = state.Result() // save the file once every block is resolved
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func ConflictResolver(c *ui.Context, s *ConflictResolverState, text string, opts ConflictResolverOptions) ChoiceResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`ConflictResolverOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Disabled | bool | false | 禁用采纳。 |
|
||||
|
||||
`ConflictResolverState.Result()` 返回替换后的文本,未解决的块保留原标记;`Resolved()` 返回已解决与总数。只在文本改变时重新解析。
|
||||
|
||||
## 状态
|
||||
|
||||
- 顶部显示“已解决 n / m 个冲突”与 Success 色进度条。
|
||||
- 未解决块标题为警示图标与“未解决”,已解决为对勾与“已解决”。
|
||||
- 被采纳的一侧显示浅色底与对勾,按钮带对勾;已解决块提供“撤销”。
|
||||
- 标记未闭合时显示 Danger 色提示与起始行号,不列出冲突。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()`:某块的选择改变。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 依次经过各块按钮,Enter 或 Space 采纳。
|
||||
|
||||
## 限制
|
||||
|
||||
- 支持 diff3 样式的 ||||||| 基准段,但不显示它。
|
||||
- 冲突块不虚拟化;适合单个文件的冲突数量。
|
||||
@@ -0,0 +1,66 @@
|
||||
# 305 ChangesList 更改列表
|
||||
|
||||
## 用途
|
||||
|
||||
把工作区更改分为“已暂存”与“更改”两组,逐文件或整组暂存、取消暂存,并选择文件查看差异。只构建可见行。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ChangesListState
|
||||
files := []mujica.ChangedFile{
|
||||
{Path: "main.go", Status: mujica.GitModified, Staged: true},
|
||||
{Path: "notes.txt", Status: mujica.GitUntracked},
|
||||
}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.ChangesList(c, &state, files, mujica.ChangesListOptions{})
|
||||
r.Element.Height(240)
|
||||
if action, path, ok := r.Action(); ok {
|
||||
_, _ = action, path // run git add or git restore --staged
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func ChangesList(c *ui.Context, s *ChangesListState, files []ChangedFile, opts ChangesListOptions) GitListResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`ChangedFile`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Path | string | 必填 | 文件路径;为空时 panic。 |
|
||||
| Status | GitStatus | GitModified | 状态,见 GitStatusBadge;未知值 panic。 |
|
||||
| Staged | bool | false | 放入已暂存组。 |
|
||||
|
||||
`ChangesListOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Disabled | bool | false | 禁用:不暂存、不改变选择。 |
|
||||
|
||||
`ChangesListState` 由调用方持有,`Selected()` 返回所选文件在 `files` 中的下标,无则 -1。`files` 换成新切片或长度变化时重新分组,分组不在每帧计算。给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 组标题为衬线小字与计数,空组的整组按钮禁用。
|
||||
- 每行显示 GitStatusBadge(字母、边框与颜色)、文件名与目录。
|
||||
- 选中行:Selection 背景加左侧 AccentText 竖线。
|
||||
- 悬停与按下:图标按钮 SurfaceHover / Selection 背景。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Action()` 返回 `"stage"`、`"unstage"`(附路径)或 `"stage_all"`、`"unstage_all"`。
|
||||
- `Changed()` 选择变化;`Submitted()` 双击或 Enter。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 进入列表;↑/↓、Home/End 移动选择,跳过组标题;输入文件名开头字母跳转;Enter 提交。
|
||||
- 行内暂存按钮可用 Tab 到达,Enter 或 Space 执行。
|
||||
|
||||
## 限制
|
||||
|
||||
- 不读取仓库:文件列表与暂存操作都由调用方完成。
|
||||
- 重命名的旧路径不单独显示。
|
||||
@@ -0,0 +1,62 @@
|
||||
# 306 CommitInput 提交输入
|
||||
|
||||
## 用途
|
||||
|
||||
编辑提交标题与正文,标题长度提示,提交与修订(amend),并防止重复提交。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
msg := mujica.CommitMessage{}
|
||||
busy := false
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.CommitInput(c, &msg, mujica.CommitInputOptions{Busy: busy})
|
||||
if r.Committed() || r.Amended() {
|
||||
busy = true // run git commit, then clear busy
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func CommitInput(c *ui.Context, m *CommitMessage, opts CommitInputOptions) CommitInputResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`CommitMessage`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Title | string | "" | 提交标题;为空时提交与修订禁用。 |
|
||||
| Body | string | "" | 提交正文。 |
|
||||
|
||||
`CommitInputOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| TitleLimit | int | 0(即 50) | 建议的标题长度;为负 panic。 |
|
||||
| Busy | bool | false | 提交进行中:提交按钮显示加载,输入只读。 |
|
||||
| Disabled | bool | false | 整体禁用。 |
|
||||
|
||||
返回 `CommitInputResult`,含 `Element`。
|
||||
|
||||
## 状态
|
||||
|
||||
- 标题右侧显示“已用/上限”,超出时变为 Warning 色并朗读超出字数。
|
||||
- 提交后进入待定状态:按钮与输入锁定,直到调用方把 Busy 设为 true 再恢复 false。
|
||||
- Busy 时提交按钮保留尺寸并显示加载。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Committed()`:点击提交、标题内 Enter 或正文内 Cmd+Enter。
|
||||
- `Amended()`:点击修订。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 依次经过标题、正文、修订、提交。
|
||||
- 标题中 Enter、正文中 Cmd+Enter(非 macOS 为 Ctrl+Enter)提交。
|
||||
|
||||
## 限制
|
||||
|
||||
- 防重入依赖调用方在提交期间设置 Busy;从未设置 Busy 时组件保持锁定。
|
||||
- 不做提交信息格式校验。
|
||||
@@ -0,0 +1,67 @@
|
||||
# 307 CommitGraph 提交图谱
|
||||
|
||||
## 用途
|
||||
|
||||
按从新到旧的顺序显示提交,左侧绘制泳道、分支与合并线;只构建可见行,可承载十万级提交。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.CommitGraphState
|
||||
commits := []mujica.Commit{
|
||||
{Hash: "c3", Parents: []string{"c2", "b1"}, Subject: "Merge branch", Refs: []string{"main"}},
|
||||
{Hash: "b1", Parents: []string{"c1"}, Subject: "Feature"},
|
||||
{Hash: "c2", Parents: []string{"c1"}, Subject: "Fix"},
|
||||
{Hash: "c1", Subject: "Initial commit"},
|
||||
}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.CommitGraph(c, &state, commits, mujica.CommitGraphOptions{}).Element.Height(240)
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func CommitGraph(c *ui.Context, s *CommitGraphState, commits []Commit, opts CommitGraphOptions) GitListResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`Commit`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Hash | string | 必填 | 提交哈希;为空时 panic。 |
|
||||
| Parents | []string | nil | 父提交;两个以上为合并提交。 |
|
||||
| Author | string | "" | 作者。 |
|
||||
| When | time.Time | 零值 | 提交时间。 |
|
||||
| Subject | string | "" | 提交标题。 |
|
||||
| Refs | []string | nil | 指向该提交的分支与标签。 |
|
||||
|
||||
`CommitGraphOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| TimeFormat | string | "2006-01-02 15:04" | 时间格式。 |
|
||||
| MaxLanes | int | 0(即 8) | 图谱最多显示的泳道数,超出部分裁剪;为负 panic。 |
|
||||
| Status | DataStatus | DataReady | 加载、追加、失败状态。 |
|
||||
| Error | string | "" | 失败说明。 |
|
||||
|
||||
`CommitGraphState.List` 保存选择(`Selected()` 返回哈希)。泳道布局在提交切片或长度变化时计算一次,不在每帧计算。提交须按子提交在前的拓扑顺序给出。给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 普通提交为实心圆点,合并提交为空心菱形,形状区分而不只靠颜色。
|
||||
- 泳道颜色取自 AccentText、Info、Success、Warning、Danger、TextMuted,按位置区分。
|
||||
- 选中行:Selection 背景与对勾。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()` 选择变化;`Submitted()` 双击或 Enter 打开提交。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 进入列表;↑/↓、Home/End 移动选择;输入标题开头字母跳转;Enter 打开。
|
||||
|
||||
## 限制
|
||||
|
||||
- 原地修改提交切片而不改变其地址与长度时,布局不会重算;请传入新切片。
|
||||
- 泳道数超过 MaxLanes 时,右侧泳道被裁剪。
|
||||
@@ -0,0 +1,53 @@
|
||||
# 308 CommitList 提交列表
|
||||
|
||||
## 用途
|
||||
|
||||
显示提交列表:标题、引用、作者、短哈希与时间,选择后查看。只构建可见行。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ListState[string]
|
||||
commits := []mujica.Commit{{Hash: "a1b2c3d4", Author: "Sakiko", When: time.Now(), Subject: "Add the commit list"}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.CommitList(c, &state, commits, mujica.CommitListOptions{})
|
||||
r.Element.Height(240)
|
||||
if hash, ok := state.Selected(); ok && r.Submitted() {
|
||||
_ = hash // show the commit
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func CommitList(c *ui.Context, s *ListState[string], commits []Commit, opts CommitListOptions) GitListResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`CommitListOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| TimeFormat | string | "2006-01-02 15:04" | 时间格式。 |
|
||||
| Status | DataStatus | DataReady | 加载、追加、失败状态。 |
|
||||
| Error | string | "" | 失败说明。 |
|
||||
|
||||
`Commit` 见 CommitGraph。选择保存在 `ListState`,以哈希为键。给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 引用以 AccentText 描边小标签显示;短哈希为等宽 AccentText。
|
||||
- 空列表显示“没有提交”;加载与失败使用列表的统一占位。
|
||||
- 选中行:Selection 背景与对勾。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()` 选择变化;`Submitted()` 双击或 Enter。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 进入列表;↑/↓、Home/End 移动选择;输入标题开头字母跳转;Enter 打开。
|
||||
|
||||
## 限制
|
||||
|
||||
- 时间按调用方给定格式显示,不做相对时间。
|
||||
@@ -0,0 +1,64 @@
|
||||
# 309 BranchSelector 分支选择器
|
||||
|
||||
## 用途
|
||||
|
||||
按钮显示当前分支,点击弹出可搜索的本地与远端分支列表;可选“新建分支”入口。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
branch := "main"
|
||||
branches := []mujica.Branch{{Name: "main", Current: true}, {Name: "origin/main", Remote: true}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.BranchSelector(c, &branch, branches, mujica.BranchSelectorOptions{AllowCreate: true})
|
||||
if name, ok := r.Created(); ok {
|
||||
_ = name // run git switch -c name
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func BranchSelector(c *ui.Context, selected *string, branches []Branch, opts BranchSelectorOptions) BranchSelectorResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`Branch`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Name | string | 必填 | 唯一名称,远端分支带远端名,如 origin/main;为空时 panic。 |
|
||||
| Remote | bool | false | 归入远端组。 |
|
||||
| Current | bool | false | 当前检出的分支。 |
|
||||
| Upstream | string | "" | 上游分支。 |
|
||||
| Ahead, Behind | int | 0 | 领先、落后的提交数;为负 panic。 |
|
||||
|
||||
`BranchSelectorOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| AllowCreate | bool | false | 搜索词不是已有分支名时,列表末尾提供“新建分支”。 |
|
||||
| Disabled | bool | false | 禁用;打开中的弹层会关闭。 |
|
||||
|
||||
返回 `BranchSelectorResult`,含 `Element`。过滤结果在搜索词或分支切片变化时才重新计算。
|
||||
|
||||
## 状态
|
||||
|
||||
- 弹层使用统一浮层外观,160 ms 淡入,尺寸限制在窗口内,内容滚动。
|
||||
- 本地、远端分组标题为衬线小字;当前分支加粗并带对勾。
|
||||
- 高亮项:Selection 背景,键盘移动时滚入视野。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()`:选择了另一个分支,`*selected` 已更新。
|
||||
- `Created()`:用户要求新建的分支名(已去除首尾空白)。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Enter 或 Space 打开;焦点进入搜索框。
|
||||
- ↑/↓ 移动高亮并循环,Enter 选择,Escape 关闭并把焦点还给按钮。
|
||||
|
||||
## 限制
|
||||
|
||||
- 不执行 git:选择与新建都由调用方处理。
|
||||
- 搜索为大小写不敏感的子串匹配。
|
||||
@@ -0,0 +1,62 @@
|
||||
# 310 BranchList 分支列表
|
||||
|
||||
## 用途
|
||||
|
||||
分支列表:标出当前分支,显示上游与领先、落后数,每行提供调用方定义的操作按钮。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ListState[string]
|
||||
branches := []mujica.Branch{{Name: "main", Current: true, Upstream: "origin/main", Ahead: 2}}
|
||||
actions := []mujica.GitAction{{ID: "delete", Label: "Delete", Icon: "trash-2"}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.BranchList(c, &state, branches, mujica.BranchListOptions{Actions: actions})
|
||||
r.Element.Height(200)
|
||||
if action, name, ok := r.Action(); ok {
|
||||
_, _ = action, name // run the action on the branch
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func BranchList(c *ui.Context, s *ListState[string], branches []Branch, opts BranchListOptions) GitListResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`BranchListOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Actions | []GitAction | nil | 每行的图标操作;ID、Label、Icon 必填且 ID 唯一,否则 panic。 |
|
||||
| Status | DataStatus | DataReady | 加载、追加、失败状态。 |
|
||||
| Error | string | "" | 失败说明。 |
|
||||
|
||||
`GitAction`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| ID | string | 必填 | `Action()` 返回的标识。 |
|
||||
| Label | string | 必填 | 按钮名称与提示。 |
|
||||
| Icon | string | 必填 | icons/ 中的图标名。 |
|
||||
|
||||
`Branch` 见 BranchSelector。选择以分支名为键。给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 当前分支:对勾、加粗与“当前”文字。
|
||||
- 领先 ↑n、落后 ↓n 以箭头与数字显示,朗读完整说明。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Action()` 返回操作 ID 与分支名。
|
||||
- `Changed()`、`Submitted()` 同 CommitList。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- ↑/↓、Home/End 移动选择;行内操作按钮用 Tab 到达,Enter 或 Space 执行。
|
||||
|
||||
## 限制
|
||||
|
||||
- 操作由调用方执行;组件不确认危险操作,需要时在回调里使用 Popconfirm 等组件。
|
||||
@@ -0,0 +1,59 @@
|
||||
# 311 TagList 标签列表
|
||||
|
||||
## 用途
|
||||
|
||||
标签列表:名称、注释与目标提交,每行可跳转到提交。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ListState[string]
|
||||
tags := []mujica.GitTag{{Name: "v1.1.0", Target: "a1b2c3d4", Annotation: "Release"}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.TagList(c, &state, tags, mujica.TagListOptions{})
|
||||
r.Element.Height(200)
|
||||
if _, hash, ok := r.Action(); ok {
|
||||
_ = hash // show the tagged commit
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func TagList(c *ui.Context, s *ListState[string], tags []GitTag, opts TagListOptions) GitListResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`GitTag`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Name | string | 必填 | 标签名,唯一。 |
|
||||
| Target | string | 必填 | 目标提交哈希。 |
|
||||
| Annotation | string | "" | 注释;轻量标签留空。 |
|
||||
|
||||
`TagListOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Status | DataStatus | DataReady | 加载、追加、失败状态。 |
|
||||
| Error | string | "" | 失败说明。 |
|
||||
|
||||
Name 或 Target 为空时 panic。给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 注释为 TextMuted 单行,超长省略。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Action()` 返回 `"jump"` 与目标哈希。
|
||||
- `Changed()`、`Submitted()` 同 CommitList。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- ↑/↓、Home/End 移动选择;“跳转到提交”按钮用 Tab 到达。
|
||||
|
||||
## 限制
|
||||
|
||||
- 不读取标签:数据由调用方提供。
|
||||
@@ -0,0 +1,58 @@
|
||||
# 312 StashList 贮藏列表
|
||||
|
||||
## 用途
|
||||
|
||||
贮藏列表,每行提供应用、弹出与删除。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ListState[string]
|
||||
stashes := []mujica.Stash{{Ref: "stash@{0}", Message: "WIP on main", Branch: "main"}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.StashList(c, &state, stashes, mujica.StashListOptions{})
|
||||
r.Element.Height(200)
|
||||
if action, ref, ok := r.Action(); ok {
|
||||
_, _ = action, ref // run git stash apply, pop or drop
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func StashList(c *ui.Context, s *ListState[string], stashes []Stash, opts StashListOptions) GitListResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`Stash`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Ref | string | 必填 | 如 stash@{0};为空时 panic。 |
|
||||
| Message | string | "" | 贮藏说明。 |
|
||||
| Branch | string | "" | 创建时所在分支。 |
|
||||
|
||||
`StashListOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Status | DataStatus | DataReady | 加载、追加、失败状态。 |
|
||||
| Error | string | "" | 失败说明。 |
|
||||
|
||||
给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- Ref 为等宽 AccentText;三个操作为带名称与提示的图标按钮。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Action()` 返回 `"apply"`、`"pop"` 或 `"drop"` 与 Ref。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- ↑/↓ 移动选择;操作按钮用 Tab 到达,Enter 或 Space 执行。
|
||||
|
||||
## 限制
|
||||
|
||||
- 删除不带确认;需要时由调用方在回调里确认。
|
||||
@@ -0,0 +1,62 @@
|
||||
# 313 BlameView 逐行追溯
|
||||
|
||||
## 用途
|
||||
|
||||
代码逐行显示最后修改的作者与提交;同一提交的连续行合并显示,悬停显示提交详情。只构建可见行。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.BlameViewState
|
||||
lines := []mujica.BlameLine{
|
||||
{Hash: "a1b2c3d4", Author: "Sakiko", When: time.Now(), Summary: "Add main", Text: "package main"},
|
||||
{Hash: "a1b2c3d4", Author: "Sakiko", When: time.Now(), Summary: "Add main", Text: "func main() {}"},
|
||||
}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.BlameView(c, &state, lines, mujica.BlameViewOptions{Language: "go"}).Height(240)
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func BlameView(c *ui.Context, s *BlameViewState, lines []BlameLine, opts BlameViewOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`BlameLine`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Hash | string | 必填 | 提交哈希;为空时 panic。 |
|
||||
| Author | string | "" | 作者。 |
|
||||
| When | time.Time | 零值 | 提交时间。 |
|
||||
| Summary | string | "" | 提交标题,悬停时显示。 |
|
||||
| Text | string | "" | 该行代码。 |
|
||||
|
||||
`BlameViewOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Language | string | "" | 语法高亮语言,如 go;空为纯文本。 |
|
||||
| TimeFormat | string | "2006-01-02" | 日期格式。 |
|
||||
|
||||
`BlameViewState` 由调用方持有;块注释状态在数据或语言变化时计算一次。给返回元素一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 每段同提交行只在首行显示短哈希、作者与日期,段之间有细分隔线。
|
||||
- 左栏悬停为 SurfaceHover,600 ms 后显示提示:完整哈希、作者、日期与标题。
|
||||
- 代码使用统一的语法颜色,注释为斜体。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 列表可获得焦点并滚动;输入行首文字跳转到该行。
|
||||
|
||||
## 限制
|
||||
|
||||
- 长行不换行,超出部分裁剪。
|
||||
- 悬停详情使用 MyGo 提示,只能用指针触发;每行左栏的名称同样朗读作者与提交。
|
||||
@@ -0,0 +1,53 @@
|
||||
# 314 FileHistory 文件历史
|
||||
|
||||
## 用途
|
||||
|
||||
单个文件的提交历史,每条提交提供“查看差异”入口。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ListState[string]
|
||||
commits := []mujica.Commit{{Hash: "a1b2c3d4", Author: "Sakiko", When: time.Now(), Subject: "Edit main.go"}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.FileHistory(c, &state, "main.go", commits, mujica.FileHistoryOptions{})
|
||||
r.Element.Height(240)
|
||||
if _, hash, ok := r.Action(); ok {
|
||||
_ = hash // open the diff of main.go at hash
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func FileHistory(c *ui.Context, s *ListState[string], path string, commits []Commit, opts FileHistoryOptions) GitListResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`FileHistoryOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| TimeFormat | string | "2006-01-02 15:04" | 时间格式。 |
|
||||
| Status | DataStatus | DataReady | 加载、追加、失败状态。 |
|
||||
| Error | string | "" | 失败说明。 |
|
||||
|
||||
path 为空时 panic。给返回的 `Element` 一个高度,列表填满其余空间。
|
||||
|
||||
## 状态
|
||||
|
||||
- 标题行显示历史图标、等宽路径与“历史”。
|
||||
- 空历史显示“此文件没有历史”。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Action()` 返回 `"diff"` 与提交哈希。
|
||||
- `Changed()`、`Submitted()` 同 CommitList。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- ↑/↓、Home/End 移动选择;“查看差异”按钮用 Tab 到达。
|
||||
|
||||
## 限制
|
||||
|
||||
- 不跟踪重命名:提交列表由调用方提供。
|
||||
@@ -0,0 +1,62 @@
|
||||
# 315 PullRequestCard 拉取请求卡片
|
||||
|
||||
## 用途
|
||||
|
||||
概览一个拉取请求:标题、作者、状态、检查、评审人与差异统计。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
pr := mujica.PullRequest{Number: 42, Title: "Add git components", Author: "Sakiko", Head: "feature", Base: "main",
|
||||
ChecksPassed: 3, Reviewers: []mujica.Reviewer{{Name: "Uika", State: mujica.ReviewApproved}}, Added: 120, Deleted: 8, Files: 6}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
if mujica.PullRequestCard(c, pr, mujica.PullRequestCardOptions{}).Changed() {
|
||||
// open the pull request
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func PullRequestCard(c *ui.Context, pr PullRequest, opts PullRequestCardOptions) ChoiceResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`PullRequest`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Number | int | 必填 | 编号,须为正。 |
|
||||
| Title | string | 必填 | 标题。 |
|
||||
| Author | string | "" | 作者。 |
|
||||
| State | PullRequestState | PullRequestOpen | Open、Draft、Merged、Closed;未知值 panic。 |
|
||||
| Head, Base | string | "" | 源分支与目标分支,都有值时显示。 |
|
||||
| ChecksPassed, ChecksFailed, ChecksPending | int | 0 | 检查计数;为负 panic。 |
|
||||
| Reviewers | []Reviewer | nil | 评审人与状态(Pending、Approved、ChangesRequested)。 |
|
||||
| Added, Deleted, Files | int | 0 | 差异统计。 |
|
||||
|
||||
`PullRequestCardOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Disabled | bool | false | 禁用打开。 |
|
||||
|
||||
返回 `ChoiceResult`。
|
||||
|
||||
## 状态
|
||||
|
||||
- 状态徽章同时使用图标、文字与描边颜色。
|
||||
- 检查以图标加数字显示,朗读完整说明;为 0 的类别不显示。
|
||||
- 评审人以头像加角标图标表示状态,名称与状态写入提示和朗读文本。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()`:点击标题或在标题上按 Enter,表示打开。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 到标题链接,Enter 或 Space 打开。
|
||||
|
||||
## 限制
|
||||
|
||||
- 数据由调用方获取;组件不刷新检查状态。
|
||||
@@ -0,0 +1,66 @@
|
||||
# 316 ReviewComment 评审评论
|
||||
|
||||
## 用途
|
||||
|
||||
行级评审讨论:显示文件与行号、评论列表,支持回复、解决与重新打开。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
thread := mujica.ReviewThread{File: "main.go", Line: 12, Messages: []mujica.ReviewMessage{
|
||||
{Author: "Uika", When: time.Now(), Body: "Can this return early?"},
|
||||
}}
|
||||
draft := ""
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.ReviewComment(c, thread, &draft, mujica.ReviewCommentOptions{})
|
||||
if text, ok := r.Replied(); ok {
|
||||
thread.Messages = append(thread.Messages, mujica.ReviewMessage{Author: "Sakiko", When: time.Now(), Body: text})
|
||||
}
|
||||
if r.Resolved() || r.Reopened() {
|
||||
thread.Resolved = !thread.Resolved
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func ReviewComment(c *ui.Context, thread ReviewThread, draft *string, opts ReviewCommentOptions) ReviewCommentResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`ReviewThread`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| File | string | 必填 | 文件路径。 |
|
||||
| Line | int | 必填 | 行号,须为正。 |
|
||||
| Resolved | bool | false | 已解决:隐藏回复框,显示“重新打开”。 |
|
||||
| Messages | []ReviewMessage | 必填 | 至少一条评论(作者、时间、正文)。 |
|
||||
|
||||
`ReviewCommentOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| TimeFormat | string | "2006-01-02 15:04" | 时间格式。 |
|
||||
| Disabled | bool | false | 禁用回复、解决与重新打开。 |
|
||||
|
||||
`draft` 保存回复草稿,发送后清空。
|
||||
|
||||
## 状态
|
||||
|
||||
- 已解决:标题栏显示 Success 色图标与“已解决”。
|
||||
- 回复按钮在草稿为空时禁用。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Replied()`:发送的回复文本(去除首尾空白)。
|
||||
- `Resolved()`、`Reopened()`:对应按钮。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 经过回复框与按钮;回复框内 Cmd+Enter(非 macOS 为 Ctrl+Enter)发送。
|
||||
|
||||
## 限制
|
||||
|
||||
- 评论正文为纯文本,不渲染 Markdown。
|
||||
- 线程状态由调用方更新。
|
||||
@@ -0,0 +1,45 @@
|
||||
# 317 DiffStat 差异统计
|
||||
|
||||
## 用途
|
||||
|
||||
显示 +新增 −删除 行数,以及按比例填充的方块条。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.DiffStat(c, 120, 8, mujica.DiffStatOptions{})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func DiffStat(c *ui.Context, added, deleted int, opts DiffStatOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`DiffStatOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Blocks | int | 0(即 5) | 比例条方块数;为负 panic。 |
|
||||
|
||||
added、deleted 为负时 panic。
|
||||
|
||||
## 状态
|
||||
|
||||
- 数字带 + 与 − 符号,不只靠颜色;非零一侧至少占一格。
|
||||
- 无变化时方块为 Border 色。
|
||||
- 朗读为“新增 n 行,删除 m 行”。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无:纯展示,不获取焦点。
|
||||
|
||||
## 限制
|
||||
|
||||
- 无。
|
||||
@@ -0,0 +1,44 @@
|
||||
# 318 GitStatusBadge Git 状态标记
|
||||
|
||||
## 用途
|
||||
|
||||
以字母 M、A、D、U、R、C 加描边与颜色标记文件状态。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.GitStatusBadge(c, mujica.GitModified, mujica.GitStatusBadgeOptions{ShowLabel: true})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func GitStatusBadge(c *ui.Context, status GitStatus, opts GitStatusBadgeOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`GitStatusBadgeOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| ShowLabel | bool | false | 在字母旁写出状态名称;否则作为提示。 |
|
||||
|
||||
`GitStatus`:GitModified、GitAdded、GitDeleted、GitUntracked、GitRenamed、GitCopied;`Letter()` 返回字母。未知值 panic。
|
||||
|
||||
## 状态
|
||||
|
||||
- 字母为等宽粗体,颜色依状态:修改 Warning、添加 Success、删除 Danger、未跟踪与重命名 Info、复制 AccentText。
|
||||
- 名称写入朗读文本与提示,不只靠颜色。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无:纯展示。
|
||||
|
||||
## 限制
|
||||
|
||||
- 无。
|
||||
@@ -0,0 +1,62 @@
|
||||
# 319 CommandBlock 命令块
|
||||
|
||||
## 用途
|
||||
|
||||
把一次命令执行显示为一块:提示符与高亮的命令、退出码、耗时与可折叠的 ANSI 输出,可复制命令或输出。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
open := true
|
||||
run := mujica.CommandRun{Command: "go test ./...", Output: "\x1b[32mok\x1b[0m example 0.4s", Duration: 400 * time.Millisecond}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.CommandBlock(c, run, &open, mujica.CommandBlockOptions{})
|
||||
if what, ok := r.Copied(); ok {
|
||||
_ = what // "command" or "output" is on the clipboard
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func CommandBlock(c *ui.Context, run CommandRun, open *bool, opts CommandBlockOptions) CommandBlockResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`CommandRun`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Command | string | 必填 | 命令;为空时 panic。 |
|
||||
| Output | string | "" | 输出,可含 ANSI 转义。 |
|
||||
| ExitCode | int | 0 | 退出码。 |
|
||||
| Duration | time.Duration | 0 | 耗时;为负 panic。 |
|
||||
| Running | bool | false | 运行中:显示加载标记,不显示退出码与耗时。 |
|
||||
|
||||
`CommandBlockOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Prompt | string | "$" | 命令前的提示符。 |
|
||||
| MaxOutputHeight | float32 | 0(即 320) | 输出区最大高度,超出滚动;为负 panic。 |
|
||||
|
||||
`open` 控制输出是否展开。
|
||||
|
||||
## 状态
|
||||
|
||||
- 成功:Success 色对勾与“退出码 0”;失败:Danger 色叉号与退出码。
|
||||
- 展开箭头 120 ms 转动,减少动画时直接切换。
|
||||
- 输出区为 Background 底色,等宽字体,横纵滚动。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Toggled()`:展开或折叠。
|
||||
- `Copied()`:`"command"` 或 `"output"`;复制的输出已去除 ANSI 转义。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 到标题行,Enter 或 Space 展开或折叠;复制按钮用 Tab 到达。
|
||||
|
||||
## 限制
|
||||
|
||||
- 不运行命令:输出与状态由调用方提供。
|
||||
@@ -0,0 +1,45 @@
|
||||
# 320 AnsiText ANSI 文本
|
||||
|
||||
## 用途
|
||||
|
||||
渲染终端输出:16 色、256 色、真彩,以及粗体、斜体、下划线、删除线、暗淡与反显。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.AnsiText(c, "\x1b[1;32mPASS\x1b[0m 12 tests\n\x1b[31mFAIL\x1b[0m 1 test", mujica.AnsiTextOptions{})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func AnsiText(c *ui.Context, text string, opts AnsiTextOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`AnsiTextOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Wrap | bool | false | 按宽度换行;否则每行保持完整。 |
|
||||
|
||||
样式跨行延续。
|
||||
|
||||
## 状态
|
||||
|
||||
- 16 色映射为在两种主题 Surface 上都达到 4.5:1 的颜色;256 色与真彩按原值显示。
|
||||
- 默认前景为 Text;反显以 Surface 为前景。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无:纯展示。
|
||||
|
||||
## 限制
|
||||
|
||||
- 只解释 SGR(m 结尾)序列;光标移动、清屏等其他 CSI 序列原样保留为文字,并以 slog.Debug 记录。
|
||||
- 256 色与真彩不做对比度调整。
|
||||
Reference in new issue
Block a user