${NS}::frame  $w
        ${NS}::label  $w.l       -text [mc "Goto Line:"]
-       entry  $w.ent \
+       tentry  $w.ent \
                -textvariable ${__this}::linenum \
                -background lightgreen \
                -validate key \
                -validatecommand [cb _validate %P]
-       ${NS}::button $w.bn      -text [mc Go] -command [cb _incrgoto]
+       ${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]
+       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]
        string is integer $P
 }
 
-method _incrgoto {} {
+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
+               }
        }
 }