ui

package
v0.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 22, 2026 License: AGPL-3.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SidebarAll       = "__all__"
	SidebarUngrouped = "__ungrouped__"
)
View Source
const (
	PreviewTab  int = iota
	TerminalTab     // persistent shell per instance
	DiffTab
	GitTab
)

Variables

View Source
var (
	AdditionStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#22c55e"))
	DeletionStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("#ef4444"))
	HunkStyle     = lipgloss.NewStyle().Foreground(lipgloss.Color("#0ea5e9"))
)
View Source
var FallBackText = lipgloss.JoinVertical(lipgloss.Center,
	GradientText(padLines(beeBannerRaw), "#F0A868", "#E0C070"),
	"",
	GradientText(fallbackBannerRaw, "#F0A868", "#7EC8D8"))

Functions

func AdjustPreviewWidth

func AdjustPreviewWidth(width int) int

AdjustPreviewWidth returns the tab row width for the given allocation. The window's border+padding is handled by windowStyle.

func GradientBar

func GradientBar(width, filled int, startHex, endHex string) string

GradientBar renders a progress bar of `width` characters with `filled` filled blocks. Filled portion uses a gradient from startHex to endHex; unfilled uses dim blocks.

func GradientText

func GradientText(text, startHex, endHex string) string

GradientText renders a string with a left-to-right truecolor gradient from startHex to endHex. Newlines are preserved; ANSI reset appended.

func IsUngroupedID added in v0.2.1

func IsUngroupedID(id string) bool

IsUngroupedID checks if an ID represents an ungrouped item (single or per-repo).

func UngroupedRepoPath added in v0.2.1

func UngroupedRepoPath(id string) string

UngroupedRepoPath extracts the repo path from a per-repo ungrouped ID. Returns empty string for the plain SidebarUngrouped ID.

Types

type DiffPane

type DiffPane struct {
	// contains filtered or unexported fields
}

func NewDiffPane

func NewDiffPane() *DiffPane

func (*DiffPane) FileDown

func (d *DiffPane) FileDown()

func (*DiffPane) FileUp

func (d *DiffPane) FileUp()

func (*DiffPane) GetSelectedFilePath added in v0.2.1

func (d *DiffPane) GetSelectedFilePath() string

GetSelectedFilePath returns the relative path of the currently selected file, or empty string if no specific file is selected (e.g. "All" is selected).

func (*DiffPane) HasFiles

func (d *DiffPane) HasFiles() bool

func (*DiffPane) ScrollDown

func (d *DiffPane) ScrollDown()

func (*DiffPane) ScrollUp

func (d *DiffPane) ScrollUp()

func (*DiffPane) SetDiff

func (d *DiffPane) SetDiff(instance *session.Instance)

func (*DiffPane) SetSize

func (d *DiffPane) SetSize(width, height int)

func (*DiffPane) String

func (d *DiffPane) String() string

type GitPane

type GitPane struct {
	// contains filtered or unexported fields
}

GitPane manages a lazygit tmux session that persists across tab switches. When the user switches tabs (git → agent → git), the tmux session stays alive and only the EmbeddedTerminal PTY is reconnected — preserving lazygit's UI state. When switching instances, the old session is killed to avoid accumulating background lazygit processes (each runs file watchers and periodic git polls).

func NewGitPane

func NewGitPane() *GitPane

NewGitPane creates a new GitPane (no subprocess yet).

func (*GitPane) Attach added in v0.2.1

func (g *GitPane) Attach(worktreePath, instanceTitle string)

Attach creates a lazygit tmux session for the instance (if needed) and connects an EmbeddedTerminal to it. If already attached to a different instance, detaches first.

func (*GitPane) Detach added in v0.2.1

func (g *GitPane) Detach()

Detach closes the EmbeddedTerminal but keeps the tmux session alive.

func (*GitPane) IsRunning

func (g *GitPane) IsRunning() bool

IsRunning returns true if a lazygit session is active.

