Miklos Vajna | 940208a | 2008-07-30 01:16:58 +0200 | [diff] [blame] | 1 | #ifndef HELP_H |
| 2 | #define HELP_H |
| 3 | |
Nguyễn Thái Ngọc Duy | 3ac68a9 | 2018-05-26 15:55:24 +0200 | [diff] [blame] | 4 | #include "string-list.h" |
| 5 | #include "strbuf.h" |
Nguyễn Thái Ngọc Duy | 6bb2dc0 | 2018-05-20 20:39:59 +0200 | [diff] [blame] | 6 | |
Miklos Vajna | 940208a | 2008-07-30 01:16:58 +0200 | [diff] [blame] | 7 | struct cmdnames { |
| 8 | int alloc; |
| 9 | int cnt; |
| 10 | struct cmdname { |
Johannes Schindelin | 8af84da | 2008-08-31 15:50:23 +0200 | [diff] [blame] | 11 | size_t len; /* also used for similarity index in help.c */ |
Miklos Vajna | 940208a | 2008-07-30 01:16:58 +0200 | [diff] [blame] | 12 | char name[FLEX_ARRAY]; |
| 13 | } **names; |
| 14 | }; |
| 15 | |
Miklos Vajna | 3d78d1f | 2008-08-02 10:08:38 +0200 | [diff] [blame] | 16 | static inline void mput_char(char c, unsigned int num) |
| 17 | { |
Johannes Schindelin | 5acea87 | 2018-12-11 06:58:10 -0800 | [diff] [blame] | 18 | while (num--) |
Miklos Vajna | 3d78d1f | 2008-08-02 10:08:38 +0200 | [diff] [blame] | 19 | putchar(c); |
| 20 | } |
| 21 | |
Denton Liu | 5545442 | 2019-04-29 04:28:14 -0400 | [diff] [blame] | 22 | void list_common_cmds_help(void); |
| 23 | void list_all_cmds_help(void); |
| 24 | void list_common_guides_help(void); |
| 25 | void list_config_help(int for_human); |
Nguyễn Thái Ngọc Duy | 63eae83 | 2018-05-20 20:40:01 +0200 | [diff] [blame] | 26 | |
Denton Liu | 5545442 | 2019-04-29 04:28:14 -0400 | [diff] [blame] | 27 | void list_all_main_cmds(struct string_list *list); |
| 28 | void list_all_other_cmds(struct string_list *list); |
| 29 | void list_cmds_by_category(struct string_list *list, |
Denton Liu | ad6dad0 | 2019-04-29 04:28:23 -0400 | [diff] [blame] | 30 | const char *category); |
Denton Liu | 5545442 | 2019-04-29 04:28:14 -0400 | [diff] [blame] | 31 | void list_cmds_by_config(struct string_list *list); |
| 32 | const char *help_unknown_cmd(const char *cmd); |
| 33 | void load_command_list(const char *prefix, |
Denton Liu | ad6dad0 | 2019-04-29 04:28:23 -0400 | [diff] [blame] | 34 | struct cmdnames *main_cmds, |
| 35 | struct cmdnames *other_cmds); |
Denton Liu | 5545442 | 2019-04-29 04:28:14 -0400 | [diff] [blame] | 36 | void add_cmdname(struct cmdnames *cmds, const char *name, int len); |
Miklos Vajna | 940208a | 2008-07-30 01:16:58 +0200 | [diff] [blame] | 37 | /* Here we require that excludes is a sorted list. */ |
Denton Liu | 5545442 | 2019-04-29 04:28:14 -0400 | [diff] [blame] | 38 | void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes); |
| 39 | int is_in_cmdlist(struct cmdnames *cmds, const char *name); |
| 40 | void list_commands(unsigned int colopts, struct cmdnames *main_cmds, struct cmdnames *other_cmds); |
Miklos Vajna | 940208a | 2008-07-30 01:16:58 +0200 | [diff] [blame] | 41 | |
Vikrant Varma | e561810 | 2013-05-04 05:34:19 +0530 | [diff] [blame] | 42 | /* |
| 43 | * call this to die(), when it is suspected that the user mistyped a |
| 44 | * ref to the command, to give suggested "correct" refs. |
| 45 | */ |
René Scharfe | 80e3658 | 2019-08-29 21:13:16 +0200 | [diff] [blame] | 46 | NORETURN void help_unknown_ref(const char *ref, const char *cmd, const char *error); |
Nguyễn Thái Ngọc Duy | 3ac68a9 | 2018-05-26 15:55:24 +0200 | [diff] [blame] | 47 | |
| 48 | static inline void list_config_item(struct string_list *list, |
| 49 | const char *prefix, |
| 50 | const char *str) |
| 51 | { |
| 52 | string_list_append_nodup(list, xstrfmt("%s.%s", prefix, str)); |
| 53 | } |
| 54 | |
| 55 | #define define_list_config_array(array) \ |
| 56 | void list_config_##array(struct string_list *list, const char *prefix) \ |
| 57 | { \ |
| 58 | int i; \ |
| 59 | for (i = 0; i < ARRAY_SIZE(array); i++) \ |
| 60 | if (array[i]) \ |
| 61 | list_config_item(list, prefix, array[i]); \ |
| 62 | } \ |
| 63 | struct string_list |
| 64 | |
| 65 | #define define_list_config_array_extra(array, values) \ |
| 66 | void list_config_##array(struct string_list *list, const char *prefix) \ |
| 67 | { \ |
| 68 | int i; \ |
| 69 | static const char *extra[] = values; \ |
| 70 | for (i = 0; i < ARRAY_SIZE(extra); i++) \ |
| 71 | list_config_item(list, prefix, extra[i]); \ |
| 72 | for (i = 0; i < ARRAY_SIZE(array); i++) \ |
| 73 | if (array[i]) \ |
| 74 | list_config_item(list, prefix, array[i]); \ |
| 75 | } \ |
| 76 | struct string_list |
| 77 | |
| 78 | /* These are actually scattered over many C files */ |
| 79 | void list_config_advices(struct string_list *list, const char *prefix); |
| 80 | void list_config_color_branch_slots(struct string_list *list, const char *prefix); |
| 81 | void list_config_color_decorate_slots(struct string_list *list, const char *prefix); |
| 82 | void list_config_color_diff_slots(struct string_list *list, const char *prefix); |
| 83 | void list_config_color_grep_slots(struct string_list *list, const char *prefix); |
| 84 | void list_config_color_interactive_slots(struct string_list *list, const char *prefix); |
| 85 | void list_config_color_status_slots(struct string_list *list, const char *prefix); |
Han-Wen Nienhuys | bf1a11f | 2018-08-07 14:51:08 +0200 | [diff] [blame] | 86 | void list_config_color_sideband_slots(struct string_list *list, const char *prefix); |
Nguyễn Thái Ngọc Duy | 3ac68a9 | 2018-05-26 15:55:24 +0200 | [diff] [blame] | 87 | void list_config_fsck_msg_ids(struct string_list *list, const char *prefix); |
| 88 | |
Miklos Vajna | 940208a | 2008-07-30 01:16:58 +0200 | [diff] [blame] | 89 | #endif /* HELP_H */ |