Openbox pipe-menu script error

This is the weirdest thing. The script works when run from the shell with no problems. When I run it as an Openbox pipe-menu I get the error “Invalid output from pipe-menu“. After playing around with the script I found that it has specifically to do with printing the 5th column.

To make matters even more confusing, this only happens with the month of July. All other months will show up correctly running the script.

Here is the script as it should be. It works when executed from a terminal:

#!/bin/bash
echo "<openbox_pipe_menu>"
cal | while read i;do
echo "<item label="$i"/>"
done
echo "</openbox_pipe_menu>"
echo "</openbox_pipe_menu>"

The output of the script:

$ ./date-menu.sh 
<openbox_pipe_menu>
<item label="July 2014"/>
<item label="Su Mo Tu We Th Fr Sa"/>
<item label="1  2  3  4  5"/>
<item label="6  7  8  9 10 11 12"/>
<item label="13 14 15 16 17 18 19"/>
<item label="20 21 22 23 24 25 26"/>
<item label="27 28 29 30 31"/>
<item label=""/>
</openbox_pipe_menu>

Here is the simplified version that still fails when running as a pipe-menu:

#!/bin/bash
calRow () {
cal | gawk -v row=$1 '{ if (NR==row) { print $0 } }'
}
echo "<openbox_pipe_menu>"
echo "<item label="`calRow 5`"/>"
echo "</openbox_pipe_menu>"

BUT…If I do the same script with any number but 5 it works like a charm:

#!/bin/bash
calRow () {
cal | gawk -v row=$1 '{ if (NR==row) { print $0 } }'
}
echo "<openbox_pipe_menu>"
echo "<item label="`calRow 2`"/>"
echo "<item label="`calRow 3`"/>"
echo "<item label="`calRow 4`"/>"
echo "<item label="`calRow 6`"/>"
echo "<item label="`calRow 7`"/>"
echo "<item label="`calRow 8`"/>"
echo "</openbox_pipe_menu>"

Here is the menu.xml file in case anyone wants to see it:

<?xml version="1.0" encoding="utf-8"?>
<openbox_menu   xsi_schemaLocation="http://openbox.org/                 file:///usr/share/openbox/menu.xsd">
    <menu id="root-menu" label="Openbox 3">
        <item label="Terminal emulator">
            <action name="Execute">
                <execute>x-terminal-emulator</execute>
            </action>
        </item>
        <item label="Browser">
            <action name="Execute">
                <execute>x-www-browser</execute>
            </action>
        </item>
        <item label="Virtualbox">
            <action name="Execute">
                <execute>virtualbox</execute>
            </action>
        </item>
        <!-- This requires the presence of the 'menu' package to work -->
        <menu id="/Debian"/>
        <separator/>
        <item label="obmenu">
            <action name="Execute">
                <execute>obmenu</execute>
            </action>
        </item>
        <item label="ObConf">
            <action name="Execute">
                <execute>obconf</execute>
            </action>
        </item>
        <item label="Reconfigure">
            <action name="Reconfigure"/>
        </item>
        <item label="Restart">
            <action name="Restart"/>
        </item>
        <separator/>
        <menu execute="obpipes/sysinfo.sh" id="pipe-sysinfo" label="System Info"/>
        <menu execute="obpipes/date-menu.sh" id="pipe-datemenu" label="Date"/>
        <menu id="client-list-menu"/>
        <separator/>
        <item label="Exit">
            <action name="Exit"/>
        </item>
    </menu>
</openbox_menu>
Asked By: Jeight

||

It turns out it was the current day being highlighted causing the problem. I was able to fix it by turning highlighting off (cal -h)

Answered By: Jeight
Categories: Answers Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.