NAME
pdmenurc - menu definitions file for pdmenu
SYNOPSIS
/etc/pdmenurc
~/.pdmenurc
DESCRIPTION
The pdmenurc file defines menus for pdmenu(1) to display. Each menu
consists of one or more menu entries. The first menu to appear in the
file is displayed by pdmenu(1) when it starts up, and can have menu
entries that call up submenus.
EXAMPLES
Here is a sample pdmenurc file:
#Set a pleasing color scheme.
color:desktop:blue:blue
color:title:blue:white
color:base:blue:white
#this is a comment
menu:main:Main Menu:Things to do at foobar
show:_Games..::games
exec:_Mail::pine
exec:_News::slrn -C
exec:_WWW::lynx
exec:_Irc::irc
exec:_Directory _Listing:display:ls -l
exec:_Who’s online?:truncate:w
exec:_Finger:edit,truncate:finger ~finger who?:~
nop
exit:E_xit
menu:games:Games:Some text-based games
exec:_Tetris for Terminals::/usr/games/tt
exec:_Adventure:pause:/usr/games/adventure
exec:_Zork:pause:/usr/games/zork
nop
exit:_Back to main menu..
This will display a menu, with a submenu for games.
FORMAT
pdmenu(1) doesn’t care how the pdmenurc is indented; all whitespace is
ignored. However, each command must be on its own line. The commands
are grouped into two classes: those that appear only in menus, and
those that can appear anywhere in the file.
COMMANDS THAT MAY BE USED ANYWHERE
These commands may appear in a menu, or outside of a menu. They take
effect as soon as pdmenu(1) sees them.
menu This starts a menu. All items between this menu command and the
next will comprise one menu. If a menu with the same id has
already been defined earlier, then all items between this menu
command and the next will be added to the menu. The syntax is:
menu:menuid:title[:helptext]
menuid The id of the menu (each menu must have a unique id).
title The title of the menu.
helptext
Text to be displayed at the bottom of the screen when the
menu is active.
title This overrides the default title at the top of the screen. The
syntax is:
title:text
color This changes the color of a part of the display. Later color
commands override earlier color commands that would affect the
same part of the display. The syntax is:
color:screenpart:foreground[:background]
screenpart
The area of the screen which takes on the selected color
scheme. Areas of the screen that can be set are:
desktop
The space over which the menus appear.
title The line at the top of the screen.
base The line at the bottom of the screen.
menu The normal color of text in a menu.
selbar The selection bar in the menu, when over normal
text.
shadow The shadow of a window
menuhot
The color of text in a menu that is a hotkey.
selbarhot
The color of a hotkey when the selection bar is
over it.
unselmenu
The color of a menu window that is not currently
active.
foreground
The color to use in the foreground. Valid colors are:
black gray
red brightred
green brightgreen
brown yellow
blue brightblue
magenta brightmagenta
cyan brightcyan
lightgray white
background
The color to use in the background. On most terminals,
the background color can only be one of the colors listed
in the first column above.
read This causes another menu definitions file to be read in and
replace the read command. This is quite similar to #include in
a c program. The syntax is:
read:rcfile
Note that no checking is done to prevent recursive read
commands, and that such a recursive command can crash pdmenu.
preproc
This runs a command, and uses its output as a pdmenurc file,
which is read in and replaces the preproc command. Typically a
preprocessor such as m4 or cpp will be used. The syntax is:
preproc:command [args]
Note that no checking is done to prevent recursive preproc
commands, and that such a recursive command can crash pdmenu.
COMMANDS THAT MUST APPEAR INSIDE MENUS
These commands must always appear within a menu. They are only executed
if the user selects them from the menu.
show This displays a submenu. The syntax is:
show:desc:flags:menuid
menuid The id of the menu to show, corresponding to the menuid
given in the menu’s definition.
desc The description of the submenu to appear in the parent
window.
To place a hotkey in the description, put a ’_’ before
the character you want to become the hotkey. It is a good
idea to differentiate submenus from commands in a menu
by, for example, appending ".." to their descriptions.
flags Currently ignored.
nop This does nothing but place a blank line in the menu. Nop
commands may not appear as the first command in a menu. Syntax:
nop[:text]
text If this is present, it will appear in the menu where the
nop is. Otherwise, the nop in the menu will be a blank
line.
helptext
This changes the helptext of the currently displayed menu. The
syntax is:
helptext:desc:flags:help text
desc The text to appear on the menu.
flags Currently the only available flag is "command", which
makes the help text be read in from a command in the help
text field, instead of using the literal value of the
field. The first line the command outputs becomes the new
help text.
exit If only one menu is on the screen when this is selected, then
pdmenu(1) will quit. Otherwise, this will take the user back to
the parent menu of the menu they are currently in. Selecting an
exit command in a menu is equivalent to pressing ’q’, unless you
have ran pdmenu(1) with the -q switch. The syntax is:
exit:desc
desc The description of the menu item.
To place a hotkey in the description, put a ’_’ before
the character you want to become the hotkey.
group This creates a menu entry that can run multiple commands at the
same time. After the group command, list the commands that make
up the group. Close the group with the endgroup command. When
the group is selected from the menu, each command in the group
will be run, in turn. Note that if a group caintains an exit
command, processing will stop there even if there are more
commands in the group. Group commands may not be nested. The
syntax is:
group:desc
desc The description of the menu item.
To place a hotkey in the description, put a ’_’ before
the character you want to become the hotkey.
endgroup
This closes a group command. Every command between the opening
group command and the endgroup comprises a group of commands.
exec This runs a command. The syntax is:
exec:desc:flags:command
command
The actual command to run when this item is selected.
desc The description of the command that appears in the menu.
To place a hotkey in the description, put a ’_’ before
the character you want to become the hotkey.
flags How to run this command, and what to do with its output.
Any number of the following flags can be specified, in
any order, separated by commas. (for example,
"display,edit")
Some of the flags conflict with each over, for example,
’display’ and ’pause’ cannot both be used at the same
time. If conflicting flags are specified, Pdmenu will
just pick one of them and use it.
Note that to maintain backward compatability with old
versions of Pdmenu, the flags can be formatted
differently: as a sequence of characters, each character
a flag and corrisponding to the first character of the
long flag name, and nothing separating the characters.
However, this format is obsolete and hard to understand,
and should no longer be used.
noclear
By default the screen is cleared and the terminal
is reset to normal before pdmenu(1) runs a
command from the menu, and after the command
exits, the screen is redrawn. If this flag is
set, the screen is not cleared or redrawn. Use it
if you have a command on the menu that does not
produce any output to the screen. (Conflicts
with: ’pause’)
pause Pause after the command exits. Use this if you
need to see the output of the command. (Conflicts
with: ’noclear’, ’display’, ’truncate’,
’makemenu’, and ’setenv’)
display
Display the output of the command in a window. If
this flag is set, the ’pause’ flag is disabled,
and the ’noclear’ flag is automatically set. If
the command outputs lines that are too long, they
will be wrapped inside the window. (Conflicts
with: ’pause’, ’truncate’, ’makemenu’, ’setenv’)
truncate
Like ’display’, except the output of the command
is truncated to fit in the window, not wrapped.
(Conflicts with: ’pause’, ’display’, ’mmakemenu’,
’setenv’)
edit Edit the command interactively.
When this flag is set, the command to be run is
scanned for any tags of the format
~title:default~. For each that is found, a text
entry window is displayed, with the title equal
to the contents of the title field, and the
default text equal to the contents of the default
field.
To use the ’~’ or ’:’ characters in the command
without having them interpreted as tag
delimiters, escape them with a ’\’ character.
(Ie, ’\~’ and ’\:’)
Security warning! Any exec command that uses the
’edit’ flag will be a security hole. The user
need only to enter text with a ’;’ in it, and
they can run an arbitrary command after the
semicolon!
There is no fix for this security problem at this
time. If the user running pdmenu(1) is not a
trusted user (if they are a guest user, say), do
not allow them access to any exec commands that
have the ’edit’ flag set.
makemenu
This flag lets you generate menus on the fly as
pdmenu(1) is running. It runs the command, then
processes the output of the command as if it were
a pdmenurc file.
Here is a sample use of this flag. It creates a
menu of people who are logged on, and lets you
talk to one of them. Notice the use of remove to
clear the menu after we use it.
group:_Talk
exec::makemenu: \
echo "menu:talk:Talk"; \
for u in ‘users‘; do \
echo "exec:$u::talk $u"; \
done
show:::talk
remove:::talk
endgroup
(Conflicts with: ’display’, ’truncate’, ’pause’,
’display’, ’setenv’)
setenv Set an environment variable.
This flag causes pdmenu(1) to set a variable in
its own environment. pdmenu(1) runs the exec
command, and looks at the command’s output. The
first line should be in the format
VAR=value
Where VAR is the environment variable to set, and
value is the new value for the variable.
For example, use "echo PWD=/tmp" to set the
current working directory to /tmp. (Conflicts
with: ’makemenu’, ’display’, ’truncate’, and
’pause’)
remove This removes a menu from Pdmenu’s list of menus. You should
never attempt to remove a menu that is currently being displayed
on screen. The syntax is:
remove:desc:flags:menuid
desc The description of the command that appears in the menu.
To place a hotkey in the description, put a ’_’ before
the character you want to become the hotkey.
flags Currently ignored.
menuid The id of the menu to remove. If the menu wih id menuid
does not exist, no error is reported.
This command is typically used after creating and using a new
menu via the
’makemenu’ flag to exec, to remove a menu that is no longer
needed. For example, if you have the followng pdmenurc:
menu:main:Main Menu
group:_Test
exec::makemenu: \
echo menu:sample:Dir; \
echo exec:_Directory:pause:ls
show:::sample
endgroup
Each time the user selects "Test" from the Main Menu, the menu
that appears has another Directory command on it. If you don’t
want this to happen, and you want only one Directory command to
be on the menu, add a command to remove the menu after it is
used, like this:
menu:main:Main Menu
group:_Test
exec::makemenu: \
echo menu:sample:Dir; \
echo exec:_Directory:pause:ls
show:::sample
remove:::sample
endgroup
NOTES
If a line ends with ’\’, pdmenu(1) will read in the next line as part
of the same logical line.
If you want the ’:’ character to appear in a field, you may escape out
the ’:’ character by placing ’\’ before it. You don’t need to do this
if the field is the last field in a line.
FILES
/etc/pdmenurc
Default config file.
~/.pdmenurc
If this exists, it overrides /etc/pdmenurc.
AUTHOR
Joey Hess, <joey@kitenet.net>.
SEE ALSO
pdmenu(1)