ICCCM定义了三个选项1)主要2)辅助3)剪贴板。但是在xlib中,xatom.h只定义了XA_PRIMARY和XA_SECONDARY,但剪贴板没有这样的原子。所以我怀疑剪贴板是由xlib实现还是必须由主要和次要的个别应用程序实现?
如果它必须由各个应用程序实现,那么不同的应用程序如何与剪贴板交互,如同从一个应用程序的窗口复制并粘贴到另一个应用程序的窗口......?不同应用程序如何共享公共缓冲区?任何人都可以帮助在Linux中实际执行剪贴板..?我已经完成了这个 link 。但我发现有很多关于实施的信息。
答案 0 :(得分:4)
bash $ xlsatoms | fgrep CLIPBOARD
231 CLIPBOARD
bash $ fgrep -r XA_CLIPBOARD /usr/include/X11
/usr/include/X11/Xmu/Atoms.h: _XA_CLIPBOARD,
/usr/include/X11/Xmu/Atoms.h:#define XA_CLIPBOARD(d) XmuInternAtom(d, _XA_CLIPBOARD)
所以我们有一个原子,没问题。您也可以按名称实习。
CLIPBOARD选择的实现方式与其他选择完全相同。唯一的区别是选择所有权被断言的时刻。对于PRIMARY,当用户选择某事时它被断言;对于CLIPBOARD,当用户剪切或复制时。
答案 1 :(得分:3)
剪贴板必须在里面 X11 server实现(工具包中有很多支持代码),因为它是所有X11客户端共享的数据。
它由ICCCM和EWMH约定定义,并与desktop environment相关。它可能使用一些非预定义但常规命名的X11原子(xatom.h
中没有预定义的许多此类常规原子。)
您最好使用一些现有的工具包,如Qt或Gtk(或FOX或FLTK)。它们是免费软件,如果你真的想要,你可以看看里面。对于Qt,请查看QClipboard,对于GTK,请查看GtkClipboard。因此,您并不真正关心使用哪些原子和X11协议来实现它们。
freedesktop.org有很多资源,例如this,或wm-spec等等......
另请参阅X Windows selection,X Windows System protocol and architecture,XDND上的wikipages并阅读X11 protocol规范。