Xmenu now has a man page.
This commit is contained in:
parent
873c080ceb
commit
08f165897c
2
README
2
README
|
@ -24,3 +24,5 @@ of tabs. Lines without labels are menu separators.
|
||||||
|
|
||||||
See the script ./xmenu.sh for an example of how xmenu can be used to
|
See the script ./xmenu.sh for an example of how xmenu can be used to
|
||||||
draw a simple menu with submenus and separators.
|
draw a simple menu with submenus and separators.
|
||||||
|
|
||||||
|
Read the manual for more information on running xmenu.
|
||||||
|
|
66
xmenu.1
Normal file
66
xmenu.1
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
.TH PROG 1
|
||||||
|
.SH NAME
|
||||||
|
xmenu \- menu utility for X
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B xmenu
|
||||||
|
.RB [ \-w ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B xmenu
|
||||||
|
is a menu for X,
|
||||||
|
it reads a list of newline-separated items from stdin,
|
||||||
|
shows a menu for the user to select one of the items,
|
||||||
|
and outputs the item selected to stdout.
|
||||||
|
.PP
|
||||||
|
The options are as follows:
|
||||||
|
.TP
|
||||||
|
.B -w
|
||||||
|
Asks the window manager to draw a border around the menus.
|
||||||
|
Without this options, the menus do not have border drawn by the window manager.
|
||||||
|
.PP
|
||||||
|
Each item read from stdin has the following format:
|
||||||
|
.IP
|
||||||
|
.EX
|
||||||
|
ITEM := TABS LABEL TABS COMMAND NEWLINE
|
||||||
|
.EE
|
||||||
|
.PP
|
||||||
|
That means, each item is composed by
|
||||||
|
tabs, followed by a label, followed by more tabs, followed by a command,
|
||||||
|
and ended by a newline.
|
||||||
|
.IP
|
||||||
|
The initial tabs indicate the menu hierarchy:
|
||||||
|
items indented with a tab is shown in a submenu of the preceding item not indented.
|
||||||
|
.IP
|
||||||
|
The label is the string that will be shown as a item in the menu.
|
||||||
|
An item without label is considered a separator and is drawn as a thin line in the menu
|
||||||
|
separating the item above from the item below.
|
||||||
|
.IP
|
||||||
|
The command is the string that will be output after selecting the item.
|
||||||
|
.IP
|
||||||
|
The newline terminates the item specification.
|
||||||
|
.SH EXAMPLES
|
||||||
|
The following is an script exemplifying the use
|
||||||
|
.BR xmenu .
|
||||||
|
The output is redirected to xargs to make a command to be run by the shell.
|
||||||
|
.IP
|
||||||
|
.EX
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cat <<EOF | ./xmenu | xargs sh -c
|
||||||
|
Applications
|
||||||
|
Web Browser firefox
|
||||||
|
Image editor gimp
|
||||||
|
Terminal (xterm) xterm
|
||||||
|
Terminal (urxvt) urxvt
|
||||||
|
Terminal (st) st
|
||||||
|
|
||||||
|
Shutdown poweroff
|
||||||
|
Reboot reboot
|
||||||
|
EOF
|
||||||
|
.EE
|
||||||
|
.PP
|
||||||
|
For example, by selecting \(lqApplications\(rq, a new menu will appear.
|
||||||
|
Selecting \(lqWeb Browser\(rq in the new menu will open firefox.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.IR dmenu (1),
|
||||||
|
.IR 9menu (1),
|
||||||
|
.IR thingmenu (1)
|
17
xmenu.c
17
xmenu.c
|
@ -79,7 +79,7 @@ static void setcurrmenu(struct Menu *currmenu_new);
|
||||||
static void parsestdin(void);
|
static void parsestdin(void);
|
||||||
static void run(void);
|
static void run(void);
|
||||||
static void freewindow(struct Menu *menu);
|
static void freewindow(struct Menu *menu);
|
||||||
static void cleanupexit(void);
|
static void cleanup(void);
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
|
|
||||||
/* X variables */
|
/* X variables */
|
||||||
|
@ -146,7 +146,9 @@ main(int argc, char *argv[])
|
||||||
/* run event loop */
|
/* run event loop */
|
||||||
run();
|
run();
|
||||||
|
|
||||||
return 1; /* UNREACHABLE */
|
cleanup();
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get color from color string */
|
/* get color from color string */
|
||||||
|
@ -576,8 +578,6 @@ run(void)
|
||||||
struct Item *previtem = NULL;
|
struct Item *previtem = NULL;
|
||||||
XEvent ev;
|
XEvent ev;
|
||||||
|
|
||||||
setcurrmenu(rootmenu);
|
|
||||||
|
|
||||||
while (!XNextEvent(dpy, &ev)) {
|
while (!XNextEvent(dpy, &ev)) {
|
||||||
switch(ev.type) {
|
switch(ev.type) {
|
||||||
case Expose:
|
case Expose:
|
||||||
|
@ -608,11 +608,11 @@ run(void)
|
||||||
setcurrmenu(item->submenu);
|
setcurrmenu(item->submenu);
|
||||||
} else {
|
} else {
|
||||||
printf("%s\n", item->output);
|
printf("%s\n", item->output);
|
||||||
cleanupexit();
|
return;
|
||||||
}
|
}
|
||||||
drawmenu();
|
drawmenu();
|
||||||
} else {
|
} else {
|
||||||
cleanupexit();
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LeaveNotify:
|
case LeaveNotify:
|
||||||
|
@ -639,19 +639,18 @@ freewindow(struct Menu *menu)
|
||||||
|
|
||||||
/* cleanup and exit */
|
/* cleanup and exit */
|
||||||
static void
|
static void
|
||||||
cleanupexit(void)
|
cleanup(void)
|
||||||
{
|
{
|
||||||
freewindow(rootmenu);
|
freewindow(rootmenu);
|
||||||
XFreeFont(dpy, dc.font);
|
XFreeFont(dpy, dc.font);
|
||||||
XFreeGC(dpy, dc.gc);
|
XFreeGC(dpy, dc.gc);
|
||||||
XCloseDisplay(dpy);
|
XCloseDisplay(dpy);
|
||||||
exit(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* show usage */
|
/* show usage */
|
||||||
static void
|
static void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
(void)fprintf(stderr, "usage: xmenu [-w] menuname\n");
|
(void)fprintf(stderr, "usage: xmenu [-w]\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user