Nav apraksta

rn.go 1.1KB

    package main import ( "fmt" "os" "os/exec" "strings" "time" ) func main() { if len(os.Args) < 2 { fmt.Fprintf(os.Stderr, "Usage: %s <cmd> [<args>*]\n", os.Args[0]) os.Exit(1) } win := xGetActiveWindow() cmd := exec.Command(os.Args[1], os.Args[2:]...) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr start := time.Now() err := cmd.Run() duration := time.Since(start) winAfter := xGetActiveWindow() msg := fmt.Sprintf("Finished running %q in %s", cmdToString(cmd), duration) if duration > 1*time.Second && win != winAfter { notifyCompletion(msg) } fmt.Println(msg) success := true if err != nil { success = false fmt.Fprintf(os.Stderr, "Error: %s\n", err) } if !success { os.Exit(1) } } func notifyCompletion(msg string) { notifyCmd := exec.Command("notify-send", msg) notifyCmd.Run() } func xGetActiveWindow() string { cmd := exec.Command("xdotool", "getactivewindow") out, err := cmd.Output() if err != nil { return "" } return string(out) } func cmdToString(cmd *exec.Cmd) string { return strings.Join(cmd.Args, " ") }