browser: small new package
Move browser opening functionality from dockerimg to a new browser package.
Updated all references to use browser.Open directly.
This avoids importing dockerimg widely.
Co-Authored-By: sketch <hello@sketch.dev>
diff --git a/browser/browser.go b/browser/browser.go
new file mode 100644
index 0000000..f6e1443
--- /dev/null
+++ b/browser/browser.go
@@ -0,0 +1,30 @@
+// Package browser provides functions for opening URLs in a web browser.
+package browser
+
+import (
+ "context"
+ "fmt"
+ "os"
+ "os/exec"
+ "runtime"
+)
+
+// Open opens the specified URL in the system's default browser.
+// It detects the OS and uses the appropriate command:
+// - 'open' for macOS
+// - 'cmd /c start' for Windows
+// - 'xdg-open' for Linux and other Unix-like systems
+func Open(ctx context.Context, url string) {
+ var cmd *exec.Cmd
+ switch runtime.GOOS {
+ case "darwin":
+ cmd = exec.CommandContext(ctx, "open", url)
+ case "windows":
+ cmd = exec.CommandContext(ctx, "cmd", "/c", "start", url)
+ default: // Linux and other Unix-like systems
+ cmd = exec.CommandContext(ctx, "xdg-open", url)
+ }
+ if b, err := cmd.CombinedOutput(); err != nil {
+ fmt.Fprintf(os.Stderr, "failed to open browser: %v: %s\n", err, b)
+ }
+}