7
  • первичный
  • второстепенный
  • буфер обмена
  • Вырезать буферы

В чем разница между этими?

Экспериментируя с xclip и gedit:

Настройка основного

Насколько я могу судить, ничего не происходит

Настройка вторичного

Опять же, насколько я могу судить, не влияет на гедит

Настройка буфера обмена

paste в редактировании и контекстное меню отключено, но нажатие control-v вызывает текст, который я хочу вставить.

Копирование в гедит

Похоже, что настройка primary и clipboard

Для чего используется каждый? Как они обычно доступны в программах? Как это реализовано? Являются ли они свойствами в корневом окне (если да, как их имена)?

Вырезать буферы

Я понимаю, что буферы клипа используются в xterm при выделении текста и вставляются при среднем щелчке. Используют ли другие программы буферы вырезания?

2 ответа2

7

X выборки, вырезанные буферы и кольца уничтожения

Буфер обмена: когда пользователь явно что-то скопировал (например, пункт меню «Редактировать / Копировать»).
Основной: более эфемерный и неявный: он предназначен для того, когда пользователь выделил или выделил что-то (например, перетаскивая мышку на некоторый текст).
Cut Buffers: Устаревшие. Никогда, никогда, никогда не используйте их. Когда-либо.

Secondary? Определено в ICCCCCCCM, но я не нашел ни одной программы, которая его использует.


В статье Википедии о выборе X Window говорится, что только обрезанные буферы были свойствами окна корневого окна с именем CUT_BUFFER1 и так далее.

3

X называет их "выбором", а не "буфером обмена". Из Википедии (вам наверняка поможет вся статья):

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

Между ними нет внутренней разницы, единственная разница в поведении приложений, использующих их. Например, вы могли бы написать программу, которая, когда вы нажимали ctrl v, использовала основной выбор вместо буфера обмена, и это было бы прекрасно с технической точки зрения. Разница социальная в том, что пользователи ожидают определенного поведения, и разумно следить за этим в подавляющем большинстве случаев.

Я думал, что выбор текста и щелчок средней кнопкой мыши для его вставки использует первичное выделение, а не обрезание буферов (которые устарели), но я могу ошибаться, поскольку я никогда не кодировал напрямую против протокола X.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .