invalid command name "bind"
    while executing
"bind Console <1> {__tcl3dConsoleButton1 %W %x %y}"
    (in namespace eval "::request" script line 148)
    invoked from within
"namespace eval ::request $script"
    ("::try" body line 12)

OUTPUT BUFFER:

#****************************************************************************** # # Copyright: 2006-2010 Paul Obermeier (obermeier@tcl3d.org) # # See the file "Tcl3D_License.txt" for information on # usage and redistribution of this file, and for a # DISCLAIMER OF ALL WARRANTIES. # # Module: Tcl3D -> tcl3dOgl # Filename: tcl3dGuiConsole.tcl # # Author: Paul Obermeier # # Description: Tcl module implementing a simple Tk console. It is # used in the tcl3dsh, the Tcl3D Starpack. # The implementation of this console window was taken # from D. Richard Hipp's mktclapp. # #****************************************************************************** ############################################################################### #[@e # Name: tcl3dConsoleCreate - Create a console window. # # Synopsis: tcl3dConsoleCreate { w prompt title } # # Description: w : string (Widget name) # prompt : string # title : string # # Create a new console window "w". The window's title will # be set to "title". The prompt inside the console's text # widget will be set to "prompt". # # Example: # tcl3dConsoleCreate .myConsole "tcl3d> " "Tcl3D Console" # # See also: # ############################################################################### proc tcl3dConsoleCreate {w prompt title} { upvar #0 $w.t v if {[winfo exists $w]} {destroy $w} if {[info exists v]} {unset v} toplevel $w wm title $w $title wm iconname $w $title set mnu $w.mb menu $mnu -borderwidth 2 -relief sunken $mnu add cascade -menu $mnu.file -label File -underline 0 $mnu add cascade -menu $mnu.edit -label Edit -underline 0 set fileMenu $mnu.file set editMenu $mnu.edit menu $fileMenu -tearoff 0 __tcl3dAddMenuCmd $fileMenu "Save as ..." "" "__tcl3dConsoleSaveFile $w.t" __tcl3dAddMenuCmd $fileMenu "Close" "" "destroy $w" __tcl3dAddMenuCmd $fileMenu "Quit" "" "exit" __tcl3dConsoleCreateChild $w $prompt $editMenu $w configure -menu $mnu } # # Private console procedures. # proc __tcl3dAddMenuCmd { menu label acc cmd } { $menu add command -label $label -accelerator $acc -command $cmd } proc __tcl3dConsoleCreateChild {w prompt editMenu} { upvar #0 $w.t v if {$editMenu!=""} { menu $editMenu -tearoff 0 __tcl3dAddMenuCmd $editMenu "Cut" "" "__tcl3dConsoleCut $w.t" __tcl3dAddMenuCmd $editMenu "Copy" "" "__tcl3dConsoleCopy $w.t" __tcl3dAddMenuCmd $editMenu "Paste" "" "__tcl3dConsolePaste $w.t" __tcl3dAddMenuCmd $editMenu "Clear" "" "__tcl3dConsoleClear $w.t" $editMenu add separator __tcl3dAddMenuCmd $editMenu "Source ..." "" "__tcl3dConsoleSourceFile $w.t" catch {$editMenu config -postcommand "__tcl3dConsoleEnableEditMenu $w"} } scrollbar $w.sb -orient vertical -command "$w.t yview" pack $w.sb -side right -fill y text $w.t -font fixed -yscrollcommand "$w.sb set" pack $w.t -side right -fill both -expand 1 bindtags $w.t Console set v(editmenu) $editMenu set v(text) $w.t set v(history) 0 set v(historycnt) 0 set v(current) -1 set v(prompt) $prompt set v(prior) {} set v(plength) [string length $v(prompt)] set v(x) 0 set v(y) 0 $w.t mark set insert end $w.t tag config ok -foreground blue $w.t tag config err -foreground red $w.t insert end $v(prompt) $w.t mark set out 1.0 catch {rename puts __tcl3dConsoleOldPuts$w} proc puts args [format { if {![winfo exists %s]} { rename puts {} rename __tcl3dConsoleOldPuts%s puts return [uplevel #0 puts $args] } switch -glob -- "[llength $args] $args" { {1 *} { set msg [lindex $args 0]\n set tag ok } {2 stdout *} { set msg [lindex $args 1]\n set tag ok } {2 stderr *} { set msg [lindex $args 1]\n set tag err } {2 -nonewline *} { set msg [lindex $args 1] set tag ok } {3 -nonewline stdout *} { set msg [lindex $args 2] set tag ok } {3 -nonewline stderr *} { set msg [lindex $args 2] set tag err } default { uplevel #0 __tcl3dConsoleOldPuts%s $args return } } __tcl3dConsolePuts %s $msg $tag } $w $w $w $w.t] after idle "focus $w.t" } bind Console <1> {__tcl3dConsoleButton1 %W %x %y} bind Console {__tcl3dConsoleB1Motion %W %x %y} bind Console {__tcl3dConsoleB1Leave %W %x %y} bind Console {__tcl3dConsoleCancelMotor %W} bind Console {__tcl3dConsoleCancelMotor %W} bind Console {__tcl3dConsoleInsert %W %A} bind Console {__tcl3dConsoleLeft %W} bind Console {__tcl3dConsoleLeft %W} bind Console {__tcl3dConsoleRight %W} bind Console {__tcl3dConsoleRight %W} bind Console {__tcl3dConsoleBackspace %W} bind Console {__tcl3dConsoleBackspace %W} bind Console {__tcl3dConsoleDelete %W} bind Console {__tcl3dConsoleDelete %W} bind Console {__tcl3dConsoleHome %W} bind Console {__tcl3dConsoleHome %W} bind Console {__tcl3dConsoleEnd %W} bind Console {__tcl3dConsoleEnd %W} bind Console {__tcl3dConsoleEnter %W} bind Console {__tcl3dConsoleEnter %W} bind Console {__tcl3dConsolePrior %W} bind Console {__tcl3dConsolePrior %W} bind Console {__tcl3dConsoleNext %W} bind Console {__tcl3dConsoleNext %W} bind Console {__tcl3dConsoleEraseEOL %W} bind Console <> {__tcl3dConsoleCut %W} bind Console <> {__tcl3dConsoleCopy %W} bind Console <> {__tcl3dConsolePaste %W} bind Console <> {__tcl3dConsoleClear %W} proc __tcl3dConsolePuts {w t tag} { set nc [string length $t] set endc [string index $t [expr $nc-1]] if {$endc=="\n"} { if {[$w index out]<[$w index {insert linestart}]} { $w insert out [string range $t 0 [expr $nc-2]] $tag $w mark set out {out linestart +1 lines} } else { $w insert out $t $tag } } else { if {[$w index out]<[$w index {insert linestart}]} { $w insert out $t $tag } else { $w insert out $t\n $tag $w mark set out {out -1 char} } } $w yview insert } proc __tcl3dConsoleInsert {w a} { $w insert insert $a $w yview insert } proc __tcl3dConsoleLeft {w} { upvar #0 $w v scan [$w index insert] %d.%d row col if {$col>$v(plength)} { $w mark set insert "insert -1c" } } proc __tcl3dConsoleBackspace {w} { upvar #0 $w v scan [$w index insert] %d.%d row col if {$col>$v(plength)} { $w delete {insert -1c} } } proc __tcl3dConsoleEraseEOL {w} { upvar #0 $w v scan [$w index insert] %d.%d row col if {$col>=$v(plength)} { $w delete insert {insert lineend} } } proc __tcl3dConsoleRight {w} { $w mark set insert "insert +1c" } proc __tcl3dConsoleDelete w { $w delete insert } proc __tcl3dConsoleHome w { upvar #0 $w v scan [$w index insert] %d.%d row col $w mark set insert $row.$v(plength) } proc __tcl3dConsoleEnd w { $w mark set insert {insert lineend} } proc __tcl3dConsoleEnter w { upvar #0 $w v scan [$w index insert] %d.%d row col set start $row.$v(plength) set line [$w get $start "$start lineend"] if {$v(historycnt)>0} { set last [lindex $v(history) [expr $v(historycnt)-1]] if {[string compare $last $line]} { lappend v(history) $line incr v(historycnt) } } else { set v(history) [list $line] set v(historycnt) 1 } set v(current) $v(historycnt) $w insert end \n $w mark set out end if {$v(prior)==""} { set cmd $line } else { set cmd $v(prior)\n$line } if {[info complete $cmd]} { set rc [catch {uplevel #0 $cmd} res] if {![winfo exists $w]} return if {$rc} { $w insert end $res\n err } elseif {[string length $res]>0} { $w insert end $res\n ok } set v(prior) {} $w insert end $v(prompt) } else { set v(prior) $cmd regsub -all {[^ ]} $v(prompt) . x $w insert end $x } $w mark set insert end $w mark set out {insert linestart} $w yview insert } proc __tcl3dConsolePrior w { upvar #0 $w v if {$v(current)<=0} return incr v(current) -1 set line [lindex $v(history) $v(current)] __tcl3dConsoleSetLine $w $line } proc __tcl3dConsoleNext w { upvar #0 $w v if {$v(current)>=$v(historycnt)} return incr v(current) 1 set line [lindex $v(history) $v(current)] __tcl3dConsoleSetLine $w $line } proc __tcl3dConsoleSetLine {w line} { upvar #0 $w v scan [$w index insert] %d.%d row col set start $row.$v(plength) $w delete $start end $w insert end $line $w mark set insert end $w yview insert } proc __tcl3dConsoleButton1 {w x y} { global tkPriv upvar #0 $w v set v(mouseMoved) 0 set v(pressX) $x set p [__tcl3dConsoleNearestBoundry $w $x $y] scan [$w index insert] %d.%d ix iy scan $p %d.%d px py if {$px==$ix} { $w mark set insert $p } $w mark set anchor $p focus $w } proc __tcl3dConsoleNearestBoundry {w x y} { set p [$w index @$x,$y] set bb [$w bbox $p] if {![string compare $bb ""]} {return $p} if {($x-[lindex $bb 0])<([lindex $bb 2]/2)} {return $p} $w index "$p + 1 char" } proc __tcl3dConsoleSelectTo {w x y} { upvar #0 $w v set cur [__tcl3dConsoleNearestBoundry $w $x $y] if {[catch {$w index anchor}]} { $w mark set anchor $cur } set anchor [$w index anchor] if {[$w compare $cur != $anchor] || (abs($v(pressX) - $x) >= 3)} { if {$v(mouseMoved)==0} { $w tag remove sel 0.0 end } set v(mouseMoved) 1 } if {[$w compare $cur < anchor]} { set first $cur set last anchor } else { set first anchor set last $cur } if {$v(mouseMoved)} { $w tag remove sel 0.0 $first $w tag add sel $first $last $w tag remove sel $last end update idletasks } } proc __tcl3dConsoleB1Motion {w x y} { upvar #0 $w v set v(y) $y set v(x) $x __tcl3dConsoleSelectTo $w $x $y } proc __tcl3dConsoleB1Leave {w x y} { upvar #0 $w v set v(y) $y set v(x) $x __tcl3dConsoleMotor $w } proc __tcl3dConsoleMotor w { upvar #0 $w v if {![winfo exists $w]} return if {$v(y)>=[winfo height $w]} { $w yview scroll 1 units } elseif {$v(y)<0} { $w yview scroll -1 units } else { return } __tcl3dConsoleSelectTo $w $v(x) $v(y) set v(timer) [after 50 __tcl3dConsoleMotor $w] } proc __tcl3dConsoleCancelMotor w { upvar #0 $w v catch {after cancel $v(timer)} catch {unset v(timer)} } proc __tcl3dConsoleCanCut w { set r [catch { scan [$w index sel.first] %d.%d s1x s1y scan [$w index sel.last] %d.%d s2x s2y scan [$w index insert] %d.%d ix iy }] if {$r==1} {return 0} if {$s1x==$ix && $s2x==$ix} {return 1} return 2 } proc __tcl3dConsoleCut w { if {[__tcl3dConsoleCanCut $w]==1} { __tcl3dConsoleCopy $w $w delete sel.first sel.last } } proc __tcl3dConsoleCopy w { if {![catch {set text [$w get sel.first sel.last]}]} { clipboard clear -displayof $w clipboard append -displayof $w $text } } proc __tcl3dConsolePaste w { if {[__tcl3dConsoleCanCut $w]==1} { $w delete sel.first sel.last } if {[catch {selection get -displayof $w -selection CLIPBOARD} topaste]} { return } set prior 0 foreach line [split $topaste \n] { if {$prior} { __tcl3dConsoleEnter $w update } set prior 1 $w insert insert $line } } proc __tcl3dConsoleClear w { $w delete 1.0 {insert linestart} } proc __tcl3dConsoleEnableEditMenu w { upvar #0 $w.t v set m $v(editmenu) if {$m=="" || ![winfo exists $m]} return switch [__tcl3dConsoleCanCut $w.t] { 0 { $m entryconf Copy -state disabled $m entryconf Cut -state disabled } 1 { $m entryconf Copy -state normal $m entryconf Cut -state normal } 2 { $m entryconf Copy -state normal $m entryconf Cut -state disabled } } } proc __tcl3dConsoleSourceFile w { set types { {{TCL Scripts} {.tcl}} {{All Files} *} } set f [tk_getOpenFile -filetypes $types -title "TCL Script To Source..."] if {$f!=""} { uplevel #0 source $f } } proc __tcl3dConsoleSaveFile w { set types { {{Text Files} {.txt}} {{All Files} *} } set f [tk_getSaveFile -filetypes $types -title "Write Screen To..."] if {$f!=""} { if {[catch {open $f w} fd]} { tk_messageBox -type ok -icon error -message $fd } else { puts $fd [string trimright [$w get 1.0 end] \n] close $fd } } }