Это буфер обмена, реализованный в xlib или для отдельных приложений
ICCCM определил три варианта: 1) первичный 2) вторичный 3) буфер обмена. Но в xlib xatom.h определил только XA_PRIMARY и XA_SECONDARY, но в буфере обмена такого атома нет. Поэтому я сомневаюсь, реализован ли буфер обмена в xlib или должен быть реализован отдельными приложениями, такими как первичное и вторичное?
Если это должно быть реализовано отдельными приложениями, как разные приложения будут взаимодействовать с буфером обмена, как при копировании из окна одного приложения и вставке в окно другого приложения? Как общий буфер используется разными приложениями? Кто-нибудь может помочь с реальной реализацией буфера обмена в Linux..? Я прошел по этой ссылке. Но я не могу найти много информации о реализации.
2 ответа
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 - это когда пользователь режет или копирует.
Буфер обмена должен быть реализован внутри сервера X11 (с большим количеством поддерживающего кода в наборах инструментов), просто потому, что это данные, используемые всеми клиентами X11.
Он определяется конвенциями ICCCM и EWMH и относится к среде рабочего стола. Он может использовать некоторые не предопределенные, но условно названные атомы X11 (есть много таких условных атомов, не предопределенных в xatom.h
).
Вам лучше использовать какой-нибудь существующий инструментарий, такой как Qt или Gtk (или FOX или FLTK). Это бесплатное программное обеспечение, и вы можете заглянуть внутрь, если вы действительно хотите. Для Qt посмотрите на QClipboard, для GTK посмотрите на GtkClipboard. Так что вас не волнует, какие атомы и протокол X11 используются для их реализации.
http://freedesktop.org/ много ресурсов, например, это или wm-spec и т. д. и т. д. и т. д.
См. Также вики-страницы по выбору X Windows, системному протоколу и архитектуре X Windows, XDND и ознакомьтесь со спецификациями протокола X11.