func (*GitPane) Kill

func (g *GitPane) Kill()

Kill detaches and kills ALL lazygit tmux sessions (app shutdown).

func (*GitPane) KillSession added in v0.2.1

func (g *GitPane) KillSession(instanceTitle string)

KillSession kills a single instance's lazygit tmux session.

func (*GitPane) NeedsRespawn

func (g *GitPane) NeedsRespawn(instanceTitle string) bool

NeedsRespawn returns true if the current instance differs from what's running.

func (*GitPane) Render

func (g *GitPane) Render() (string, bool)

Render returns the current terminal frame content.

func (*GitPane) SendKey

func (g *GitPane) SendKey(data []byte) error

SendKey forwards raw key bytes to the lazygit PTY via the embedded terminal. If the write fails (e.g. lazygit exited), it cleans up the dead session.

func (*GitPane) SetSize

func (g *GitPane) SetSize(width, height int)

SetSize updates the PTY and tmux window dimensions.

func (*GitPane) String

func (g *GitPane) String() string

String returns the current frame for display.

func (*GitPane) WaitForRender added in v0.2.1

func (g *GitPane) WaitForRender(timeout time.Duration)

WaitForRender blocks until the embedded terminal has new content or the timeout elapses.

type InstanceRenderer

type InstanceRenderer struct {
	// contains filtered or unexported fields
}

InstanceRenderer handles rendering of session.Instance objects

func (*InstanceRenderer) Render

func (r *InstanceRenderer) Render(i *session.Instance, selected bool, focused bool, hasMultipleRepos bool, rowIndex int, opts ...renderOpt) string

type List

type List struct {
	// contains filtered or unexported fields
}

func NewList

func NewList(spinner *spinner.Model, autoYes bool) *List

func (*List) AddInstance

func (l *List) AddInstance(instance *session.Instance) (finalize func())

AddInstance adds a new instance to the list. It returns a finalizer function that should be called when the instance is started. If the instance was restored from storage or is paused, you can call the finalizer immediately. When creating a new one and entering the name, you want to call the finalizer once the name is done.

func (*List) Attach

func (l *List) Attach() (chan struct{}, error)

func (*List) Clear

func (l *List) Clear()

Clear removes all instances from the list.

func (*List) CycleSortMode

func (l *List) CycleSortMode()

CycleSortMode advances to the next sort mode and rebuilds.

func (*List) Down

func (l *List) Down()

Down selects the next item in the list.

func (*List) GetInstances

func (l *List) GetInstances() []*session.Instance

GetInstances returns all instances (unfiltered) for persistence and metadata updates.

func (*List) GetItemAtRow

func (l *List) GetItemAtRow(row int) int

GetItemAtRow maps a row offset (relative to the first item) to an item index. Returns -1 if the row doesn't correspond to any item.

func (*List) GetSelectedIdx

func (l *List) GetSelectedIdx() int

GetSelectedIdx returns the index of the currently selected item in the filtered list.

func (*List) GetSelectedInstance

func (l *List) GetSelectedInstance() *session.Instance

GetSelectedInstance returns the currently selected instance

func (*List) GetSortMode

func (l *List) GetSortMode() SortMode

GetSortMode returns the current sort mode.

func (*List) GetStatusFilter

func (l *List) GetStatusFilter() StatusFilter

GetStatusFilter returns the current status filter.

func (*List) HandleTabClick

func (l *List) HandleTabClick(localX, localY int) (StatusFilter, bool)

