aboutsummaryrefslogtreecommitdiff
path: root/src/libutil
diff options
context:
space:
mode:
authorPhilipp Jungkamp <p.jungkamp@gmx.net>2023-02-10 18:03:19 +0100
committerPhilipp Jungkamp <p.jungkamp@gmx.net>2023-02-10 18:03:19 +0100
commita537095e1f42d3de726e3c4d8bfc018a4c43ad86 (patch)
treea4a33187c71a1386484cb67dc9baab5c2d8bc450 /src/libutil
parente4a2a5c074f8faf947a8864ca2acea85a8fc6ab7 (diff)
Infer short completion descriptions for commandline flags
Descriptions for commandline flags may not include newlines and should be rather short for display in a shell. Truncate the description string of a flag on '\n' or '.' to and add an ellipsis if needed.
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/args.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/libutil/args.cc b/src/libutil/args.cc
index 2930913d6..348f1bca0 100644
--- a/src/libutil/args.cc
+++ b/src/libutil/args.cc
@@ -29,7 +29,16 @@ void Args::removeFlag(const std::string & longName)
void Completions::add(std::string completion, std::string description)
{
- assert(description.find('\n') == std::string::npos);
+ // strip whitespace/empty lines from the front of the description
+ description.erase(0, description.find_first_not_of(" \t\n"));
+ // ellipsize overflowing content on the back of the description
+ auto end_index = description.find_first_of(".\n");
+ if (end_index != std::string::npos) {
+ auto needs_ellipsis = end_index != description.size() - 1;
+ description.resize(end_index);
+ if (needs_ellipsis)
+ description.append(" [...]");
+ }
insert(Completion {
.completion = completion,
.description = description