<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>bind</title>
  </head>

  <body>

    <h1>bind</h1>

    <p>Команда <strong>bind</strong> позволяет привязать выполнение
      скриптов Tcl к X событиям. Команда назначает событиям ввода от
      &quot;Мыши&quot; и клавиатуры (Х событиям) исполнение скрипта
      Tcl.</p>

    <h2><a name="СИНТАКСИС"></a>СИНТАКСИС</h2>

    <pre>
      <strong>bind</strong> <em>тег</em>
      <strong>bind</strong> <em>тег последовательность</em>
      <strong>bind</strong> <em>тег последовательность скрипт</em>
      <strong>bind</strong> <em>тег последовательность +скрипт</em>
    </pre>

    <h2><a name="ОПИСАНИЕ"></a>ОПИСАНИЕ</h2>

    <p>Команда <strong>bind</strong> привязывает Tcl скрипты к X
      событиям. Если заданы все три аргумента команды, то при каждом
      наступлении события <em>последовательность</em> в окне (окнах),
      описанных <em>тег</em>ом, будет выполняться <em>скрипт</em>
      (скрипт Tcl). Если аргументу <em>скрипт</em> предшествует знак
      +, то скрипт добавляется к уже существующим привязкам к
      <em>последовательности</em>; в противном случае он замещает все
      имеющиеся привязки. Если аргумент <em>скрипт</em> пуст, то все
      имеющиеся привязки к <em>последовательности</em> отменяются, и
      <em>последовательность</em> становится несвязанной. Если
      аргумент <em>скрипт</em> присутствует, то команда
      <strong>bind</strong> возвращает пустую строку.</p>

    <p>Если при отсутствии аргумента <em>скрипт</em> аргумент
      <em>последовательность</em> задан, то команда возвращает скрипт,
      привязанный к данной последовательности, или, в случае
      отсутствия такого скрипта, пустую строку. Если не задан ни один
      из аргументов <em>последовательность</em> и <em>скрипт</em>, то
      команда возвращает список, элементами которого служат все
      последовательности, имеющие привязки к окну <em>тег</em>.</p>

    <p>Аргумент <em>тег</em> перечисляет окна, к которым выполняется
      привязка. Если значение аргумента начинается с точки, скажем
      &quot;.a.b.c&quot;, то оно должно представлять собой путь к
      окну; в противном случае оно может быть произвольной
      строкой. Каждому окну приписан некоторый список тегов, и
      привязка к данному окну осуществляется, если значение аргумента
      <em>тег</em> присутствует в этом списке. Команда <a
      href="bindtags.html"><strong>bindtags</strong></a> позволяет
      приписать окну произвольный набор тегов привязки; кроме того, по
      умолчанию окнам приписаны следующие теги:</p>

    <ul>
      <li>тег, являющийся именем внутреннего окна, приписывается этому
	окну;</li>
      
      <li>тег, являющийся именем окна верхнего уровня, приписывается
	этому окну и всем его внутренним окнам;</li>
      
      <li>тег, являющийся именем класса примитивов, скажем
	<strong>Button</strong>, приписывается всем примитивам этого
	класса;</li>
      
      <li>тег с именем <strong>all</strong> приписывается всем окнам
	приложения.</li>
    </ul>

    <h2><a name="ОБРАЗЦЫ_СОБЫТИЙ"></a>ОБРАЗЦЫ СОБЫТИЙ</h2>

    <p>Аргумент <em>последовательность</em> представляет собой
      последовательность одного или нескольких образцов
      событий. Каждый образец может быть записан в одном из трех
      видов. В простейшем случае это символ ASCII, скажем
      <strong>a</strong> или <strong>|</strong>. Этот символ не может
      быть пробелом или знаком &lt;. Этот вид образцов соответствует
      событию <strong>KeyPress</strong> для конкретной
      клавиши. Образцы второго вида длиннее, однако, этот вид носит
      более общий характер. Его синтаксис выглядит следующим
      образом:</p>
    <pre>
      &lt;<em>модификатор-модификатор-тип-детализация</em>&gt;
    </pre>

    <p>Образец события целиком заключен в угловые скобки. Внутри
      угловых скобок располагаются несколько модификаторов (быть
      может, ни одного), тип события и дополнительная порция
      информации (<em>детализация</em>), указывающая конкретную кнопку
      или комбинацию клавиш. Одно из полей <em>тип</em> или
      <em>детализация</em> должно обязательно присутствовать,
      остальные могут быть опущены. Поля разделяются пробелами или
      дефисами.</p>

    <p>Третья форма образца используется для задания поименованного
      виртуального события, определенного пользователем. У нее
      следующий синтаксис:</p>

    <pre>
      &lt;&lt;<em>имя</em>&gt;&gt;
    </pre>

    <p>Образец события целиком заключен в двойные угловые скобки.
      Внутри этих скобок содержится определенное пользователем имя
      виртуального события. С виртуальным событием нельзя
      комбинировать модификаторы, такие как <strong>Shift</strong>или
      <strong>Control</strong>. Привязки к виртуальному событию можно
      создавать до описания самого события; при динамическом изменении
      этого описания все окна, привязанные к событию, будут обращаться
      к новому описанию.</p>

    <h2><a name="МОДИФИКАТОРЫ"></a>МОДИФИКАТОРЫ</h2>

    <p>Модификаторы могут быть следующими:</p>
    <ul>
      <li><strong>Alt</strong></li>
      <li><strong>Button1</strong>, <strong>B1</strong></li>
      <li><strong>Button2</strong>, <strong>B2</strong></li>
      <li><strong>Button3</strong>, <strong>B3</strong></li>
      <li><strong>Button4</strong>, <strong>B4</strong></li>
      <li><strong>Button5</strong>, <strong>B5</strong></li>
      <li><strong>Control</strong></li>
      <li><strong>Double</strong></li>
      <li><strong>Lock</strong></li>
      <li><strong>Meta</strong>, <strong>M</strong></li>
      <li><strong>Mod1</strong>, <strong>M1</strong></li>
      <li><strong>Mod2</strong>, <strong>M2</strong></li>
      <li><strong>Mod3</strong>, <strong>M3</strong></li>
      <li><strong>Mod4</strong>, <strong>M4</strong></li>
      <li><strong>Mod5</strong>, <strong>M5</strong></li>
      <li><strong>Shift</strong></li>
      <li><strong>Triple</strong></li>
    </ul>

    <p>Если в строке приведено несколько элементов, разделенных
      запятыми, то они взаимозаменяемы. У большинства модификаторов
      есть очевидное X значение. Например, модификатор
      <strong>Button1</strong> требует нажатия кнопки 1 для
      наступления события. Чтобы привязка соответствовала данному
      событию, среди модификаторов события должны содержаться все
      модификаторы, заданные в образце события.  Кроме того событие
      может содержать и другие модификаторы, не приведенные в описании
      привязки. Например, при нажатии кнопки 1 одновременно с нажатием
      клавиш <strong>Shift</strong> и <strong>Ctrl</strong> событие
      подойдет под образец &lt;<strong>Control-Button-1</strong>&gt;,
      но не подойдет под образец
      &lt;<strong>Mod1-Button-1</strong>&gt;. Если ни один из
      модификаторов не был задан, то в событии может присутствовать
      любая комбинация модификаторов.</p>

    <p>Модификаторы <strong>Meta</strong> и <strong>M</strong>
      заменяют любой из идентификаторов от <strong>M1</strong> до
      <strong>M5</strong>, ассоциированный с метаклавишами на
      клавиатуре (коды клавиш <strong>Meta_R</strong> и
      <strong>Meta_L</strong>). При отсутствии метаклавиш или в
      случае, если они не ассоциированы ни с каким модификатором,
      модификаторы <strong>Meta</strong> и <strong>M</strong> не будут
      соответствовать никакому событию.  Аналогично модификатор
      <strong>Alt</strong> заменяет любой из модификаторов,
      ассоциированных с alt-клавишами на клавиатуре (коды клавиш
      <strong>Alt_L</strong> и <strong>Alt_R</strong>).</p>

    <p>Модификаторы <strong>Double</strong>и <strong>Triple</strong>
      обеспечивают удобную обработку двойного щелчка .Мыши. и других
      повторяющихся событий.  Они требуют, чтобы данное событие
      повторилось дважды или трижды, и накладывают ограничения на
      время и место его повторения: для того, чтобы последовательность
      событий подходила под образец <strong>Double</strong> или
      <strong>Triple</strong>, промежуток времени между событиями
      должен быть коротким, а &quot;Мышь&quot; не должна сдвигаться.  Например,
      комбинация &lt;<strong>Double-Button-1</strong>&gt; эквивалентна
      паре &lt;<strong>Button-1<em>&gt;&lt;</em>Button-1</strong>&gt;
      с дополнительными временными и пространственными
      ограничениями.</p>

    <h2><a name="ТИПЫ_СОБЫТИЙ"></a>ТИПЫ СОБЫТИЙ</h2>

    <p>Значением поля <em>тип</em> может быть любой из стандартных
      типов X событий, а также некоторые дополнительные
      сокращения. Ниже приведен список всех допустимых значений. Два
      имени, составляющие пару, синонимичны.</p>
      
    <ul>
      <li><strong>Activate</strong></li>
      <li><strong>Button</strong></li>
      <li><strong>ButtonPress</strong></li>
      <li><strong>ButtonRelease</strong></li>
      <li><strong>Circulate</strong></li>
      <li><strong>Colormap</strong></li>
      <li><strong>Configure</strong></li>
      <li><strong>Deactivate</strong></li>
      <li><strong>Destroy</strong></li>
      <li><strong>Enter</strong></li>
      <li><strong>Expose</strong></li>
      <li><strong>FocusIn</strong></li>
      <li><strong>FocusOut</strong></li>
      <li><strong>Gravity</strong></li>
      <li><strong>Key Unmap</strong></li>
      <li><strong>KeyPress</strong></li>
      <li><strong>KeyRelease</strong></li>
      <li><strong>Leave</strong></li>
      <li><strong>Map</strong></li>
      <li><strong>Motion</strong></li>
      <li><strong>Property</strong></li>
      <li><strong>Reparent</strong></li>
      <li><strong>Visibility</strong></li>
    </ul>

    <p>Последней частью длинной спецификации события является
      <em>детализация</em>. Для типов <strong>ButtonPress</strong> и
      <strong>ButtonRelease</strong> это номер кнопки (1-5). Если
      номер кнопки задан, то под образец подойдет только событие на
      указанной кнопке; если номер кнопки не задан, то под образец
      подойдет событие на любой из кнопок. Замечание: задание номера
      кнопки отличается от задания модификатора кнопки: в первом
      случае требуется, чтобы кнопка была нажата или отжата; во втором
      чтобы какая-то другая кнопка была отжата при наступлении
      события. Если номер кнопки задан, то поле <em>тип</em> можно
      опустить: по умолчанию оно будет иметь значение
      <strong>ButtonPress</strong>. Например, спецификатор
      &lt;<strong>1</strong>&gt; эквивалентен спецификатору
      &lt;<strong>ButtonPress-1</strong>&gt;.

    <p>Для типов <strong>KeyPress</strong> и
      <strong>KeyRelease</strong> детализацию можно указать в виде
      описателя X клавиши. В их число входят все алфавитно-цифровые
      символы ASCII (например, описатель <strong>a</strong> служит для
      описания символа ASCII &quot;a&quot;), а также описатели для
      неалфавитно-цифровых символов (описатель <strong>comma</strong>
      для запятой) и описатели для всех не ASCII-клавиш клавиатуры
      (<strong>Shift_L</strong> для левой клавиши верхнего регистра,
      <strong>F1</strong> для первой функциональной клавиши при ее
      наличии). Мы не приводим здесь полный список клавиш. Он меняется
      от системы к системе, и его можно найти в других частях X
      документации. При необходимости можно получить описатель клавиши
      с помощью обозначения <strong>%K</strong>, описанного ниже. Если
      приведена <em>детализация</em> описателя клавиши, то поле
      <em>тип</em> может отсутствовать, по умолчанию принимается
      значение <strong>KeyPress</strong>. Например, спецификатор
      &lt;<strong>Control-comma</strong>&gt; эквивалентен
      спецификатору &lt;<strong>Control-KeyPress-comma</strong>&gt;.</p>

    <h2><a name="ПОДСТАНОВКИ_И_СКРИПТЫ_ПРИВЯЗКИ"></a>ПОДСТАНОВКИ И СКРИПТЫ ПРИВЯЗКИ</h2>

    <p>Аргумент <em>скрипт</em> команды <strong>bind</strong> должен
      быть скриптом Tcl; при каждом наступлении события происходит
      выполнение этого скрипта. <em>Команда</em> выполняется тем же
      интерпретатором, что и команда <strong>bind</strong>, причем
      интерпретация происходит на верхнем уровне (доступны только
      значения глобальных переменных). Если в <em>скрипт</em>е есть
      символы <strong>%</strong>, то его исполнение не будет
      осуществляться непосредственно. Каждый символ <strong>%</strong>
      и символ, следующий за ним, заменяются данными о происшедшем
      событии, в результате чего генерируется новый
      скрипт. Подстановка осуществляется в соответствии с приводимым
      ниже списком символов. Если не оговорено противное, то
      подставляемая строка представляет собой десятичное содержимое
      указанного поля события. Некоторые подстановки допустимы только
      для событий определенных типов: при использовании их с событиями
      других типов результат подстановки не определен.</p>
    
    <dl>
      <dt><strong>%%</strong></dt>

      <dd>Заменяется однократным процентом.</dd>

      <dt><strong>%#</strong></dt>

      <dd>Номер последнего обработанного сервером запроса клиента
	(<em>сериальное</em> поле события). Допустимо для событий всех
	типов.</dd>
      
      <dt><strong>%a</strong></dt>

      <dd>Поле <em>выше</em> события, отформатированное как
	шестнадцатеричное число. Допустимо только для событий
	<strong>Configure</strong>.</dd>
      
      <dt><strong>%b</strong></dt>

      <dd>Номер нажатой или отпущенной кнопки. Допустимо только для
	событий <strong>ButtonPress</strong> и
	<strong>ButtonRelease</strong>.</dd>
      
      <dt><strong>%c</strong></dt>

      <dd>Поле <em>счетчик</em> события. Допустимо только для событий
	<strong>Expose</strong>.</dd>
      
      <dd><strong>%d</strong></dd>

      <dd>Поле <em>детализация</em> события. Символы
	<strong>%d</strong> заменяются строкой детализации.  Для
	событий <strong>Enter</strong>, <strong>Leave</strong>,
	<strong>FocusIn</strong>, <strong>FocusOut</strong> строка
	должна быть одной из следующих:
	<strong>NotifyAncestor</strong>,
	<strong>NotifyNonlinearVirtual</strong>
	<strong>NotifyDetailNone</strong>,
	<strong>NotifyPointer</strong>,
	<strong>NotifyInterior</strong>,
	<strong>NotifyPointerRoot</strong>,
	<strong>NotifyNonlinear</strong>,
	<strong>NotifyVirtual</strong>.

	<p>Для прочих событий подставляемая строка не определена.</p>
      </dd>

      <dt><strong>%f</strong></dt>

      <dd>Поле <em>фокус</em> события (<strong>0</strong> или
	<strong>1</strong>). Допустимо только для событий
	<strong>Enter</strong> и <strong>Leave</strong>.</dd>

      <dt><strong>%h</strong></dt>

      <dd>Поле <em>высота</em> события. Допустимо только для событий
	<strong>Configure</strong> и <strong>Expose</strong>.</dd>
      
      <dt><strong>%k</strong></dt>

      <dd>Поле <em>код_клавиши</em> события. Допустимо только для
	событий <strong>KeyPress</strong> и
	<strong>KeyRelease</strong>.</dd>

      <dt><strong>%m</strong></dt>

      <dd>Поле <em>режим</em> события. Подставляется одна из строк
	<strong>NotifyNormal</strong>, <strong>NotifyGrab</strong>,
	<strong>NotifyUngrab</strong> или
	<strong>NotifyWhileGrabbed</strong>. Допустимо только для
	событий <strong>Enter</strong>, <strong>FocusIn</strong>,
	<strong>FocusOut</strong> и <strong>Leave</strong>.</dd>

      <dt><strong>%o</strong></dt>

      <dd>Поле <em>подавить_перенаправление</em> события.Допустимо
	только для событий <strong>Map</strong>,
	<strong>Reparent</strong> и <strong>Configure</strong>.</dd>
      
      <dt><strong>%p</strong></dt>

      <dd>Поле <em>размещать</em> события. Строка подстановки имеет
	вид <strong>PlaceOnTop</strong> или
	<strong>PlaceOnBottom</strong>. Допустимо только для событий
	<strong>Circulate</strong>.</dd>
      
      <dt><strong>%s</strong></dt>

      <dd>Поле <em>состояние</em> события. Для событий
	<strong>ButtonPress</strong>, <strong>ButtonRelease</strong>,
	<strong>Enter</strong>, <strong>KeyPress</strong>,
	<strong>KeyRelease</strong>, <strong>Leave</strong> и
	<strong>Motion</strong> происходит подстановка десятичного
	числа. Для события <strong>Visibility</strong> подставляется
	одна из строк <strong>isibilityUnobscured</strong>,
	<strong>VisibilityPartiallyObscured</strong> или
	<strong>VisibilityFullyObscured</strong>.</dd>

      <dt><strong>%t</strong></dt>

      <dd>Поле <em>время</em> события. Допустимо только для событий,
	содержащих поле <em>время</em>.</dd>
      
      <dt><strong>%w</strong></dt>

      <dd>Поле <em>ширина</em> события. Допустимо только для событий
	<strong>Configure</strong> и <strong>Expose</strong>.</dd>

      <dt><strong>%x</strong></dt>

      <dd>Поле <em>x</em> события. Допустимо только для событий,
	содержащих поле <em>x</em>.</dd>

      <dt> <strong>%y</strong></dt>

      <dd> Поле <em>y</em> события.Допустимо только для событий,
	содержащих поле <em>y</em>.</dd>

      <dt><strong>%A</strong></dt>

      <dd>Заменяется символом ASCII, отвечающим происшедшему
	событию,или пустой строкой, если событию не соответствует
	никакой символ ASCII (например, нажата клавиша верхнего
	регистра). Работу по переводу события в ASCII символ выполняет
	<strong>XLookupString</strong>. Допустимо только для событий
	<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>

      <dt><strong>%B</strong></dt>

      <dd>Поле <em>ширина_бордюра</em> события.Допустимо только для
	событий <strong>Configure</strong>.</dd>

      <dt><strong>%E</strong></dt>

      <dd>Поле <em>послать_событие</em> события.Допустимо для событий
	всех типов.</dd>

      <dt><strong>%K</strong></dt>

      <dd>Код клавиши, соответствующей данному событию, представленный
	текстовой строкой. Допустимо только для событий
	<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>

      <dt><strong>%N</strong></dt>

      <dd>Код клавиши, соответствующей данному событию, представленный
	десятичным числом. Допустимо только для событий
	<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>

      <dt> <strong>%R</strong></dt>

      <dd>Идентификатор корневого окна события.Допустимо только для
	событий содержащих поле <em>корень</em>.</dd>

      <dt> <strong>%S</strong></dt>

      <dd>Идентификатор подокна события, представленный в виде
	шестнадцатиричного числа. Допустимо только для событий
	содержащих поле <em>подокно</em>.</dd>

      <dt><strong>%T</strong></dt>

      <dd>Поле <em>тип</em> события. Допустимо для событий всех
	типов.</dd>

      <dt><strong>%W</strong></dt>

      <dd>Путь к окну, к которому отнесено событие (поле <em>окно</em>
	  события). Допустимо для событий всех типов.</dd>

      <dt> <strong>%X</strong></dt>

      <dd>Поле <em>x_корень</em> события. При использовании
	виртуально-корневого менеджера окон подставляемое значение
	равняется x-координате в виртуальном корне. Допустимо только
	для событий <strong>ButtonPress</strong>,
	<strong>ButtonRelease</strong>, <strong>KeyPress</strong>,
	<strong>KeyRelease</strong> и <strong>Motion</strong>.</dd>

      <dt><strong>%Y</strong></dt>

      <dd>Поле <em>y_корень</em> события. При использовании
	виртуально-корневого менеджера окон подставляемое значение
	равняется y-координате в виртуальном корне. Допустимо только
	для событий <strong>ButtonPress</strong>,
	<strong>ButtonRelease</strong>, <strong>KeyPress</strong>,
	<strong>KeyRelease</strong> и <strong>Motion</strong>.</dd>
    </dl>

    <p>Строка подстановки для %-замещения форматируется как обычный
      элемент списка Tcl. Это означает, что при наличии в строке
      пробелов она заключается в фигурные скобки, а специальным
      символам, таким как `$' и `{' может предшествовать обратная
      косая черта. Такая строка нормально обрабатывается
      синтаксическим анализатором Tcl при выполнении скрипта. Строки
      подстановки по большей части являются числами или корректно
      определенными строками как, например, <strong>Above</strong>;
      такие строки не нуждаются ни в каком специальном
      форматировании. Чаще всего форматирования требуют строки,
      замещающие <strong>%A</strong>. Если, например, скрипт имеет
      вид</p>

    <pre>insert %A</pre>

    <p>и вводимым символом является открывающая квадратная скобка, то
      реально исполняемым скриптом будет</p>

    <pre>insert \[</pre>

    <p>т.е. в качестве первого аргумента <strong>insert</strong>
      получит исходную строку подстановки (открывающую квадратную
      скобку). Если бы обратная косая черта не была добавлена, Tcl не
      смог бы правильно обработать скрипт.</p>

    <h2><a name="НЕСКОЛЬКО_ПРИВЯЗОК_ОТВЕЧАЮЩИХ_ОБРАЗЦУ"></a>НЕСКОЛЬКО ПРИВЯЗОК, ОТВЕЧАЮЩИХ ОБРАЗЦУ</h2>

    <p>Данному X событию может отвечать несколько привязок. Если эти
      привязки соответствуют различным <em>тег</em>ам, то все они
      выполняются по очереди. По умолчанию сначала исполняется
      привязка для примитива, затем привязка класса, затем привязка
      верхнего уровня и привязка <strong>all</strong>. Этот порядок
      для конкретного окна можно поменять с помощью команды <a
      href="bindtags.html"><strong>bindtags</strong></a>, которая
      позволяет также выполнить дополнительные привязки к окну.</p>

    <p>Управление обработкой скриптов, отвечающих образцу,
      осуществляется командами <a
      href="../tcl/continue.html"><strong>continue</strong></a> и <a
      href="../tcl/break.html"><strong>break</strong></a> в
      привязанном скрипте. При выполнении команды <a
      href="../tcl/continue.html"><strong>continue</strong></a>
      выполнение текущего привязанного скрипта прерывается и Tk
      переходит к выполнению скриптов, соответствующих остальным
      <em>тег</em>ам. При выполнении команды <a
      href="../tcl/break.html"><strong>break</strong></a> выполнение
      текущего привязанного скрипта прерывается и никакие другие
      скрипты не выполняются.</p>

    <p>Если данному событию соответствует несколько привязок с одним и
      тем же тегом, то из них выбирается наиболее конкретная привязка
      и выполняется ее скрипт. Выбор наиболее конкретной привязки
      осуществляется по следующим критериям:</p>

    <ol type="a">
      <li>образец события, задающий конкретную кнопку или клавишу,
	более конкретен, чем тот, в котором такой спецификации не
	задано;</li>

      <li>более длинная последовательность (по числу отвечающих
	образцу событий) конкретнее более короткой;</li>

      <li>если модификаторы первого образца содержатся среди
	модификаторов второго, то образец с большим числом
	модификаторов более конкретен;</li>

      <li>виртуальное событие, физический образец которого
	соответствует последовательности, менее конкретно, чем тот же
	самый физический образец, не связанный ни с каким виртуальным
	событием;</li>

      <li><p>если последовательность отвечает двум или более
	  виртуальным событиям, то из них выбирается какое-нибудь
	  одно, однако порядок выбора не определен.</p>

	<p>Если в подходящей последовательности событий больше одного
	  события, то критерии 1 - 5 применяются ко всем событиям,
	  начиная с самого последнего и до самого первого события
	  последовательности. Если критерии не позволяют определить
	  победителя, то победителем становится событие,
	  зарегистрированное последним.</p>
      </ol>

    <p>Если одна и та же последовательность осуществляет переключение
      к двум (или более) виртуальным событиям, и теги окон этих
      виртуальных событий совпадают, то переключение произойдет лишь к
      одному из этих виртуальных событий, выбранному случайным
      образом:</p>

    <pre>
      event add &lt;&lt;Paste&gt;&gt; &lt;Control-y&gt;
      event add &lt;&lt;Paste&gt;&gt; &lt;Button-2&gt;
      event add &lt;&lt;Scroll&gt;&gt; &lt;Button-2&gt;
      bind Entry &lt;&lt;Paste&gt;&gt; {puts Paste}
      bind Entry &lt;&lt;Scroll&gt;&gt; {puts Scroll}
    </pre>

    <p>При нажатии <strong>Control-y</strong> будет выполнена привязка
      &lt;&lt;<strong>Paste</strong>&gt;&gt;, а при нажатии кнопки 2
      одна из привязок &lt;&lt;<strong>Paste</strong>&gt;&gt; или
      &lt;&lt;<strong>Scroll</strong>&gt;&gt;, причем определить какой
      именно будет эта привязка, невозможно.</p>

    <p>Если X событие не подходит ни под одну из существующих
      привязок, то событие игнорируется. Наступление не привязанного
      события не считается ошибкой.</p>

    <h2><a name="ПОСЛЕДОВАТЕЛЬНОСТИ_НЕСКОЛЬКИХ_СОБЫТИЙ_И_ИГНОРИРУЕМЫЕ_СОБЫТИЯ"></a>ПОСЛЕДОВАТЕЛЬНОСТИ НЕСКОЛЬКИХ СОБЫТИЙ И ИГНОРИРУЕМЫЕ СОБЫТИЯ</h2>
    
    <p>Если аргумент <em>последовательность</em> в команде
      <strong>bind</strong> состоит из нескольких образцов событий, то
      скрипт выполняется в случае, если последние события (включая
      самое последнее) подходят под данную последовательность. Это
      означает, например, что при неоднократном последовательном
      нажатии кнопки 1 каждое из нажатий, за исключением самого
      первого, отвечает образцу
      &lt;<strong>Doudble-ButtonPress-1</strong>&gt;. Если в
      последовательности событий происходят посторонние события, то
      они игнорируются, за исключением событий
      <strong>KeyPress</strong> и <strong>ButtonPress</strong>.
      Например, нажатия на кнопку 1 будут соответствовать образцу
      &lt;<strong>Doudble-ButtonPress-1</strong>&gt;, даже если их
      перемежают события <strong>ButtonRelease</strong> или
      <strong>Motion</strong>. Кроме того событию
      <strong>KeyPress</strong>может предшествовать произвольная
      последовательность событий <strong>KeyPress</strong> для
      модификаторов, среди которых нет модификаторов, нарушающих
      соответствие образцу. Например, последовательности событий
      <strong>aB</strong> отвечает нажатие на клавишу
      <strong>a</strong>, отпускание клавиши <strong>a</strong>,
      нажатие на клавишу <strong>Shift</strong> и нажатие на клавишу
      <strong>b</strong>, так как нажатие на клавишу модификатора
      <strong>Shift</strong> игнорируется. И, наконец, если
      последовательно происходит несколько событий
      <strong>Motion</strong>, то для установления соответствия
      привязке берется последнее из них.</p>
    

    <h2><a name="ОШИБКИ"></a>ОШИБКИ</h2>

    <p>При возникновении ошибки в процессе исполнения привязанного
      скрипта для выдачи сообщения об ошибке используется механизм <a
      href="../tcl/bgerror.html"><strong>bgerror</strong></a>. Команда
      <a href="../tcl/bgerror.html"><strong>bgerror</strong></a>
      исполняется на верхнем уровне (вне контекста любой из процедур
      Tcl).</p>
  </body>
</html>