Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03d29122 authored by Sam Ravnborg's avatar Sam Ravnborg
Browse files

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: default avatarSam Ravnborg <sam@ravnborg.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
parent 4a645d5e
Loading
Loading
Loading
Loading
+15 −16
Original line number Diff line number Diff line
@@ -37,6 +37,14 @@ static struct menu *rootEntry;

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)
{
	char *p = str;
@@ -171,7 +179,7 @@ static void conf_askvalue(struct symbol *sym, const char *def)
int conf_string(struct menu *menu)
{
	struct symbol *sym = menu->sym;
	const char *def, *help;
	const char *def;

	while (1) {
		printf("%*s%s ", indent - 1, "", menu->prompt->text);
@@ -186,10 +194,7 @@ int conf_string(struct menu *menu)
		case '?':
			/* print help */
			if (line[1] == '\n') {
				help = nohelp_text;
				if (menu->sym->help)
					help = menu->sym->help;
				printf("\n%s\n", menu->sym->help);
				printf("\n%s\n", get_help(menu));
				def = NULL;
				break;
			}
@@ -207,7 +212,6 @@ static int conf_sym(struct menu *menu)
	struct symbol *sym = menu->sym;
	int type;
	tristate oldval, newval;
	const char *help;

	while (1) {
		printf("%*s%s ", indent - 1, "", menu->prompt->text);
@@ -233,7 +237,7 @@ static int conf_sym(struct menu *menu)
			printf("/m");
		if (oldval != yes && sym_tristate_within_range(sym, yes))
			printf("/y");
		if (sym->help)
		if (menu_has_help(menu))
			printf("/?");
		printf("] ");
		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))
			return 0;
help:
		help = nohelp_text;
		if (sym->help)
			help = sym->help;
		printf("\n%s\n", help);
		printf("\n%s\n", get_help(menu));
	}
}

@@ -342,7 +343,7 @@ static int conf_choice(struct menu *menu)
			goto conf_childs;
		}
		printf("[1-%d", cnt);
		if (sym->help)
		if (menu_has_help(menu))
			printf("?");
		printf("]: ");
		switch (input_mode) {
@@ -359,8 +360,7 @@ static int conf_choice(struct menu *menu)
			fgets(line, 128, stdin);
			strip(line);
			if (line[0] == '?') {
				printf("\n%s\n", menu->sym->help ?
					menu->sym->help : nohelp_text);
				printf("\n%s\n", get_help(menu));
				continue;
			}
			if (!line[0])
@@ -391,8 +391,7 @@ static int conf_choice(struct menu *menu)
		if (!child)
			continue;
		if (line[strlen(line) - 1] == '?') {
			printf("\n%s\n", child->sym->help ?
				child->sym->help : nohelp_text);
			printf("\n%s\n", get_help(child));
			continue;
		}
		sym_set_choice_value(sym, child->sym);
+1 −2
Original line number Diff line number Diff line
@@ -71,7 +71,6 @@ enum {
struct symbol {
	struct symbol *next;
	char *name;
	char *help;
	enum symbol_type type;
	struct symbol_value curr;
	struct symbol_value def[4];
@@ -139,7 +138,7 @@ struct menu {
	struct property *prompt;
	struct expr *dep;
	unsigned int flags;
	//char *help;
	char *help;
	struct file *file;
	int lineno;
	void *data;
+2 −8
Original line number Diff line number Diff line
@@ -38,9 +38,6 @@ static gboolean show_all = FALSE;
static gboolean show_debug = FALSE;
static gboolean resizeable = FALSE;

static char nohelp_text[] =
    N_("Sorry, no help available for this option yet.\n");

GtkWidget *main_wnd = NULL;
GtkWidget *tree1_w = NULL;	// left  frame
GtkWidget *tree2_w = NULL;	// right frame
@@ -462,12 +459,9 @@ static void text_insert_help(struct menu *menu)
	GtkTextIter start, end;
	const char *prompt = menu_get_prompt(menu);
	gchar *name;
	const char *help = _(nohelp_text);
	const char *help;

	if (!menu->sym)
		help = "";
	else if (menu->sym->help)
		help = _(menu->sym->help);
	help = _(menu_get_help(menu));

	if (menu->sym && menu->sym->name)
		name = g_strdup_printf(_(menu->sym->name));
+2 −2
Original line number Diff line number Diff line
@@ -170,8 +170,8 @@ void menu_build_message_list(struct menu *menu)
		     menu->file == NULL ? "Root Menu" : menu->file->name,
		     menu->lineno);

	if (menu->sym != NULL && menu->sym->help != NULL)
		message__add(menu->sym->help, menu->sym->name,
	if (menu->sym != NULL && menu_has_help(menu))
		message__add(menu_get_help(menu), menu->sym->name,
			     menu->file == NULL ? "Root Menu" : menu->file->name,
			     menu->lineno);

+2 −0
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@ P(menu_is_visible,bool,(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_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 */
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
Loading