@@ -78,6 +78,10 @@ func SendLine(target, text string) {
7878 run ("tmux" , "send-keys" , "-R" , "-t " + target , "Enter" )
7979}
8080
81+ func KillSession (session string ) {
82+ run ("tmux" , "kill-session" , "-t " + session )
83+ }
84+
8185func coalesce (args ... string ) string {
8286 for _ , s := range args {
8387 if s != "" {
@@ -87,31 +91,7 @@ func coalesce(args ...string) string {
8791 return ""
8892}
8993
90- func main () {
91- var override string
92- flag .StringVar (& override , "s" , "" , "Override the config files session name." )
93- flag .Parse ()
94-
95- if flag .Arg (0 ) == "" {
96- fmt .Println ("Usage: " , os .Args [0 ], "[-s <name>] <config file>" )
97- os .Exit (1 )
98- }
99- flag .Arg (0 )
100-
101- data , err := ioutil .ReadFile (flag .Arg (0 ))
102- if err != nil {
103- log .Fatal (err )
104- }
105-
106- var project Project
107-
108- err = yaml .UnmarshalStrict (data , & project )
109- if err != nil {
110- log .Fatal (err )
111- }
112-
113- session := coalesce (override , project .Name , "new" )
114-
94+ func up (session string , project * Project ) {
11595 for wi , w := range project .Windows {
11696 target := fmt .Sprintf ("%s:%d" , session , wi )
11797 dir := coalesce (w .Dir , project .Dir , "." )
@@ -129,9 +109,50 @@ func main() {
129109 }
130110
131111 for wi , w := range project .Windows {
132- target := fmt .Sprintf ("%s:%d" , session , wi )
133112 if w .Focus {
113+ target := fmt .Sprintf ("%s:%d" , session , wi )
134114 SelectWindow (target )
135115 }
136116 }
137117}
118+
119+ func down (session string , project * Project ) {
120+ KillSession (session )
121+ }
122+
123+ var defaultFile = "tmux-compose.yml"
124+
125+ func main () {
126+ var overrideName string
127+ var composeFile string
128+ flag .StringVar (& overrideName , "s" , "" , "Override the config files session name." )
129+ flag .StringVar (& composeFile , "f" , defaultFile , "Specify an alternate compose file" )
130+ flag .Parse ()
131+
132+ if flag .Arg (0 ) == "" {
133+ fmt .Println ("Usage: " , os .Args [0 ], "[OPTIONS] <up> | <down>" )
134+ os .Exit (1 )
135+ }
136+
137+ data , err := ioutil .ReadFile (composeFile )
138+ if err != nil {
139+ log .Fatal (err )
140+ }
141+
142+ var project Project
143+
144+ err = yaml .UnmarshalStrict (data , & project )
145+ if err != nil {
146+ log .Fatal (err )
147+ }
148+
149+ session := coalesce (overrideName , project .Name , "new" )
150+ action := flag .Arg (0 )
151+
152+ switch action {
153+ case "up" :
154+ up (session , & project )
155+ case "down" :
156+ down (session , & project )
157+ }
158+ }
0 commit comments