1
0
Fork 0
wl-clipsync/main.go

52 lines
968 B
Go

package main
import (
"fmt"
"flag"
"time"
"os/exec"
"bytes"
)
func main() {
interval := flag.Duration("i", 100*time.Millisecond, "Clipboard polling interval")
flag.Parse()
fmt.Println("Starting clipboard sync")
fmt.Println("Polling interval:", *interval)
var unified string
for range time.NewTicker(*interval).C {
primary := getVal("-p")
if primary != unified {
unified = primary
setVal(unified)
fmt.Println("Setting clip to", unified)
}
selection := getVal()
if selection != unified {
unified = selection
setVal(unified, "-p")
fmt.Println("Setting primary to", unified)
}
}
}
func getVal(args ...string) string {
args = append(args, "-n")
out, err := exec.Command("wl-paste", args...).Output()
if err != nil {
panic(err)
}
return string(out)
}
func setVal(val string, args... string) {
cmd := exec.Command("wl-copy")
cmd.Stdin = bytes.NewBufferString(val)
if err := cmd.Run(); err != nil {
panic(err)
}
}