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