help-util: add helpers for generating uniform --help texts
Let's introduce some helpers for generating uniform --help texts with some minimal ANSI styling. This shortens the help() functions generally, and allows us to change the style at a single, central place. This mostly just follows our current styling for --help, but it makes two updates to it: 1. The command line summary at the very top of the --help text is now prefixes with a grey ">" character to indicate it's a command line. 2. The human language introductionary description/abstract right after that command line is set in italics, to emphasize it's not dry, technical, structural information, but more human friendly prose.
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "ansi-color.h"
|
||||
#include "help-util.h"
|
||||
#include "pretty-print.h"
|
||||
|
||||
/* These are helpers for putting together --help texts in a uniform way with a common output style. Each
|
||||
* function generates a separate part of the --help text:
|
||||
*
|
||||
* 1. help_cmdline() outputs a brief summary of the command line syntax. (used at least once, in some cases
|
||||
* multiple times.) This generally comes first in the output.
|
||||
*
|
||||
* 2. help_abstract() outputs a brief prose abstract of the command, should carry a single line of text
|
||||
* that gives the user a hint what this tool does. Use only once, right after the last help_cmdline().
|
||||
*
|
||||
* 3. help_section() can be used to format multiple sections of the --help text. It should be used at least
|
||||
* once for an "Options:" section, but can be used more than once, for programs with many
|
||||
* options/verbs. The first invocation should come right after help_abstract().
|
||||
*
|
||||
* 4. Finally, help_man_page_reference() adds a final line linking the man page of the tool. This should be
|
||||
* used only once, and terminates the --help text.
|
||||
*
|
||||
* Switches and verbs documentation should be inserted after each help_section(). For that ideally use
|
||||
* options.[ch] APIs. */
|
||||
|
||||
void help_cmdline(const char *arguments) {
|
||||
assert(arguments);
|
||||
|
||||
printf("%s>%s %s %s\n",
|
||||
ansi_grey(),
|
||||
ansi_normal(),
|
||||
program_invocation_short_name,
|
||||
arguments);
|
||||
}
|
||||
|
||||
void help_abstract(const char *text) {
|
||||
assert(text);
|
||||
|
||||
printf("\n%s%s%s%s\n",
|
||||
ansi_highlight(),
|
||||
ansi_add_italics(),
|
||||
text,
|
||||
ansi_normal());
|
||||
}
|
||||
|
||||
void help_section(const char *title) {
|
||||
assert(title);
|
||||
|
||||
printf("\n%s%s%s\n",
|
||||
ansi_underline(),
|
||||
title,
|
||||
ansi_normal());
|
||||
}
|
||||
|
||||
void help_man_page_reference(const char *page, const char *section) {
|
||||
assert(page);
|
||||
assert(section);
|
||||
|
||||
/* Displaying --help texts generally should not fail, hence let's fall back to a simple string in
|
||||
* case of OOM. */
|
||||
_cleanup_free_ char *link = NULL;
|
||||
if (terminal_urlify_man(page, section, &link) < 0)
|
||||
printf("\nSee the %s(%s) man page for details.\n", page, section);
|
||||
else
|
||||
printf("\nSee the %s for details.\n", link);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
void help_cmdline(const char *arguments);
|
||||
|
||||
void help_abstract(const char *text);
|
||||
|
||||
void help_section(const char *title);
|
||||
|
||||
void help_man_page_reference(const char *page, const char *section);
|
||||
@@ -94,6 +94,7 @@ shared_sources = files(
|
||||
'gnutls-util.c',
|
||||
'gpt.c',
|
||||
'group-record.c',
|
||||
'help-util.c',
|
||||
'hibernate-util.c',
|
||||
'hostname-setup.c',
|
||||
'hwdb-util.c',
|
||||
|
||||
Reference in New Issue
Block a user