WJG (12/Feb/06) The value of using Tcl/Tk to write to create handy utilities can never be overstated. Clicking onto a desktop icon can launch a small standalone app for use in conjunction with other software leviathan. Using tcl/tk apps in such a way needs some sort of persistance to repostion the apps to our preferred locations. Well, here's another bit of code to do such a job.
#--------------- # config.tcl #--------------- # Created by William J Giddings # 19/Feb/2006 #--------------- # # Function: # Simple load and save package for application config files. # # Other links: # https://wiki.tcl-lang.org/2438 #--------------- # enable/disable demo mode set DEMO(config) yes #--------------- # open cfg file #--------------- proc config:open {{fname skt.cfg}} { global config if {[file exists $fname]} { set fp [open $fname r] } else { return 0 } # read line by line # respond appropriate to what is found # see https://wiki.tcl-lang.org/2438 while {![eof $fp]} { set data [gets $fp] switch [lindex $data 0] { \# { # these are comments puts $data } # # place other switch values and commands here.. # geometry { # restore last position on screen wm geometry [winfo toplevel .txt1] [lindex $data 1] } background { .txt1 config -bg [lindex $data 1] } default { # restore some other values that might be useful set config([lindex $data 0]) [lindex $data 1] } } } close $fp return 1 } #--------------- # save cfg file #--------------- proc config:save {{fname skt.cfg}} { global config set fp [open $fname w] # write specific items of information puts $fp "# config demo" puts $fp "geometry\t[winfo geometry [winfo toplevel .txt1]]" # write contents of config array, foreach i [array names config] { # somehow a enmpty item exists, can some other tcler tell me why? if {$i!=""} { puts $fp "$i\t\{$config($i)\}" } } close $fp } #--------------- # the ubiquitous demo #--------------- proc config:demo {} { catch {console show} global config # set some defaults in case there's no .cfg file set config(ver) 0.1 set config(app) cfg set config(bg) #ffffdd # create main window and widgets # close button button .but1 -text Close -command {config:save ; #exit} pack .but1 -fill x -side top -anchor nw text .txt1 -bg $config(bg) pack .txt1 -fill both -expand 1 #load config file config:open } if {$DEMO(config)} { config:demo }
MHo: Matthias Hoffmann - Tcl-Code-Snippets - Misc - Readprof goes in the same direction... dotfile generator