189fdb5f50aef73bd668bc9151baeca4d12fe48b

Author
Toby Padilla <toby@charm.sh>
Committer
Toby Padilla <toby@charm.sh>
Date

Message

Allow for direct linking to a repo

Diff

  1diff --git a/tui/bubble.go b/tui/bubble.go
  2index cead1f5bdb057ea456da0bb805831fba9a67d7ed..76d27945d8df3d226ff5624411f674d098feb862 100644
  3--- a/tui/bubble.go
  4+++ b/tui/bubble.go
  5@@ -42,6 +42,7 @@ type SessionConfig struct {
  6 	Width         int
  7 	Height        int
  8 	WindowChanges <-chan ssh.Window
  9+	InitialRepo   string
 10 }
 11 
 12 type Bubble struct {
 13@@ -52,6 +53,7 @@ type Bubble struct {
 14 	height        int
 15 	windowChanges <-chan ssh.Window
 16 	repoSource    *git.RepoSource
 17+	initialRepo   string
 18 	repoMenu      []MenuEntry
 19 	repos         []*git.Repo
 20 	boxes         []tea.Model
 21@@ -69,6 +71,7 @@ func NewBubble(cfg *Config, sCfg *SessionConfig) *Bubble {
 22 		repoSource:    cfg.RepoSource,
 23 		repoMenu:      make([]MenuEntry, 0),
 24 		boxes:         make([]tea.Model, 2),
 25+		initialRepo:   sCfg.InitialRepo,
 26 	}
 27 	b.state = startState
 28 	return b
 29diff --git a/tui/bubbles/selection/bubble.go b/tui/bubbles/selection/bubble.go
 30index f148acb1ef77127867bc86a5f5cfb2ea3c6af8ff..69d7c2b981e08d5597bf4ca4d37013bafa283c4b 100644
 31--- a/tui/bubbles/selection/bubble.go
 32+++ b/tui/bubbles/selection/bubble.go
 33@@ -19,7 +19,7 @@ type Bubble struct {
 34 	NormalStyle   lipgloss.Style
 35 	SelectedStyle lipgloss.Style
 36 	Items         []string
 37-	selectedItem  int
 38+	SelectedItem  int
 39 }
 40 
 41 func NewBubble(items []string) *Bubble {
 42@@ -37,7 +37,7 @@ func (b *Bubble) Init() tea.Cmd {
 43 func (b *Bubble) View() string {
 44 	s := ""
 45 	for i, item := range b.Items {
 46-		if i == b.selectedItem {
 47+		if i == b.SelectedItem {
 48 			s += b.SelectedStyle.Render(item) + "\n"
 49 		} else {
 50 			s += b.NormalStyle.Render(item) + "\n"
 51@@ -52,13 +52,13 @@ func (b *Bubble) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 52 	case tea.KeyMsg:
 53 		switch msg.String() {
 54 		case "k", "up":
 55-			if b.selectedItem > 0 {
 56-				b.selectedItem--
 57+			if b.SelectedItem > 0 {
 58+				b.SelectedItem--
 59 				cmds = append(cmds, b.sendActiveMessage)
 60 			}
 61 		case "j", "down":
 62-			if b.selectedItem < len(b.Items)-1 {
 63-				b.selectedItem++
 64+			if b.SelectedItem < len(b.Items)-1 {
 65+				b.SelectedItem++
 66 				cmds = append(cmds, b.sendActiveMessage)
 67 			}
 68 		case "enter":
 69@@ -69,20 +69,20 @@ func (b *Bubble) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 70 }
 71 
 72 func (b *Bubble) sendActiveMessage() tea.Msg {
 73-	if b.selectedItem >= 0 && b.selectedItem < len(b.Items) {
 74+	if b.SelectedItem >= 0 && b.SelectedItem < len(b.Items) {
 75 		return ActiveMsg{
 76-			Name:  b.Items[b.selectedItem],
 77-			Index: b.selectedItem,
 78+			Name:  b.Items[b.SelectedItem],
 79+			Index: b.SelectedItem,
 80 		}
 81 	}
 82 	return nil
 83 }
 84 
 85 func (b *Bubble) sendSelectedMessage() tea.Msg {
 86-	if b.selectedItem >= 0 && b.selectedItem < len(b.Items) {
 87+	if b.SelectedItem >= 0 && b.SelectedItem < len(b.Items) {
 88 		return SelectedMsg{
 89-			Name:  b.Items[b.selectedItem],
 90-			Index: b.selectedItem,
 91+			Name:  b.Items[b.SelectedItem],
 92+			Index: b.SelectedItem,
 93 		}
 94 	}
 95 	return nil
 96diff --git a/tui/commands.go b/tui/commands.go
 97index a1ebe49c19788977dd64750b998dc9cec707b1af..d249c2077e180d5f0ccf33912b9d736cd6042dcc 100644
 98--- a/tui/commands.go
 99+++ b/tui/commands.go
100@@ -69,8 +69,22 @@ func (b *Bubble) setupCmd() tea.Msg {
101 		boxRightWidth-horizontalPadding-2,
102 		b.repoSource.GetCommits(200),
103 	)
104-	b.boxes[1] = b.repoMenu[0].bubble
105-	b.activeBox = 0
106+	ir := -1
107+	if b.initialRepo != "" {
108+		for i, me := range b.repoMenu {
109+			if me.Repo == b.initialRepo {
110+				ir = i
111+			}
112+		}
113+	}
114+	if ir == -1 {
115+		b.boxes[1] = b.repoMenu[0].bubble
116+		b.activeBox = 0
117+	} else {
118+		b.boxes[1] = b.repoMenu[ir].bubble
119+		b.repoSelect.SelectedItem = ir
120+		b.activeBox = 1
121+	}
122 	b.state = loadedState
123 	return nil
124 }
125diff --git a/tui/session.go b/tui/session.go
126index c00f6674eb330b067c60fb1239e673fbb48ead88..dff5618b5308ba6469a406f39afd34a5d3498890 100644
127--- a/tui/session.go
128+++ b/tui/session.go
129@@ -45,19 +45,25 @@ func SessionHandler(reposPath string, repoPoll time.Duration) func(ssh.Session)
130 	}()
131 
132 	return func(s ssh.Session) (tea.Model, []tea.ProgramOption) {
133-		if len(s.Command()) == 0 {
134-			pty, changes, active := s.Pty()
135-			if !active {
136-				return nil, nil
137-			}
138-			cfg := &SessionConfig{
139-				Width:         pty.Window.Width,
140-				Height:        pty.Window.Height,
141-				WindowChanges: changes,
142-			}
143-			return NewBubble(appCfg, cfg), []tea.ProgramOption{tea.WithAltScreen()}
144+		cmd := s.Command()
145+		cfg := &SessionConfig{}
146+		switch len(cmd) {
147+		case 0:
148+			cfg.InitialRepo = ""
149+		case 1:
150+			cfg.InitialRepo = cmd[0]
151+		default:
152+			return nil, nil
153+		}
154+		pty, changes, active := s.Pty()
155+		if !active {
156+			fmt.Println("not active")
157+			return nil, nil
158 		}
159-		return nil, nil
160+		cfg.Width = pty.Window.Width
161+		cfg.Height = pty.Window.Height
162+		cfg.WindowChanges = changes
163+		return NewBubble(appCfg, cfg), []tea.ProgramOption{tea.WithAltScreen()}
164 	}
165 }
166