set phases {- / | \\} proc ascii_animate _var { upvar 1 $_var var puts -nonewline [lindex $var 0]\r flush stdout set var [concat [lrange $var 1 end] [lindex $var 0]] } #-- Test: while 1 { ascii_animate phases after 500 }RS 2013-12-09: The above test uses a blocking while loop. For practical application, you'd better use an every timer:
every 500 ascii_animate phases
[Lectus]: And here is a Progress Bar command ready to be used.It displays like this: (Your message) |###| 30%
#|---------------------------| #| ASCII_ProgressBar command | #|---------------------------| namespace eval ASCII_ProgressBar { variable count 0 variable p "#" variable msg "" proc new {message} { set ASCII_ProgressBar::count 0 set ASCII_ProgressBar::p "#" puts -nonewline "${message} \|| 0%\r" flush stdout set ASCII_ProgressBar::msg $message } proc increase {n {timer 0}} { for {set i 0} {$i < $n} {incr i} {incr ASCII_ProgressBar::count} for {set i 0} {$i < $n} {incr i 10} {append ASCII_ProgressBar::p "\010#\|"} if {[string length $ASCII_ProgressBar::p] == 10} { append ASCII_ProgressBar::p "\010\|"} puts -nonewline "${ASCII_ProgressBar::msg} \|${ASCII_ProgressBar::p} ${ASCII_ProgressBar::count}%\r"; flush stdout; after $timer } namespace export new increase namespace ensemble create } #|----------| #| Examples | #|----------| # First ASCII_ProgressBar new "Computing operation 1..." ASCII_ProgressBar increase 10 500 ASCII_ProgressBar increase 10 500 # simple operation set x 8 ASCII_ProgressBar increase 20 1000 set y 4 #another one ASCII_ProgressBar increase 20 1000 set z [expr $x * $y] ASCII_ProgressBar increase 30 1000 set z [expr $z + 10] ASCII_ProgressBar increase 10 1000 puts "\n\nWe're done and the operation resulted: $z" puts "\n" # Second ASCII_ProgressBar new "Computing operation 2..." ASCII_ProgressBar increase 10 500 ASCII_ProgressBar increase 10 500 # simple operation set x $z ASCII_ProgressBar increase 20 1000 set y 2 #another one ASCII_ProgressBar increase 20 1000 set z [expr $z * $y] ASCII_ProgressBar increase 30 1000 set z [expr $z + 10] ASCII_ProgressBar increase 10 1000 puts "\n\nWe're done and the operation resulted: $z"