http://purl.org/tcl/home/man/tcl8.4/TclCmd/info.htm ---- * '''[info args]''' ''procname'' * '''[info body]''' ''procname'' * '''[info cmdcount]''' * '''[info commands]''' ''?pattern?'' * '''[info complete]''' ''command'' * '''[info default]''' ''procname arg varname'' * '''[info exists]''' ''varName'' * '''[info functions]''' ''pattern'' * '''[info globals]''' ''?pattern?'' * '''[info hostname]''' * '''[info level]''' ''?number?'' * '''[info library]''' * '''[info loaded]''' ''?interp?'' * '''[info locals'''] ''?pattern?'' * '''[info nameofexecutable]''' * '''[info patchlevel]''' * '''[info procs] ''?pattern?'' * '''[info script] ''?filename?'' * '''[info sharedlibextension]''' * '''[info tclversion]''' * '''[info vars] ''?pattern?'' '''`info`''' ''`option`'' ''`?arg arg ...?`'': ---- What are some common uses of the info command in day to day programming? '''`[info cmdcount]`''': ---- With info, you can find out about your tcl environment. For example '''`[info complete]`''' ''`script`'': proc ls {{ns ::} {all no}} { puts "namespace $ns" foreach child [namespace children $ns] { if {"all" == $all} { list $child all } { puts "namespace $child"}} set pat "[set ns]::*" foreach proc [info procs $pat] { puts "proc $proc"} foreach var [info vars $pat] { if {[array exists $var]} { puts "array $var" } { puts "variable $var"}}} '''`[info coroutine]`''': See [tkinspect] ---- In response to a question about finding a way to tell who called a particular proc, [Bruce Hartweg] wrote on news:comp.lang.tcl (in message 3B157767.A720881E@raytheon.com ): In [https://groups.google.com/d/msg/comp.lang.tcl/uKX9hWPMECc/SwlSBxTdJF4J%|%How can I tell where a proc was called], [comp.lang.tcl], 2001-05-30, in response to a question about finding a way to tell who called a particular proc, [Bruce Hartweg] wrote (modified): # quick tester: proc who_called {} { proc who_called {} { puts "I was called from '[lindex [info level -1] 0]' - but first call was to '[lindex [info level 1] 0]'" } proc a {} who_called proc a {} {who_called} proc b {} {who_called} proc c {} {who_called} proc d {} {a} proc e {n} {$n} # end # end Output: Output: ======none % a I was called from 'a' - but first call was to 'a' % b I was called from 'b' - but first call was to 'b' % c I was called from 'c' - but first call was to 'c' % d I was called from 'a' - but first call was to 'd' % e a I was called from 'a' - but first call was to 'e' % e b I was called from 'b' - but first call was to 'e' % e c I was called from 'c' - but first call was to 'e' % e d I was called from 'a' - but first call was to 'e' ---- And [Will Taylor] writes: I find a backtrace useful -- putting these two stmts in the proc in question: I find a backtrace useful -- putting these two stmts in the proc in question: set backtrace ""; getBackTrace backtrace puts stderr ": `$backtrace'" ====== proc getBackTrace { backTraceRef } { upvar $backTraceRef backTrace set startLevel [expr {[info level] - 2}] set startLevel [expr {[info level] - 2}] for {set level 1} {$level <= $startLevel} {incr level} { append backTrace "[lindex [info level $level] 0] => " } } Note also that the [Bag of algorithms] makes a couple of mentions of backtracing, and even has other uses of [[info ...]]. ---- [AM] A common idiom that I use: ====== set scriptdir [file dirname [info script]] so that I know where my other scripts or data files that need to be sourced/read are located. Another use: detect the difference between running the script [main script%|%on its own] or as a package: Another use: detect the difference between running the script on its own or as a package: ====== if { [file tail [info script]] == [file tail $::argv0] } { # The script is running on its own! } There is one particular ''caveat'': the command will return an empty string when it is called in an event handler - then there is no script being "sourced" anymore! So, save the result when you need it later on (that is: later on in the process, not later in the source file). There is one particular ''caveat'': the command will return an empty string when it is called in an event handler - then there is no script being "sourced" anymore! So, save the result when you need it later on (that is: later on in the process, not later in the source file). See also: * [Determining the Applications Root Directory] * [Making a Path Absolute] ---- [Tcl syntax help] - [Arts and crafts of Tcl-Tk programming] - [Category Command]