help.hon commit Fourth batch (bc12974)
   1#ifndef HELP_H
   2#define HELP_H
   3
   4#include "string-list.h"
   5#include "strbuf.h"
   6
   7struct cmdnames {
   8        int alloc;
   9        int cnt;
  10        struct cmdname {
  11                size_t len; /* also used for similarity index in help.c */
  12                char name[FLEX_ARRAY];
  13        } **names;
  14};
  15
  16static inline void mput_char(char c, unsigned int num)
  17{
  18        while (num--)
  19                putchar(c);
  20}
  21
  22void list_common_cmds_help(void);
  23void list_all_cmds_help(void);
  24void list_common_guides_help(void);
  25void list_config_help(int for_human);
  26
  27void list_all_main_cmds(struct string_list *list);
  28void list_all_other_cmds(struct string_list *list);
  29void list_cmds_by_category(struct string_list *list,
  30                           const char *category);
  31void list_cmds_by_config(struct string_list *list);
  32const char *help_unknown_cmd(const char *cmd);
  33void load_command_list(const char *prefix,
  34                       struct cmdnames *main_cmds,
  35                       struct cmdnames *other_cmds);
  36void add_cmdname(struct cmdnames *cmds, const char *name, int len);
  37/* Here we require that excludes is a sorted list. */
  38void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes);
  39int is_in_cmdlist(struct cmdnames *cmds, const char *name);
  40void list_commands(unsigned int colopts, struct cmdnames *main_cmds, struct cmdnames *other_cmds);
  41
  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 */
  46NORETURN void help_unknown_ref(const char *ref, const char *cmd, const char *error);
  47
  48static 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)                                 \
  56void 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}                                                                       \
  63struct string_list
  64
  65#define define_list_config_array_extra(array, values)                   \
  66void 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}                                                                       \
  76struct string_list
  77
  78/* These are actually scattered over many C files */
  79void list_config_advices(struct string_list *list, const char *prefix);
  80void list_config_color_branch_slots(struct string_list *list, const char *prefix);
  81void list_config_color_decorate_slots(struct string_list *list, const char *prefix);
  82void list_config_color_diff_slots(struct string_list *list, const char *prefix);
  83void list_config_color_grep_slots(struct string_list *list, const char *prefix);
  84void list_config_color_interactive_slots(struct string_list *list, const char *prefix);
  85void list_config_color_status_slots(struct string_list *list, const char *prefix);
  86void list_config_color_sideband_slots(struct string_list *list, const char *prefix);
  87void list_config_fsck_msg_ids(struct string_list *list, const char *prefix);
  88
  89#endif /* HELP_H */