From b5467ae38a5170d85d19499f18ea351c479bc414 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 5 Jun 2023 10:09:23 +0900 Subject: [PATCH] Add additional info for `-0` to `--help` message --- ruby.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/ruby.c b/ruby.c index 1be5b29d09..7b233e4106 100644 --- a/ruby.c +++ b/ruby.c @@ -245,6 +245,8 @@ show_usage_line(const struct ruby_opt_message *m, const unsigned int namelen = m->namelen, secondlen = m->secondlen; const char *sb = highlight ? esc_bold : esc_none; const char *se = highlight ? esc_reset : esc_none; + const char *desc = str + namelen + secondlen; + unsigned int desclen = (unsigned int)strcspn(desc, "\n"); if (help && (namelen > w) && (int)(namelen + secondlen) >= columns) { printf(" %s" "%.*s" "%s\n", sb, namelen-1, str, se); if (secondlen > 1) { @@ -254,16 +256,23 @@ show_usage_line(const struct ruby_opt_message *m, if (str[n] == ' ') n++; printf(" %s" "%.*s" "%s\n", sb, second_end-n, str+n, se); } - printf("%-*s%s\n", w + 2, "", - str + namelen + secondlen); - return; + printf("%-*s%.*s\n", w + 2, "", desclen, desc); + } + else { + const int wrap = help && namelen + secondlen - 1 > w; + printf(" %s%.*s%-*.*s%s%-*s%.*s\n", sb, namelen-1, str, + (wrap ? 0 : w - namelen + 1), + (help ? secondlen-1 : 0), str + namelen, se, + (wrap ? w + 3 : 0), (wrap ? "\n" : ""), + desclen, desc); + } + if (help) { + while (desc[desclen]) { + desc += desclen + 1; + desclen = (unsigned int)strcspn(desc, "\n"); + printf("%-*s%.*s\n", w + 2, "", desclen, desc); + } } - const int wrap = help && namelen + secondlen - 1 > w; - printf(" %s%.*s%-*.*s%s%-*s%s\n", sb, namelen-1, str, - (wrap ? 0 : w - namelen + 1), - (help ? secondlen-1 : 0), str + namelen, se, - (wrap ? w + 3 : 0), (wrap ? "\n" : ""), - str + namelen + secondlen); } static void @@ -280,7 +289,8 @@ usage(const char *name, int help, int highlight, int columns) /* This message really ought to be max 23 lines. * Removed -h because the user already knows that option. Others? */ static const struct ruby_opt_message usage_msg[] = { - M("-0[octal]", "", "specify record separator (\\0, if no argument)"), + M("-0[octal]", "", "specify record separator (\\0, if no argument)\n" + "(-00 for paragraph mode, -0777 for slurp mode)"), M("-a", "", "autosplit mode with -n or -p (splits $_ into $F)"), M("-c", "", "check syntax only"), M("-Cdirectory", "", "cd to directory before executing your script"),