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] |