tFixed some errors in the script (thank you randomcrocodile) - monochromatic - monochromatic blog: http://blog.z3bra.org
 (HTM) git clone git://z3bra.org/monochromatic
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) commit 0131430b1e1e69173df8ed5d3cf3f90fb49d8f14
 (DIR) parent 6b77a9c883f195cb10376b9a90f4fe1ba5c67f9a
 (HTM) Author: z3bra <willy@mailoo.org>
       Date:   Thu,  3 Apr 2014 08:33:42 +0200
       
       Fixed some errors in the script (thank you randomcrocodile)
       
       Diffstat:
         M 2014/04/meeting-at-the-bar.txt      |      55 ++++++++++++++++---------------
       
       1 file changed, 28 insertions(+), 27 deletions(-)
       ---
 (DIR) diff --git a/2014/04/meeting-at-the-bar.txt b/2014/04/meeting-at-the-bar.txt
       t@@ -186,8 +186,8 @@ on the battery state. To get the info:
            # prepend percentage with a '+' if charging, '-' otherwise
            test "`cat $BATS`" = "Charging" && echo -n '+' || echo -n '-'
        
       -    # append the character '%' after the number
       -    sed 's/$/%/' $BATC
       +    # print out the content (forced myself to use `sed` :P)
       +    sed -n p $BATC
        
        #### sound level
        
       t@@ -215,7 +215,7 @@ That will make things easier.
            # parse amixer output to get ONLY the level. Will output "84%"
            # we need `uniq` because on some hardware, The master is listed twice in
            # "Front Left" and Front Right" (because laptop speakers I guess)
       -    amixer get Master | sed -n 's/^.*\[\([0-9]\+%\).*$/\1/p'| uniq
       +    amixer get Master | sed -n 's/^.*\[\([0-9]\+\)%.*$/\1/p'| uniq
        
        #### CPU load
        
       t@@ -228,12 +228,12 @@ To get the current CPU load used by every program, one can use this command:
            # gives you the CPU load used by every running program
            # 'args' is used here just so you can see the programs command lines
        
       -    ps -eo pcpu,argv
       +    ps -eo pcpu,args
        
        We don't care about idling programs that uses '0.0' load or the header '%CPU',
       -so we can just remove them with `grep -vE '0.0|%CPU'`.
       +so we can just remove them with `grep -vE '^\s*(0.0|%CPU)'`.
        
       -    ps -eo pcpu | grep -vE '0.0|%CPU'
       +    ps -eo pcpu | grep -vE '^\s*(0.0|%CPU)'
        
        We now have a list of the CPU loads actually used, but per program. We just need
        to sum them up!  
       t@@ -243,19 +243,21 @@ I recommend that you just get it right away!).
        
        `bc` takes operations from stdin, and outputs to stdout. Pretty simple. Pretty
        good.
       +Thanks to
       +[randomcrocodile](http://www.reddit.com/r/unixporn/comments/220diq/howto_create_an_informative_status_bar_for_your/cgi9hve)
       +for pointing out the two digit problem (and other things)
        
            # use the "here-line" feature.
       -    # tr replaces newlines with space, that we change in '+' through sed
            # The whole line goes to bc which outputs the result
        
       -    CALC=`ps -eo pcpu | grep -vE '0.0|%CPU' | tr "\n" " " | sed 's/  / + /g'`
       -    echo `bc <<< $LINE`%
       +    LINE=`ps -eo pcpu |grep -vE '^\s*(0.0|%CPU)' |sed -n '1h;$!H;$g;s/\n/ +/gp'`
       +    echo `bc <<< $LINE`
        
        #### RAM used
        
       -To display RAM usage (in the form `xx% (<used>/<total>)`, we will use another
       -place of the filesystem: `/proc`. This will be easier to find memory usage here,
       -than battery level in `/sys`:
       +To display RAM usage (percentage of RAM actually by the system), we will use
       +another place of the filesystem: `/proc`. This will be easier to find memory
       +usage here, than battery level in `/sys`:
        
            ───── ls /proc/ | grep 'mem'
            iomem
       t@@ -293,7 +295,7 @@ know exactly how much the applications are taking:
            read b c <<< `grep -E '^(Buffers|Cached)' /proc/meminfo |awk '{print $2}'`
        
            # then, calcultate the percentage of memory used
       -    echo `bc <<< "$t / ($t -$f -$c -$b"`%
       +    echo `bc <<< "100($t -$f -$c -$b) / $t"`
        
        #### network connection state
        
       t@@ -319,7 +321,7 @@ interface using `iwconfig`. Sounds easy huh ?
            if iwconfig $int1 >/dev/null 2>&1; then
                wifi=$int1
                eth0=$int2
       -    else
       +    else 
                wifi=$int2
                eth0=$int1
            fi
       t@@ -365,7 +367,7 @@ The first step is to fetch the number of desktops, and the index of the current
        one. To do that, let's use `xprop`
        
            cur=`xprop -root _NET_CURRENT_DESKTOP | awk '{print $3}'
       -    tot=`xprop -root _NET_NUMBER_OF_DESKTOP | awk '{print $3}'
       +    tot=`xprop -root _NET_NUMBER_OF_DESKTOPS | awk '{print $3}'
        
        If that enough for you, you can obviously just output `$cur/$tot` ;)  
        But now, the desktop indicator. To do that, there is two solutions:
       t@@ -448,25 +450,23 @@ script, that we will pipe later to our HUD.
                BATC=/sys/class/power_supply/BAT1/capacity
                BATS=/sys/class/power_supply/BAT1/status
        
       -        # prepend percentage with a '+' if charging, '-' otherwise
                test "`cat $BATS`" = "Charging" && echo -n '+' || echo -n '-'
        
       -        # append the character '%' after the number
       -        sed 's/$/%%/' $BATC
       +        sed -n p $BATC
            }
        
            volume() {
       -        amixer get Master | sed -n 'N;s/^.*\[\([0-9]\+%\).*$/\1%/p'
       +        amixer get Master | sed -n 'N;s/^.*\[\([0-9]\+%\).*$/\1/p'
            }
        
            cpuload() {
       -        LINE=`ps -eo pcpu |grep -vE '0.0|%CPU' |tr "\n" " " |sed 's/  / + /g'`
       -        echo `bc <<< $LINE`%%
       +        LINE=`ps -eo pcpu |grep -vE '^\s*(0.0|%CPU)' |sed -n '1h;$!H;$g;s/\n/ +/gp'`
       +        echo `bc <<< $LINE`
            }
        
            memused() {
                read t f <<< `grep -E 'Mem(Total|Free)' /proc/meminfo |awk '{print $2}'`
       -        echo `bc <<< "scale=2; 100 - $f / $t * 100" | cut -d. -f1`%%
       +        echo `bc <<< "scale=2; 100 - $f / $t * 100" | cut -d. -f1`
            }
        
            network() {
       t@@ -509,12 +509,13 @@ script, that we will pipe later to our HUD.
                buf="${buf} [$(groups)]   --  "
                buf="${buf} CLK: $(clock) -"
                buf="${buf} NET: $(network) -"
       -        buf="${buf} CPU: $(cpuload) -"
       -        buf="${buf} RAM: $(memused) -"
       -        buf="${buf} VOL: $(volume)"
       -        buf="${buf} MPD: $(nowplaying)" # use $(nowplaying scroll) to get a
       -                                        # scrolling output!
       +        buf="${buf} CPU: $(cpuload)%% -"
       +        buf="${buf} RAM: $(memused)%% -"
       +        buf="${buf} VOL: $(volume)%%"
       +        buf="${buf} MPD: $(nowplaying)"
       +
                echo $buf
       +        # use `nowplaying scroll` to get a scrolling output!
                sleep 1 # The HUD will be updated every second
            done