aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2016-03-27 12:42:58 -0400
committerMike Frysinger <vapier@gentoo.org>2016-03-27 12:42:58 -0400
commitf27b1c430a13ed45dba638f2390e6a22f7199f8f (patch)
tree31152bda4a7f157e7023190bcc15aed3d6148c3a
parentman: regen manpages (diff)
downloadportage-utils-f27b1c43.tar.gz
portage-utils-f27b1c43.tar.bz2
portage-utils-f27b1c43.zip
usage: handle optional args, and auto-align display
Since --help is not performance sensitive, add a bit of logic to auto align the width of the help columns.
-rw-r--r--main.c24
-rwxr-xr-xman/mkman.py4
2 files changed, 22 insertions, 6 deletions
diff --git a/main.c b/main.c
index d366bef..e9bacda 100644
--- a/main.c
+++ b/main.c
@@ -117,7 +117,11 @@ void no_colors(void)
static void usage(int status, const char *flags, struct option const opts[],
const char * const help[], int blabber)
{
- unsigned long i;
+ const char opt_arg[] = "[arg]";
+ const char a_arg[] = "<arg>";
+ size_t a_arg_len = strlen(a_arg) + 1;
+ size_t i, optlen;
+
if (status != EXIT_SUCCESS)
dup2(STDERR_FILENO, STDOUT_FILENO);
if (blabber == 0) {
@@ -140,6 +144,15 @@ static void usage(int status, const char *flags, struct option const opts[],
if (module_name != NULL)
printf("%sLoaded module:%s\n%s%8s%s %s<args>%s\n", GREEN, NORM, YELLOW, module_name, NORM, DKBLUE, NORM);
+ /* Prescan the --long opt length to auto-align. */
+ optlen = 0;
+ for (i = 0; opts[i].name; ++i) {
+ size_t l = strlen(opts[i].name);
+ if (opts[i].has_arg != no_argument)
+ l += a_arg_len;
+ optlen = MAX(l, optlen);
+ }
+
printf("\n%sOptions:%s -[%s]\n", GREEN, NORM, flags);
for (i = 0; opts[i].name; ++i) {
/* this assert is a life saver when adding new applets. */
@@ -153,11 +166,14 @@ static void usage(int status, const char *flags, struct option const opts[],
/* then the long flag + help text */
if (opts[i].has_arg == no_argument)
- printf("--%-15s%s*%s %s\n", opts[i].name,
+ printf("--%-*s %s*%s %s\n", (int)optlen, opts[i].name,
RED, NORM, _(help[i]));
else
- printf("--%-8s %s<arg>%s %s*%s %s\n", opts[i].name,
- DKBLUE, NORM, RED, NORM, _(help[i]));
+ printf("--%s %s%s%s%*s %s*%s %s\n",
+ opts[i].name,
+ DKBLUE, (opts[i].has_arg == a_argument ? a_arg : opt_arg), NORM,
+ (int)(optlen - strlen(opts[i].name) - a_arg_len), "",
+ RED, NORM, _(help[i]));
}
exit(status);
}
diff --git a/man/mkman.py b/man/mkman.py
index 1ec8584..0751b92 100755
--- a/man/mkman.py
+++ b/man/mkman.py
@@ -89,8 +89,8 @@ def MkMan(applets, applet, output):
flags += [option[0].rstrip(',')]
option.pop(0)
- if option[0] == '<arg>':
- flags = [r'\fB%s\fR \fI<arg>\fR' % x for x in flags]
+ if option[0] in ('<arg>', '[arg]'):
+ flags = [r'\fB%s\fR \fI%s\fR' % (x, option[0]) for x in flags]
option.pop(0)
else:
flags = [r'\fB%s\fR' % x for x in flags]