@@ -19,6 +19,7 @@ type ISessionHandler interface {
19
19
NewSession (ctx context.Context ) error
20
20
GrabExistingSession (ctx context.Context ) error
21
21
CreateNewProjectSession (ctx context.Context ) error
22
+ DeleteProjectSession (ctx context.Context ) error
22
23
}
23
24
24
25
type SessionHandler struct {}
@@ -329,6 +330,34 @@ func (sh *SessionHandler) CreateNewProjectSession(ctx context.Context) error {
329
330
return nil
330
331
}
331
332
333
+ func (sh * SessionHandler ) getSessionInfoToDelete (existingProjects []string ) (string , error ) {
334
+ deleteSessionPrompt := promptui.Select {
335
+ Label : "Which tmux session do you want to delete?" ,
336
+ Items : existingProjects ,
337
+ }
338
+ _ , deleteSessionName , err := deleteSessionPrompt .Run ()
339
+ if err != nil {
340
+ return "" , err
341
+ }
342
+ return deleteSessionName , nil
343
+ }
344
+
345
+ func (sh * SessionHandler ) DeleteProjectSession (ctx context.Context ) error {
346
+ out , err := exec .Command ("tmux" , "list-sessions" , "-F" , "#{session_name}" ).Output ()
347
+ if err != nil {
348
+ return fmt .Errorf ("failed to execute tmux list-sessions cmd: %w" , err )
349
+ }
350
+ sessions := strings .Split (strings .TrimSpace (string (out )), "\n " )
351
+ deleteSession , err := sh .getSessionInfoToDelete (sessions )
352
+ if err != nil {
353
+ return fmt .Errorf ("failed to get a session name to delete: %w" , err )
354
+ }
355
+ if err = sh .newTmuxCmd ("tmux" , "kill-session" , "-t" , deleteSession ).Run (); err != nil {
356
+ return fmt .Errorf ("failed to kill session: %w" , err )
357
+ }
358
+ return nil
359
+ }
360
+
332
361
func (sh * SessionHandler ) isInSession () bool {
333
362
return len (os .Getenv ("TMUX" )) > 0
334
363
}
0 commit comments