Spec-Zone.ru › Elisp

Выборки X

X не задаёт фиксированные типы данных для данных выборки или фиксированное число выборок. Выборки идентифицируются «атомами» X — уникальными 29-битными идентификаторами, которые сервер X назначает строковым именам. Эта сложность скрыта от Emacs: когда Lisp предоставляет символ, имя которого совпадает с именем атома, Emacs запрашивает соответствующие идентификаторы без дополнительного вмешательства.

Когда программа «устанавливает» выборку в X, она фактически становится её «владельцем»: сервер X будет передавать программе запросы выборки, а программа обязана ответить запрашивающему клиенту данными выборки.

Аналогично, программа не «получает» данные выборки от сервера X. Вместо этого её запросы выборки отправляются клиенту, окно которого последним заявило права на эту выборку; предполагается, что он ответит запрошенными данными.

Каждый запрос выборки включает три параметра:

  • Окно, запросившее выборку и идентифицирующее запрашивающую программу, также называемую запрашивающей стороной.
  • Атом, идентифицирующий целевой формат, в который владелец должен преобразовать выборку. Проще всего считать целевой формат преобразования типом данных, который нужен запрашивающей стороне: в запросах выборки, выполняемых Emacs, целевой формат определяется аргументом type функции gui-get-selection.
  • 32-битная метка времени, представляющая время на сервере X, когда запрашивающая сторона в последний раз получила ввод; этот параметр не имеет отношения к коду Lisp, поскольку он предназначен только для содействия синхронизации между сервером X, владельцем и запрашивающей стороной.

Владелец выборки отвечает, передавая запрашивающей стороне последовательность байтов, 16-битных слов или 32-битных слов, а также другой атом, указывающий тип этих слов. После запроса выборки Emacs применяет собственную интерпретацию формата и типа данных, чтобы преобразовать данные, переданные владельцем выборки, в представление Lisp, которое возвращает gui-get-selection.

Данные выборки, состоящие из последовательности байтов любого размера, Emacs преобразует в однобайтную строку, содержащую эти байты; данные, состоящие из одного 16-битного или 32-битного слова, — в беззнаковое число; а данные, состоящие из нескольких таких слов, — в вектор беззнаковых чисел. Исключения из этого общего правила связаны с особой обработкой данных для следующих целевых форматов преобразования:

INTEGER

16-битные или 32-битные слова этого типа рассматриваются как знаковые, а не беззнаковые целые числа. Если данные выборки содержат несколько слов, возвращается вектор; в противном случае возвращается само целое число.

ATOM

32-битные слова этого типа рассматриваются как атомы X и возвращаются (по отдельности или в виде векторов) как символы Lisp, соответствующие обозначаемым ими именам. Недопустимые атомы заменяются на nil.

COMPOUND_TEXT
UTF8_STRING
STRING

В однобайтные строки, полученные в результате запроса этих типов данных, будет помещено единственное текстовое свойство foreign-selection, значение которого задаётся типом данных выборки.

Каждый владелец выборки должен возвращать как минимум два целевых формата: TARGETS, который возвращает набор атомов, описывающих поддерживаемые владельцем целевые форматы выборки, и MULTIPLE, используемый клиентами X для внутренних целей. Владелец выборки может поддерживать любое количество других целевых форматов: некоторые из них могут быть стандартизированы в руководстве по соглашениям межклиентского взаимодействия консорциума X, другие же, например UTF8_STRING, предполагалось стандартизировать в проекте XFree86, однако стандартизация так и не была завершена.

По соглашению запросы определённого целевого формата выборки могут возвращать данные конкретного типа или данные одного из нескольких типов — того, который удобнее владельцу выборки; такие целевые форматы выборки называют полиморфными целевыми форматами. В ответ на запрос целевой формат выборки также может вообще не возвращать данные, после чего владелец выборки выполняет какое-либо действие в качестве побочного эффекта. Такие целевые форматы, на запросы которых отправляется подобный ответ, называют целевыми форматами с побочным эффектом.

Ниже перечислены целевые форматы выборки, поведение которых, как правило, соответствует стандарту при запросе выборок CLIPBOARD, PRIMARY или SECONDARY.

ADOBE_PORTABLE_DOCUMENT_FORMAT

Этот целевой формат возвращает данные в виде строки в формате Adobe Systems «Portable Document Format».

APPLE_PICT

Этот целевой формат возвращает данные в виде строки в графическом формате «PICT», используемом на компьютерах Macintosh.

BACKGROUND
BITMAP
COLORMAP
FOREGROUND

