[Ludwig Callewaert] wrote in [the comp.lang.tcl newsgroup], regarding [a change-sensitive text widget]: All changes to the text widget are either done with the insert or delete text widget command. Overload these (by using Wcb for instance). By overloading I mean that you provide a new implementation for those commands. In your case, the overloaded commands could first call the original insert or delete command and could then set a flag (a global variable for instance) indicating that the content of the text widget has changed. By putting a trace on that flag (with the trace command), you can make something happen everytime the widget content changes�. There are actually several ways to do this. One possibility is the following: # Create the text widget pack [text .t] # The flag global flag set flag 0 # Put a trace on the flag to execute your proc trace variable flag w changed # rename the widget procedure rename .t orig_t # the new widget procedure proc .t {args} { global flag set returnVal [eval [concat orig_t $args]] set command [lindex $args 0] if {[string equal $command "insert"] || [string equal $command "delete"]} { set flag 1 } return $returnVal } # Whatever you need to do when something changes proc changed {args} { puts "something changed" } Wcb, the widget callback package which can be found at http://www.nemethi.de/ is a more general way to do this. ---- [Arts and crafts of Tcl-Tk programming]