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

    <h1>event</h1>

    <p>Определение виртуальных событий и генерация событий</p>

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

    <pre>
      <strong>event</strong> <em>параметр</em> ?<em>арг арг ...</em>?
    </pre>

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

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

    <dl>
      <dt><strong>event add</strong> &lt;&lt;<em>виртуальное</em>&gt;&gt;
	<em>последовательность</em> ?<em>последовательность...</em>?</dt>

      <dd>Связывает <em>виртуальное</em> событие с
	последовательностями физических событий, указываемыми
	аргументами <em>последовательность</em>; в результате
	выполнение одной из указанных <em>последовательностей</em>
	событий приводит к возникновению <em>виртуального</em>
	события. Аргумент <em>виртуальное</em> может быть произвольной
	строкой, а <em>последовательность</em> может принимать любое
	значение, допустимое для аргумента <em>последовательность</em>
	команды <a href=bind.html><strong>bind</strong></a>. Если
	виртуальное событие уже определено, то новая
	последовательность физических событий добавляется к списку уже
	имеющихся последовательностей.</dd>

      <dt><strong>event delete</strong>
	&lt;&lt;<em>виртуальное</em>&gt;&gt; ?<em>последовательность
	последовательность ..</em>?</dt>

      <dd>Удаляет все указанные <em>последовательности</em> из списка
	связанных с данным <em>виртуальным</em> событием. Аргумент
	<em>виртуальное</em> может быть произвольной строкой, а
	<em>последовательность</em> может принимать любое значение,
	допустимое для аргумента <em>последовательность</em> команды
	<a href=bind.html><strong>bind</strong></a>. Если
	<em>последовательность</em> не связана с данным
	<em>виртуальным</em> событием в текущий момент, то она
	игнорируется. Если аргумент <em>последовательность</em>
	отсутствует, то из списка удаляются все последовательности
	физических событий и данное <em>виртуальное</em> событие не
	может быть более осуществлено.</dd>

      <dt> <strong>event generate</strong> <em>окно событие</em>
	  ?<em>параметр значение параметр значение ...</em>?</dt>

      <dd>Генерирует событие в окне и обеспечивает его обработку таким
	образом, как если бы оно поступило из менеджера окон. Аргумент
	<em>окно</em> задает имя пути окна, в котором будет
	генерироваться событие; его значением может быть и
	идентификатор окна (такой же, какой служит результатом команды
	<strong>winfo id</strong>), если он относится к окну в текущем
	приложении. Аргумент <em>событие</em> задает описание события,
	например, в виде <strong>&lt;Shift-Button-2&gt;</strong> или
	<strong>&lt;&lt;Paste&gt;&gt;</strong>. Аргумент
	<em>событие</em> может принимать любое значение, допустимое
	для аргумента <em>последовательность</em> команды <a
	href=bind.html><strong>bind</strong></a>, за исключением
	того, что он должен состоять из одного, а не из нескольких
	событий. Пары <em>параметр-значение</em> можно использовать
	для установки значений дополнительных параметров события,
	например, координат курсора &quot;Мыши&quot; ниже
	(см. &quot;<a
	href=event.html#ПОЛЯ_СОБЫТИЯ>ПОЛЯ СОБЫТИЯ</a>&quot;). Если
	параметр <strong>-when</strong> не задан, то событие
	обрабатывается немедленно; все программы обработки события
	будут выполнены до завершения команды <strong>event
	generate</strong>. В противном случае момент обработки
	определяется значением параметра <strong>-when</strong>.</dd>

      <dt> <strong>event info</strong>
	?&lt;&lt;<em>виртуальное</em>&gt;&gt;?</dt>

      <dd>Возвращает информацию о виртуальных событиях. Если аргумент
	&lt;&lt;<em>виртуальное</em>&gt;&gt; опущен, то возвращается
	список всех виртуальных событий, определенных в текущий
	момент. Если аргумент &lt;&lt;<em>виртуальное</em>&gt;&gt;
	задан, то возвращаемое значение представляет собой список,
	элементы которого являются последовательностями физических
	событий, связанными с данным виртуальным событием; если
	указанное виртуальное событие не определено, то команда
	возвращает пустую строку.</dd>
    </dl>

    <h2><a name=ПОЛЯ_СОБЫТИЯ></a>ПОЛЯ СОБЫТИЯ</h2>

    <p>Команда <strong>event generate</strong> поддерживает следующие
      параметры, которые соответствуют расширению <strong>%</strong> в
      скриптах привязки для команды <a
      href=bind.html><strong>bind</strong></a>.</p>

    <dl>
      <dt><strong>-above</strong> <em>окно</em></dt>

      <dd>Аргумент <em>окно</em> задает поле
	<strong>above</strong> для события либо в виде имени
	пути окна либо в виде целочисленного идентификатора
	окна. Параметр имеет смысл для событий
	<strong>Configure</strong>. Параметр соответствует подстановке
	<strong>%a</strong> для скриптов привязки.</dd>

      <dt><strong>-borderwidth</strong> <em>размер</em></dt>

      <dd>Параметр <em>размер</em> представляет собой расстояние на
	экране; задает значение поля <strong>border_width</strong>
	события. Параметр имеет смысл для событий
	<strong>Configure</strong>. Параметр соответствует подстановке
	<strong>%B</strong> для скриптов привязки.</dd>

      <dt><strong>-button</strong> <em>число</em></dt>

      <dd>Значением параметра <em>число</em> должно быть целое число;
	задает значение поля <em>detail</em> для события
	<strong>ButtonPress</strong> или
	<strong>ButtonRelease</strong>, подавляя номер кнопки,
	задаваемый параметром события <strong>base</strong>. Параметр
	соответствует подстановке <strong>%b</strong> для скриптов
	привязки.</dd>

      <dt><strong>-count</strong> <em>число</em></dt>

      <dd>Значением параметра <em>число</em> должно быть целое число;
	задает значение поля <strong>count</strong> для
	события. Параметр имеет смысл для событий
	<strong>Expose</strong>. Параметр соответствует подстановке
	<strong>%c</strong> для скриптов привязки.</dd>

      <dt><strong>-detail</strong> <em>детальность</em></dt>

      <dd><p>Параметр задает значение поля <strong>detail</strong> для
	  события и может принимать следующие значения:</p>

	<ul>
	  <li><strong>NotifyAncestor</strong></li>
	  <li><strong>NotifyDetailNone</strong></li>
	  <li><strong>NotifyInferior</strong></li>
	  <li><strong>NotifyNonlinear</strong></li>
	  <li><strong>NotifyNonlinearVirtual</strong></li>
	  <li><strong>NotifyPointer</strong></li>
	  <li><strong>NotifyPointerRoot</strong></li>
	  <li><strong>NotifyVirtual</strong></li>
	</ul>

	<p>Имеет смысл для событий <strong>Enter</strong>,
	  <strong>Leave</strong>, <strong>FocusIn</strong> и
	  <strong>FocusOut</strong>. Параметр соответствует
	  подстановке <strong>%d</strong> для скриптов привязки.</p>
      </dd>

      <dt> <strong>-focus</strong> <em>булевское</em></dt>

      <dd>Параметр <em>булевское</em> принимает булевские значения; он
	задает значение поля <strong>focus</strong> для события. Имеет
	смысл для событий <strong>Enter</strong> и
	<strong>Leave</strong>. Параметр соответствует подстановке
	<strong>%f</strong> для скриптов привязки.</dd>

      <dt> <strong>-height</strong> <em>размер</em> </dt>

      <dd>Параметр <em>размер</em> представляет собой расстояние на
	экране; задает значение поля <strong>height</strong>
	события. Параметр имеет смысл для событий
	<strong>Configure</strong>. Параметр соответствует подстановке
	<strong>%h</strong> для скриптов привязки.</dd>

      <dt><strong>-keycode</strong> <em>число</em></dt>

      <dd>Значением параметра <em>число</em> должно быть целое число;
	задает значение поля <strong>keycode</strong> для
	события. Параметр имеет смысл для событий
	<strong>KeyPress</strong> и
	<strong>KeyRelease</strong>. Параметр соответствует
	подстановке <strong>%k</strong> для скриптов привязки.</dd>

      <dt><strong>-keysym</strong> <em>имя</em></dt>

      <dd>Значением параметра <em>имя</em> должно быть имя допустимого
	символа клавиатуры, например, <strong>g</strong>,
	<strong>пробел</strong> или <strong>Return</strong>; код этого
	символа используется в качестве значения поля
	<strong>keycode</strong> события, подавляя значение
	детальности, заданное аргументом <strong>base</strong>
	события. Имеет смысл для событий <strong>KeyPress</strong> и
	<strong>KeyRelease</strong>. Параметр соответствует
	подстановке <strong>%K</strong> для скриптов привязки.</dd>

      <dt><strong>-mode</strong> <em>уведомление</em></dt>

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

      <dt><strong>-override</strong> <em>булевское</em></dt>

      <dd>Значение параметра <em>булевское</em> должно быть булевским;
	он задает значение поля <strong>override_redirect</strong> для
	события. Имеет смысл для событий <strong>Map</strong>,
	<strong>Reparent</strong> и
	<strong>Configure</strong>. Параметр соответствует подстановке
	<strong>%o</strong> для скриптов привязки.</dd>

      <dt> <strong>-place</strong> <em>где</em> </dt>

      <dd>Параметр <em>где</em> задает значение поля
	<strong>place</strong> для события; может принимать значения
	<strong>PlaceOnTop</strong> или
	<strong>PlaceOnBottom</strong>. Имеет смысл для событий
	<strong>Circulate</strong>. Параметр соответствует подстановке
	<strong>%p</strong> для скриптов привязки.</dd>

      <dt><strong>-root</strong> <em>окно</em></dt>

      <dd>Аргумент <em>окно</em> задает поле <strong>root</strong> для
	события либо в виде имени пути окна, либо в виде
	целочисленного идентификатора окна. Имеет смысл для событий
	<strong>KeyPress</strong>, <strong>KeyRelease</strong>,
	<strong>ButtonPress</strong>, <strong>ButtonRelease</strong>,
	<strong>Enter</strong>, <strong>Leave</strong> и
	<strong>Motion</strong>. Параметр соответствует подстановке
	<strong>%R</strong> для скриптов привязки.</dd>

      <dt> <strong>-rootx</strong> <em>коорд</em> </dt>

      <dd>Параметр <em>коорд</em> представляет собой расстояние на
	экране; задает значение поля <strong>x_root</strong>
	события. Параметр имеет смысл для событий
	<strong>KeyPress</strong>, <strong>KeyRelease</strong>,
	<strong>ButtonPress</strong>, <strong>ButtonRelease</strong>,
	<strong>Enter</strong>, <strong>Leave</strong> и
	<strong>Motion</strong>. Параметр соответствует подстановке
	<strong>%X</strong> для скриптов привязки.</dd>

      <dt><strong>-rooty</strong> <em>коорд</em></dt>

      <dd>Параметр <em>коорд</em> представляет собой расстояние на
	экране; задает значение поля <strong>y_root</strong>
	события. Параметр имеет смысл для событий
	<strong>KeyPress</strong>, <strong>KeyRelease</strong>,
	<strong>ButtonPress</strong>, <strong>ButtonRelease</strong>,
	<strong>Enter</strong>, <strong>Leave</strong> и
	<strong>Motion</strong>. Параметр соответствует подстановке
	<strong>%Y</strong> для скриптов привязки.</dd>

      <dt><strong>-sendevent</strong> <em>булевское</em></dt>

      <dd>Значение параметра <em>булевское</em> должно быть булевским;
	он задает значение поля <strong>send_event</strong> для
	события. Имеет смысл для всех событий. Параметр соответствует
	подстановке <strong>%E</strong> для скриптов привязки.</dd>

      <dt> <strong>-serial</strong> <em>число</em> </dt>

      <dd>Значение параметра должно быть целым числом; задает значение
	поля <strong>serial</strong> для события. Имеет смысл
	для всех событий. Параметр соответствует подстановке
	<strong>%#</strong> для скриптов привязки.</dd>

      <dt> <strong>-state</strong> <em>состояние</em></dt>

      <dd>Параметр задает значение поля <strong>state</strong> для
	события. Для событий <strong>KeyPress</strong>,
	<strong>KeyRelease</strong>, <strong>ButtonPress</strong>,
	<strong>ButtonRelease</strong>, <strong>Enter</strong>,
	<strong>Leave</strong> и <strong>Motion</strong> значение
	параметра должно быть целым. Для событий
	<strong>Visibility</strong> параметр может принимать одно из
	значений <strong>VisibilityUnobscured</strong>,
	<strong>VisibilityPartiallyObscured</strong> или
	<strong>VisibilityFullyObscured</strong>. Этот параметр
	подавляет любые модификаторы, например, <strong>Meta</strong>
	или <strong>Control</strong>, указанные в основном
	событии. Параметр соответствует подстановке
	<strong>%s</strong> для скриптов привязки.</dd>

      <dt> <strong>-subwindow</strong> <em>окно</em></dt>

      <dd>Аргумент <em>окно</em> задает поле
	<strong>subwindow</strong> для события либо в виде имени пути
	примитива event, либо в виде целочисленного идентификатора
	окна. Имеет смысл для событий <strong>KeyPress</strong>,
	<strong>KeyRelease</strong>, <strong>ButtonPress</strong>,
	<strong>ButtonRelease</strong>, <strong>Enter</strong>,
	<strong>Leave</strong> и <strong>Motion</strong>. Аналогичен
	подстановке <strong>%S</strong> для скриптов привязки.</dd>

      <dt><strong>-time</strong> <em>целое</em></dt>

      <dd>Параметр должен иметь целое значение; задает значение поля
	<strong>time</strong> для события. Имеет смысл для событий
	<strong>KeyPress</strong>, <strong>KeyRelease</strong>,
	<strong>ButtonPress</strong>, <strong>ButtonRelease</strong>,
	<strong>Enter</strong>, <strong>Leave</strong>,
	<strong>Motion</strong> и <strong>Property</strong>. Параметр
	соответствует подстановке <strong>%t</strong> для скриптов
	привязки.</dd>

      <dt> <strong>-width</strong> <em>размер</em> </dt>

      <dd>Параметр <em>размер</em> представляет собой расстояние на
	экране; задает значение поля <strong>width</strong>
	события. Параметр имеет смысл для событий
	<strong>Configure</strong>. Параметр соответствует подстановке
	<strong>%w</strong> для скриптов привязки.</dd>

      <dt><strong>-when</strong> <em>когда</em></dt>

      <dd><p>Параметр <em>когда</em> задает момент обработки события;
	  должен принимать одно из следующих значений:</p>
	<dl>
	  <dt><strong>now</strong></dt>

	  <dd>Событие обрабатывается немедленно, до завершения
	    выполнения команды. То же самое происходит и в случае,
	    если параметр <strong>-when</strong> опущен.</dd>

	  <dt><strong>tail</strong></dt>

	  <dd> Устанавливает событие в очередь событий Tcl вслед за
	    всеми стоящими в этой очереди событиями данного
	    приложения.</dd>

	  <dt><strong>head</strong></dt>

	  <dd> Устанавливает событие в начало очереди событий Tcl; оно
	    будет обработано перед остальными событиями, уже стоящими
	    в очереди.</dd>

	  <dt><strong>mark</strong></dt>

	  <dd>Устанавливает событие в начало очереди событий Tcl, но
	    вслед за всеми событиями, вставшими в очередь посредством
	    указания параметра <strong>-when</strong>. Такая
	    возможность полезна при генерации последовательности
	    событий, которые должны быть обработаны одно за другим, но
	    перед всеми событиями уже стоящими в очереди.</dd>
	</dl>
      </dd>

      <dt><strong><em>-x</em></strong> <em>коорд</em> </dt>

      <dd>Параметр <em>коорд</em> представляет собой расстояние на
	экране; задает значение поля <strong>x</strong>
	события. Параметр имеет смысл для событий
	<strong>KeyPress</strong>, <strong>KeyRelease</strong>,
	<strong>ButtonPress</strong>, <strong>ButtonRelease</strong>,
	<strong>Enter</strong>, <strong>Leave</strong>,
	<strong>Motion</strong>, <strong>Expose</strong>,
	<strong>Configure</strong>, <strong>Gravity</strong> и
	<strong>Reparent</strong>. Параметр соответствует подстановке
	<strong>%x</strong> для скриптов привязки.</dd>

      <dt><strong><em>-y</em></strong> <em>коорд</em></dt>

      <dd>Параметр <em>коорд</em>представляет собой расстояние на
	экране; задает значение поля <strong>y</strong>
	события. Параметр имеет смысл для событий
	<strong>KeyPress</strong>, <strong>KeyRelease</strong>,
	<strong>ButtonPress</strong>, <strong>ButtonRelease</strong>,
	<strong>Enter</strong>, <strong>Leave</strong>,
	<strong>Motion</strong>, <strong>Expose</strong>,
	<strong>Configure</strong>, <strong>Gravity</strong> и
	<strong>Reparent</strong>. Параметр соответствует подстановке
	<strong>%y</strong> для скриптов привязки.</dd>
    </dl>
    
    <p>Значением всякого параметра, не указанного при генерации
      события, становится 0, за исключением параметра
      <strong>serial</strong>, которому присваивается серийный номер
      очередного X события.</p>

    <h2><a name=ПРИМЕРЫ_ВИРТУАЛЬНЫХ_СОБЫТИЙ></a>ПРИМЕРЫ ВИРТУАЛЬНЫХ СОБЫТИЙ</h2>

    <p>Для обращения к привязке к виртуальному событию необходимо
      выполнение двух условий. Во-первых, это виртуальное событие
      должно быть определено командой <strong>event
      add</strong>. Во-вторых, к этому виртуальному событию должна
      быть создана привязка с помощью команды <a href=
      bind.html><strong>bind</strong></a>.</p>
    
    <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;Save&gt;&gt; &lt;Control-X&gt;&lt;Control-S&gt;
      event add &lt;&lt;Save&gt;&gt; &lt;Shift-F12&gt;
    </pre>

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

    <pre>
      bind Entry &lt;&lt;Paste&gt;&gt; {%W insert[selection get]}
    </pre>

    <p>Двойные угловые скобки показывают, что выполняется привязка к
      виртуальному событию. При нажатии клавиш
      <strong>Control-y</strong> или кнопки 2 .Мыши. или при
      синтезировании виртуального события
      <strong>&lt;&lt;Paste&gt;&gt;</strong> командой <strong>event
      generate</strong> будет выполнена привязка
      <strong>&lt;&lt;Paste&gt;&gt;</strong>.</p>
    

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

    <p>
      event add &lt;&lt;Paste&gt;&gt; &lt;Control-y&gt; &lt;Meta-Control-y&gt;
      bind Entry &lt;Control-y&gt; {puts Control-y}
      bind Entry &lt;&lt;Paste&gt;&gt; {puts Paste}

    <p>При нажатии на клавиши <strong>Control-y</strong> будет
      выполнена привязка <strong>&lt;Control-y&gt;</strong>, так как
      физическое событие считается более конкретным, чем виртуальное,
      а в остальном все одинаково. Однако при нажатии клавиш
      <strong>Meta-Control-y</strong> будет выполнена привязка
      <strong>&lt;&lt;Paste&gt;&gt;</strong>, так как модификатор
      <strong>Meta</strong> в физическом образце, связанном с
      виртуальной привязкой, более конкретен, чем последовательность
      &lt;<strong>Control-y</strong>&gt; для физического события.</p>

    <p>Привязки к виртуальному событию можно создавать и до
      определения самого события. На самом деле определение
      виртуального события не является необходимым, например, на
      платформах, где конкретное виртуальное событие может оказаться
      бессмысленным или не генерируемым.</p>

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

    <pre>
      bind &lt;Entry&gt; &lt;Control-y&gt; {}
      event add &lt;&lt;Paste&gt;&gt; &lt;Key-F6&gt;
    </pre>

    <p>то поведение события изменится в двух направлениях. Во-первых,
      всплывет подавленная привязка
      <strong>&lt;&lt;Paste&gt;&gt;</strong>. Нажатие на клавиши
      <strong>Control-y</strong> приведет теперь не к выполнению
      привязки <strong>&lt;Control-y&gt;</strong>, а к выполнению
      виртуального события <strong>&lt;&lt;Paste&gt;&gt;</strong>.
      Во-вторых, нажатие на клавишу <strong>F6</strong> также приведет
      к выполнению привязки <strong>&lt;&lt;Paste&gt;&gt;</strong>.

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

    <pre>
      <strong>event generate</strong> <em>окно событие параметр значение параметр значение ...</em>
    </pre>

    <p>Генерирует событие в окне и обеспечивает его обработку таким
      образом, как если бы оно поступило из менеджера окон. Аргумент
      <em>окно</em> задает имя пути окна, в котором будет
      генерироваться событие; его значением может быть и идентификатор
      окна (такой же, какой служит результатом команды <strong>winfo
      id</strong>), если он относится к окну в текущем
      приложении. Аргумент <em>событие</em> задает описание события,
      например, в виде &lt;<strong>Shift-Button-2</strong>&gt; или
      &lt;&lt;<strong>Paste</strong>&gt;&gt;. Аргумент
      <em>событие</em> может принимать любое значение, допустимое для
      аргумента <em>последовательность</em> команды
      <strong>bind</strong>, за исключением того, что он должен
      состоять из одного, а не из нескольких событий. Пары
      <em>параметр-значение</em> можно использовать для установки
      значений дополнительных параметров события, например, координат
      курсора &quot;Мыши&quot; ниже (см. &quot;<a
      href=event.html#ПОЛЯ_СОБЫТИЯ>ПОЛЯ СОБЫТИЯ</a>&quot;). Если
      параметр <strong>-when</strong> не задан, то событие
      обрабатывается немедленно; все программы обработки события будут
      выполнены до завершения команды <strong>event
      generate</strong>. В противном случае момент обработки
      определяется значением параметра <strong>-when</strong>.

    <pre>
      <strong>event info</strong> &lt;&lt;<em>виртуальное</em>&gt;&gt;
    </pre>

    <p>Возвращает информацию о виртуальных событиях. Если аргумент
      <strong>&lt;&lt;</strong><em>виртуальное</em><strong>&gt;&gt;</strong>
      опущен, то возвращается список всех виртуальных событий,
      определенных в текущий момент. Если аргумент
      <strong>&lt;&lt;</strong><em>виртуальное</em><strong>&gt;&gt;</strong>
      задан, то возвращаемое значение представляет собой список,
      элементы которого являются последовательностями физических
      событий, связанными с данным виртуальным событием; если
      указанное виртуальное событие не определено, то команда
      возвращает пустую строку.</p>
  </body>
</html>