From ed682fbbf35a2aa9df5eedce29bea0cf37f4782b Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 21 May 2015 21:14:50 +0200 Subject: Add command launcher --- runcmd/main.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 runcmd/main.go diff --git a/runcmd/main.go b/runcmd/main.go new file mode 100644 index 0000000..2d99125 --- /dev/null +++ b/runcmd/main.go @@ -0,0 +1,63 @@ +package main + +import ( + "flag" + "log" + "os/exec" + "strings" + + "dim13.org/redbutton" +) + +var cmd = flag.String("cmd", "echo ok", "cmd to run") + +type StateFn func(redbutton.Button) StateFn + +func Init(b redbutton.Button) StateFn { + if b == redbutton.Armed { + log.Println("Ready...") + return Armed + } + return Init +} + +func Armed(b redbutton.Button) StateFn { + if b == redbutton.Pressed { + log.Println("Go!") + Exec(*cmd) + return Reset + } + return Init +} + +func Reset(b redbutton.Button) StateFn { + if b == redbutton.Closed { + return Init + } + return Reset +} + +func Exec(s string) { + parts := strings.Fields(s) + cmd := exec.Command(parts[0], parts[1:]...) + out, err := cmd.CombinedOutput() + if err != nil { + log.Fatal(err) + } + log.Println(string(out)) +} + +func main() { + flag.Parse() + + dev, err := redbutton.Open() + if err != nil { + log.Fatal(err) + } + defer dev.Close() + + state := redbutton.Poll(dev) + for stateFn := Init; stateFn != nil; { + stateFn = stateFn(<-state) + } +} -- cgit v1.2.3