30.21 Выбор систем окон

В системах окон, таких как X, данные могут передаваться между различными приложениями посредством выборов. Каждая система окон определяет произвольное количество типов выборов, каждый из которых хранит собственные данные; однако обычно используются только три: буфер обмена (clipboard), основной выбор (primary selection) и вторичный выбор (secondary selection). См. Вырезать и вставить в Руководство GNU Emacs для команд Emacs, использующих эти выборы. В этом разделе описаны низкоуровневые функции для чтения и установки выборов систем окон; см. Доступ к выборам для документации о типах выборов и форматах данных в конкретных системах окон.

Команда: gui-set-selection type data

Эта функция устанавливает выбор системы окон. Она принимает два аргумента: тип выбора type и значение, которое ему присваивается, data.

type должен быть символом; обычно это один из PRIMARY, SECONDARY или CLIPBOARD. Эти символы обычно имеют заглавные буквы, в соответствии с конвенциями X Window System. Если type равен nil, это означает PRIMARY.

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

Если data является строкой, то ее текстовые свойства могут указывать значения, используемые для отдельных типов данных. Например, если data имеет свойство с именем text/uri-list, то вызов gui-get-selection с типом данных text/uri-list приведет к использованию значения этого свойства вместо самого data.

Эта функция возвращает data.

Функция: gui-get-selection &optional type data-type

Эта функция обращается к выборам, установленным Emacs или другими программами. Она принимает два необязательных аргумента: type и data-type. По умолчанию для type, типа выбора, установлено значение PRIMARY.

Аргумент data-type указывает форму преобразования данных, которую следует использовать для преобразования необработанных данных, полученных от другой программы, в данные Lisp. По умолчанию установлено STRING. См. Выборы X для перечисления типов данных, допустимых в X, и см. Другие выборы для тех, что используются в других местах. В системе окон X мы рекомендуем всегда указывать конкретный data-type, особенно если ожидается, что выбор будет не ASCII-текстом (в этом случае программы Lisp должны предпочитать UTF8_STRING в качестве значения data-type). Это связано с тем, что значение по умолчанию data-type, STRING, может поддерживать только текст Latin-1, что во многих случаях сегодня является недостаточным.

Пользовательский вариант: selection-coding-system

Эта переменная предоставляет систему кодирования (см. Системы кодирования), которая используется для кодирования данных выбора и действует в MS-Windows и X. Она также используется в порте MS-DOS, когда он работает в MS-Windows и может получать доступ к тексту буфера обмена Windows.

В X значение этой переменной предоставляет систему кодирования, которую gui-get-selection будет использовать для декодирования данных выбора для подмножества типов текстовых данных, а также принудительно заставляет ответы на запросы выбора для полиморфного типа данных TEXT кодироваться с помощью системы кодирования compound-text-with-extensions, а не Unicode.

В MS-Windows эта переменная в целом игнорируется, поскольку буфер обмена MS-Windows предоставляет информацию о декодировании как часть данных буфера обмена и автоматически использует UTF-16 или кодировку, специфичную для локали, в зависимости от ситуации. Мы рекомендуем устанавливать значение этой переменной только в старых версиях Windows 9X, так как в противном случае она используется только в очень редких случаях, когда информация, предоставленная данными буфера обмена, по какой-либо причине непригодна.

Значение по умолчанию этой переменной — это страница кода системы в MS-Windows 98 или Me, utf-16le-dos в Windows NT/W2K/XP/Vista/7/8/10/11, iso-latin-1-dos в MS-DOS и nil в других случаях.

Для обратной совместимости существуют устаревшие псевдонимы x-get-selection и x-set-selection, которые были именами gui-get-selection и gui-set-selection до Emacs 25.1.