606 lines
26 KiB
HTML
606 lines
26 KiB
HTML
<!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 событиям. Команда назначает событиям ввода от
|
||
"Мыши" и клавиатуры (Х событиям) исполнение скрипта
|
||
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> перечисляет окна, к которым выполняется
|
||
привязка. Если значение аргумента начинается с точки, скажем
|
||
".a.b.c", то оно должно представлять собой путь к
|
||
окну; в противном случае оно может быть произвольной
|
||
строкой. Каждому окну приписан некоторый список тегов, и
|
||
привязка к данному окну осуществляется, если значение аргумента
|
||
<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>. Этот символ не может
|
||
быть пробелом или знаком <. Этот вид образцов соответствует
|
||
событию <strong>KeyPress</strong> для конкретной
|
||
клавиши. Образцы второго вида длиннее, однако, этот вид носит
|
||
более общий характер. Его синтаксис выглядит следующим
|
||
образом:</p>
|
||
<pre>
|
||
<<em>модификатор-модификатор-тип-детализация</em>>
|
||
</pre>
|
||
|
||
<p>Образец события целиком заключен в угловые скобки. Внутри
|
||
угловых скобок располагаются несколько модификаторов (быть
|
||
может, ни одного), тип события и дополнительная порция
|
||
информации (<em>детализация</em>), указывающая конкретную кнопку
|
||
или комбинацию клавиш. Одно из полей <em>тип</em> или
|
||
<em>детализация</em> должно обязательно присутствовать,
|
||
остальные могут быть опущены. Поля разделяются пробелами или
|
||
дефисами.</p>
|
||
|
||
<p>Третья форма образца используется для задания поименованного
|
||
виртуального события, определенного пользователем. У нее
|
||
следующий синтаксис:</p>
|
||
|
||
<pre>
|
||
<<<em>имя</em>>>
|
||
</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> событие
|
||
подойдет под образец <<strong>Control-Button-1</strong>>,
|
||
но не подойдет под образец
|
||
<<strong>Mod1-Button-1</strong>>. Если ни один из
|
||
модификаторов не был задан, то в событии может присутствовать
|
||
любая комбинация модификаторов.</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>, промежуток времени между событиями
|
||
должен быть коротким, а "Мышь" не должна сдвигаться. Например,
|
||
комбинация <<strong>Double-Button-1</strong>> эквивалентна
|
||
паре <<strong>Button-1<em>><</em>Button-1</strong>>
|
||
с дополнительными временными и пространственными
|
||
ограничениями.</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>. Например, спецификатор
|
||
<<strong>1</strong>> эквивалентен спецификатору
|
||
<<strong>ButtonPress-1</strong>>.
|
||
|
||
<p>Для типов <strong>KeyPress</strong> и
|
||
<strong>KeyRelease</strong> детализацию можно указать в виде
|
||
описателя X клавиши. В их число входят все алфавитно-цифровые
|
||
символы ASCII (например, описатель <strong>a</strong> служит для
|
||
описания символа ASCII "a"), а также описатели для
|
||
неалфавитно-цифровых символов (описатель <strong>comma</strong>
|
||
для запятой) и описатели для всех не ASCII-клавиш клавиатуры
|
||
(<strong>Shift_L</strong> для левой клавиши верхнего регистра,
|
||
<strong>F1</strong> для первой функциональной клавиши при ее
|
||
наличии). Мы не приводим здесь полный список клавиш. Он меняется
|
||
от системы к системе, и его можно найти в других частях X
|
||
документации. При необходимости можно получить описатель клавиши
|
||
с помощью обозначения <strong>%K</strong>, описанного ниже. Если
|
||
приведена <em>детализация</em> описателя клавиши, то поле
|
||
<em>тип</em> может отсутствовать, по умолчанию принимается
|
||
значение <strong>KeyPress</strong>. Например, спецификатор
|
||
<<strong>Control-comma</strong>> эквивалентен
|
||
спецификатору <<strong>Control-KeyPress-comma</strong>>.</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 <<Paste>> <Control-y>
|
||
event add <<Paste>> <Button-2>
|
||
event add <<Scroll>> <Button-2>
|
||
bind Entry <<Paste>> {puts Paste}
|
||
bind Entry <<Scroll>> {puts Scroll}
|
||
</pre>
|
||
|
||
<p>При нажатии <strong>Control-y</strong> будет выполнена привязка
|
||
<<<strong>Paste</strong>>>, а при нажатии кнопки 2
|
||
одна из привязок <<<strong>Paste</strong>>> или
|
||
<<<strong>Scroll</strong>>>, причем определить какой
|
||
именно будет эта привязка, невозможно.</p>
|
||
|
||
<p>Если X событие не подходит ни под одну из существующих
|
||
привязок, то событие игнорируется. Наступление не привязанного
|
||
события не считается ошибкой.</p>
|
||
|
||
<h2><a name="ПОСЛЕДОВАТЕЛЬНОСТИ_НЕСКОЛЬКИХ_СОБЫТИЙ_И_ИГНОРИРУЕМЫЕ_СОБЫТИЯ"></a>ПОСЛЕДОВАТЕЛЬНОСТИ НЕСКОЛЬКИХ СОБЫТИЙ И ИГНОРИРУЕМЫЕ СОБЫТИЯ</h2>
|
||
|
||
<p>Если аргумент <em>последовательность</em> в команде
|
||
<strong>bind</strong> состоит из нескольких образцов событий, то
|
||
скрипт выполняется в случае, если последние события (включая
|
||
самое последнее) подходят под данную последовательность. Это
|
||
означает, например, что при неоднократном последовательном
|
||
нажатии кнопки 1 каждое из нажатий, за исключением самого
|
||
первого, отвечает образцу
|
||
<<strong>Doudble-ButtonPress-1</strong>>. Если в
|
||
последовательности событий происходят посторонние события, то
|
||
они игнорируются, за исключением событий
|
||
<strong>KeyPress</strong> и <strong>ButtonPress</strong>.
|
||
Например, нажатия на кнопку 1 будут соответствовать образцу
|
||
<<strong>Doudble-ButtonPress-1</strong>>, даже если их
|
||
перемежают события <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>
|
||
|
||
|
||
|