cmd: use term formatting codes for command help text

This commit is contained in:
2024-11-14 22:03:39 +00:00
parent b2c9c7cab9
commit 64a246e6f7
4 changed files with 38 additions and 24 deletions

View File

@@ -160,7 +160,7 @@ void z__b_get_arg_description(struct b_command_arg *arg, b_string *out)
b_string_append_cstr(out, " "); b_string_append_cstr(out, " ");
} }
b_string_append_cstr(out, "[values:"); b_string_append_cstr(out, "[[values:");
for (size_t i = 0; arg->arg_allowed_values[i]; i++) { for (size_t i = 0; arg->arg_allowed_values[i]; i++) {
if (i > 0) { if (i > 0) {

View File

@@ -10,7 +10,7 @@
#define OUTPUT_STREAM stderr #define OUTPUT_STREAM stderr
static struct b_btree command_list = {}; static struct b_btree command_list = {0};
B_BTREE_DEFINE_SIMPLE_GET(struct b_command, unsigned int, b_node, b_id, get_command) B_BTREE_DEFINE_SIMPLE_GET(struct b_command, unsigned int, b_node, b_id, get_command)
B_BTREE_DEFINE_SIMPLE_INSERT(struct b_command, b_node, b_id, put_command) B_BTREE_DEFINE_SIMPLE_INSERT(struct b_command, b_node, b_id, put_command)
@@ -545,8 +545,9 @@ static void print_options_list(struct b_command *cmd)
z__b_get_option_description(opt, desc_str); z__b_get_option_description(opt, desc_str);
size_t opt_len size_t opt_len
= b_string_get_size(opt_str, B_STRLEN_IGNORE_ESC) + 4; = b_string_get_size(opt_str, B_STRLEN_IGNORE_ESC | B_STRLEN_IGNORE_MOD) + 4;
size_t desc_len = b_string_get_size(desc_str, B_STRLEN_IGNORE_ESC); size_t desc_len = b_string_get_size(
desc_str, B_STRLEN_IGNORE_ESC | B_STRLEN_IGNORE_MOD);
if (description_on_separate_line(opt_len, desc_len)) { if (description_on_separate_line(opt_len, desc_len)) {
continue; continue;
@@ -557,7 +558,7 @@ static void print_options_list(struct b_command *cmd)
} }
} }
b_paragraph_format format = {}; b_paragraph_format format = {0};
format.p_flags = B_PARAGRAPH_DONT_INDENT_FIRST_LINE; format.p_flags = B_PARAGRAPH_DONT_INDENT_FIRST_LINE;
format.p_left_margin = desb_margin + 4; format.p_left_margin = desb_margin + 4;
format.p_right_margin = 4; format.p_right_margin = 4;
@@ -575,9 +576,12 @@ static void print_options_list(struct b_command *cmd)
z__b_get_option_usage_string(opt, CMD_STR_COLOUR, opt_str); z__b_get_option_usage_string(opt, CMD_STR_COLOUR, opt_str);
z__b_get_option_description(opt, desc_str); z__b_get_option_description(opt, desc_str);
size_t opt_len size_t opt_len = b_string_get_size(
= b_string_get_size(opt_str, B_STRLEN_IGNORE_ESC) + 4; opt_str, B_STRLEN_IGNORE_ESC
size_t desc_len = b_string_get_size(desc_str, B_STRLEN_IGNORE_ESC); | B_STRLEN_IGNORE_MOD)
+ 4;
size_t desc_len = b_string_get_size(
desc_str, B_STRLEN_IGNORE_ESC | B_STRLEN_IGNORE_MOD);
bool new_paragraph bool new_paragraph
= description_on_separate_line(opt_len, desc_len); = description_on_separate_line(opt_len, desc_len);
@@ -631,14 +635,16 @@ static void print_args_list(struct b_command *cmd)
b_string_clear(str); b_string_clear(str);
z__b_get_arg_usage_string(arg, true, str); z__b_get_arg_usage_string(arg, true, str);
size_t len = b_string_get_size(str, B_STRLEN_IGNORE_ESC) + 4; size_t len = b_string_get_size(
str, B_STRLEN_IGNORE_ESC | B_STRLEN_IGNORE_MOD)
+ 4;
if (len > desb_margin) { if (len > desb_margin) {
desb_margin = len; desb_margin = len;
} }
} }
b_paragraph_format format = {}; b_paragraph_format format = {0};
format.p_flags = B_PARAGRAPH_DONT_INDENT_FIRST_LINE; format.p_flags = B_PARAGRAPH_DONT_INDENT_FIRST_LINE;
format.p_left_margin = desb_margin + 4; format.p_left_margin = desb_margin + 4;
format.p_right_margin = 4; format.p_right_margin = 4;
@@ -653,7 +659,10 @@ static void print_args_list(struct b_command *cmd)
fputs(" ", OUTPUT_STREAM); fputs(" ", OUTPUT_STREAM);
b_fputs(b_string_ptr(str), OUTPUT_STREAM); b_fputs(b_string_ptr(str), OUTPUT_STREAM);
unsigned int len = b_string_get_size(str, B_STRLEN_IGNORE_ESC) + 4; unsigned int len
= b_string_get_size(
str, B_STRLEN_IGNORE_ESC | B_STRLEN_IGNORE_MOD)
+ 4;
while (len < format.p_left_margin) { while (len < format.p_left_margin) {
fputc(' ', OUTPUT_STREAM); fputc(' ', OUTPUT_STREAM);
len++; len++;
@@ -682,14 +691,16 @@ static void print_commands_list(struct b_command *cmd)
b_string_clear(str); b_string_clear(str);
get_command_string(sub, str); get_command_string(sub, str);
size_t len = b_string_get_size(str, B_STRLEN_IGNORE_ESC) + 4; size_t len = b_string_get_size(
str, B_STRLEN_IGNORE_ESC | B_STRLEN_IGNORE_MOD)
+ 4;
if (len > desb_margin) { if (len > desb_margin) {
desb_margin = len; desb_margin = len;
} }
} }
b_paragraph_format format = {}; b_paragraph_format format = {0};
format.p_flags = B_PARAGRAPH_DONT_INDENT_FIRST_LINE; format.p_flags = B_PARAGRAPH_DONT_INDENT_FIRST_LINE;
format.p_left_margin = desb_margin + 4; format.p_left_margin = desb_margin + 4;
format.p_right_margin = 4; format.p_right_margin = 4;
@@ -704,7 +715,10 @@ static void print_commands_list(struct b_command *cmd)
fputs(" ", OUTPUT_STREAM); fputs(" ", OUTPUT_STREAM);
b_fputs(b_string_ptr(str), OUTPUT_STREAM); b_fputs(b_string_ptr(str), OUTPUT_STREAM);
unsigned int len = b_string_get_size(str, B_STRLEN_IGNORE_ESC) + 4; unsigned int len
= b_string_get_size(
str, B_STRLEN_IGNORE_ESC | B_STRLEN_IGNORE_MOD)
+ 4;
while (len < format.p_left_margin) { while (len < format.p_left_margin) {
fputc(' ', OUTPUT_STREAM); fputc(' ', OUTPUT_STREAM);
len++; len++;
@@ -816,7 +830,7 @@ struct b_command_option *b_command_get_option_with_short_name(
static void print_usage(struct b_command *cmd) static void print_usage(struct b_command *cmd)
{ {
b_paragraph_format format = {}; b_paragraph_format format = {0};
format.p_left_margin = format.p_right_margin = 4; format.p_left_margin = format.p_right_margin = 4;
b_fprintf(OUTPUT_STREAM, F_YELLOW "USAGE:" F_RESET "\n"); b_fprintf(OUTPUT_STREAM, F_YELLOW "USAGE:" F_RESET "\n");
@@ -847,7 +861,7 @@ static void print_usage(struct b_command *cmd)
static void print_help(struct b_command *cmd) static void print_help(struct b_command *cmd)
{ {
b_paragraph_format format = {}; b_paragraph_format format = {0};
if (!cmd->b_parent) { if (!cmd->b_parent) {
b_fprintf(OUTPUT_STREAM, F_GREEN "%s" F_RESET "\n", cmd->b_name); b_fprintf(OUTPUT_STREAM, F_GREEN "%s" F_RESET "\n", cmd->b_name);

View File

@@ -5,14 +5,14 @@
#include <blue/core/btree.h> #include <blue/core/btree.h>
#include <blue/core/queue.h> #include <blue/core/queue.h>
#define F_RED "\033[91m" #define F_RED "[bright,red]"
#define F_GREEN "\033[92m" #define F_GREEN "[bright,green]"
#define F_YELLOW "\033[93m" #define F_YELLOW "[bright,yellow]"
#define F_RED_BOLD "\033[1;91m" #define F_RED_BOLD "[bright,bold,red]"
#define F_GREEN_BOLD "\033[1;92m" #define F_GREEN_BOLD "[bright,bold,green]"
#define F_YELLOW_BOLD "\033[1;93m" #define F_YELLOW_BOLD "[bright,bold,yellow]"
#define F_RESET "\033[0m" #define F_RESET "[reset]"
enum cmd_string_flags { enum cmd_string_flags {
CMD_STR_COLOUR = 0x01u, CMD_STR_COLOUR = 0x01u,

View File

@@ -118,7 +118,7 @@ void z__b_get_option_description(struct b_command_option *opt, b_string *out)
if (it.i > 0) { if (it.i > 0) {
b_string_append_cstr(out, "; "); b_string_append_cstr(out, "; ");
} else { } else {
b_string_append_cstr(out, " ["); b_string_append_cstr(out, " [[");
close_bracket = true; close_bracket = true;
} }