Skip to content

Instantly share code, notes, and snippets.

@jevinskie
Last active May 1, 2024 18:53
Show Gist options
  • Save jevinskie/c0d3e5d6a61fbef4ac065ad8989b22f3 to your computer and use it in GitHub Desktop.
Save jevinskie/c0d3e5d6a61fbef4ac065ad8989b22f3 to your computer and use it in GitHub Desktop.
~.tclsh/~.wishsh to source files from ~/.tcl/rcfiles
namespace eval TclshLoader {
set tcl_rcFileDir [file join $env(HOME) .tcl rcfiles]
if {[expr {[file exists $tcl_rcFileDir] && [file isdirectory $tcl_rcFileDir]}]} {
set tcl_rcFiles [glob -type {f r} -directory $tcl_rcFileDir -- *.tcl]
# put tclreadline.tcl last since it enters a loop and prevents further execution of .tclsh/.wishsh
set tcl_rcFiles_tclreadlineIdx [lsearch -glob $tcl_rcFiles */tclreadline.tcl]
if {[expr {($tcl_rcFiles_tclreadlineIdx != -1) && ([llength $tcl_rcFiles] > 1)}]} {
set tcl_rcFiles_tclreadlinePath [lindex $tcl_rcFiles $tcl_rcFiles_tclreadlineIdx]
set tcl_rcFiles [lreplace $tcl_rcFiles $tcl_rcFiles_tclreadlineIdx $tcl_rcFiles_tclreadlineIdx]
lappend tcl_rcFiles $tcl_rcFiles_tclreadlinePath
}
# puts "tcl_rcFiles: $tcl_rcFiles"
unset tcl_rcFiles_tclreadlineIdx
unset -nocomplain tcl_rcFiles_tclreadlinePath
set tcl_rcFiles_lastIdx [expr [llength $tcl_rcFiles] - 1]
set tcl_rcFiles_idx 0
interp alias {} lambda {} proc {}
foreach tcl_rcFiles_rcFile $tcl_rcFiles {
# puts "sourcing $tcl_rcFiles_rcFile"
namespace eval :: {
if {[expr $TclshLoader::tcl_rcFiles_idx == $TclshLoader::tcl_rcFiles_lastIdx]} {
unset TclshLoader::tcl_rcFiles_idx
unset TclshLoader::tcl_rcFiles_lastIdx
source [[lambda f {unset TclshLoader::tcl_rcFiles_rcFile; return $f}] $TclshLoader::tcl_rcFiles_rcFile]
} else {
source $TclshLoader::tcl_rcFiles_rcFile
}
}
incr tcl_rcFiles_idx
}
} else {
unset tcl_rcFileDir
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment