Xmenu now has a man page.

This commit is contained in:
phillbush 2020-05-17 00:08:23 -03:00
parent 873c080ceb
commit 08f165897c
4 changed files with 76 additions and 10 deletions

2
README
View File

@ -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
View 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
View File

@ -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);
} }

View File

@ -11,4 +11,3 @@ Terminal (st) st
Shutdown poweroff Shutdown poweroff
Reboot reboot Reboot reboot
EOF EOF