MujicaUI

Git · #309

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

309 BranchSelector 分支选择器

用途

按钮显示当前分支,点击弹出可搜索的本地与远端分支列表;可选“新建分支”入口。

最小示例

branch := "main"
branches := []git.Branch{{Name: "main", Current: true}, {Name: "origin/main", Remote: true}}
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	r := git.BranchSelector(c, &branch, branches, git.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

字段类型默认值含义
Namestring必填唯一名称,远端分支带远端名,如 origin/main;为空时 panic。
Remoteboolfalse归入远端组。
Currentboolfalse当前检出的分支。
Upstreamstring""上游分支。
Ahead, Behindint0领先、落后的提交数;为负 panic。

BranchSelectorOptions

字段类型默认值含义
AllowCreateboolfalse搜索词不是已有分支名时,列表末尾提供“新建分支”。
Disabledboolfalse禁用;打开中的弹层会关闭。

返回 BranchSelectorResult,含 Element。过滤结果在搜索词或分支切片变化时才重新计算。

状态

  • 弹层使用统一浮层外观,160 ms 淡入,尺寸限制在窗口内,内容滚动。
  • 本地、远端分组标题为衬线小字;当前分支加粗并带对勾。
  • 高亮项:Selection 背景,键盘移动时滚入视野。

事件

  • Changed():选择了另一个分支,*selected 已更新。
  • Created():用户要求新建的分支名(已去除首尾空白)。

键盘操作

  • Enter 或 Space 打开;焦点进入搜索框。
  • ↑/↓ 移动高亮并循环,Enter 选择,Escape 关闭并把焦点还给按钮。

限制

  • 不执行 git:选择与新建都由调用方处理。
  • 搜索为大小写不敏感的子串匹配。