projman/hlp/ru/tk/bind.html

608 lines
39 KiB
HTML
Raw Normal View History

2015-10-19 13:27:31 +03:00
<!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; и клавиатуры (Х событиям) исполнение скрипта
2015-10-19 13:27:31 +03:00
Tcl.</p>
<h2><a name="СИНТАКСИС"></a>СИНТАКСИС</h2>
2015-10-19 13:27:31 +03:00
<pre>
<strong>bind</strong> <em>тег</em>
<strong>bind</strong> <em>тег последовательность</em>
<strong>bind</strong> <em>тег последовательность скрипт</em>
<strong>bind</strong> <em>тег последовательность +скрипт</em>
2015-10-19 13:27:31 +03:00
</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>
2015-10-19 13:27:31 +03:00
<ul>
<li>тег, являющийся именем внутреннего окна, приписывается этому
окну;</li>
2015-10-19 13:27:31 +03:00
<li>тег, являющийся именем окна верхнего уровня, приписывается
этому окну и всем его внутренним окнам;</li>
2015-10-19 13:27:31 +03:00
<li>тег, являющийся именем класса примитивов, скажем
<strong>Button</strong>, приписывается всем примитивам этого
класса;</li>
2015-10-19 13:27:31 +03:00
<li>тег с именем <strong>all</strong> приписывается всем окнам
приложения.</li>
2015-10-19 13:27:31 +03:00
</ul>
<h2><a name="ОБРАЗЦЫ_СОБЫТИЙ"></a>ОБРАЗЦЫ СОБЫТИЙ</h2>
<p>Аргумент <em>последовательность</em> представляет собой
последовательность одного или нескольких образцов
событий. Каждый образец может быть записан в одном из трех
видов. В простейшем случае это символ ASCII, скажем
<strong>a</strong> или <strong>|</strong>. Этот символ не может
быть пробелом или знаком &lt;. Этот вид образцов соответствует
событию <strong>KeyPress</strong> для конкретной
клавиши. Образцы второго вида длиннее, однако, этот вид носит
более общий характер. Его синтаксис выглядит следующим
образом:</p>
2015-10-19 13:27:31 +03:00
<pre>
&lt;<em>модификатор-модификатор-тип-детализация</em>&gt;
2015-10-19 13:27:31 +03:00
</pre>
<p>Образец события целиком заключен в угловые скобки. Внутри
угловых скобок располагаются несколько модификаторов (быть
может, ни одного), тип события и дополнительная порция
информации (<em>детализация</em>), указывающая конкретную кнопку
или комбинацию клавиш. Одно из полей <em>тип</em> или
<em>детализация</em> должно обязательно присутствовать,
остальные могут быть опущены. Поля разделяются пробелами или
дефисами.</p>
2015-10-19 13:27:31 +03:00
<p>Третья форма образца используется для задания поименованного
виртуального события, определенного пользователем. У нее
следующий синтаксис:</p>
2015-10-19 13:27:31 +03:00
<pre>
&lt;&lt;<em>имя</em>&gt;&gt;
2015-10-19 13:27:31 +03:00
</pre>
<p>Образец события целиком заключен в двойные угловые скобки.
Внутри этих скобок содержится определенное пользователем имя
виртуального события. С виртуальным событием нельзя
комбинировать модификаторы, такие как <strong>Shift</strong>или
<strong>Control</strong>. Привязки к виртуальному событию можно
создавать до описания самого события; при динамическом изменении
этого описания все окна, привязанные к событию, будут обращаться
к новому описанию.</p>
2015-10-19 13:27:31 +03:00
<h2><a name="МОДИФИКАТОРЫ"></a>МОДИФИКАТОРЫ</h2>
2015-10-19 13:27:31 +03:00
<p>Модификаторы могут быть следующими:</p>
2015-10-19 13:27:31 +03:00
<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>
2015-10-19 13:27:31 +03:00
<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; эквивалентен спецификатору
2015-10-19 13:27:31 +03:00
&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>
2015-10-19 13:27:31 +03:00
<dl>
<dt><strong>%%</strong></dt>
<dd>Заменяется однократным процентом.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%#</strong></dt>
<dd>Номер последнего обработанного сервером запроса клиента
(<em>сериальное</em> поле события). Допустимо для событий всех
типов.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%a</strong></dt>
<dd>Поле <em>выше</em> события, отформатированное как
шестнадцатеричное число. Допустимо только для событий
<strong>Configure</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%b</strong></dt>
<dd>Номер нажатой или отпущенной кнопки. Допустимо только для
событий <strong>ButtonPress</strong> и
<strong>ButtonRelease</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%c</strong></dt>
<dd>Поле <em>счетчик</em> события. Допустимо только для событий
<strong>Expose</strong>.</dd>
2015-10-19 13:27:31 +03:00
<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>
2015-10-19 13:27:31 +03:00
</dd>
<dt><strong>%f</strong></dt>
<dd>Поле <em>фокус</em> события (<strong>0</strong> или
<strong>1</strong>). Допустимо только для событий
<strong>Enter</strong> и <strong>Leave</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%h</strong></dt>
<dd>Поле <em>высота</em> события. Допустимо только для событий
<strong>Configure</strong> и <strong>Expose</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%k</strong></dt>
<dd>Поле <em>код_клавиши</em> события. Допустимо только для
событий <strong>KeyPress</strong> и
<strong>KeyRelease</strong>.</dd>
2015-10-19 13:27:31 +03:00
<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>
2015-10-19 13:27:31 +03:00
<dt><strong>%o</strong></dt>
<dd>Поле <em>подавить_перенаправление</em> события.Допустимо
только для событий <strong>Map</strong>,
<strong>Reparent</strong> и <strong>Configure</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%p</strong></dt>
<dd>Поле <em>размещать</em> события. Строка подстановки имеет
вид <strong>PlaceOnTop</strong> или
<strong>PlaceOnBottom</strong>. Допустимо только для событий
<strong>Circulate</strong>.</dd>
2015-10-19 13:27:31 +03:00
<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>
2015-10-19 13:27:31 +03:00
<dt><strong>%t</strong></dt>
<dd>Поле <em>время</em> события. Допустимо только для событий,
содержащих поле <em>время</em>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%w</strong></dt>
<dd>Поле <em>ширина</em> события. Допустимо только для событий
<strong>Configure</strong> и <strong>Expose</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%x</strong></dt>
<dd>Поле <em>x</em> события. Допустимо только для событий,
содержащих поле <em>x</em>.</dd>
2015-10-19 13:27:31 +03:00
<dt> <strong>%y</strong></dt>
<dd> Поле <em>y</em> события.Допустимо только для событий,
содержащих поле <em>y</em>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%A</strong></dt>
<dd>Заменяется символом ASCII, отвечающим происшедшему
событию,или пустой строкой, если событию не соответствует
никакой символ ASCII (например, нажата клавиша верхнего
регистра). Работу по переводу события в ASCII символ выполняет
<strong>XLookupString</strong>. Допустимо только для событий
<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%B</strong></dt>
<dd>Поле <em>ширина_бордюра</em> события.Допустимо только для
событий <strong>Configure</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%E</strong></dt>
<dd>Поле <em>послать_событие</em> события.Допустимо для событий
всех типов.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%K</strong></dt>
<dd>Код клавиши, соответствующей данному событию, представленный
текстовой строкой. Допустимо только для событий
<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%N</strong></dt>
<dd>Код клавиши, соответствующей данному событию, представленный
десятичным числом. Допустимо только для событий
<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>
2015-10-19 13:27:31 +03:00
<dt> <strong>%R</strong></dt>
<dd>Идентификатор корневого окна события.Допустимо только для
событий содержащих поле <em>корень</em>.</dd>
2015-10-19 13:27:31 +03:00
<dt> <strong>%S</strong></dt>
<dd>Идентификатор подокна события, представленный в виде
шестнадцатиричного числа. Допустимо только для событий
содержащих поле <em>подокно</em>.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%T</strong></dt>
<dd>Поле <em>тип</em> события. Допустимо для событий всех
типов.</dd>
2015-10-19 13:27:31 +03:00
<dt><strong>%W</strong></dt>
<dd>Путь к окну, к которому отнесено событие (поле <em>окно</em>
события). Допустимо для событий всех типов.</dd>
2015-10-19 13:27:31 +03:00
<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>
2015-10-19 13:27:31 +03:00
<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>
2015-10-19 13:27:31 +03:00
</dl>
<p>Строка подстановки для %-замещения форматируется как обычный
элемент списка Tcl. Это означает, что при наличии в строке
пробелов она заключается в фигурные скобки, а специальным
символам, таким как `$' и `{' может предшествовать обратная
косая черта. Такая строка нормально обрабатывается
синтаксическим анализатором Tcl при выполнении скрипта. Строки
подстановки по большей части являются числами или корректно
определенными строками как, например, <strong>Above</strong>;
такие строки не нуждаются ни в каком специальном
форматировании. Чаще всего форматирования требуют строки,
замещающие <strong>%A</strong>. Если, например, скрипт имеет
вид</p>
2015-10-19 13:27:31 +03:00
<pre>insert %A</pre>
<p>и вводимым символом является открывающая квадратная скобка, то
реально исполняемым скриптом будет</p>
2015-10-19 13:27:31 +03:00
<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
2015-10-19 13:27:31 +03:00
href="../tcl/continue.html"><strong>continue</strong></a>
выполнение текущего привязанного скрипта прерывается и Tk
переходит к выполнению скриптов, соответствующих остальным
<em>тег</em>ам. При выполнении команды <a
href="../tcl/break.html"><strong>break</strong></a> выполнение
текущего привязанного скрипта прерывается и никакие другие
скрипты не выполняются.</p>
<p>Если данному событию соответствует несколько привязок с одним и
тем же тегом, то из них выбирается наиболее конкретная привязка
и выполняется ее скрипт. Выбор наиболее конкретной привязки
осуществляется по следующим критериям:</p>
2015-10-19 13:27:31 +03:00
<ol type="a">
<li>образец события, задающий конкретную кнопку или клавишу,
более конкретен, чем тот, в котором такой спецификации не
задано;</li>
<li>более длинная последовательность (по числу отвечающих
образцу событий) конкретнее более короткой;</li>
<li>если модификаторы первого образца содержатся среди
модификаторов второго, то образец с большим числом
модификаторов более конкретен;</li>
<li>виртуальное событие, физический образец которого
соответствует последовательности, менее конкретно, чем тот же
самый физический образец, не связанный ни с каким виртуальным
событием;</li>
<li><p>если последовательность отвечает двум или более
виртуальным событиям, то из них выбирается какое-нибудь
одно, однако порядок выбора не определен.</p>
<p>Если в подходящей последовательности событий больше одного
события, то критерии 1 - 5 применяются ко всем событиям,
начиная с самого последнего и до самого первого события
последовательности. Если критерии не позволяют определить
победителя, то победителем становится событие,
зарегистрированное последним.</p>
2015-10-19 13:27:31 +03:00
</ol>
<p>Если одна и та же последовательность осуществляет переключение
к двум (или более) виртуальным событиям, и теги окон этих
виртуальных событий совпадают, то переключение произойдет лишь к
одному из этих виртуальных событий, выбранному случайным
образом:</p>
2015-10-19 13:27:31 +03:00
<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>
2015-10-19 13:27:31 +03:00
<p>Если X событие не подходит ни под одну из существующих
привязок, то событие игнорируется. Наступление не привязанного
события не считается ошибкой.</p>
2015-10-19 13:27:31 +03:00
<h2><a name=ОСЛЕДОВАТЕЛЬНОСТИ_НЕСКОЛЬКИХ_СОБЫТИЙ_И_ИГНОРИРУЕМЫЕ_СОБЫТИЯ"></a>ПОСЛЕДОВАТЕЛЬНОСТИ НЕСКОЛЬКИХ СОБЫТИЙ И ИГНОРИРУЕМЫЕ СОБЫТИЯ</h2>
2015-10-19 13:27:31 +03:00
<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>
2015-10-19 13:27:31 +03:00
<h2><a name="ОШИБКИ"></a>ОШИБКИ</h2>
2015-10-19 13:27:31 +03:00
<p>При возникновении ошибки в процессе исполнения привязанного
скрипта для выдачи сообщения об ошибке используется механизм <a
href="../tcl/bgerror.html"><strong>bgerror</strong></a>. Команда
2015-10-19 13:27:31 +03:00
<a href="../tcl/bgerror.html"><strong>bgerror</strong></a>
исполняется на верхнем уровне (вне контекста любой из процедур
2015-10-19 13:27:31 +03:00
Tcl).</p>
</body>
</html>