From 189fdb5f50aef73bd668bc9151baeca4d12fe48b Mon Sep 17 00:00:00 2001 From: Toby Padilla Date: Fri, 13 Aug 2021 18:15:36 -0500 Subject: [PATCH] Allow for direct linking to a repo --- tui/bubble.go | 3 +++ tui/bubbles/selection/bubble.go | 24 ++++++++++++------------ tui/commands.go | 18 ++++++++++++++++-- tui/session.go | 30 ++++++++++++++++++------------ 4 files changed, 49 insertions(+), 26 deletions(-) diff --git a/tui/bubble.go b/tui/bubble.go index cead1f5bdb057ea456da0bb805831fba9a67d7ed..76d27945d8df3d226ff5624411f674d098feb862 100644 --- a/tui/bubble.go +++ b/tui/bubble.go @@ -42,6 +42,7 @@ type SessionConfig struct { Width int Height int WindowChanges <-chan ssh.Window + InitialRepo string } type Bubble struct { @@ -52,6 +53,7 @@ type Bubble struct { height int windowChanges <-chan ssh.Window repoSource *git.RepoSource + initialRepo string repoMenu []MenuEntry repos []*git.Repo boxes []tea.Model @@ -69,6 +71,7 @@ func NewBubble(cfg *Config, sCfg *SessionConfig) *Bubble { repoSource: cfg.RepoSource, repoMenu: make([]MenuEntry, 0), boxes: make([]tea.Model, 2), + initialRepo: sCfg.InitialRepo, } b.state = startState return b diff --git a/tui/bubbles/selection/bubble.go b/tui/bubbles/selection/bubble.go index f148acb1ef77127867bc86a5f5cfb2ea3c6af8ff..69d7c2b981e08d5597bf4ca4d37013bafa283c4b 100644 --- a/tui/bubbles/selection/bubble.go +++ b/tui/bubbles/selection/bubble.go @@ -19,7 +19,7 @@ type Bubble struct { NormalStyle lipgloss.Style SelectedStyle lipgloss.Style Items []string - selectedItem int + SelectedItem int } func NewBubble(items []string) *Bubble { @@ -37,7 +37,7 @@ func (b *Bubble) Init() tea.Cmd { func (b *Bubble) View() string { s := "" for i, item := range b.Items { - if i == b.selectedItem { + if i == b.SelectedItem { s += b.SelectedStyle.Render(item) + "\n" } else { s += b.NormalStyle.Render(item) + "\n" @@ -52,13 +52,13 @@ func (b *Bubble) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case tea.KeyMsg: switch msg.String() { case "k", "up": - if b.selectedItem > 0 { - b.selectedItem-- + if b.SelectedItem > 0 { + b.SelectedItem-- cmds = append(cmds, b.sendActiveMessage) } case "j", "down": - if b.selectedItem < len(b.Items)-1 { - b.selectedItem++ + if b.SelectedItem < len(b.Items)-1 { + b.SelectedItem++ cmds = append(cmds, b.sendActiveMessage) } case "enter": @@ -69,20 +69,20 @@ func (b *Bubble) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } func (b *Bubble) sendActiveMessage() tea.Msg { - if b.selectedItem >= 0 && b.selectedItem < len(b.Items) { + if b.SelectedItem >= 0 && b.SelectedItem < len(b.Items) { return ActiveMsg{ - Name: b.Items[b.selectedItem], - Index: b.selectedItem, + Name: b.Items[b.SelectedItem], + Index: b.SelectedItem, } } return nil } func (b *Bubble) sendSelectedMessage() tea.Msg { - if b.selectedItem >= 0 && b.selectedItem < len(b.Items) { + if b.SelectedItem >= 0 && b.SelectedItem < len(b.Items) { return SelectedMsg{ - Name: b.Items[b.selectedItem], - Index: b.selectedItem, + Name: b.Items[b.SelectedItem], + Index: b.SelectedItem, } } return nil diff --git a/tui/commands.go b/tui/commands.go index a1ebe49c19788977dd64750b998dc9cec707b1af..d249c2077e180d5f0ccf33912b9d736cd6042dcc 100644 --- a/tui/commands.go +++ b/tui/commands.go @@ -69,8 +69,22 @@ func (b *Bubble) setupCmd() tea.Msg { boxRightWidth-horizontalPadding-2, b.repoSource.GetCommits(200), ) - b.boxes[1] = b.repoMenu[0].bubble - b.activeBox = 0 + ir := -1 + if b.initialRepo != "" { + for i, me := range b.repoMenu { + if me.Repo == b.initialRepo { + ir = i + } + } + } + if ir == -1 { + b.boxes[1] = b.repoMenu[0].bubble + b.activeBox = 0 + } else { + b.boxes[1] = b.repoMenu[ir].bubble + b.repoSelect.SelectedItem = ir + b.activeBox = 1 + } b.state = loadedState return nil } diff --git a/tui/session.go b/tui/session.go index c00f6674eb330b067c60fb1239e673fbb48ead88..dff5618b5308ba6469a406f39afd34a5d3498890 100644 --- a/tui/session.go +++ b/tui/session.go @@ -45,19 +45,25 @@ func SessionHandler(reposPath string, repoPoll time.Duration) func(ssh.Session) }() return func(s ssh.Session) (tea.Model, []tea.ProgramOption) { - if len(s.Command()) == 0 { - pty, changes, active := s.Pty() - if !active { - return nil, nil - } - cfg := &SessionConfig{ - Width: pty.Window.Width, - Height: pty.Window.Height, - WindowChanges: changes, - } - return NewBubble(appCfg, cfg), []tea.ProgramOption{tea.WithAltScreen()} + cmd := s.Command() + cfg := &SessionConfig{} + switch len(cmd) { + case 0: + cfg.InitialRepo = "" + case 1: + cfg.InitialRepo = cmd[0] + default: + return nil, nil + } + pty, changes, active := s.Pty() + if !active { + fmt.Println("not active") + return nil, nil } - return nil, nil + cfg.Width = pty.Window.Width + cfg.Height = pty.Window.Height + cfg.WindowChanges = changes + return NewBubble(appCfg, cfg), []tea.ProgramOption{tea.WithAltScreen()} } }