Spec-Zone.ru › Tcl/Tk

Буфер обмена

Имя

Буфер обмена — Управление буфером обмена 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

Spec-Zone.ru

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