From 08f165897c0d42fb8177344fdb1bbaf4fc944181 Mon Sep 17 00:00:00 2001 From: phillbush Date: Sun, 17 May 2020 00:08:23 -0300 Subject: [PATCH] Xmenu now has a man page. --- README | 2 ++ xmenu.1 | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ xmenu.c | 17 +++++++-------- xmenu.sh | 1 - 4 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 xmenu.1 diff --git a/README b/README index fe95e7c..4df29b9 100644 --- a/README +++ b/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 draw a simple menu with submenus and separators. + +Read the manual for more information on running xmenu. diff --git a/xmenu.1 b/xmenu.1 new file mode 100644 index 0000000..0e01c44 --- /dev/null +++ b/xmenu.1 @@ -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 <submenu); } else { printf("%s\n", item->output); - cleanupexit(); + return; } drawmenu(); } else { - cleanupexit(); + return; } break; case LeaveNotify: @@ -639,19 +639,18 @@ freewindow(struct Menu *menu) /* cleanup and exit */ static void -cleanupexit(void) +cleanup(void) { freewindow(rootmenu); XFreeFont(dpy, dc.font); XFreeGC(dpy, dc.gc); XCloseDisplay(dpy); - exit(0); } /* show usage */ static void usage(void) { - (void)fprintf(stderr, "usage: xmenu [-w] menuname\n"); + (void)fprintf(stderr, "usage: xmenu [-w]\n"); exit(1); } diff --git a/xmenu.sh b/xmenu.sh index e3f3279..b1abab3 100755 --- a/xmenu.sh +++ b/xmenu.sh @@ -11,4 +11,3 @@ Terminal (st) st Shutdown poweroff Reboot reboot EOF -