summaryrefslogtreecommitdiff
path: root/degesch.c
diff options
context:
space:
mode:
Diffstat (limited to 'degesch.c')
-rw-r--r--degesch.c61
1 files changed, 34 insertions, 27 deletions
diff --git a/degesch.c b/degesch.c
index 6e3d6a6..fdfab28 100644
--- a/degesch.c
+++ b/degesch.c
@@ -7495,42 +7495,49 @@ try_handle_command_help_option (struct app_context *ctx, const char *name)
}
static bool
+show_command_list (struct app_context *ctx)
+{
+ log_global_indent (ctx, "");
+ log_global_indent (ctx, "Commands:");
+
+ int longest = 0;
+ for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++)
+ {
+ int len = strlen (g_command_handlers[i].name);
+ longest = MAX (longest, len);
+ }
+ for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++)
+ {
+ struct command_handler *handler = &g_command_handlers[i];
+ log_global_indent (ctx, " #&s", xstrdup_printf
+ ("%-*s %s", longest, handler->name, handler->description));
+ }
+ return true;
+}
+
+static bool
+show_command_help (struct app_context *ctx, struct command_handler *handler)
+{
+ log_global_indent (ctx, "");
+ log_global_indent (ctx, "#s: #s", handler->name, handler->description);
+ log_global_indent (ctx, " Arguments: #s",
+ handler->usage ? handler->usage : "(none)");
+ return true;
+}
+
+static bool
handle_command_help (struct handler_args *a)
{
struct app_context *ctx = a->ctx;
if (!*a->arguments)
- {
- log_global_indent (ctx, "");
- log_global_indent (ctx, "Commands:");
-
- int longest = 0;
- for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++)
- {
- int len = strlen (g_command_handlers[i].name);
- longest = MAX (longest, len);
- }
- for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++)
- {
- struct command_handler *handler = &g_command_handlers[i];
- log_global_indent (ctx, " #&s", xstrdup_printf
- ("%-*s %s", longest, handler->name, handler->description));
- }
- return true;
- }
+ return show_command_list (ctx);
char *command = cut_word (&a->arguments);
for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++)
{
struct command_handler *handler = &g_command_handlers[i];
- if (strcasecmp_ascii (command, handler->name))
- continue;
-
- log_global_indent (ctx, "");
- log_global_indent (ctx, "#s: #s",
- handler->name, handler->description);
- log_global_indent (ctx, " Arguments: #s",
- handler->usage ? handler->usage : "(none)");
- return true;
+ if (!strcasecmp_ascii (command, handler->name))
+ return show_command_help (ctx, handler);
}
if (!try_handle_command_help_option (ctx, command))