diff --git a/scriptlib/ansi_count_per_second.tcl b/scriptlib/ansi_count_per_second.tcl index 481976d1..1728a8cf 100644 --- a/scriptlib/ansi_count_per_second.tcl +++ b/scriptlib/ansi_count_per_second.tcl @@ -18,10 +18,25 @@ set ms [expr {1000 / $persec}] set nl_every [expr {$persec * $newline_every_x_seconds}] proc schedule {} { - after idle [list after 0 ::emit] - tailcall after $::ms ::schedule + if {$::forever_ansi_count_per_second} { + after idle [list after 0 ::emit] + tailcall after $::ms ::schedule + } else { + after idle [list ::the_end] + } } +set ::forever_ansi_count_per_second 1 + +proc the_end {} { + puts stderr "-done-" + flush stderr + flush stdout + set ::done_ansi_count_per_second 1 + rename ::emit "" + rename ::schedule "" + rename ::the_end "" +} proc emit {} { upvar ::counter c puts -nonewline "\x1b\[1000D$c" @@ -39,8 +54,10 @@ chan configure stdin -blocking 0 -buffering none chan event stdin readable [list apply {{chan} { set chunk [chan read $chan] if {[string length $chunk]} { - if {[string match "q*" [string tolower $chunk]]} { - set ::forever 0 + if {[string match "*q*" [string tolower $chunk]]} { + set ::forever_ansi_count_per_second 0 + chan event $chan readable {} + puts stderr "cancelling" } } if {[chan eof $chan]} { @@ -49,6 +66,6 @@ chan event stdin readable [list apply {{chan} { }} stdin] schedule -vwait ::forever +vwait ::forever_ansi_count_per_second +vwait ::done_ansi_count_per_second -puts "-done-" diff --git a/scriptlib/stdout_per_second.tcl b/scriptlib/stdout_per_second.tcl index 3b7dafbd..0c31c3e8 100644 --- a/scriptlib/stdout_per_second.tcl +++ b/scriptlib/stdout_per_second.tcl @@ -35,7 +35,8 @@ proc schedule {} { set ::forever_stdout_per_second 1 proc the_end {} { - puts "-done-" + puts stderr "-done-" + flush stderr flush stdout set ::done_stdout_per_second 1 } @@ -60,7 +61,7 @@ chan event stdin readable [list apply {{chan} { if {[string match "*q*" [string tolower $chunk]]} { set ::forever_stdout_per_second 0 chan event $chan readable {} - puts stdout "cancelling" + puts stderr "cancelling" } } if {[chan eof $chan]} {