Re: [dwm] save cpu cycles - bar status and wrapper scripts

From: Alex Matviychuk <>
Date: Wed, 30 Jul 2008 18:43:33 -0700

Works like a champ! Here is my script setup (please let me know if I
can improve anything):

rmdir /tmp/dwm-bar-script-lock
dwm-statusbar &

#Incrementing numbers are just for testing.


if mkdir $LOCK; then
        while [ -e $SHOWBAR ]; do
                echo "$i [`date '+%a %b %d %I:%M%P'`]"
                sleep 1
        done > /tmp/dwmpipe
        rmdir $LOCK
        killall dwm-statusbar



if [ ! -e $DWM_PIPE ]; then
        mkfifo $DWM_PIPE

while true; do
        cat $DWM_PIPE
done | dwm

static const char *barcmd[] = { "dwm-statusbar", NULL };
static Key keys[] = {
        { MODKEY, XK_b, spawn,
{.v = barcmd } },
        { MODKEY, XK_b, togglebar, {0} },

Now I don't have to patch DWM at all... well... at least not for this
feature, haha :)


On Wed, Jul 30, 2008 at 12:49 PM, Kurt H Maier <> wrote:
> Maybe you could not run the script in the loop, and instead trigger it
> when you activate the bar. Something like this:
> static const char *barcmd[] = { "/path/to/script > /path/to/pipe", NULL };
> ...
> static Key keys[] = {
> ....
> { MODKEY, XK_b, spawn, {.v = barcmd } },
> { MODKEY, XK_b, togglebar, {0} },
> The problem is that it will trigger the script again when you _close_
> the bar, but that's got to be better than just burning cycles the
> whole time.
> # Kurt H Maier
> On Wed, Jul 30, 2008 at 2:34 PM, Alex Matviychuk <> wrote:
>> Thanks for the suggestion. I tried it out by wrapping the FD readin
>> block with if(showbar) and it suppressed the output of the while loop
>> to the dwm bar.
>> However, to test it out I put an incrementing value in the while block
>> of my dwm wrapper script and when I re-enable the bar, the value seems
>> to have kept incrementing since I last disabled the bar. When I first
>> re-enable, the value is set to the value it was when I disabled the
>> bar, but on the next iteration jumps to a value that has been
>> incremented many times since I disabled the bar. So it seems the
>> output of the while loop is blocked, but the execution continues.
>> I dug around on google and couldn't find much more info about blocking
>> the while loop by not reading in from the pipe. The docs just say the
>> output is "blocked", but I think it means the output is suppressed
>> while the command continues to run.
>> So this is definitely less code and more elegant, but doesn't quite work.
>> Cheers,
>> Alex
>> On Wed, Jul 23, 2008 at 9:54 PM, Monsieur Pinocchio <> wrote:
>>> On Sat, Jul 19, 2008 at 7:02 PM, Alex Matviychuk <> wrote:
>>>> Hello,
>>>> I have a wrapper script for dwm that checks a bunch of devices running
>>>> on my laptop. I was thinking that a lot of times I don't even have the
>>>> dwm bar up (i tend to hide it often for full screen work) and so why
>>>> should the wrapper script constantly poll for status bar info if I
>>>> can't see it. Long story short, I made a small change to write out a
>>>> file to /tmp whenever the status bar is visible. Any thought if this
>>>> is the right approach? Is there a less barbaric way to alert my dwm
>>>> wrapper script that the bar is hidden?
>>>> Diff is attached. I also added a config param to specify the filepath
>>>> for the file that gets written.
>>>> Cheers,
>>>> Alex
>>> How about just not polling the input fd when bar is disabled? This will
>>> basically just block the write of the external command which is sending data
>>> into dwm and cause the external command to go to sleep thus automatically
>>> stopping it (and resuming it once the bar is shown again).
>>> --
>>> Pinocchio
Received on Thu Jul 31 2008 - 01:43:33 UTC

This archive was generated by hypermail 2.2.0 : Thu Jul 31 2008 - 01:48:04 UTC