bionic (3) uevent.3tcl.gz

Provided by: tcllib_1.19-dfsg-2_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 (c) 2007-2012 Andreas Kupries <andreas_kupries@users.sourceforge.net>