From 4097babc0adfe909d91d18b36b5a35958bc598e0 Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Tue, 28 May 2024 14:55:48 +0000
Subject: argv.h: usage screen: avoid extra <stace> when all long options are
 hybrid-only.

---
 src/internal/argv/argv.h | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

(limited to 'src/internal/argv')

diff --git a/src/internal/argv/argv.h b/src/internal/argv/argv.h
index d10fd80..e6051cf 100644
--- a/src/internal/argv/argv.h
+++ b/src/internal/argv/argv.h
@@ -833,6 +833,7 @@ static void argv_usage_impl(
 {
 	const struct argv_option **	optv;
 	const struct argv_option *	option;
+	int                             nlong;
 	bool				fshort,flong,fboth;
 	size_t				len,optlen,desclen;
 	char				cache;
@@ -865,7 +866,7 @@ static void argv_usage_impl(
 	if (header)
 		argv_dprintf(fd,"%s",header);
 
-	for (optlen=0,optv=options; *optv; optv++) {
+	for (optlen=0,nlong=0,optv=options; *optv; optv++) {
 		option = *optv;
 
 		/* indent + comma */
@@ -884,6 +885,11 @@ static void argv_usage_impl(
 		/* optlen */
 		if (len > optlen)
 			optlen = len;
+
+		/* long (vs. hybrid-only) option? */
+		if (option->long_name)
+			if (!(option->flags & ARGV_OPTION_HYBRID_ONLY))
+				nlong++;
 	}
 
 	if (optlen >= optcap) {
@@ -918,6 +924,10 @@ static void argv_usage_impl(
 		prefix = option->flags & ARGV_OPTION_HYBRID_ONLY
 				? "  -" : " --";
 
+		/* avoid extra <stace> when all long opts are hybrid-only */
+		if (nlong == 0)
+			prefix++;
+
 		/* option string */
 		if (fboth && option->short_name && option->long_name)
 			sprintf(optstr,"%s-%c,%s%s",
-- 
cgit v1.2.3