Введение

Выборы, буферы обмена и перетаскивание — это механизмы, используемые в X Window System для передачи данных из одного окна в другое. Выборы и буферы обмена обычно используются, когда пользователь выделяет текст или другие данные в одном окне и вставляет их в другое. Перетаскивание используется, когда пользователь выделяет объект в окне, затем нажимает на выделенное и перетаскивает его в другое окно. Поскольку два окна могут управляться разными приложениями, эти механизмы требуют обмена данными между двумя клиентами, подключенными к одному и тому же X-серверу. Основной протокол X Window System включает некоторые запросы и события, специфичные для обмена данными через выборы, но передача данных в основном осуществляется посредством отправки событий и свойств окон, которые не являются специфичными для этой операции. Могут передаваться различные типы данных: как правило, это текст, но также это могут быть изображения, числа, списки объектов и т.д. Далее рассматривается только случай передачи текста.

Скриншот

Наиболее часто используемым выбором является PRIMARY, который используется, когда пользователь выделяет данные. Выбор CLIPBOARD используется, когда пользователь выделяет данные и явно запрашивает их копирование в буфер обмена, например, через команду "Копировать" в меню "Редактировать" приложения. Последующий запрос "Вставить" приводит к использованию данных, находящихся в CLIPBOARD. На уровне базового протокола PRIMARY и CLIPBOARD не различаются. Однако клиент xclipboard заставляет их работать по-разному. В частности, когда другой клиент получает право владения выбором CLIPBOARD, эта программа запрашивает его и отображает в окне. Все последующие запросы к этому выбору обрабатываются xclipboard. Таким образом, содержимое выбора сохраняется после завершения работы клиента, который его скопировал.

Буферы для резки

Буферы срезки — это еще один механизм передачи данных, в частности выделенного текста. Они являются свойствами корневого окна, имеющими имена CUT BUFFER1 и т.д. В отличие от выборок, буферы срезки не предполагают прямого взаимодействия между клиентами. Вместо этого, когда текст выделен в окне, владелец окна копирует этот текст в свойство корневого окна с именем CUT BUFFER1. Когда пользователь вставляет текст в другое окно, владелец окна считывает это свойство корневого окна. Программа xcutsel осуществляет передачу данных между выборками и буферами срезки, а программа xcb предоставляет различные способы доступа к буферам срезки. Буферы срезки считаются устаревшими.