Буфер обмена
Имя
Буфер обмена — Управление буфером обмена TkСинопсис
clipboard option ?arg arg ...?Описание
Эта команда предоставляет интерфейс Tcl к буферу обмена Tk, который хранит данные для последующего извлечения с помощью механизма выбора (через опцию -selection CLIPBOARD). Для копирования данных в буфер обмена необходимо вызвать clipboard clear, а затем последовательность одного или нескольких вызовов clipboard append. Чтобы гарантировать атомарное обновление буфера обмена, все добавления должны быть завершены до возврата в цикл событий.Первый аргумент команды clipboard определяет формат остальных аргументов и поведение команды. В настоящее время поддерживаются следующие формы:
- clipboard append ?-displayof window? ?-format format? ?-type type? ?--? data
- Добавляет data в буфер обмена на дисплее window в форме, заданной type с представлением, заданным format, и заявляет о владении буфером обмена на дисплее window.
Type указывает форму, в которой должен быть возвращен выбор (желаемый «целевой» объект преобразования в терминологии ICCCM), и должен быть именем атома, таким как STRING или FILE_NAME; см. руководство по межклиентским соглашениям о связи для получения полных деталей. Type по умолчанию равен STRING.
Аргумент format указывает представление, которое должно использоваться для передачи выбора запрашивающему (второй столбец таблицы 2 ICCCM) и по умолчанию равен STRING. Если format равен STRING, выбор передается в виде 8-битных символов ASCII. Если format равен ATOM, то data делится на поля, разделенные пробелами; каждое поле преобразуется в его значение атома, и вместо имени атома передается 32-битное значение атома. Для любого другого format data делится на поля, разделенные пробелами, и каждое поле преобразуется в 32-битное целое число; массив целых чисел передается запрашивающему. Обратите внимание, что строки, переданные в clipboard append, конкатенируются перед преобразованием, поэтому вызывающий должен позаботиться об обеспечении соответствующего разграничения по границам строк. Все элементы, добавленные в буфер обмена с одинаковым type, должны иметь одинаковый format.
Аргумент format необходим только для совместимости с запрашивающими буфер обмена, которые не используют Tk. Если для извлечения выбора CLIPBOARD используется набор инструментов Tk, значение преобразуется обратно в строку в конце запроса, поэтому format не имеет значения.
Аргумент -- может быть указан для обозначения конца опций: следующий аргумент всегда будет использоваться как data. Это может быть удобно, например, если data начинается с -.
- clipboard clear ?-displayof window?
- Заявляет о владении буфером обмена на дисплее window и удаляет все предыдущие содержимое. Window по умолчанию равен “.”. Возвращает пустую строку.
- clipboard get ?-displayof window? ?-type type?
- Извлекает данные из буфера обмена на дисплее window. Window по умолчанию равен “.”. Type указывает форму, в которой должны быть возвращены данные, и должен быть именем атома, таким как STRING или FILE_NAME. Type по умолчанию равен STRING. Эта команда эквивалентна “selection get -selection CLIPBOARD”.
Обратите внимание, что в современных системах X11 наиболее полезным типом для извлечения переданных строк является не STRING, а UTF8_STRING.
Примеры
Получить текущее содержимое буфера обмена.if {[catch {clipboard get} contents]} {
# There were no clipboard contents at all
} Установить буфер обмена, содержащий фиксированную строку.
clipboard clear clipboard append "some fixed string"
Вы можете поместить пользовательские данные в буфер обмена, используя пользовательскую опцию -type. Это не обязательно переносимо, но может быть очень полезно. Способ передачи сценариев Tcl таким образом эффективен, но в производственном коде следует использовать безопасные интерпретаторы.
# This is a very simple canvas serializer;
# it produces a script that recreates the item(s) when executed
proc getItemConfig {canvas tag} {
set script {}
foreach item [$canvas find withtag $tag] {
append script {$canvas create } [$canvas type $item]
append script { } [$canvas coords $item] { }
foreach config [$canvas itemconf $item] {
lassign $config name - - - value
append script [list $name $value] { }
}
append script \n
}
return [string trim $script]
}
# Set up a binding on a canvas to cut and paste an item
set c [canvas .c]
pack $c
$c create text 150 30 -text "cut and paste me"
bind $c <<Cut>> {
clipboard clear
clipboard append -type TkCanvasItem \
[getItemConfig %W current]
# Delete because this is cut, not copy.
%W delete current
}
bind $c <<Paste>> {
catch {
set canvas %W
eval [clipboard get -type TkCanvasItem]
}
} См. также
interp, selection
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/clipboard.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/clipboard.htm