kconfig: attach help text to menus
Roman Zippel wrote: > A simple example would be > help texts, right now they are per symbol, but they should really be per > menu, so archs can provide different help texts for something. This patch does this and at the same time introduce a few API funtions used to access the help text. The relevant api functions are introduced in the various frontends. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Cc: Roman Zippel <zippel@linux-m68k.org>
This commit is contained in:
parent
4a645d5ea6
commit
03d2912273
|
@ -37,6 +37,14 @@ static struct menu *rootEntry;
|
||||||
|
|
||||||
static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
|
static char nohelp_text[] = N_("Sorry, no help available for this option yet.\n");
|
||||||
|
|
||||||
|
static const char *get_help(struct menu *menu)
|
||||||
|
{
|
||||||
|
if (menu_has_help(menu))
|
||||||
|
return menu_get_help(menu);
|
||||||
|
else
|
||||||
|
return nohelp_text;
|
||||||
|
}
|
||||||
|
|
||||||
static void strip(char *str)
|
static void strip(char *str)
|
||||||
{
|
{
|
||||||
char *p = str;
|
char *p = str;
|
||||||
|
@ -171,7 +179,7 @@ static void conf_askvalue(struct symbol *sym, const char *def)
|
||||||
int conf_string(struct menu *menu)
|
int conf_string(struct menu *menu)
|
||||||
{
|
{
|
||||||
struct symbol *sym = menu->sym;
|
struct symbol *sym = menu->sym;
|
||||||
const char *def, *help;
|
const char *def;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
printf("%*s%s ", indent - 1, "", menu->prompt->text);
|
printf("%*s%s ", indent - 1, "", menu->prompt->text);
|
||||||
|
@ -186,10 +194,7 @@ int conf_string(struct menu *menu)
|
||||||
case '?':
|
case '?':
|
||||||
/* print help */
|
/* print help */
|
||||||
if (line[1] == '\n') {
|
if (line[1] == '\n') {
|
||||||
help = nohelp_text;
|
printf("\n%s\n", get_help(menu));
|
||||||
if (menu->sym->help)
|
|
||||||
help = menu->sym->help;
|
|
||||||
printf("\n%s\n", menu->sym->help);
|
|
||||||
def = NULL;
|
def = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -207,7 +212,6 @@ static int conf_sym(struct menu *menu)
|
||||||
struct symbol *sym = menu->sym;
|
struct symbol *sym = menu->sym;
|
||||||
int type;
|
int type;
|
||||||
tristate oldval, newval;
|
tristate oldval, newval;
|
||||||
const char *help;
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
printf("%*s%s ", indent - 1, "", menu->prompt->text);
|
printf("%*s%s ", indent - 1, "", menu->prompt->text);
|
||||||
|
@ -233,7 +237,7 @@ static int conf_sym(struct menu *menu)
|
||||||
printf("/m");
|
printf("/m");
|
||||||
if (oldval != yes && sym_tristate_within_range(sym, yes))
|
if (oldval != yes && sym_tristate_within_range(sym, yes))
|
||||||
printf("/y");
|
printf("/y");
|
||||||
if (sym->help)
|
if (menu_has_help(menu))
|
||||||
printf("/?");
|
printf("/?");
|
||||||
printf("] ");
|
printf("] ");
|
||||||
conf_askvalue(sym, sym_get_string_value(sym));
|
conf_askvalue(sym, sym_get_string_value(sym));
|
||||||
|
@ -269,10 +273,7 @@ static int conf_sym(struct menu *menu)
|
||||||
if (sym_set_tristate_value(sym, newval))
|
if (sym_set_tristate_value(sym, newval))
|
||||||
return 0;
|
return 0;
|
||||||
help:
|
help:
|
||||||
help = nohelp_text;
|
printf("\n%s\n", get_help(menu));
|
||||||
if (sym->help)
|
|
||||||
help = sym->help;
|
|
||||||
printf("\n%s\n", help);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,7 +343,7 @@ static int conf_choice(struct menu *menu)
|
||||||
goto conf_childs;
|
goto conf_childs;
|
||||||
}
|
}
|
||||||
printf("[1-%d", cnt);
|
printf("[1-%d", cnt);
|
||||||
if (sym->help)
|
if (menu_has_help(menu))
|
||||||
printf("?");
|
printf("?");
|
||||||
printf("]: ");
|
printf("]: ");
|
||||||
switch (input_mode) {
|
switch (input_mode) {
|
||||||
|
@ -359,8 +360,7 @@ static int conf_choice(struct menu *menu)
|
||||||
fgets(line, 128, stdin);
|
fgets(line, 128, stdin);
|
||||||
strip(line);
|
strip(line);
|
||||||
if (line[0] == '?') {
|
if (line[0] == '?') {
|
||||||
printf("\n%s\n", menu->sym->help ?
|
printf("\n%s\n", get_help(menu));
|
||||||
menu->sym->help : nohelp_text);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!line[0])
|
if (!line[0])
|
||||||
|
@ -391,8 +391,7 @@ static int conf_choice(struct menu *menu)
|
||||||
if (!child)
|
if (!child)
|
||||||
continue;
|
continue;
|
||||||
if (line[strlen(line) - 1] == '?') {
|
if (line[strlen(line) - 1] == '?') {
|
||||||
printf("\n%s\n", child->sym->help ?
|
printf("\n%s\n", get_help(child));
|
||||||
child->sym->help : nohelp_text);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
sym_set_choice_value(sym, child->sym);
|
sym_set_choice_value(sym, child->sym);
|
||||||
|
|
|
@ -71,7 +71,6 @@ enum {
|
||||||
struct symbol {
|
struct symbol {
|
||||||
struct symbol *next;
|
struct symbol *next;
|
||||||
char *name;
|
char *name;
|
||||||
char *help;
|
|
||||||
enum symbol_type type;
|
enum symbol_type type;
|
||||||
struct symbol_value curr;
|
struct symbol_value curr;
|
||||||
struct symbol_value def[4];
|
struct symbol_value def[4];
|
||||||
|
@ -139,7 +138,7 @@ struct menu {
|
||||||
struct property *prompt;
|
struct property *prompt;
|
||||||
struct expr *dep;
|
struct expr *dep;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
//char *help;
|
char *help;
|
||||||
struct file *file;
|
struct file *file;
|
||||||
int lineno;
|
int lineno;
|
||||||
void *data;
|
void *data;
|
||||||
|
|
|
@ -38,9 +38,6 @@ static gboolean show_all = FALSE;
|
||||||
static gboolean show_debug = FALSE;
|
static gboolean show_debug = FALSE;
|
||||||
static gboolean resizeable = FALSE;
|
static gboolean resizeable = FALSE;
|
||||||
|
|
||||||
static char nohelp_text[] =
|
|
||||||
N_("Sorry, no help available for this option yet.\n");
|
|
||||||
|
|
||||||
GtkWidget *main_wnd = NULL;
|
GtkWidget *main_wnd = NULL;
|
||||||
GtkWidget *tree1_w = NULL; // left frame
|
GtkWidget *tree1_w = NULL; // left frame
|
||||||
GtkWidget *tree2_w = NULL; // right frame
|
GtkWidget *tree2_w = NULL; // right frame
|
||||||
|
@ -462,12 +459,9 @@ static void text_insert_help(struct menu *menu)
|
||||||
GtkTextIter start, end;
|
GtkTextIter start, end;
|
||||||
const char *prompt = menu_get_prompt(menu);
|
const char *prompt = menu_get_prompt(menu);
|
||||||
gchar *name;
|
gchar *name;
|
||||||
const char *help = _(nohelp_text);
|
const char *help;
|
||||||
|
|
||||||
if (!menu->sym)
|
help = _(menu_get_help(menu));
|
||||||
help = "";
|
|
||||||
else if (menu->sym->help)
|
|
||||||
help = _(menu->sym->help);
|
|
||||||
|
|
||||||
if (menu->sym && menu->sym->name)
|
if (menu->sym && menu->sym->name)
|
||||||
name = g_strdup_printf(_(menu->sym->name));
|
name = g_strdup_printf(_(menu->sym->name));
|
||||||
|
|
|
@ -170,8 +170,8 @@ void menu_build_message_list(struct menu *menu)
|
||||||
menu->file == NULL ? "Root Menu" : menu->file->name,
|
menu->file == NULL ? "Root Menu" : menu->file->name,
|
||||||
menu->lineno);
|
menu->lineno);
|
||||||
|
|
||||||
if (menu->sym != NULL && menu->sym->help != NULL)
|
if (menu->sym != NULL && menu_has_help(menu))
|
||||||
message__add(menu->sym->help, menu->sym->name,
|
message__add(menu_get_help(menu), menu->sym->name,
|
||||||
menu->file == NULL ? "Root Menu" : menu->file->name,
|
menu->file == NULL ? "Root Menu" : menu->file->name,
|
||||||
menu->lineno);
|
menu->lineno);
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,8 @@ P(menu_is_visible,bool,(struct menu *menu));
|
||||||
P(menu_get_prompt,const char *,(struct menu *menu));
|
P(menu_get_prompt,const char *,(struct menu *menu));
|
||||||
P(menu_get_root_menu,struct menu *,(struct menu *menu));
|
P(menu_get_root_menu,struct menu *,(struct menu *menu));
|
||||||
P(menu_get_parent_menu,struct menu *,(struct menu *menu));
|
P(menu_get_parent_menu,struct menu *,(struct menu *menu));
|
||||||
|
P(menu_has_help,bool,(struct menu *menu));
|
||||||
|
P(menu_get_help,const char *,(struct menu *menu));
|
||||||
|
|
||||||
/* symbol.c */
|
/* symbol.c */
|
||||||
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
|
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
|
||||||
|
|
|
@ -725,11 +725,11 @@ static void show_help(struct menu *menu)
|
||||||
struct gstr help = str_new();
|
struct gstr help = str_new();
|
||||||
struct symbol *sym = menu->sym;
|
struct symbol *sym = menu->sym;
|
||||||
|
|
||||||
if (sym->help)
|
if (menu_has_help(menu))
|
||||||
{
|
{
|
||||||
if (sym->name) {
|
if (sym->name) {
|
||||||
str_printf(&help, "CONFIG_%s:\n\n", sym->name);
|
str_printf(&help, "CONFIG_%s:\n\n", sym->name);
|
||||||
str_append(&help, _(sym->help));
|
str_append(&help, _(menu_get_help(menu)));
|
||||||
str_append(&help, "\n");
|
str_append(&help, "\n");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -417,3 +417,15 @@ struct menu *menu_get_parent_menu(struct menu *menu)
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool menu_has_help(struct menu *menu)
|
||||||
|
{
|
||||||
|
return menu->help != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *menu_get_help(struct menu *menu)
|
||||||
|
{
|
||||||
|
if (menu->help)
|
||||||
|
return menu->help;
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
|
@ -1041,7 +1041,7 @@ void ConfigInfoView::menuInfo(void)
|
||||||
if (showDebug())
|
if (showDebug())
|
||||||
debug = debug_info(sym);
|
debug = debug_info(sym);
|
||||||
|
|
||||||
help = print_filter(_(sym->help));
|
help = print_filter(_(menu_get_help(menu)));
|
||||||
} else if (menu->prompt) {
|
} else if (menu->prompt) {
|
||||||
head += "<big><b>";
|
head += "<big><b>";
|
||||||
head += print_filter(_(menu->prompt->text));
|
head += print_filter(_(menu->prompt->text));
|
||||||
|
|
|
@ -1722,7 +1722,7 @@ yyreduce:
|
||||||
case 83:
|
case 83:
|
||||||
|
|
||||||
{
|
{
|
||||||
current_entry->sym->help = (yyvsp[0].string);
|
current_entry->help = (yyvsp[0].string);
|
||||||
;}
|
;}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2280,11 +2280,11 @@ void print_symbol(FILE *out, struct menu *menu)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sym->help) {
|
if (menu->help) {
|
||||||
int len = strlen(sym->help);
|
int len = strlen(menu->help);
|
||||||
while (sym->help[--len] == '\n')
|
while (menu->help[--len] == '\n')
|
||||||
sym->help[len] = 0;
|
menu->help[len] = 0;
|
||||||
fprintf(out, " help\n%s\n", sym->help);
|
fprintf(out, " help\n%s\n", menu->help);
|
||||||
}
|
}
|
||||||
fputc('\n', out);
|
fputc('\n', out);
|
||||||
}
|
}
|
||||||
|
|
|
@ -402,7 +402,7 @@ help_start: T_HELP T_EOL
|
||||||
|
|
||||||
help: help_start T_HELPTEXT
|
help: help_start T_HELPTEXT
|
||||||
{
|
{
|
||||||
current_entry->sym->help = $2;
|
current_entry->help = $2;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* depends option */
|
/* depends option */
|
||||||
|
@ -649,11 +649,11 @@ void print_symbol(FILE *out, struct menu *menu)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sym->help) {
|
if (menu->help) {
|
||||||
int len = strlen(sym->help);
|
int len = strlen(menu->help);
|
||||||
while (sym->help[--len] == '\n')
|
while (menu->help[--len] == '\n')
|
||||||
sym->help[len] = 0;
|
menu->help[len] = 0;
|
||||||
fprintf(out, " help\n%s\n", sym->help);
|
fprintf(out, " help\n%s\n", menu->help);
|
||||||
}
|
}
|
||||||
fputc('\n', out);
|
fputc('\n', out);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user