proc bindfind {{widget .}} { global lastb set lastb {} foreach child [winfo children $widget] { foreach bt [bindtags $child] { foreach event [bind $bt] { set binding [bind $bt $event] if {![string match "if \{*" $binding]} { bind $bt $event "if \{\"\$lastb\" != \"[list $bt $event]\"\} \ \{puts \"XX$bt $event\";set lastb \"[list $bt $event]\"\};$binding" } } } bindfind $child } } rename focus _focus proc focus {args} { puts "focus $args" uplevel 1 eval "_focus $args" }