HandleTabClick checks if a click at the given local coordinates (relative to the list's top-left corner) hits a filter tab. Returns the filter and true if a tab was clicked, or false if the click was outside the tab area.

func (*List) IsExpanded added in v0.2.1

func (l *List) IsExpanded(title string) bool

IsExpanded returns whether the given instance title has its sub-agent tree expanded.

func (*List) Kill

func (l *List) Kill()

Kill removes and kills the currently selected instance.

func (*List) KillInstanceByTitle added in v0.2.1

func (l *List) KillInstanceByTitle(title string)

KillInstanceByTitle kills and removes a single instance by its title.

func (*List) KillInstancesByTopic

func (l *List) KillInstancesByTopic(topicName string)

KillInstancesByTopic kills and removes all instances belonging to the given topic.

func (*List) NumInstances

func (l *List) NumInstances() int

func (*List) SelectInstanceByRef added in v0.2.1

func (l *List) SelectInstanceByRef(instance *session.Instance)

SelectInstanceByRef finds an instance by pointer in the filtered list and selects it.

func (*List) SetFilter

func (l *List) SetFilter(topicFilter string)

SetFilter filters the displayed instances by topic name. Empty string shows all. SidebarUngrouped shows only ungrouped instances.

func (*List) SetFilterByRepoAndTopic added in v0.2.1

func (l *List) SetFilterByRepoAndTopic(topicFilter, repoPath string)

SetFilterByRepoAndTopic filters instances by both topic and repo path.

func (*List) SetFocused

func (l *List) SetFocused(focused bool)

func (*List) SetSearchFilter

func (l *List) SetSearchFilter(query string)

SetSearchFilter filters instances by search query across all topics.

func (*List) SetSearchFilterWithTopic

func (l *List) SetSearchFilterWithTopic(query string, topicFilter string)

SetSearchFilterWithTopic filters instances by search query, optionally scoped to a topic. topicFilter: "" = all topics, "__ungrouped__" = ungrouped only, otherwise = specific topic.

func (*List) SetSearchFilterWithTopicAndRepo added in v0.2.1

func (l *List) SetSearchFilterWithTopicAndRepo(query string, topicFilter string, repoPath string)

SetSearchFilterWithTopicAndRepo filters instances by search query, topic, and optionally repo.

func (*List) SetSelectedInstance

func (l *List) SetSelectedInstance(idx int)

SetSelectedInstance sets the selected index. Noop if the index is out of bounds.

func (*List) SetSessionPreviewSize

func (l *List) SetSessionPreviewSize(width, height int) (err error)

SetSessionPreviewSize sets the height and width for the tmux sessions. This makes the stdout line have the correct width and height.

func (*List) SetSize

func (l *List) SetSize(width, height int)

SetSize sets the height and width of the list.

func (*List) SetStatusFilter

func (l *List) SetStatusFilter(filter StatusFilter)

SetStatusFilter sets the status filter and rebuilds the filtered items.

func (*List) String

func (l *List) String() string

func (*List) ToggleChildExpanded added in v0.2.1

func (l *List) ToggleChildExpanded() bool

ToggleChildExpanded toggles whether brain-spawned children of the selected instance are shown.

func (*List) ToggleExpanded added in v0.2.1

func (l *List) ToggleExpanded() bool

ToggleExpanded toggles the sub-agent tree for the currently selected instance. It first tries tmux sub-agents, then brain-spawned children. Returns true if the toggle was meaningful.

func (*List) TotalInstances

func (l *List) TotalInstances() int

TotalInstances returns the total number of instances regardless of filter.

func (*List) Up

func (l *List) Up()

Up selects the prev item in the list.

type Menu struct {
	// contains filtered or unexported fields
}

func NewMenu

func NewMenu() *Menu
func (m *Menu) ClearKeydown()
func (m *Menu) Keydown(name keys.KeyName)
func (m *Menu) SetInDiffTab(inDiffTab bool)

SetInDiffTab updates whether we're currently in the diff tab

func (m *Menu) SetInstance(instance *session.Instance)

SetInstance updates the current instance and refreshes menu options

func (m *Menu) SetSize(width, height int)

SetSize sets the width of the window. The menu will be centered horizontally within this width.

func (m *Menu) SetState(state MenuState)

SetState updates the menu state and options accordingly

func (m *Menu) String() string
type MenuState int

MenuState represents different states the menu can be in

const (
	StateDefault MenuState = iota
	StateEmpty
	StateNewInstance
	StatePrompt
)

type PreviewPane

type PreviewPane struct {
	// contains filtered or unexported fields
}

func NewPreviewPane

func NewPreviewPane() *PreviewPane

func (*PreviewPane) ResetToNormalMode

func (p *PreviewPane) ResetToNormalMode(instance *session.Instance) error

ResetToNormalMode exits scroll mode and returns to normal mode

func (*PreviewPane) ScrollDown

func (p *PreviewPane) ScrollDown(instance *session.Instance) error

ScrollDown scrolls down in the viewport

func (*PreviewPane) ScrollUp

func (p *PreviewPane) ScrollUp(instance *session.Instance) error

ScrollUp scrolls up in the viewport

func (*PreviewPane) SetAsyncContent added in v0.2.1

func (p *PreviewPane) SetAsyncContent(content string)

SetAsyncContent applies content from an async background fetch. Unlike SetRawContent, this does not reset scroll mode — the user may have entered scroll mode while the fetch was in-flight.

func (*PreviewPane) SetRawContent

func (p *PreviewPane) SetRawContent(content string)

SetRawContent sets the preview content directly from a pre-rendered string. Used by the embedded terminal emulator in focus mode.

func (*PreviewPane) SetSize

func (p *PreviewPane) SetSize(width, maxHeight int)

func (*PreviewPane) String

func (p *PreviewPane) String() string

Returns the preview pane content as a string.

func (*PreviewPane) UpdateContent

func (p *PreviewPane) UpdateContent(instance *session.Instance) error

Updates the preview pane content with the tmux pane content

type RepoGroup added in v0.2.1

type RepoGroup struct {
	RepoPath       string
	RepoName       string
	TopicNames     []string
	CountByTopic   map[string]int
	UngroupedCount int
	SharedTopics   map[string]bool
	AutoYesTopics  map[string]bool
	TopicStatuses  map[string]TopicStatus
}

RepoGroup holds all sidebar data for a single repo in multi-repo view.

type Sidebar struct {
	// contains filtered or unexported fields
}

Sidebar is the left-most panel showing topics and search.

func NewSidebar

func NewSidebar() *Sidebar

func (*Sidebar) ActivateSearch

func (s *Sidebar) ActivateSearch()

func (*Sidebar) ClickItem

func (s *Sidebar) ClickItem(row int)

ClickItem selects a sidebar item by its rendered row offset (0-indexed from the first item). Section headers count as a row but are skipped for selection.

func (*Sidebar) DeactivateSearch

func (s *Sidebar) DeactivateSearch()

func (*Sidebar) Down

func (s *Sidebar) Down()

func (*Sidebar) GetSearchQuery

func (s *Sidebar) GetSearchQuery() string

func (*Sidebar) GetSelectedID

func (s *Sidebar) GetSelectedID() string

func (*Sidebar) GetSelectedIdx

func (s *Sidebar) GetSelectedIdx() int

GetSelectedIdx returns the index of the currently selected item in the sidebar.

func (*Sidebar) GetSelectedRepoPath added in v0.2.1

func (s *Sidebar) GetSelectedRepoPath() string

GetSelectedRepoPath returns the RepoPath of the currently selected sidebar item.

func (*Sidebar) IsFocused

func (s *Sidebar) IsFocused() bool

func (*Sidebar) IsRepoBtnHit added in v0.2.1

func (s *Sidebar) IsRepoBtnHit(x, y, screenTop int) bool

IsRepoBtnHit tests whether screen coordinates (x, y) fall within the repo button. x and y are absolute screen coordinates; the sidebar is at column 0, row screenTop.

func (*Sidebar) IsSearchActive

func (s *Sidebar) IsSearchActive() bool

func (*Sidebar) SelectFirst

func (s *Sidebar) SelectFirst()

SelectFirst selects the first non-section item (typically "All").

func (*Sidebar) SelectLast added in v0.2.1

func (s *Sidebar) SelectLast()

SelectLast selects the last non-section item.

func (*Sidebar) SetFocused

func (s *Sidebar) SetFocused(focused bool)

func (*Sidebar) SetGroupedItems added in v0.2.1

func (s *Sidebar) SetGroupedItems(groups []RepoGroup)

SetGroupedItems builds sidebar items with repo section headers for multi-repo view.

func (*Sidebar) SetItems

func (s *Sidebar) SetItems(topicNames []string, instanceCountByTopic map[string]int, ungroupedCount int, sharedTopics map[string]bool, autoYesTopics map[string]bool, topicStatuses map[string]TopicStatus)

SetItems updates the sidebar items from the current topics. sharedTopics maps topic name → whether it has a shared worktree. topicStatuses maps topic name → running/notification status.

func (*Sidebar) SetRepoHovered

func (s *Sidebar) SetRepoHovered(hovered bool)

SetRepoHovered sets whether the mouse is hovering over the repo button.

func (*Sidebar) SetRepoName

func (s *Sidebar) SetRepoName(name string)

SetRepoName sets the current repo name displayed at the bottom of the sidebar.

func (*Sidebar) SetRepoNames added in v0.2.1

func (s *Sidebar) SetRepoNames(names []string)

SetRepoNames sets the repo name(s) displayed at the bottom of the sidebar.

func (*Sidebar) SetSearchQuery

func (s *Sidebar) SetSearchQuery(q string)

func (*Sidebar) SetSize

func (s *Sidebar) SetSize(width, height int)

func (*Sidebar) String

func (s *Sidebar) String() string

func (*Sidebar) Up

func (s *Sidebar) Up()

func (*Sidebar) UpdateMatchCounts

func (s *Sidebar) UpdateMatchCounts(matchesByTopic map[string]int, totalMatches int)

UpdateMatchCounts sets the search match counts for each topic item. Pass nil to clear search highlighting.

type SidebarItem

type SidebarItem struct {
	Name            string
	ID              string
	IsSection       bool
	Count           int
	MatchCount      int    // search match count (-1 = not searching)
	SharedWorktree  bool   // true if this topic has a shared worktree
	AutoYes         bool   // true if this topic has auto-accept enabled
	HasRunning      bool   // true if this topic has running instances
	HasNotification bool   // true if this topic has recently-finished instances
	RepoPath        string // repo path this item belongs to (for multi-repo disambiguation)
}

SidebarItem represents a selectable item in the sidebar.

type SortMode

type SortMode int

SortMode determines how instances are ordered.

const (
	SortNewest SortMode = iota // Most recently updated first (default)
	SortOldest                 // Oldest first
	SortName                   // Alphabetical by title
	SortStatus                 // Grouped by status: running, ready, paused
)

type StatusFilter

type StatusFilter int

StatusFilter determines which instances are shown based on their status.

const (
	StatusFilterAll    StatusFilter = iota // Show all instances
	StatusFilterActive                     // Show only non-paused instances
)

type Tab

type Tab struct {
	Name   string
	Render func(width int, height int) string
}

type TabbedWindow

type TabbedWindow struct {
	// contains filtered or unexported fields
}

TabbedWindow has tabs at the top of a pane which can be selected. The tabs take up one rune of height.

func NewTabbedWindow

func NewTabbedWindow(preview *PreviewPane, terminal *TerminalPane, diff *DiffPane, git *GitPane) *TabbedWindow

func (*TabbedWindow) ApplyPreviewContent added in v0.2.1

func (w *TabbedWindow) ApplyPreviewContent(content string)

ApplyPreviewContent sets preview content from an async fetch result. Safe to call even if the user entered scroll mode while the fetch was in-flight.

func (*TabbedWindow) ClearContentStale added in v0.2.1

func (w *TabbedWindow) ClearContentStale()

ClearContentStale marks content as up-to-date after a tick fetches it.

func (*TabbedWindow) ContentScrollDown

func (w *TabbedWindow) ContentScrollDown()

ContentScrollDown scrolls content without file navigation (for mouse wheel). No-op for git tab.

func (*TabbedWindow) ContentScrollUp

func (w *TabbedWindow) ContentScrollUp()

ContentScrollUp scrolls content without file navigation (for mouse wheel). No-op for git tab.

func (*TabbedWindow) GetActiveTab

func (w *TabbedWindow) GetActiveTab() int

GetActiveTab returns the currently active tab index.

func (*TabbedWindow) GetDiffPane added in v0.2.1

func (w *TabbedWindow) GetDiffPane() *DiffPane

GetDiffPane returns the diff pane for external control.

func (*TabbedWindow) GetGitPane

func (w *TabbedWindow) GetGitPane() *GitPane

GetGitPane returns the git pane for external control.

func (*TabbedWindow) GetPreviewSize

func (w *TabbedWindow) GetPreviewSize() (width, height int)

func (*TabbedWindow) GetTerminalPane added in v0.2.1

func (w *TabbedWindow) GetTerminalPane() *TerminalPane

GetTerminalPane returns the terminal pane for external control.

func (*TabbedWindow) HandleTabClick

func (w *TabbedWindow) HandleTabClick(localX, localY int) bool

HandleTabClick checks if a click at the given local coordinates (relative to the tabbed window's top-left) hits a tab header. Returns true and switches tabs if a tab was clicked.

func (*TabbedWindow) IsContentStale added in v0.2.1

func (w *TabbedWindow) IsContentStale() bool

IsContentStale returns whether content needs to be refreshed.

func (*TabbedWindow) IsFocusMode

func (w *TabbedWindow) IsFocusMode() bool

IsFocusMode returns whether the window is in focus/insert mode.

func (*TabbedWindow) IsInDiffTab

func (w *TabbedWindow) IsInDiffTab() bool

IsInDiffTab returns true if the diff tab is currently active

func (*TabbedWindow) IsInGitTab

func (w *TabbedWindow) IsInGitTab() bool

IsInGitTab returns true if the git tab is currently active

func (*TabbedWindow) IsInTerminalTab added in v0.2.1

func (w *TabbedWindow) IsInTerminalTab() bool

IsInTerminalTab returns true if the terminal tab is currently active.

func (*TabbedWindow) IsPreviewInScrollMode

func (w *TabbedWindow) IsPreviewInScrollMode() bool

IsPreviewInScrollMode returns true if the preview pane is in scroll mode

func (*TabbedWindow) MarkContentStale added in v0.2.1

func (w *TabbedWindow) MarkContentStale()

MarkContentStale flags that the selected instance changed but expensive content (preview capture, diff) hasn't been fetched yet. The next tick will do the fetch.

func (*TabbedWindow) ResetPreviewToNormalMode

func (w *TabbedWindow) ResetPreviewToNormalMode(instance *session.Instance) error

ResetPreviewToNormalMode resets the preview pane to normal mode

func (*TabbedWindow) ScrollDown

func (w *TabbedWindow) ScrollDown()

ScrollDown scrolls content. In preview tab, scrolls the preview. In diff tab, navigates to the next file if files exist, otherwise scrolls. No-op for git tab (lazygit handles its own scrolling).

func (*TabbedWindow) ScrollUp

func (w *TabbedWindow) ScrollUp()

ScrollUp scrolls content. In preview tab, scrolls the preview. In diff tab, navigates to the previous file if files exist, otherwise scrolls. No-op for git tab (lazygit handles its own scrolling).

func (*TabbedWindow) SetActiveTab

func (w *TabbedWindow) SetActiveTab(tab int)

SetActiveTab sets the active tab by index.

func (*TabbedWindow) SetFocusMode

func (w *TabbedWindow) SetFocusMode(enabled bool)

SetFocusMode enables or disables the focus/insert mode visual indicator.

func (*TabbedWindow) SetGitContent

func (w *TabbedWindow) SetGitContent(content string)

SetGitContent caches the git pane content to avoid re-rendering when unchanged.

func (*TabbedWindow) SetInstance

func (w *TabbedWindow) SetInstance(instance *session.Instance)

func (*TabbedWindow) SetPreviewContent

func (w *TabbedWindow) SetPreviewContent(content string)

SetPreviewContent sets the preview pane content directly from a pre-rendered string. Used by the embedded terminal in focus mode to bypass tmux capture-pane.

func (*TabbedWindow) SetSize

func (w *TabbedWindow) SetSize(width, height int)

func (*TabbedWindow) SetTerminalContent added in v0.2.1

func (w *TabbedWindow) SetTerminalContent(content string)

SetTerminalContent caches terminal pane content to avoid re-rendering when unchanged.

func (*TabbedWindow) String

func (w *TabbedWindow) String() string

func (*TabbedWindow) Toggle

func (w *TabbedWindow) Toggle()

func (*TabbedWindow) ToggleWithReset

func (w *TabbedWindow) ToggleWithReset(instance *session.Instance) error

ToggleWithReset toggles the tab and resets preview pane to normal mode

func (*TabbedWindow) UpdateDiff

func (w *TabbedWindow) UpdateDiff(instance *session.Instance)

func (*TabbedWindow) UpdatePreview

func (w *TabbedWindow) UpdatePreview(instance *session.Instance) error

UpdatePreview updates the content of the preview pane. instance may be nil.

type TerminalPane added in v0.2.1

type TerminalPane struct {
	// contains filtered or unexported fields
}

TerminalPane manages persistent shell tmux sessions per instance. Unlike GitPane (which kills and recreates on each spawn), TerminalPane keeps tmux sessions alive across tab switches so scrollback and processes are preserved.

func NewTerminalPane added in v0.2.1

func NewTerminalPane() *TerminalPane

func (*TerminalPane) Attach added in v0.2.1

func (t *TerminalPane) Attach(worktreePath, instanceTitle string)

Attach creates a tmux session for the instance (if needed) and connects an EmbeddedTerminal to it. If already attached to a different instance, detaches first.

func (*TerminalPane) CurrentInstance added in v0.2.1

func (t *TerminalPane) CurrentInstance() string

CurrentInstance returns the title of the currently attached instance.

func (*TerminalPane) Detach added in v0.2.1

func (t *TerminalPane) Detach()

Detach closes the EmbeddedTerminal but keeps the tmux session alive.

func (*TerminalPane) IsAttached added in v0.2.1

func (t *TerminalPane) IsAttached() bool

IsAttached returns true if an EmbeddedTerminal is active.

func (*TerminalPane) Kill added in v0.2.1

func (t *TerminalPane) Kill()

Kill detaches and kills ALL tmux sessions (app shutdown).

func (*TerminalPane) KillSession added in v0.2.1

func (t *TerminalPane) KillSession(instanceTitle string)

KillSession kills a single instance's terminal tmux session.

func (*TerminalPane) Render added in v0.2.1

func (t *TerminalPane) Render() (string, bool)

Render returns the current terminal frame content.

func (*TerminalPane) SendKey added in v0.2.1

func (t *TerminalPane) SendKey(data []byte) error

SendKey forwards raw key bytes to the EmbeddedTerminal.

func (*TerminalPane) SetSize added in v0.2.1

func (t *TerminalPane) SetSize(width, height int)

SetSize updates the dimensions and resizes the active terminal if present.

func (*TerminalPane) String added in v0.2.1

func (t *TerminalPane) String() string

String returns the current frame for display.

func (*TerminalPane) WaitForRender added in v0.2.1

func (t *TerminalPane) WaitForRender(timeout time.Duration)

WaitForRender blocks until the embedded terminal has new content or the timeout elapses.

type TopicStatus

type TopicStatus struct {
	HasRunning      bool
	HasNotification bool
}

TopicStatus holds status flags for a topic's instances.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL