proc klFmt {kl {tw {80}} {leading {}}} {

#	proc to format a keyed list nicely
#	preface each formatted line with "leading"
#	set to max width $w

	if {$kl == ""} {return ""}

	set tot 0
	set ct 0
	set text ""
	foreach k [keylkeys kl] {
		set v [keylget kl $k]
		set vs [clength [string trim $v]]
		if {!$vs} {set vs 4}
		keylset kl $k [string trim $v]
		set ks [clength $k]
		set length($k) [expr $ks + $vs + 2]
		if {$vs >= 30} {
			lappend text $k
		} else {
			incr tot $length($k)
			incr ct
		}
	}

	set avg 8
	catch {set avg [expr $tot/[double $ct]]}

	regsub -all \\\t $leading "        " leading
#	eval set leading $leading

	set ll [clength $leading]
	set w [expr $tw - $ll]

	set cols [int [floor [expr $w / $avg]]]
	incr cols -1

	set cw [int $avg]
	
	set fmt "%-$ll.${ll}s "
	set toset ""

	
	foreach k [keylkeys kl] {
		if {[lcontain $text $k]} {continue}
		lappend toset $k
	}

#	puts stderr "We have leading width $ll, total width $tw, net $w"
#	puts stderr "We have avg col width $avg for $cols col of $cw ea"
#	puts stderr "We have regular cols $toset"
#	puts stderr "We have text cols $text"

	set slen [llength $toset]
#	puts stderr "There are $slen pieces of data to set"

	set ct -1
	set same 0
	set c 0

	while 1 {

		incr ct
		if {$ct > [expr $slen * 4]} {
		puts stderr "SOMETHING WRONG not converging on kl format"
		puts stderr "We have iterated $ct times for a set length of $slen"
		puts stderr "Give up! can't set:\n$toset"
		append out "\n($toset)\n"
		break
		}

#		puts stderr "      toset is $toset"
		set lastl [llength $toset]
#		puts stderr "      last toset $lastl long"

		if {$lastl == 0} {
			break
		}

		set k [lvarpop toset]

		set l $length($k)	
#		puts stderr "      $k $l chars to set in col $c"

		set span [expr [int [expr $l / $cw]] + 1]
		set avail [expr $cols - $c]

#		puts stderr "      wants to span $span, avail $avail"

		if {!$avail} {
#			puts stderr "     No more columns available. NEWLINE."
			append out "\n"
			set avail $cols
			set same 0
			set c 0
			set span [expr [int [expr $l / $cw]] + 1]
			set avail [expr $cols - $c]
		}

		if !$c {
			if {$leading != ""} {
##			puts stderr "insert leading"
			append out "[format "$fmt" $leading]"
			}
		}

		if {$span > $cols} {
#			puts stderr "WARNING span $span > cols $cols, truncate"
			set span $cols
		}

#	lvarpop above takes care of this
#		set i [lsearch $toset $k]
#		set toset [lreplace $toset $i $i]

		if {$span <= $avail} {
#			puts stderr "       OK it fits, incr c $c by $span"
			set sw [expr $span * $cw]
			append out [format "%-$sw.${sw}s " "$k: [keylget kl $k]"]
			incr c $span
		} else {
#			puts stderr "       NOPE no fit, put it back on list"
			lappend toset $k
		}

		if {$lastl == [llength $toset]} {
			incr same
#			puts stderr "       Length toset is SAME $same as last $lastl"
		}
		if {$same == [llength $toset]} {
#			puts stderr "       Has been SAME [llength $toset] times, bummer!"
#			puts stderr "       FORCE NEWLINE!"
			append out "\n"
			set avail $cols
			set same 0
			set c 0
		}
	}

	foreach k $text {
#		append out "\n"
		set t "$k: [keylget kl $k]"
		set lines [strFold $t [expr $w - 8]]
		set lc 0
		foreach l $lines {
			if !$lc {
			append out "$leading $l\n"
			} else {
			append out "$leading  $l\n"
			}
			incr lc
		}
		append out "\n"
	}

	return $out

}
