1
0
Fork 0
wl-clipsync/main.go

65 lines
1.4 KiB
Go
Raw Normal View History

2020-08-20 13:18:05 +00:00
package main
import (
"fmt"
"flag"
"time"
"os/exec"
"bytes"
2020-08-28 15:37:44 +00:00
"log"
2020-08-20 13:18:05 +00:00
)
func main() {
interval := flag.Duration("i", 100*time.Millisecond, "Clipboard polling interval")
2020-08-28 15:37:44 +00:00
debug := flag.Bool("d", false, "Debug output")
lotsofDebug := flag.Bool("dd", false, "Full debug")
2020-08-20 13:18:05 +00:00
flag.Parse()
fmt.Println("Starting clipboard sync")
fmt.Println("Polling interval:", *interval)
var unified string
for range time.NewTicker(*interval).C {
primary := getVal("-p")
2020-08-28 15:37:44 +00:00
if *lotsofDebug {
log.Println("Primary:", primary)
}
if primary != "" && primary != unified {
2020-08-20 13:18:05 +00:00
unified = primary
setVal(unified)
2020-08-28 15:45:00 +00:00
if *debug || *lotsofDebug {
2020-08-28 15:37:44 +00:00
fmt.Println("Setting clip to", unified)
}
continue
2020-08-20 13:18:05 +00:00
}
selection := getVal()
2020-08-28 15:37:44 +00:00
if *lotsofDebug {
log.Println("Selection:", primary)
}
if selection != "" && selection != unified {
2020-08-20 13:18:05 +00:00
unified = selection
setVal(unified, "-p")
2020-08-28 15:45:00 +00:00
if *debug || *lotsofDebug {
2020-08-28 15:37:44 +00:00
fmt.Println("Setting primary to", unified)
}
2020-08-20 13:18:05 +00:00
}
}
}
func getVal(args ...string) string {
args = append(args, "-n")
2020-08-28 15:37:44 +00:00
out, _ := exec.Command("wl-paste", args...).Output()
2020-08-20 13:18:05 +00:00
return string(out)
}
func setVal(val string, args... string) {
2020-08-28 15:37:44 +00:00
cmd := exec.Command("wl-copy", args...)
2020-08-20 13:18:05 +00:00
cmd.Stdin = bytes.NewBufferString(val)
if err := cmd.Run(); err != nil {
2020-08-28 15:37:44 +00:00
log.Printf("Failed to get paste buffer value (%v): %v", args, err)
log.Printf("Value in question: %q", val)
2020-08-20 13:18:05 +00:00
}
2020-08-28 15:37:44 +00:00
}