golang-design / clipboard

📋 cross-platform clipboard package that supports accessing text and image in Go (macOS/Linux/Windows/Android/iOS)
https://golang.design/x/clipboard
MIT License
629 stars 68 forks source link

Don't panic when headless #57

Open daonb opened 7 months ago

daonb commented 7 months ago

I've just added you're excellent package to my project and it works great on my arm mac. When I try to run my docker compose based tests it fails to compile:

clipboard_linux.c:15:10: fatal error: X11/Xlib.h: No such file or directory
   15 | #include <X11/Xlib.h>
        |          ^~~~~~~~~~~~
 compilation terminated.

Makes sense - containers don't have X. I've tried disabling CGO and got in run time:

 panic: clipboard: cannot use when CGO_ENABLED=0

It's clear the package can't do anything on a system with no clipboard, but IMHO it should be able to compile and return an error on all calls, leaving it to the calling program to handle. Like in my program's, where I want to use an environment variable as the clipboard storage so I can run and validate clipboard related tests.

changkun commented 7 months ago

Reasonable. PR welcome :)

Ikke commented 2 weeks ago

You need to make sure the relevant development headers are installed, which does not require X11 to be running. How to do that depends on the specific distribution you are using.

marevers commented 1 week ago

Second this. I am trying to use this package in a CLI I have created, but the CLI is designed to work on multiple platforms. Some of those platforms will not be able to use this package, but the CLI should still compile/run when it's being ran there. I am planning to use the clipboard.Init() check to verify and warn the user if they are trying to use clipboard functionality when they cannot.

But for that, as OP stated, whether to terminate on such an error must be left to the application, not to the module.