diff options
author | Mike Frysinger <vapier@gentoo.org> | 2016-03-27 12:42:58 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2016-03-27 12:42:58 -0400 |
commit | f27b1c430a13ed45dba638f2390e6a22f7199f8f (patch) | |
tree | 31152bda4a7f157e7023190bcc15aed3d6148c3a | |
parent | man: regen manpages (diff) | |
download | portage-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.c | 24 | ||||
-rwxr-xr-x | man/mkman.py | 4 |
2 files changed, 22 insertions, 6 deletions
@@ -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] |