summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2023-06-04 23:03:10 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2023-06-05 23:59:39 +0900
commitfeb946c3e2a8aac09ceda2aa7d5d605d6bcedf96 (patch)
treef14b8131da8ebcbe08c46199be3293cad1b829d0 /ruby.c
parent1a7ee14578526a043b68b017f661c801d0d489ea (diff)
Fold option lines in help message
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/7906
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/ruby.c b/ruby.c
index 729a5ad01d..1be5b29d09 100644
--- a/ruby.c
+++ b/ruby.c
@@ -238,10 +238,26 @@ static const char esc_reset[] = "\033[0m";
static const char esc_none[] = "";
static void
-show_usage_line(const char *str, unsigned int namelen, unsigned int secondlen, int help, int highlight, unsigned int w)
+show_usage_line(const struct ruby_opt_message *m,
+ int help, int highlight, unsigned int w, int columns)
{
+ const char *str = m->str;
+ 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;
+ if (help && (namelen > w) && (int)(namelen + secondlen) >= columns) {
+ printf(" %s" "%.*s" "%s\n", sb, namelen-1, str, se);
+ if (secondlen > 1) {
+ const int second_end = namelen+secondlen-1;
+ int n = namelen;
+ if (str[n] == ',') n++;
+ 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;
+ }
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),
@@ -354,7 +370,7 @@ usage(const char *name, int help, int highlight, int columns)
const char *se = highlight ? esc_reset : esc_none;
const int num = numberof(usage_msg) - (help ? 1 : 0);
unsigned int w = (columns > 80 ? (columns - 79) / 2 : 0) + 16;
-#define SHOW(m) show_usage_line((m).str, (m).namelen, (m).secondlen, help, highlight, w)
+#define SHOW(m) show_usage_line(&(m), help, highlight, w, columns)
printf("%sUsage:%s %s [switches] [--] [programfile] [arguments]\n", sb, se, name);
for (i = 0; i < num; ++i)