At the moment, keys 1-9 are assigned to the first 9 search results. This patch
makes them assigned to the first 9 results per-page instead. We are much less
likely to run out of keys that way.
Signed-off-by: Benjamin Poirier <bpoirier@suse.de>
Signed-off-by: Michal Marek <mmarek@suse.cz>
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
#include <assert.h>
#include <stdio.h>
#include <assert.h>
#include <stdio.h>
#ifndef __cplusplus
#include <stdbool.h>
#endif
#ifndef __cplusplus
#include <stdbool.h>
#endif
#define MENU_CHANGED 0x0001
#define MENU_ROOT 0x0002
#define MENU_CHANGED 0x0001
#define MENU_ROOT 0x0002
+struct jump_key {
+ CIRCLEQ_ENTRY(jump_key) entries;
+ size_t offset;
+ struct menu *target;
+ int index;
+};
+CIRCLEQ_HEAD(jk_head, jump_key);
+
#define JUMP_NB 9
extern struct file *file_list;
#define JUMP_NB 9
extern struct file *file_list;
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));
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));
-P(get_symbol_str, int, (struct gstr *r, struct symbol *sym, struct menu
- **jumps, int jump_nb));
-P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct menu
- **jumps));
+P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct jk_head
+ *head));
+P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct jk_head
+ *head));
P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
/* symbol.c */
P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
/* symbol.c */
-static int get_prompt_str(struct gstr *r, struct property *prop, struct menu
- **jumps, int jump_nb)
+static void get_prompt_str(struct gstr *r, struct property *prop,
+ struct jk_head *head)
struct menu *submenu[8], *menu, *location = NULL;
struct menu *submenu[8], *menu, *location = NULL;
str_printf(r, _("Prompt: %s\n"), _(prop->text));
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
str_printf(r, _("Prompt: %s\n"), _(prop->text));
str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
if (location == NULL && accessible)
location = menu;
}
if (location == NULL && accessible)
location = menu;
}
- if (jumps && jump_nb < JUMP_NB && location) {
+ if (head && location) {
+ jump = malloc(sizeof(struct jump_key));
+
if (menu_is_visible(prop->menu)) {
/*
* There is not enough room to put the hint at the
if (menu_is_visible(prop->menu)) {
/*
* There is not enough room to put the hint at the
* last "Location" line even when it would belong on
* the former.
*/
* last "Location" line even when it would belong on
* the former.
*/
- jumps[jump_nb] = prop->menu;
+ jump->target = prop->menu;
- jumps[jump_nb] = location;
- snprintf(header, 4, "(%d)", jump_nb + 1);
- } else
- location = NULL;
+ jump->target = location;
+
+ if (CIRCLEQ_EMPTY(head))
+ jump->index = 0;
+ else
+ jump->index = CIRCLEQ_LAST(head)->index + 1;
+
+ CIRCLEQ_INSERT_TAIL(head, jump, entries);
+ }
if (i > 0) {
str_printf(r, _(" Location:\n"));
if (i > 0) {
str_printf(r, _(" Location:\n"));
- for (j = 1; --i >= 0; j += 2) {
+ for (j = 4; --i >= 0; j += 2) {
- str_printf(r, "%s%*c-> %s", menu == location ? header
- : " ", j, ' ', _(menu_get_prompt(menu)));
+ if (head && location && menu == location)
+ jump->offset = r->len - 1;
+ str_printf(r, "%*c-> %s", j, ' ',
+ _(menu_get_prompt(menu)));
if (menu->sym) {
str_printf(r, " (%s [=%s])", menu->sym->name ?
menu->sym->name : _("<choice>"),
if (menu->sym) {
str_printf(r, " (%s [=%s])", menu->sym->name ?
menu->sym->name : _("<choice>"),
-
- return location ? 1 : 0;
- * jumps is optional and may be NULL
- * returns the number of jumps inserted
+ * head is optional and may be NULL
-int get_symbol_str(struct gstr *r, struct symbol *sym, struct menu **jumps,
- int jump_nb)
+void get_symbol_str(struct gstr *r, struct symbol *sym, struct jk_head *head)
{
bool hit;
struct property *prop;
{
bool hit;
struct property *prop;
if (sym && sym->name) {
str_printf(r, "Symbol: %s [=%s]\n", sym->name,
if (sym && sym->name) {
str_printf(r, "Symbol: %s [=%s]\n", sym->name,
}
}
for_all_prompts(sym, prop)
}
}
for_all_prompts(sym, prop)
- i += get_prompt_str(r, prop, jumps, jump_nb + i);
+ get_prompt_str(r, prop, head);
hit = false;
for_all_properties(sym, prop, P_SELECT) {
if (!hit) {
hit = false;
for_all_properties(sym, prop, P_SELECT) {
if (!hit) {
str_append(r, "\n");
}
str_append(r, "\n\n");
str_append(r, "\n");
}
str_append(r, "\n\n");
-struct gstr get_relations_str(struct symbol **sym_arr, struct menu **jumps)
+struct gstr get_relations_str(struct symbol **sym_arr, struct jk_head *head)
{
struct symbol *sym;
struct gstr res = str_new();
{
struct symbol *sym;
struct gstr res = str_new();
for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
- jump_nb += get_symbol_str(&res, sym, jumps, jump_nb);
+ get_symbol_str(&res, sym, head);
if (!i)
str_append(&res, _("No matches found.\n"));
return res;
if (!i)
str_append(&res, _("No matches found.\n"));
return res;
}
str_printf(help, "%s\n", _(help_text));
if (sym)
}
str_printf(help, "%s\n", _(help_text));
if (sym)
- get_symbol_str(help, sym, NULL, 0);
+ get_symbol_str(help, sym, NULL);