是由xlib实现的剪贴板或由各个应用程序实现的剪贴板

时间:2013-11-04 05:44:02

标签: linux clipboard x11 xlib icccm

ICCCM定义了三个选项1)主要2)辅助3)剪贴板。但是在xlib中,xatom.h只定义了XA_PRIMARY和XA_SECONDARY,但剪贴板没有这样的原子。所以我怀疑剪贴板是由xlib实现还是必须由主要和次要的个别应用程序实现?

如果它必须由各个应用程序实现,那么不同的应用程序如何与剪贴板交互,如同从一个应用程序的窗口复制并粘贴到另一个应用程序的窗口......?不同应用程序如何共享公共缓冲区?任何人都可以帮助在Linux中实际执行剪贴板..?我已经完成了这个 link 。但我发现有很多关于实施的信息。

2 个答案:

答案 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客户端共享的数据。

它由ICCCMEWMH约定定义,并与desktop environment相关。它可能使用一些非预定义但常规命名的X11原子(xatom.h中没有预定义的许多此类常规原子。)

您最好使用一些现有的工具包,如Qt或Gtk(或FOX或FLTK)。它们是免费软件,如果你真的想要,你可以看看里面。对于Qt,请查看QClipboard,对于GTK,请查看GtkClipboard。因此,您并不真正关心使用哪些原子和X11协议来实现它们。

freedesktop.org有很多资源,例如this,或wm-spec等等......

另请参阅X Windows selectionX Windows System protocol and architectureXDND上的wikipages并阅读X11 protocol规范。