Toolchest

The toolchest program is the IRIX equivalent of a Start menu or a "dock". The standard set of menu buttons in the IRIX Interactive Desktop toolchest is Desktop, Selected, Find, System, and Help.

Change the Toolchest Display

The following flags can be used to change the behavior/look of the toolchest:
- horizontal - The toolchest will display horizontally instead of vertically.
- vertical - The toolchest will display vertically. This is the default.
- decal - On by default, the toolchest will display a decal next to each entry.
- icon - When the toolchest is not in use, it is relegated to an icon.
- nodecal - disables decals
- hidetitle - disables the titlebar
- showtitle - enables the titlebar
- title - allows the user to set the title to something other than Toolchest

Config files

/usr/lib/X11/system.chestrc
~/.chestrc
~/.auxchestrc
/usr/lib/X11/nodesktop.chestrc
/usr/lib/X11/app-chests/*.chest
/usr/lib/X11/app-defaults/Toolchest
/usr/lib/X11/remote.chestrc

This is a list of config files that Toolchest reads. The first three are most relevant to users, the nodesktop version is used in a minimal IRIX install.

Configuration

As specified in the manpage for Toolchest, the menu tree is always rooted at a menu named "ToolChest"; thus the Menu ToolChest { ... } must be provided somewhere in the Toolchest config file. The .auxchestrc file is included by the system.chestrc file, and thus it's the recommended way to update the Toolchest, as it will include changes made systemwide. .chestrc, by comparison, does not.

The format for Toolchest config files are based around a subset of the mwm (Motif Window Manager) configuration files, but with a few custom extensions. Toolchest recognizes the keyword menu and the operators f.menu, f.title, f.exec, f.separator, and f.label. In addition, the new keywords remove, include, and sinclude and the new operators f.checkexec, f.checkexpr, f.exec.sh, f.checkexec.sh, f.checkexec.sh.le, and f.checkexpr.sh have been added.

The remove keyword will remove an entry. If one writes remove Overview then it will remove all buttons named Overview. If one writes remove Overview from Toolchest it will remove it from that specific menu, Toolchest (lower levels are ignored). If a button has separators above and below it, one will be removed.

The include/sinclude keywords will include a file or directory that is listed after them. sinclude will silently fail (no message) while include will error out if it cannot access the file, i.e. if it doesn't exist. A directory that's included will be searched for all files ending with the extension .chest.

The f.checkexec operator specifies the command to be executed when a button is clicked. Unlike f.exec, it will gray itself out if there's a problem that prevents it from executing, i.e. the executable is not installed, is missing, not executable etc. It is therefore recommended over f.exec.

f.checkexpr is a related operator that is used to provide a double-quote delimited argument (rather than a single, spaceless argument with checkexec) allowing for shell one-liners to be executed on the Toolchest.

These also have .sh versions in the latest versions of IRIX, which will force them to be ran by /bin/sh instead of by $SHELL or $MWMSHELL. These are recommended for speed, but the older ones are offered for backwards compatibility reasons.

Examples

Below is an example provided in the toolchest manpage, detailing how to nest specific menus properly in a cascading relationship.

menu ToolChest
{
"System" f.menu system
no-label f.separator
"Windows" f.menu windows
no-label f.separator
"Tools" f.menu tools
no-label f.separator
"Demos" f.menu demos
}

menu tools
{
"Tools" f.title
"Shell" f.checkexec.sh.le "xterm"
no-label f.separator
"Showmap" f.checkexec.sh.le "/usr/sbin/showmap"
"Makemap" f.checkexec.sh "/usr/sbin/makemap"
"Clocks" f.menu clocks
}

menu clocks
{
"" f.title
"Square Clock" f.checkexec.sh.le "/usr/sbin/clock"
"Analog Clock" f.exec.sh "xclock"
"Round Clock" f.checkexec.sh.le "oclock -bg black -fg \"dark red\""
"Digital Clock" f.exec.sh "xclock -digital"
}