@@ -128,6 +128,9 @@ func (sh *SessionHandler) NewSession() error {
128
128
return fmt .Errorf ("failed to create new project from projects: %w" , err )
129
129
}
130
130
sessionName := strings .Trim (fzfOut .String (), "\n " )
131
+ if sh .isInSession () {
132
+ return sh .switchToNewClient (sessionName , projectHashMap [sessionName ])
133
+ }
131
134
if sh .sessionExists (sessionName ) {
132
135
return sh .attach (sessionName )
133
136
}
@@ -161,6 +164,25 @@ func (sh *SessionHandler) attach(sessionName string) error {
161
164
return nil
162
165
}
163
166
167
+ func (sh * SessionHandler ) switchClient (sessionName string ) error {
168
+ cmd := sh .newTmuxCmd ("tmux" , "switch-client" , "-t" , sessionName )
169
+ if err := cmd .Run (); err != nil {
170
+ return fmt .Errorf ("failed to execute tmux switch-client -t: %w" , err )
171
+ }
172
+ return nil
173
+ }
174
+
175
+ func (sh * SessionHandler ) switchToNewClient (sessionName , path string ) error {
176
+ if sh .sessionExists (sessionName ) {
177
+ return sh .switchClient (sessionName )
178
+ }
179
+ cmd := sh .newTmuxCmd ("tmux" , "new-session" , "-ds" , sessionName , "-c" , path )
180
+ if err := cmd .Run (); err != nil {
181
+ return fmt .Errorf ("failed to execute tmux new-sessio -ds %v -c %v: %w" , sessionName , path , err )
182
+ }
183
+ return sh .switchClient (sessionName )
184
+ }
185
+
164
186
func (sh * SessionHandler ) toFzf (input bytes.Buffer ) (bytes.Buffer , error ) {
165
187
fzfCmd := exec .Command ("fzf" )
166
188
fzfCmd .Stdin = & input
@@ -184,8 +206,15 @@ func (sh *SessionHandler) GrabExistingSession() error {
184
206
return fmt .Errorf ("failed to execute fzf command: %w" , err )
185
207
}
186
208
selected := strings .TrimSpace (fzfOut .String ())
209
+ if sh .isInSession () {
210
+ return sh .switchClient (selected )
211
+ }
187
212
if err := sh .attach (selected ); err != nil {
188
- return fmt .Errorf ("failed to attache an existing session: %w" , err )
213
+ return fmt .Errorf ("failed to attach an existing session: %w" , err )
189
214
}
190
215
return nil
191
216
}
217
+
218
+ func (sh * SessionHandler ) isInSession () bool {
219
+ return len (os .Getenv ("TMUX" )) > 0
220
+ }
0 commit comments