AF - Here is a small app which sits on the root window and displays a bar graph and numerical percentage. The color of the graph varies with the value. All options are configurable by editing the defaults or on the command line. The default display is my usage: displaying percentage of swap space used on FreeBSD.
#!/bin/sh # \ exec wish "$0" -- "$@" set orient h set geom 150x25+[expr {[winfo vrootwidth .] - 150}]+[expr {[winfo vrootheight .] - 25}] array set colors "0 white" set interval 5000 set command {[string trimright [lindex [exec pstat -s] 10] %]} set from 0 set to 100 set background black set foreground white set label 1 set font "" proc ref {} { global tag rect orient interval command to from geom eval set data $command if {$orient == "h"} {set w [winfo width .c]} elseif {$orient == "v"} {set w [winfo height .c]} set size [expr ($data - $from.00) / ($to.00 - $from.00)] set per [expr {round($size * 100)}] set size [expr $size * $w.00] .l configure -text ${per}% .c itemconfigure $tag -fill [getcolor $per] eval .c coords $tag $rect after $interval ref } proc getcolor {num} { global colors colorn foreach x $colorn { if {$x <= $num} {break} set ret $x } return $colors($x) } proc ParseCommandline { } { global argv argc set num 0 while {[set tmp [lrange $argv $num end]] != ""} { switch -glob -- [lindex $tmp 0] { -geometry { global geom set geom [lindex $tmp 1] incr num 2 } -colors { global colors array set colors [lindex $tmp 1] incr num 2 } -orient { global orient set orient [lindex $tmp 1] incr num 2 } -from { global from set from [lindex $tmp 1] incr num 2 } -to { global to set to [lindex $tmp 1] incr num 2 } -foreground { global foreground set foreground [lindex $tmp 1] incr num 2 } -background { global background set background [lindex $tmp 1] incr num 2 } -command { global command eval set command \"[lindex $tmp 1]\" incr num 2 } -interval { global interval set interval [lindex $tmp 1] incr num 2 } -label { global label set label 0 incr num 1 } -font { global font set font [lindex $tmp 1] incr num 2 } -* { puts stderr "Unknown option [lindex $tmp 0]" exit } default { puts stderr "Too many arguments" exit } } } } ParseCommandline wm withdraw . . configure -borderwidth 0 -highlightthickness 0 -takefocus 0 -background "" wm title . xswapinfo wm geometry . $geom wm overrideredirect . 1 update idletasks canvas .c -bg $background -borderwidth 0 -highlightthickness 0 label .l -bg $background -fg $foreground -text 0% if {$font != ""} { .l configure -font $font } if {$orient == "h"} { if $label {pack .l -side left -fill both} pack .c -side right -expand 1 -fill both set rect "-1 -1 \$size \[winfo height .c\]" } elseif {$orient == "v"} { if $label {pack .l -side bottom -fill both} pack .c -side top -expand 1 -fill both set rect "-1 \[winfo height .c\] \[winfo width .c\] \[expr \[winfo height .c\] - \$size\]" } set colorn [lsort -integer -decreasing [array names colors]] set size 0 update idletasks wm deiconify . set tag [eval .c create rectangle $rect] ref