В совокупности эти четыре целевых формата возвращают целочисленные данные, необходимые для использования растрового изображения, хранящегося на сервере X: значение пикселя фонового цвета растрового изображения, идентификатор X растрового изображения, цветовую карту, в которой выделены фоновый цвет и цвет переднего плана, и значение пикселя цвета переднего плана растрового изображения.

CHARACTER_POSITION

Этот целевой формат возвращает два беззнаковых 32-битных целых числа типа SPAN, описывающих начальную и конечную позиции данных выборки в содержащем их текстовом поле, в байтах.

COMPOUND_TEXT

Этот целевой формат возвращает строку типа COMPOUND_TEXT в многобайтовой системе кодирования текста консорциума X.

DELETE

Этот целевой формат ничего не возвращает, но в качестве побочного эффекта удаляет содержимое выборки из любого текстового поля, в котором оно находится.

DRAWABLE
PIXMAP

Этот целевой формат возвращает список беззнаковых 32-битных целых чисел, каждое из которых соответствует рисуемому объекту или пиксмапе сервера X.

ENCAPSULATED_POSTSCRIPT
_ADOBE_EPS

Этот целевой формат возвращает строку, содержащую инкапсулированный код PostScript.

FILE_NAME

Этот целевой формат возвращает строку, содержащую одно или несколько имён файлов, разделённых нулевыми символами.

HOST_NAME

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

USER

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

LENGTH

Этот целевой формат возвращает беззнаковое 32-битное или 16-битное целое число, содержащее длину данных выборки.

LINE_NUMBER

Этот целевой формат возвращает два беззнаковых 32-битных целых числа типа SPAN, описывающих номера строк, соответствующих начальной и конечной позициям данных выборки в содержащем их текстовом поле.

MODULE

Этот целевой формат возвращает имя любой функции, содержащей данные выборки. В основном его запрашивают текстовые редакторы.

STRING

Этот целевой формат возвращает данные выборки в виде строки типа STRING, закодированной в формате ISO Latin-1, с символами новой строки Unix.

C_STRING

Этот целевой формат возвращает данные выборки в виде «строки C». Это трактовалось как необработанные данные выборки в кодировке, используемой владельцем, с завершающим нулевым байтом или без него, либо как строка ASCII, которая может иметь или не иметь завершающий символ.

UTF8_STRING

Этот целевой формат возвращает данные выборки в виде строки типа UTF8_STRING, закодированной в UTF-8, с неопределённым форматом конца строки.

TIMESTAMP

Этот целевой формат возвращает время на сервере X, когда владелец выборки получил права на неё, в виде 16-битного или 32-битного слова типа CARDINAL.

TEXT

Этот полиморфный целевой формат возвращает данные выборки в виде строки одного из типов: COMPOUND_TEXT, STRING, C_STRING или UTF8_STRING — того, который удобнее владельцу выборки.

Если запрос целевых форматов STRING, COMPOUND_TEXT или UTF8_STRING выполняется с помощью функции gui-get-selection, а ни selection-coding-system, ни next-selection-coding-system не установлены, полученные строки декодируются с помощью соответствующих этим целевым форматам систем кодирования: iso-8859-1, compound-text-with-extensions и utf-8 соответственно.

Помимо перечисленных выше целевых форматов (и множества форматов, используемых различными программами для собственных нужд), несколько популярных программ и наборов инструментов определили собственные типы данных выборок, не консультируясь с соответствующими органами по стандартизации X. Такие целевые форматы обычно называются по MIME-типам, например text/html или image/jpeg; известно, что они возвращают данные следующих видов:

  • Имена файлов изображений или текстовых файлов без завершающего символа, с завершающим символом новой строки или с завершающим нулевым символом.
  • Данные изображения или текста в соответствующем формате.
  • URI file:// (или, возможно, списки URI, завершающиеся символом новой строки или нулевым символом), идентифицирующие файлы соответствующего формата.

Эти целевые форматы выборки впервые использовались в Netscape, но теперь их предлагают самые разные программы, особенно основанные на новых версиях наборов инструментов GTK+ или Qt.

Emacs также может выступать владельцем выборки. При вызове gui-set-selection предоставленные данные выборки сохраняются внутри Emacs, и Emacs получает права на устанавливаемую выборку.

Переменная: selection-converter-alist

Список ассоциаций целевых форматов выборки с функциями «преобразования выборки». Получив запрос выборки, Emacs ищет функцию преобразования выборки, соответствующую запрошенному целевому формату.

