Gentoo Archives: gentoo-commits

From: Mike Frysinger <vapier@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage-utils:master commit in: /, man/
Date: Mon, 28 Mar 2016 04:53:58
Message-Id: 1459096978.f27b1c430a13ed45dba638f2390e6a22f7199f8f.vapier@gentoo
1 commit: f27b1c430a13ed45dba638f2390e6a22f7199f8f
2 Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
3 AuthorDate: Sun Mar 27 16:42:58 2016 +0000
4 Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
5 CommitDate: Sun Mar 27 16:42:58 2016 +0000
6 URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=f27b1c43
7
8 usage: handle optional args, and auto-align display
9
10 Since --help is not performance sensitive, add a bit of logic to auto
11 align the width of the help columns.
12
13 main.c | 24 ++++++++++++++++++++----
14 man/mkman.py | 4 ++--
15 2 files changed, 22 insertions(+), 6 deletions(-)
16
17 diff --git a/main.c b/main.c
18 index d366bef..e9bacda 100644
19 --- a/main.c
20 +++ b/main.c
21 @@ -117,7 +117,11 @@ void no_colors(void)
22 static void usage(int status, const char *flags, struct option const opts[],
23 const char * const help[], int blabber)
24 {
25 - unsigned long i;
26 + const char opt_arg[] = "[arg]";
27 + const char a_arg[] = "<arg>";
28 + size_t a_arg_len = strlen(a_arg) + 1;
29 + size_t i, optlen;
30 +
31 if (status != EXIT_SUCCESS)
32 dup2(STDERR_FILENO, STDOUT_FILENO);
33 if (blabber == 0) {
34 @@ -140,6 +144,15 @@ static void usage(int status, const char *flags, struct option const opts[],
35 if (module_name != NULL)
36 printf("%sLoaded module:%s\n%s%8s%s %s<args>%s\n", GREEN, NORM, YELLOW, module_name, NORM, DKBLUE, NORM);
37
38 + /* Prescan the --long opt length to auto-align. */
39 + optlen = 0;
40 + for (i = 0; opts[i].name; ++i) {
41 + size_t l = strlen(opts[i].name);
42 + if (opts[i].has_arg != no_argument)
43 + l += a_arg_len;
44 + optlen = MAX(l, optlen);
45 + }
46 +
47 printf("\n%sOptions:%s -[%s]\n", GREEN, NORM, flags);
48 for (i = 0; opts[i].name; ++i) {
49 /* this assert is a life saver when adding new applets. */
50 @@ -153,11 +166,14 @@ static void usage(int status, const char *flags, struct option const opts[],
51
52 /* then the long flag + help text */
53 if (opts[i].has_arg == no_argument)
54 - printf("--%-15s%s*%s %s\n", opts[i].name,
55 + printf("--%-*s %s*%s %s\n", (int)optlen, opts[i].name,
56 RED, NORM, _(help[i]));
57 else
58 - printf("--%-8s %s<arg>%s %s*%s %s\n", opts[i].name,
59 - DKBLUE, NORM, RED, NORM, _(help[i]));
60 + printf("--%s %s%s%s%*s %s*%s %s\n",
61 + opts[i].name,
62 + DKBLUE, (opts[i].has_arg == a_argument ? a_arg : opt_arg), NORM,
63 + (int)(optlen - strlen(opts[i].name) - a_arg_len), "",
64 + RED, NORM, _(help[i]));
65 }
66 exit(status);
67 }
68
69 diff --git a/man/mkman.py b/man/mkman.py
70 index 1ec8584..0751b92 100755
71 --- a/man/mkman.py
72 +++ b/man/mkman.py
73 @@ -89,8 +89,8 @@ def MkMan(applets, applet, output):
74 flags += [option[0].rstrip(',')]
75 option.pop(0)
76
77 - if option[0] == '<arg>':
78 - flags = [r'\fB%s\fR \fI<arg>\fR' % x for x in flags]
79 + if option[0] in ('<arg>', '[arg]'):
80 + flags = [r'\fB%s\fR \fI%s\fR' % (x, option[0]) for x in flags]
81 option.pop(0)
82 else:
83 flags = [r'\fB%s\fR' % x for x in flags]