${NS}::frame $w
${NS}::label $w.l -text [mc "Goto Line:"]
- entry $w.ent -textvariable ${__this}::linenum -background lightgreen
- ${NS}::button $w.bn -text [mc Go] -command [cb _incrgoto]
+ tentry $w.ent \
+ -textvariable ${__this}::linenum \
+ -background lightgreen \
+ -validate key \
+ -validatecommand [cb _validate %P]
+ ${NS}::button $w.bn -text [mc Go] -command [cb _goto]
pack $w.l -side left
pack $w.bn -side right
eval grid conf $w -sticky we $args
grid remove $w
- bind $w.ent <Return> [cb _incrgoto]
- bind $w.ent <Escape> [list linebar::hide $this]
+ trace add variable linenum write [cb _goto_cb]
+ bind $w.ent <Return> [cb _goto]
+ bind $w.ent <Escape> [cb hide]
bind $w <Destroy> [list delete_this $this]
return $this
method hide {} {
if {[visible $this]} {
+ $w.ent delete 0 end
focus $ctext
grid remove $w
}
return $w.ent
}
-method _incrgoto {} {
+method _validate {P} {
+ # only accept numbers as input
+ string is integer $P
+}
+
+method _goto_cb {name ix op} {
+ after idle [cb _goto 1]
+}
+
+method _goto {{nohide {0}}} {
if {$linenum ne {}} {
$ctext see $linenum.0
- hide $this
+ if {!$nohide} {
+ hide $this
+ }
}
}