diff --git a/degesch.c b/degesch.c index baeb9d0..9bc7b8a 100644 --- a/degesch.c +++ b/degesch.c @@ -2893,25 +2893,38 @@ g_command_handlers[] = "command" }, }; +static void +show_command_help (struct app_context *ctx, + const char *quote, struct command_handler *handler) +{ + buffer_send_status (ctx, ctx->global_buffer, "%s%s: %s", + quote, handler->name, handler->description); + buffer_send_status (ctx, ctx->global_buffer, "%s Arguments: %s", + quote, handler->usage); +} + static bool handle_command_help (struct app_context *ctx, char *arguments) { - if (*arguments) + if (!*arguments) { - char *command = cut_word (&arguments); - // TODO: search for the command and show specific help + buffer_send_status (ctx, ctx->global_buffer, "%s", ""); + buffer_send_status (ctx, ctx->global_buffer, "Commands:"); + for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++) + show_command_help (ctx, " ", &g_command_handlers[i]); return true; } - buffer_send_status (ctx, ctx->global_buffer, "Commands:"); + char *command = cut_word (&arguments); for (size_t i = 0; i < N_ELEMENTS (g_command_handlers); i++) - { - struct command_handler *iter = &g_command_handlers[i]; - buffer_send_status (ctx, ctx->global_buffer, - " %s: %s", iter->name, iter->description); - buffer_send_status (ctx, ctx->global_buffer, - " Arguments: %s", iter->usage); - } + if (!strcasecmp_ascii (command, g_command_handlers[i].name)) + { + buffer_send_status (ctx, ctx->global_buffer, "%s", ""); + show_command_help (ctx, "", &g_command_handlers[i]); + return true; + } + buffer_send_error (ctx, ctx->global_buffer, + "%s: %s", "No such command", command); return true; }