shuttle-go/main.go

73 wiersze
1.5 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"github.com/gvalkov/golang-evdev"
)
var configFile = flag.String("config", filepath.Join(os.Getenv("HOME"), ".shuttle-go.json"), "Location to the .shuttle-go.json configuration")
var debugMode = flag.Bool("debug", false, "Show debug messages (like window titles)")
var logFile = flag.String("log-file", "", "Log to a file instead of stdout")
func main() {
flag.Parse()
if *logFile != "" {
log, err := os.Create(*logFile)
if err != nil {
os.Exit(101)
}
defer log.Close()
os.Stderr = log
os.Stdout = log
}
devicePath := "/dev/input/by-id/usb-Contour_Design_ShuttlePRO_v2-event-if00"
if len(flag.Args()) == 1 {
devicePath = flag.Arg(0)
}
fmt.Println("Using device", devicePath)
if err := LoadConfig(*configFile); err != nil {
fmt.Println("Error reading configuration:", err)
os.Exit(10)
}
go disableXInputPointer()
// X-window title change watcher
watcher := NewWindowWatcher()
if err := watcher.Setup(); err != nil {
fmt.Println("Error watching X window:", err)
os.Exit(3)
}
go watcher.Run()
// Shuttle device event receiver
dev, err := evdev.Open(devicePath)
if err != nil {
fmt.Println("Couldn't open Shuttle device:", err)
os.Exit(2)
}
fmt.Println("Ready")
mapper := NewMapper(dev)
mapper.watcher = watcher
// IF there's an `osc` driver specified, launch an OSC listener too:
go listenOSCFeedback()
for {
if err := mapper.Process(); err != nil {
fmt.Println("Error processing input events (continuing):", err)
os.Exit(123)
}
}
}