Функции преобразования выборки вызываются с тремя аргументами: символом, соответствующим атому, идентифицирующему запрошенную выборку; запрошенным целевым форматом выборки; и значением, заданным с помощью gui-set-selection. Они должны возвращать либо пары cons, состоящие из символов, обозначающих тип данных, и чисел, символов или векторов чисел либо символов, либо сами cdr таких пар.

Если функция преобразования выборки возвращает специальный символ NULL, тип данных, возвращаемый запрашивающей стороне, устанавливается в NULL, и в ответ данные не отправляются.

Если возвращённое значение является строкой, она должна быть однобайтной; если тип данных явно не указан, данные передаются запрашивающей стороне с типом STRING.

Если возвращённое значение является символом, извлекается его «атом», и он передаётся запрашивающей стороне в виде 32-битного значения. Если тип данных не указан, используется тип ATOM.

Если возвращённое значение — число между -32769 и 32768, оно передаётся запрашивающей стороне в виде 16-битного значения. Если тип данных не указан, используется тип INTEGER.

Любое другое число считается 32-битным значением. Даже если возвращённое число является беззнаковым, запрашивающая сторона будет считать слова типа INTEGER знаковыми. Чтобы вернуть беззнаковое значение, вместо него укажите тип CARDINAL.

Если возвращённое значение — вектор символов или чисел, запрашивающая сторона получит список из нескольких атомов или чисел. Если тип данных явно не указан, используется тип первого элемента списка.

По умолчанию Emacs настроен на использование функций преобразования выборки для следующих целевых форматов:

TEXT

Эта функция преобразования выборки возвращает данные выборки в виде:

  • Строки типа C_STRING, если содержимое выборки не содержит многобайтных символов или содержит «необработанные 8-битные байты» (см. Представления текста).
  • Строки типа STRING, если содержимое выборки можно представить в виде текста ISO-Latin-1.
  • Строки типа COMPOUND_TEXT, если содержимое выборки можно закодировать с помощью составной кодировки текста консорциума X, а для selection-coding-system или next-selection-coding-system задана система кодирования, свойство :mime-charset которой имеет значение x-ctext.
  • В противном случае — строки типа UTF8_STRING.
COMPOUND_TEXT

Эта функция преобразования выборки возвращает данные выборки в виде строки типа COMPOUND_TEXT.

STRING

Эта функция преобразования выборки возвращает данные выборки в виде строки типа STRING, закодированной в формате ISO-Latin-1.

UTF8_STRING

Эта функция преобразования выборки возвращает данные выборки в формате UTF-8.

text/plain
text/plain;charset=utf-8
text/uri-list
text/x-xdnd-username
XmTRANSFER_SUCCESS
XmTRANSFER_FAILURE
FILE
_DT_NETFILE

Эти функции преобразования выборки используются для внутренних целей при перетаскивании и недоступны для выборок, отличных от XdndSelection.

TARGETS

Эта функция преобразования выборки возвращает список атомов — по одному для каждого целевого формата выборки, поддерживаемого Emacs.

MULTIPLE

Эта функция преобразования выборки реализована на языке C и используется для эффективной обработки запросов выборки, в которых одновременно указано несколько целевых форматов.

LENGTH

Эта функция преобразования выборки возвращает длину данных выборки в байтах.

DELETE

Эта функция преобразования выборки используется для внутренних целей при перетаскивании.

FILE_NAME

Эта функция преобразования выборки возвращает имя файла буфера, содержащего данные выборки.

CHARACTER_POSITION

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

LINE_NUMBER
COLUMN_NUMBER

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

OWNER_OS

Эта функция преобразования выборки возвращает название операционной системы, в которой работает Emacs.

HOST_NAME

Эта функция преобразования выборки возвращает полное доменное имя компьютера, на котором работает Emacs.

USER

Эта функция преобразования выборки возвращает имя пользователя учётной записи, от имени которой работает Emacs.

CLASS
NAME

Эти функции преобразования выборки возвращают класс и имя ресурса, используемые Emacs.

INTEGER

Эта функция преобразования выборки возвращает целочисленное значение без изменений.

SAVE_TARGETS
_EMACS_INTERNAL

Эти функции преобразования выборки используются для внутренних целей.

За исключением INTEGER, все функции преобразования выборки ожидают, что данные, предоставленные gui-set-selection, будут иметь один из следующих видов:

  • Строка.
  • Список вида (beg end buf), где beg и end — два маркера или наложения, задающие границы данных выборки в буфере buf.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/X-Selections.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API