aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runcmd/main.go63
1 files changed, 63 insertions, 0 deletions
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)
+ }
+}