From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 2A6E459CAA for ; Mon, 28 Mar 2016 04:53:58 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 1AA5C21C007; Mon, 28 Mar 2016 04:53:55 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 772A121C007 for ; Mon, 28 Mar 2016 04:53:54 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id A9A4F340AB5 for ; Mon, 28 Mar 2016 04:53:52 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 0366385D for ; Mon, 28 Mar 2016 04:53:50 +0000 (UTC) From: "Mike Frysinger" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Mike Frysinger" Message-ID: <1459096978.f27b1c430a13ed45dba638f2390e6a22f7199f8f.vapier@gentoo> Subject: [gentoo-commits] proj/portage-utils:master commit in: /, man/ X-VCS-Repository: proj/portage-utils X-VCS-Files: main.c man/mkman.py X-VCS-Directories: / man/ X-VCS-Committer: vapier X-VCS-Committer-Name: Mike Frysinger X-VCS-Revision: f27b1c430a13ed45dba638f2390e6a22f7199f8f X-VCS-Branch: master Date: Mon, 28 Mar 2016 04:53:50 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 67aec7e9-d43a-468f-994d-faa75b52539f X-Archives-Hash: 9062a84382653025c595251ffe78c302 commit: f27b1c430a13ed45dba638f2390e6a22f7199f8f Author: Mike Frysinger gentoo org> AuthorDate: Sun Mar 27 16:42:58 2016 +0000 Commit: Mike Frysinger gentoo org> CommitDate: Sun Mar 27 16:42:58 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=f27b1c43 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. main.c | 24 ++++++++++++++++++++---- man/mkman.py | 4 ++-- 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[] = ""; + 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%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%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] == '': - flags = [r'\fB%s\fR \fI\fR' % x for x in flags] + if option[0] in ('', '[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]