Posted to tcl by evilotto at Thu Sep 12 18:23:09 GMT 2013view pretty

namespace eval ::synevent {
    proc notify {var} {
        incr ::synevent::$var
    }

    # repeatedly notify a handle at N ms intervals
    proc notify-interval {var interval} {
        incr ::synevent::$var
        after $interval [namespace code [info level 0]]
    }

    proc evHandler {script var var2 op} {
        after idle $script
    }

    proc on {var script} {
        set inf [trace vinfo ::synevent::$var]
        foreach t $inf {
            trace vdelete ::synevent::$var [lindex $t 0] [lindex $t 1]
        }
        set ::synevent::$var 0
        if {$script != ""} {
            set scriptcall [uplevel namespace code [list $script]]
            trace variable ::synevent::$var w [list ::synevent::evHandler $scriptcall]
        }
    }

    namespace export on notify notify-interval
}
namespace import ::synevent::*
package provide synevent 0.2