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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Команда <strong>bind</strong> позволяет привязать выполнение
|
|
|
|
|
скриптов Tcl к X событиям. Команда назначает событиям ввода от
|
|
|
|
|
"Мыши" и клавиатуры (Х событиям) исполнение скрипта
|
2015-10-19 13:27:31 +03:00
|
|
|
|
Tcl.</p>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name="СИНТАКСИС"></a>СИНТАКСИС</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<ul>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<li>тег, являющийся именем внутреннего окна, приписывается этому
|
|
|
|
|
окну;</li>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<li>тег, являющийся именем окна верхнего уровня, приписывается
|
|
|
|
|
этому окну и всем его внутренним окнам;</li>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<li>тег, являющийся именем класса примитивов, скажем
|
|
|
|
|
<strong>Button</strong>, приписывается всем примитивам этого
|
|
|
|
|
класса;</li>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<li>тег с именем <strong>all</strong> приписывается всем окнам
|
|
|
|
|
приложения.</li>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</ul>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name="ОБРАЗЦЫ_СОБЫТИЙ"></a>ОБРАЗЦЫ СОБЫТИЙ</h2>
|
|
|
|
|
|
|
|
|
|
<p>Аргумент <em>последовательность</em> представляет собой
|
|
|
|
|
последовательность одного или нескольких образцов
|
|
|
|
|
событий. Каждый образец может быть записан в одном из трех
|
|
|
|
|
видов. В простейшем случае это символ ASCII, скажем
|
|
|
|
|
<strong>a</strong> или <strong>|</strong>. Этот символ не может
|
|
|
|
|
быть пробелом или знаком <. Этот вид образцов соответствует
|
|
|
|
|
событию <strong>KeyPress</strong> для конкретной
|
|
|
|
|
клавиши. Образцы второго вида длиннее, однако, этот вид носит
|
|
|
|
|
более общий характер. Его синтаксис выглядит следующим
|
|
|
|
|
образом:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<<em>модификатор-модификатор-тип-детализация</em>>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</pre>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Образец события целиком заключен в угловые скобки. Внутри
|
|
|
|
|
угловых скобок располагаются несколько модификаторов (быть
|
|
|
|
|
может, ни одного), тип события и дополнительная порция
|
|
|
|
|
информации (<em>детализация</em>), указывающая конкретную кнопку
|
|
|
|
|
или комбинацию клавиш. Одно из полей <em>тип</em> или
|
|
|
|
|
<em>детализация</em> должно обязательно присутствовать,
|
|
|
|
|
остальные могут быть опущены. Поля разделяются пробелами или
|
|
|
|
|
дефисами.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Третья форма образца используется для задания поименованного
|
|
|
|
|
виртуального события, определенного пользователем. У нее
|
|
|
|
|
следующий синтаксис:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<pre>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<<<em>имя</em>>>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</pre>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Образец события целиком заключен в двойные угловые скобки.
|
|
|
|
|
Внутри этих скобок содержится определенное пользователем имя
|
|
|
|
|
виртуального события. С виртуальным событием нельзя
|
|
|
|
|
комбинировать модификаторы, такие как <strong>Shift</strong>или
|
|
|
|
|
<strong>Control</strong>. Привязки к виртуальному событию можно
|
|
|
|
|
создавать до описания самого события; при динамическом изменении
|
|
|
|
|
этого описания все окна, привязанные к событию, будут обращаться
|
|
|
|
|
к новому описанию.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name="МОДИФИКАТОРЫ"></a>МОДИФИКАТОРЫ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Последней частью длинной спецификации события является
|
|
|
|
|
<em>детализация</em>. Для типов <strong>ButtonPress</strong> и
|
|
|
|
|
<strong>ButtonRelease</strong> это номер кнопки (1-5). Если
|
|
|
|
|
номер кнопки задан, то под образец подойдет только событие на
|
|
|
|
|
указанной кнопке; если номер кнопки не задан, то под образец
|
|
|
|
|
подойдет событие на любой из кнопок. Замечание: задание номера
|
|
|
|
|
кнопки отличается от задания модификатора кнопки: в первом
|
|
|
|
|
случае требуется, чтобы кнопка была нажата или отжата; во втором
|
|
|
|
|
чтобы какая-то другая кнопка была отжата при наступлении
|
|
|
|
|
события. Если номер кнопки задан, то поле <em>тип</em> можно
|
|
|
|
|
опустить: по умолчанию оно будет иметь значение
|
|
|
|
|
<strong>ButtonPress</strong>. Например, спецификатор
|
|
|
|
|
<<strong>1</strong>> эквивалентен спецификатору
|
2015-10-19 13:27:31 +03:00
|
|
|
|
<<strong>ButtonPress-1</strong>>.
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
<dt><strong>%%</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Заменяется однократным процентом.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%#</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Номер последнего обработанного сервером запроса клиента
|
|
|
|
|
(<em>сериальное</em> поле события). Допустимо для событий всех
|
|
|
|
|
типов.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%a</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>выше</em> события, отформатированное как
|
|
|
|
|
шестнадцатеричное число. Допустимо только для событий
|
|
|
|
|
<strong>Configure</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%b</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Номер нажатой или отпущенной кнопки. Допустимо только для
|
|
|
|
|
событий <strong>ButtonPress</strong> и
|
|
|
|
|
<strong>ButtonRelease</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%c</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>счетчик</em> события. Допустимо только для событий
|
|
|
|
|
<strong>Expose</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dd><strong>%d</strong></dd>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>высота</em> события. Допустимо только для событий
|
|
|
|
|
<strong>Configure</strong> и <strong>Expose</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%k</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>код_клавиши</em> события. Допустимо только для
|
|
|
|
|
событий <strong>KeyPress</strong> и
|
|
|
|
|
<strong>KeyRelease</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%m</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>время</em> события. Допустимо только для событий,
|
|
|
|
|
содержащих поле <em>время</em>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%w</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>ширина</em> события. Допустимо только для событий
|
|
|
|
|
<strong>Configure</strong> и <strong>Expose</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%x</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>x</em> события. Допустимо только для событий,
|
|
|
|
|
содержащих поле <em>x</em>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt> <strong>%y</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd> Поле <em>y</em> события.Допустимо только для событий,
|
|
|
|
|
содержащих поле <em>y</em>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%A</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>ширина_бордюра</em> события.Допустимо только для
|
|
|
|
|
событий <strong>Configure</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%E</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>послать_событие</em> события.Допустимо для событий
|
|
|
|
|
всех типов.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%K</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Код клавиши, соответствующей данному событию, представленный
|
|
|
|
|
текстовой строкой. Допустимо только для событий
|
|
|
|
|
<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%N</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Код клавиши, соответствующей данному событию, представленный
|
|
|
|
|
десятичным числом. Допустимо только для событий
|
|
|
|
|
<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt> <strong>%R</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Идентификатор корневого окна события.Допустимо только для
|
|
|
|
|
событий содержащих поле <em>корень</em>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt> <strong>%S</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Идентификатор подокна события, представленный в виде
|
|
|
|
|
шестнадцатиричного числа. Допустимо только для событий
|
|
|
|
|
содержащих поле <em>подокно</em>.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%T</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Поле <em>тип</em> события. Допустимо для событий всех
|
|
|
|
|
типов.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt><strong>%W</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<dd>Путь к окну, к которому отнесено событие (поле <em>окно</em>
|
|
|
|
|
события). Допустимо для событий всех типов.</dd>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<dt> <strong>%X</strong></dt>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Строка подстановки для %-замещения форматируется как обычный
|
|
|
|
|
элемент списка Tcl. Это означает, что при наличии в строке
|
|
|
|
|
пробелов она заключается в фигурные скобки, а специальным
|
|
|
|
|
символам, таким как `$' и `{' может предшествовать обратная
|
|
|
|
|
косая черта. Такая строка нормально обрабатывается
|
|
|
|
|
синтаксическим анализатором Tcl при выполнении скрипта. Строки
|
|
|
|
|
подстановки по большей части являются числами или корректно
|
|
|
|
|
определенными строками как, например, <strong>Above</strong>;
|
|
|
|
|
такие строки не нуждаются ни в каком специальном
|
|
|
|
|
форматировании. Чаще всего форматирования требуют строки,
|
|
|
|
|
замещающие <strong>%A</strong>. Если, например, скрипт имеет
|
|
|
|
|
вид</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<pre>insert %A</pre>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>и вводимым символом является открывающая квадратная скобка, то
|
|
|
|
|
реально исполняемым скриптом будет</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<pre>insert \[</pre>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
выполнение текущего привязанного скрипта прерывается и 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">
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<li>образец события, задающий конкретную кнопку или клавишу,
|
|
|
|
|
более конкретен, чем тот, в котором такой спецификации не
|
|
|
|
|
задано;</li>
|
|
|
|
|
|
|
|
|
|
<li>более длинная последовательность (по числу отвечающих
|
|
|
|
|
образцу событий) конкретнее более короткой;</li>
|
|
|
|
|
|
|
|
|
|
<li>если модификаторы первого образца содержатся среди
|
|
|
|
|
модификаторов второго, то образец с большим числом
|
|
|
|
|
модификаторов более конкретен;</li>
|
|
|
|
|
|
|
|
|
|
<li>виртуальное событие, физический образец которого
|
|
|
|
|
соответствует последовательности, менее конкретно, чем тот же
|
|
|
|
|
самый физический образец, не связанный ни с каким виртуальным
|
|
|
|
|
событием;</li>
|
|
|
|
|
|
|
|
|
|
<li><p>если последовательность отвечает двум или более
|
|
|
|
|
виртуальным событиям, то из них выбирается какое-нибудь
|
|
|
|
|
одно, однако порядок выбора не определен.</p>
|
|
|
|
|
|
|
|
|
|
<p>Если в подходящей последовательности событий больше одного
|
|
|
|
|
события, то критерии 1 - 5 применяются ко всем событиям,
|
|
|
|
|
начиная с самого последнего и до самого первого события
|
|
|
|
|
последовательности. Если критерии не позволяют определить
|
|
|
|
|
победителя, то победителем становится событие,
|
|
|
|
|
зарегистрированное последним.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
</ol>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если одна и та же последовательность осуществляет переключение
|
|
|
|
|
к двум (или более) виртуальным событиям, и теги окон этих
|
|
|
|
|
виртуальных событий совпадают, то переключение произойдет лишь к
|
|
|
|
|
одному из этих виртуальных событий, выбранному случайным
|
|
|
|
|
образом:</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
<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>
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>При нажатии <strong>Control-y</strong> будет выполнена привязка
|
|
|
|
|
<<<strong>Paste</strong>>>, а при нажатии кнопки 2
|
|
|
|
|
одна из привязок <<<strong>Paste</strong>>> или
|
|
|
|
|
<<<strong>Scroll</strong>>>, причем определить какой
|
|
|
|
|
именно будет эта привязка, невозможно.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<p>Если X событие не подходит ни под одну из существующих
|
|
|
|
|
привязок, то событие игнорируется. Наступление не привязанного
|
|
|
|
|
события не считается ошибкой.</p>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name="ПОСЛЕДОВАТЕЛЬНОСТИ_НЕСКОЛЬКИХ_СОБЫТИЙ_И_ИГНОРИРУЕМЫЕ_СОБЫТИЯ"></a>ПОСЛЕДОВАТЕЛЬНОСТИ НЕСКОЛЬКИХ СОБЫТИЙ И ИГНОРИРУЕМЫЕ СОБЫТИЯ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<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>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
<h2><a name="ОШИБКИ"></a>ОШИБКИ</h2>
|
2015-10-19 13:27:31 +03:00
|
|
|
|
|
2018-02-05 17:22:04 +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>
|
2018-02-05 17:22:04 +03:00
|
|
|
|
исполняется на верхнем уровне (вне контекста любой из процедур
|
2015-10-19 13:27:31 +03:00
|
|
|
|
Tcl).</p>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-02-05 17:22:04 +03:00
|
|
|
|
|
|
|
|
|
|