4

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

如果它必须由单个应用程序实现,不同的应用程序将如何与剪贴板交互,就像从一个应用程序的窗口复制并粘贴到另一个应用程序的窗口一样......?不同的应用程序如何共享一个公共缓冲区?任何人都可以帮助在linux中实际实现剪贴板..吗?我已经通过这个链接。但是我很难找到有关实施的很多信息。

4

2 回答 2

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,它在用户选择某些东西时被断言;对于剪贴板,它是用户剪切或复制的时间。

于 2013-11-04T08:37:28.697 回答
3

剪贴板必须在X11 服务器内部实现(工具包中有很多支持代码),因为它是所有 X11 客户端共享的数据。

它由ICCCMEWMH约定定义并与桌面环境相关。它可能使用一些未预定义但通常命名为 X11 的原子(有许多这样的常规原子未在 中预定义xatom.h)。

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

freedesktop.org有很多资源,例如thiswm-spec等等等等等等……

另请参阅有关X Windows 选择X Windows 系统协议和架构XDND的维基页面并阅读X11 协议规范。

于 2013-11-04T06:01:03.360 回答