#!/bin/sh #\ exec wish "$0" "$@" proc entFmt {format buf c ins inv} { puts "entFmt: $format $buf $c $ins $inv" return 1 set r 1 set bmax [expr [string length $buf]-1] if {$ins} { ### insert a char set f [string index $format $bmax] for {set i $bmax} {$i < 1000} {incr i} { upvar $inv new set new $buf if {[string first $f "zZ9aAxX"] > 0} { set new [string range $buf 0 end-1]$f set r 0 } } } else { ### delete a char } puts "return: $r" return $r } ### exemplo de uso label .l4 -text "A phone number:\ \n(99) 9999-9999" entry .e4 -vcmd {entFmt {(99) 9999-9999} %P %S %d Ve4} \ -validate key -invcmd { %W delete 0 end %W insert 0 $Ve4 after idle %W configure -validate key } pack .l4 .e4