proc procs_window { } { global defaultprocs if {[info exists defaultprocs] != 1} { set defaultprocs {} } get_procvanilla toplevel .f frame .f.fl ; pack .f.fl -expand n -fill x listbox .f.fl.l -height 5 -yscroll ".f.fl.s set"; pack .f.fl.l -expand y -fill x -side left scrollbar .f.fl.s -command ".f.fl.l yview" pack .f.fl.s -side right -expand n -fill y frame .f.ft ; pack .f.ft -expand y -fill both pack .f.ft -expand y -fill both text .f.ft.t -width 20 -height 4 -wrap none -yscroll ".f.ft.s set";; pack .f.ft.t -expand y -fill both -side left scrollbar .f.ft.s -command ".f.ft.t yview" pack .f.ft.s -side right -expand n -fill y frame .f.f; pack .f.f -expand n -fill x button .f.f.b -text {Update Proc} -command { global procs; set p [.f.ft.t get 0.0 end]; eval $p; set procs([lindex $p 1]) $p } pack .f.f.b -side right bind .f.fl.l <Double-Button-1> { global cf; set cf [selection get]; .f.ft.t del 0.0 end; .f.ft.t insert end "proc $cf \{" foreach a [info args $cf] { if { [info default $cf $a b] == 1} { .f.ft.t insert end " {$a {$b}}" } { .f.ft.t insert end " {$a}" } } .f.ft.t insert end " \} \{[info body $cf]\} " } button .f.f.b2 -text "Refresh List" -command { set o {}; foreach i [info procs] { if {[string match {tk*} $i] == 0 && [string match {tcl*} $i] == 0 && [lsearch $defaultprocs $i] == -1 } { lappend o $i } }; .f.fl.l del 0 end; foreach i [lsort $o] {.f.fl.l insert end $i} }; pack .f.f.b2 -side right entry .f.f.f -width 15 -textvar procsfile pack .f.f.f -side left button .f.f.bs -text {Save Procs} -command { global procsfile procs set o {} foreach i [lsort [array names procs]] { eval append o { $procs($i) } \n } set f [open $procsfile w]; puts $f $o; close $f } pack .f.f.bs -side left bind .f.fl.l <F1> [bind .f.fl.l [bind .f.fl.l ]] .f.f.b2 invoke }The proc_vanilla procedures are needed to make the procedure list limited, once you call the set_procvanilla procedure in an only initialized wish or equivalent shell, it will write a file in the current directory which contains a list of all procedures then present.When get_procvanilla is called, it reads that file and thus makes the above proc filter all system procs out the list.
proc get_procvanilla { } { global defaultprocs ; set f [open defaultprocs.tcl r]; if {$f == {}} {return -1} set defaultprocs [ read $f ] ; close $f return 0 } proc set_procvanilla { } { global defaultprocs puts "This routine should be called when only the startup\m" puts "procedures are present to make the file 'defaultprocs.tcl'" set defaultprocs {} foreach i [info procs] { if {[string match {tk*} $i] == 1 || [string match {tcl*} $i] == 1} { append defaultprocs "$i " } } set f [open defaultprocs.tcl w] puts $f $defaultprocs close $f}These procedures, except that the main one is updated with sliders, are present in the bwise package for graph based programming. See earlier versions and explanations: [1] and [2] .
PT 8-Jul-2003: This is related to tkinspect.