chiark / gitweb /
sort out debugging
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 9 Jun 2012 20:20:48 +0000 (21:20 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 9 Jun 2012 20:20:48 +0000 (21:20 +0100)
applet.tcl
example

index 66d1a81..e3a27ed 100644 (file)
@@ -41,6 +41,13 @@ package require tktray
 #    menus, when an item is selected, call
 #      applet::msel
 #
+# Debug:
+# 
+#    Caller may call
+#       applet::setup-debug ON-DEBUG
+#    which will result in calls to [concat ON-DEBUG [list MESSAGE]]
+#    (or ON-DEBUG may be "" in which case messages are discarded)
+#
 # Icon:
 #
 #  Caller should call:
@@ -71,11 +78,23 @@ wm withdraw .
 tktray::icon .i -class example
 .i configure -docked 1
 
-fconfigure stdout -buffering line
+fconfigure stdout -buffering none
+fconfigure stderr -buffering none
 
 
 namespace eval applet {
 
+variable debug {}
+
+proc debug {m} {
+    variable debug
+    if {![llength debug]} return
+    uplevel #0 $debug [list $m]
+}
+
+proc setup-debug {d} {
+    variable debug $d
+}
 
 # used by both menus and tooltips
 variable posted 0
@@ -91,15 +110,15 @@ proc menubuttonpressed {b x y} {
     variable posted
     tooltip-cancel
     if {$posted == $b} {
-       puts "unpost $posted toggle"
+       debug "unpost $posted toggle"
        .m$posted unpost
        set posted 0
     } elseif {[winfo exists .m$b]} {
        if {$posted} {
            .m$posted unpost
-           puts "unpost $posted other"
+           debug "unpost $posted other"
        }
-       puts "post $b"
+       debug "post $b"
        set posted $b
        .m$b post $x $y
     }
@@ -192,7 +211,7 @@ variable subwindow_on_ready
 
 proc subwindow-need-recreate {} {
     variable innerwindow_after
-puts "IW-EVENT"
+    debug "IW-EVENT"
     if {[info exists innerwindow_after]} return
     set innerwindow_after [after idle applet::innerwindow-resetup]
 }
@@ -205,8 +224,7 @@ proc innerwindow-resetup {} {
     variable subwindow_border_width
     unset innerwindow_after
 
-puts RESETUP
-
+    debug RESETUP
 
     if {![winfo exists .i.i]} return
     destroy [frame .i.i.make-exist]
@@ -263,7 +281,7 @@ proc setup-subproc {w border_colour border_width get_cmdline} {
 
 proc subproc-destroying {} {
     variable subproc
-    puts "DESTROYING $subproc"
+    debug "DESTROYING $subproc"
 
     catch { destroy .i.i.b.c }
 
@@ -276,7 +294,7 @@ proc subproc-destroying {} {
 
 proc subproc-ready {} {
     variable subproc
-    puts "READY $subproc"
+    debug "READY $subproc"
 
     frame .i.i.b.c -container 1 -background orange
     pack .i.i.b.c -fill both -side left -expand 1
@@ -292,7 +310,7 @@ proc subproc-ready {} {
            error "unexpected state $subproc"
        }
     }
-    puts "READY-done $subproc"
+    debug "READY-done $subproc"
 }
 
 proc run-child {} {
@@ -303,14 +321,14 @@ proc run-child {} {
     set id [winfo id .i.i.b.c]
     set cmd [uplevel #0 [concat [list $subproc_get_cmdline] $id]]
 
-    puts "RUN-CHILD $subproc"
+    debug "RUN-CHILD $subproc"
     set now [clock seconds]
     lappend ratelimit $now
     while {[lindex $ratelimit 0] < {$now - 10}} {
        set ratelimit [lrange $ratelimit 1 end]
     }
     if {[llength $ratelimit] > 10} {
-       puts stderr "crashing repeatedly, quitting $ratelimit"
+       debug stderr "crashing repeatedly, quitting $ratelimit"
        exit 127
     }
 
@@ -318,11 +336,11 @@ proc run-child {} {
     set subproc [subproc::fork applet::child-died {
        execl [lindex $cmd 0] [lrange $cmd 1 end]
     }]
-    puts "FORKED $subproc"
+    debug "FORKED $subproc"
 }
 
 proc child-died {how how2} {
-    puts "DIED $how $how2"
+    debug "DIED $how $how2"
     variable subproc
     switch -exact $subproc {
        old {
diff --git a/example b/example
index 4edb404..a22ab0b 100755 (executable)
--- a/example
+++ b/example
@@ -4,7 +4,7 @@
 source applet.tcl
 source subproc.tcl
 
-#----- menu -----
+applet::setup-debug puts
 
 foreach b {1 3} {
     applet::setup-button-menu $b