ICCCM定义了三个选项1)主要2)次要3)剪贴板。但是在xlib中,xatom.h只定义了XA_PRIMARY和XA_SECONDARY,但是剪贴板没有这样的原子。所以我的疑问是,剪贴板是由xlib实现的,还是必须由主应用程序和辅助应用程序实现的?
如果它必须由单独的应用程序实现,那么不同的应用程序如何与剪贴板进行交互,例如从一个应用程序的窗口复制并粘贴到另一个应用程序的窗口。不同的应用程序如何共享一个公共缓冲区?有没有人能帮助我们在linux中实现剪贴板?我已经经历了这个 link 。但我找不到太多关于实现的信息。
发布于 2013-11-04 16:37:29
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)所以我们有一个原子,没有问题。你也可以直接按名字来实习生。
剪贴板选择的实现方式与其他选择完全相同。唯一的区别是断言选择所有权的时刻。对于PRIMARY,它在用户选择某些内容时被断言;对于CLIPBOARD,它在用户剪切或复制时被断言。
发布于 2013-11-04 14:01:03
剪贴板必须在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规范。
https://stackoverflow.com/questions/19762302
复制相似问题