выбор
-
ИМЯ
- выбор — Управление выбором X
- СИНТАКСИС
- ОПИСАНИЕ
-
выбор очистить ?-дисплей окно? ?-выбор выбор?
- выбор получить ?-дисплей окно? ?-выбор выбор? ?-тип тип?
- выбор обработать ?-выбор s? ?-тип t? ?-формат f? окно команда
- выбор получить ?-дисплей окно? ?-выбор выбор?
- выбор получить ?-команда команда? ?-выбор выбор? окно
- выбор получить ?-дисплей окно? ?-выбор выбор? ?-тип тип?
Имя
выбор — Управление выбором XСинтаксис
выбор опция ?аргумент аргумент ...?Описание
Эта команда предоставляет Tcl-интерфейс к механизму X-выбора и реализует полную функциональность выбора, описанную в Руководстве по межклиентским соглашениям связи X (ICCCM).Обратите внимание, что для управления выбором CLIPBOARD (см. ниже), также можно использовать команду clipboard.
Первый аргумент команды выбор определяет формат остальных аргументов и поведение команды. В настоящее время поддерживаются следующие формы:
- выбор очистить ?-дисплей окно? ?-выбор выбор?
- Если выбор существует где-либо на дисплее окна, очистите его, чтобы ни одно окно больше не владело выбором. Выбор определяет X-выбор, который должен быть очищен, и должен быть именем атома, таким как PRIMARY или CLIPBOARD; см. Руководство по межклиентским соглашениям связи для получения подробной информации. Выбор по умолчанию — PRIMARY, а окно — “.”. Возвращает пустую строку.
- выбор получить ?-дисплей окно? ?-выбор выбор? ?-тип тип?
- Извлекает значение выбора с дисплея окна и возвращает его в качестве результата. Выбор по умолчанию — PRIMARY, а окно — “.”. Тип определяет форму, в которой выбор должен быть возвращён (желаемая «цель» преобразования в терминологии ICCCM), и должен быть именем атома, таким как STRING или FILE_NAME; см. Руководство по межклиентским соглашениям связи для получения подробной информации. Тип по умолчанию — STRING. Владелец выбора может выбрать возврат выбора в нескольких форматах представления, таких как STRING, UTF8_STRING, ATOM, INTEGER и т.д. (форма отличается от типа выбора; см. ICCCM для всех путающих деталей). Если выбор возвращается в формате, отличном от строки, таком как INTEGER или ATOM, команда выбор преобразует его в строковый формат как набор полей, разделённых пробелами: атомы преобразуются в их текстовые имена, а всё остальное — в шестнадцатеричные целые числа. Обратите внимание, что команда выбор получить не извлекает выбор в формате UTF8_STRING, если не указано иначе.
- выбор обработать ?-выбор s? ?-тип t? ?-формат f? окно команда
- Создаёт обработчик запросов выбора, так что команда будет выполняться всякий раз, когда выбор s принадлежит окну, и кто-то пытается получить его в форме, заданной типом t (например, t задаётся в команде выбор получить). S по умолчанию — PRIMARY, t — STRING, а f — STRING. Если команда — пустая строка, то любой существующий обработчик для окна, t и s удаляется. Обратите внимание, что при обработке выбора как типа STRING он также автоматически обрабатывается как тип UTF8_STRING.
Когда запрашивается выбор, окно является владельцем выбора, а тип — запрошенным типом, команда будет выполнена как Tcl-команда с двумя дополнительными числами, добавленными к ней (с разделителями пробелов). Два дополнительных числа — смещение и maxChars: смещение указывает начальную позицию символа в выборе, а maxChars задаёт максимальное количество символов для извлечения. Команда должна возвращать значение, состоящее не более чем из maxChars выбора, начиная с позиции смещение. Для очень больших выборов (больше maxChars) выбор будет извлекаться с помощью нескольких вызовов команды со значениями смещения, увеличивающимися. Если команда возвращает строку, длина которой меньше maxChars, возвращаемое значение предполагается включающим весь оставшийся выбор; если длина результата команды равна maxChars, то команда будет вызвана снова, пока не вернёт результат, короче maxChars. Значение maxChars всегда будет относительно большим (тысячи символов).
Если команда возвращает ошибку, то запрос на выбор отклоняется так, как будто выбора вообще не существует.
Аргумент формат задаёт представление, которое должно использоваться для передачи выбора получателю (второй столбец Таблицы 2 ICCCM) и по умолчанию равен STRING. Если формат равен STRING, выбор передаётся как символы ASCII с 8 битами (т.е. только в форме, возвращаемой командой, в системе кодировка; формат UTF8_STRING всегда использует кодировку UTF-8). Если формат равен ATOM, то возвращаемое значение от команды делится на поля, разделённые пробелами; каждое поле преобразуется в значение атома, и вместо имени атома передаётся 32-битное значение атома. Для любого другого формата возвращаемое значение от команды делится на поля, разделённые пробелами, и каждое поле преобразуется в 32-битное целое число; массив целых чисел передаётся получателю выбора.
Аргумент формат необходим только для совместимости с получателями выбора, которые не используют Tk. Если для извлечения выбора используется Tk, значение преобразуется обратно в строку на стороне запроса, поэтому формат не имеет значения.
- выбор получить ?-дисплей окно? ?-выбор выбор?
- выбор получить ?-команда команда? ?-выбор выбор? окно
- Первая форма выбор получить возвращает имя пути окна в этом приложении, которое владеет выбором на дисплее, содержащем окно, или пустую строку, если ни одно окно в этом приложении не владеет выбором. Выбор по умолчанию — PRIMARY, а окно — “.”.
Вторая форма выбор получить заставляет окно стать новым владельцем выбора на дисплее окна, возвращая пустую строку в качестве результата. Существующий владелец, если таковой имеется, получает уведомление о том, что он потерял выбор. Если команда указана, это Tcl-скрипт для выполнения, когда какое-то другое окно заявляет о владении выбором вместо окна. Выбор по умолчанию — PRIMARY.
Примеры
На платформах X11 один из стандартных выборов доступен — SECONDARY. Он почти не используется, но вот как его можно прочитать с помощью Tk:set selContents [selection get -selection SECONDARY]
Для выбора могут быть доступны различные типы данных; специальный тип TARGETS позволяет получить список доступных типов:
foreach type [selection get -type TARGETS] {
puts "Selection PRIMARY supports type $type"
} Чтобы заявить о владении выбором, сначала необходимо настроить обработчик для предоставления данных для выбора. Затем необходимо заявить о владении выбором...
# Set up the data handler ready for incoming requests
set foo "This is a string with some data in it... blah blah"
selection handle -selection SECONDARY . getData
proc getData {offset maxChars} {
puts "Retrieving selection starting at $offset"
return [string range $::foo $offset [expr {$offset+$maxChars-1}]]
}
# Now we grab the selection itself
puts "Claiming selection"
selection own -command lost -selection SECONDARY .
proc lost {} {
puts "Lost selection"
} См. также
clipboard
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/selection.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/selection.htm