Как буфер обмена X11 обрабатывает несколько форматов данных? - PullRequest
31 голосов
/ 26 августа 2010

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

alt text

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

1 Ответ

27 голосов
/ 26 августа 2010

Приложение, которое вы копируете из рекламных форматов (в основном идентифицируемых 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()))
...