Подтвердить что ты не робот

Как буфер обмена X11 обрабатывает несколько форматов данных?

Вероятно, это случилось и с вами - иногда, когда вы копируете текст с какой-либо веб-страницы в черновик текста электронной почты в своем любимом клиенте электронной почты, вам не нравится тот факт, что наклеенная часть имеет другой шрифт/размер/вес. он каким-то образом запоминает стиль (часто изображения, когда выбрано). Как это сделать, если вы вставляете то же самое в свой любимый текстовый редактор, как Vim, нет HTML, просто обычный текст?

alt text

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

4b9b3361

Ответ 1

Приложение, которое вы копируете из рекламных форматов (в основном идентифицированных типами MIME), которые оно может предоставить. Приложение, которое вы вставляете, должно выбрать предпочтительный формат и запросить его в исходном приложении.

Причина, по которой вы не видите всю информацию о стиле, передается в том, что приложения не поддерживают общий формат, содержащий информацию о стиле.

Вы также можете видеть проблемы, потому что приложение может, например, попытаться вставить HTML, но не сможет обрабатывать весь HTML. Или приложения могут быть ошибочными или не согласны с тем, что действительно означает тип MIME.

Практически все приложения могут, конечно, копировать и вставлять простой текст, но помимо этого он прикасается и уходит. Если вы не понимаете, что имеет смысл, вы можете указать ошибку или одно из приложений.

Вы можете заметить, что если вы выйдете из приложения, с которого вы копируете, вы больше не можете вставлять его. (Если вы не используете "диспетчер буфера обмена" или что-то в этом роде.) Это связано с тем, что никакие данные фактически не покидают исходное приложение, пока целевое приложение не попросит вставить формат. Есть "менеджеры буфера обмена", которые запрашивают данные немедленно при копировании и хранении этих данных, поэтому вы можете вставлять их после выхода исходного приложения, но у них есть недостатки (что, если данные огромны или предлагаются в 10 форматах и ​​т.д.). )

Следующий код python покажет доступные форматы для данных, скопированных в текущий момент, если у вас установлен pygtk. Это приложение показывает скопированные данные ctrl + c, а не пасхальное яйцо среднего щелчка. (См. http://freedesktop.org/wiki/Specifications/ClipboardsWiki)

#!/usr/bin/python

import gtk;
clipboard = gtk.clipboard_get()
print("Current clipboard offers formats: " + str(clipboard.wait_for_targets()))

Ответ 2

Большинство систем буфера обмена позволяют хранить несколько форматов данных. Например, Adobe AIR будет читать каждый буфер обмена ОС для текстовых, текстовых, растровых и произвольных двоичных потоков данных.

Это для каждого приложения, чтобы реализовать их сами. Я уверен, что X11 использует очень похожий метод для всех других ОС/Shell.