Provided by: tcllib_1.21+dfsg-1_all bug

NAME

       uevent - User events

SYNOPSIS

       package require Tcl  8.4

       package require uevent  ?0.3.1?

       package require logger

       ::uevent::bind tag event command

       command tag event details

       ::uevent::unbind token

       ::uevent::generate tag event ?details?

       ::uevent::list

       ::uevent::list tag

       ::uevent::list tag event

       ::uevent::watch::tag::add pattern command

       {*}command bound tag

       {*}command unbound tag

       ::uevent::watch::tag::remove token

       ::uevent::watch::event::add tag_pattern event_pattern command

       {*}command bound tag event

       {*}command unbound tag event

       ::uevent::watch::event::remove token

_________________________________________________________________________________________________

DESCRIPTION

       This  package  provides  a  general  facility  for the handling of user events. Allows the
       binding of arbitrary commands to arbitrary events on arbitrary tags, removal of  bindings,
       and event generation.

       The  main difference to the event system built into the Tcl/Tk core is that the latter can
       generate only virtual events, and only for widgets. It is not possible to use the  builtin
       facilities  to  bind  to  events on arbitrary (pseudo-)objects, nor is it able to generate
       events for such.

       Here we can, by assuming that each object in question is represented by its own tag. Which
       is possible as we allow arbitrary tags.

       More differences:

       [1]    The package uses only a two-level hierarchy, tags and events, to handle everything,
              whereas the Tcl/Tk system uses three levels, i.e.  objects, tags, and events,  with
              a n:m relationship between objects and tags.

       [2]    This  package triggers all bound commands for a tag/event combination, and they are
              independent of each other. A bound command cannot force the event  processing  core
              to abort the processing of command coming after it.

API

       The package exports eight commands, as specified below. Note that when the package is used
       from within Tcl 8.5+ all the higher commands are ensembles, i.e. the :: separators can  be
       replaceed by spaces.

       ::uevent::bind tag event command
              Using  this  command  registers  the  command prefix to be triggered when the event
              occurs for the tag. The result of the command is an opaque token  representing  the
              binding.  Note that if the same combination of <tag,event,command> is used multiple
              times the same token is returned by every call.

              The signature of the command prefix is

              command tag event details

       where details contains the argument(s) of the event. Its contents are event  specific  and
       have  to  be  agreed upon between actual event generator and consumer. This package simply
       transfers the information and does not perform any processing beyond that.

       ::uevent::unbind token
              This command releases the event binding represented by the token. The token has  to
              be  the  result of a call to ::uevent::bind. The result of the command is the empty
              string.

       ::uevent::generate tag event ?details?
              This command generates an event for the tag, triggering all commands bound to  that
              combination. The details argument is simply passed unchanged to all event handlers.
              It is the responsibility of the code generating and consuming the event to have  an
              agreement  about  the  format  and contents of the information carried therein. The
              result of the command is the empty string.

              Note that all bound commands are triggered, independently of each other. The  event
              handlers  cannot  assume  a  specific order. They are also not called synchronously
              with the invokation of this command, but  simply  put  into  the  event  queue  for
              processing when the system returns to the event loop.

              Generating  an event for an unknown tag, or for a <tag,event> combination which has
              no commands bound to it is allowed, such calls will be ignored.

       ::uevent::list
              In this form the command returns a list containing the names of all tags which have
              events with commands bound to them.

       ::uevent::list tag
              In  this  format  the command returns a list containing the names of all events for
              the tag with commands bound to them. Specifying an unknown tag, i.e. a tag  without
              event and commands, will cause the command to throw an error.

       ::uevent::list tag event
              In  this  format  the  command  returns a list containing all commands bound to the
              event for the tag. Specifying an unknown tag  or  unknown  event,  will  cause  the
              command to throw an error.

       ::uevent::watch::tag::add pattern command
              This  command  sets up a sort of reverse events. Events generated, i.e. the command
              prefix invoked, when observers bind to and unbind from specific tags.

              Note that the command prefix is only invoked twice per tag, first  when  the  first
              command is bound to any event of the tag, and second when the last command bound to
              the tag is removed.

              The signature of the command prefix is

              {*}command bound tag

              {*}command unbound tag

       The result of the command is a token representing the watcher.

       ::uevent::watch::tag::remove token
              This command removes a watcher for (un)bind events on tags.

              The result of the command is the empty string.

       ::uevent::watch::event::add tag_pattern event_pattern command
              This command sets up a sort of reverse events. Events generated, i.e.  the  command
              prefix  invoked,  when  observers  bind to and unbind from specific combinations of
              tags and events.

              Note that the command prefix is only invoked twice per tag/event combination, first
              when  the  first  command is bound to it, and second when the last command bound to
              the it is removed.

              The signature of the command prefix is

              {*}command bound tag event

              {*}command unbound tag event

       The result of the command is a token representing the watcher.

       ::uevent::watch::event::remove token
              This command removes a watcher for (un)bind events on tag/event combinations.

              The result of the command is the empty string.

BUGS, IDEAS, FEEDBACK

       This document, and the package it describes,  will  undoubtedly  contain  bugs  and  other
       problems.    Please   report   such   in  the  category  uevent  of  the  Tcllib  Trackers
       [http://core.tcl.tk/tcllib/reportlist].  Please also report any ideas for enhancements you
       may have for either package and/or documentation.

       When proposing code changes, please provide unified diffs, i.e the output of diff -u.

       Note further that attachments are strongly preferred over inlined patches. Attachments can
       be made by going to the Edit form of the ticket immediately after its creation,  and  then
       using the left-most button in the secondary navigation bar.

SEE ALSO

       hook(3tcl)

KEYWORDS

       bind, event, generate event, hook, unbind

CATEGORY

       Programming tools

COPYRIGHT

       Copyright (c) 2007-2012 Andreas Kupries <andreas_kupries@users.sourceforge.net>