aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorBenjamin Poirier <bpoirier@suse.de>2012-08-23 14:55:08 -0400
committerMichal Marek <mmarek@suse.cz>2012-09-27 12:09:24 -0400
commit95ac9b3b585d20df116c5bea1511d9eb5758ac81 (patch)
treec106d3003823ecbda997f295c75974385d560b9e /scripts
parent1a374ae6191e9c440f1953a264a94d38173737be (diff)
menuconfig: Assign jump keys per-page instead of globally
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>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/kconfig/expr.h9
-rw-r--r--scripts/kconfig/lkc_proto.h8
-rw-r--r--scripts/kconfig/lxdialog/dialog.h9
-rw-r--r--scripts/kconfig/lxdialog/textbox.c67
-rw-r--r--scripts/kconfig/mconf.c75
-rw-r--r--scripts/kconfig/menu.c54
6 files changed, 149 insertions, 73 deletions
diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
index 52f4246bd34d..bd2e09895553 100644
--- a/scripts/kconfig/expr.h
+++ b/scripts/kconfig/expr.h
@@ -12,6 +12,7 @@ extern "C" {
12 12
13#include <assert.h> 13#include <assert.h>
14#include <stdio.h> 14#include <stdio.h>
15#include <sys/queue.h>
15#ifndef __cplusplus 16#ifndef __cplusplus
16#include <stdbool.h> 17#include <stdbool.h>
17#endif 18#endif
@@ -173,6 +174,14 @@ struct menu {
173#define MENU_CHANGED 0x0001 174#define MENU_CHANGED 0x0001
174#define MENU_ROOT 0x0002 175#define MENU_ROOT 0x0002
175 176
177struct jump_key {
178 CIRCLEQ_ENTRY(jump_key) entries;
179 size_t offset;
180 struct menu *target;
181 int index;
182};
183CIRCLEQ_HEAD(jk_head, jump_key);
184
176#define JUMP_NB 9 185#define JUMP_NB 9
177 186
178extern struct file *file_list; 187extern struct file *file_list;
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
index 946c2cb367f9..1d1c08537f1e 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
@@ -21,10 +21,10 @@ P(menu_get_root_menu,struct menu *,(struct menu *menu));
21P(menu_get_parent_menu,struct menu *,(struct menu *menu)); 21P(menu_get_parent_menu,struct menu *,(struct menu *menu));
22P(menu_has_help,bool,(struct menu *menu)); 22P(menu_has_help,bool,(struct menu *menu));
23P(menu_get_help,const char *,(struct menu *menu)); 23P(menu_get_help,const char *,(struct menu *menu));
24P(get_symbol_str, int, (struct gstr *r, struct symbol *sym, struct menu 24P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct jk_head
25 **jumps, int jump_nb)); 25 *head));
26P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct menu 26P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct jk_head
27 **jumps)); 27 *head));
28P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help)); 28P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
29 29
30/* symbol.c */ 30/* symbol.c */
diff --git a/scripts/kconfig/lxdialog/dialog.h b/scripts/kconfig/lxdialog/dialog.h
index 2a01cdfae5a8..ee17a5264d5b 100644
--- a/scripts/kconfig/lxdialog/dialog.h
+++ b/scripts/kconfig/lxdialog/dialog.h
@@ -210,8 +210,13 @@ int first_alpha(const char *string, const char *exempt);
210int dialog_yesno(const char *title, const char *prompt, int height, int width); 210int dialog_yesno(const char *title, const char *prompt, int height, int width);
211int dialog_msgbox(const char *title, const char *prompt, int height, 211int dialog_msgbox(const char *title, const char *prompt, int height,
212 int width, int pause); 212 int width, int pause);
213int dialog_textbox(const char *title, const char *file, int height, int width, 213
214 int *keys, int *_vscroll, int *_hscroll); 214
215typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void
216 *_data);
217int dialog_textbox(const char *title, char *tbuf, int initial_height,
218 int initial_width, int *keys, int *_vscroll, int *_hscroll,
219 update_text_fn update_text, void *data);
215int dialog_menu(const char *title, const char *prompt, 220int dialog_menu(const char *title, const char *prompt,
216 const void *selected, int *s_scroll); 221 const void *selected, int *s_scroll);
217int dialog_checklist(const char *title, const char *prompt, int height, 222int dialog_checklist(const char *title, const char *prompt, int height,
diff --git a/scripts/kconfig/lxdialog/textbox.c b/scripts/kconfig/lxdialog/textbox.c
index 3b3c5c470bf8..a48bb93e0907 100644
--- a/scripts/kconfig/lxdialog/textbox.c
+++ b/scripts/kconfig/lxdialog/textbox.c
@@ -22,23 +22,25 @@
22#include "dialog.h" 22#include "dialog.h"
23 23
24static void back_lines(int n); 24static void back_lines(int n);
25static void print_page(WINDOW * win, int height, int width); 25static void print_page(WINDOW *win, int height, int width, update_text_fn
26static void print_line(WINDOW * win, int row, int width); 26 update_text, void *data);
27static void print_line(WINDOW *win, int row, int width);
27static char *get_line(void); 28static char *get_line(void);
28static void print_position(WINDOW * win); 29static void print_position(WINDOW * win);
29 30
30static int hscroll; 31static int hscroll;
31static int begin_reached, end_reached, page_length; 32static int begin_reached, end_reached, page_length;
32static const char *buf; 33static char *buf;
33static const char *page; 34static char *page;
34 35
35/* 36/*
36 * refresh window content 37 * refresh window content
37 */ 38 */
38static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw, 39static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
39 int cur_y, int cur_x) 40 int cur_y, int cur_x, update_text_fn update_text,
41 void *data)
40{ 42{
41 print_page(box, boxh, boxw); 43 print_page(box, boxh, boxw, update_text, data);
42 print_position(dialog); 44 print_position(dialog);
43 wmove(dialog, cur_y, cur_x); /* Restore cursor position */ 45 wmove(dialog, cur_y, cur_x); /* Restore cursor position */
44 wrefresh(dialog); 46 wrefresh(dialog);
@@ -49,9 +51,11 @@ static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
49 * Display text from a file in a dialog box. 51 * Display text from a file in a dialog box.
50 * 52 *
51 * keys is a null-terminated array 53 * keys is a null-terminated array
54 * update_text() may not add or remove any '\n' or '\0' in tbuf
52 */ 55 */
53int dialog_textbox(const char *title, const char *tbuf, int initial_height, 56int dialog_textbox(const char *title, char *tbuf, int initial_height,
54 int initial_width, int *keys, int *_vscroll, int *_hscroll) 57 int initial_width, int *keys, int *_vscroll, int *_hscroll,
58 update_text_fn update_text, void *data)
55{ 59{
56 int i, x, y, cur_x, cur_y, key = 0; 60 int i, x, y, cur_x, cur_y, key = 0;
57 int height, width, boxh, boxw; 61 int height, width, boxh, boxw;
@@ -131,7 +135,8 @@ do_resize:
131 135
132 /* Print first page of text */ 136 /* Print first page of text */
133 attr_clear(box, boxh, boxw, dlg.dialog.atr); 137 attr_clear(box, boxh, boxw, dlg.dialog.atr);
134 refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x); 138 refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x, update_text,
139 data);
135 140
136 while (!done) { 141 while (!done) {
137 key = wgetch(dialog); 142 key = wgetch(dialog);
@@ -150,7 +155,8 @@ do_resize:
150 begin_reached = 1; 155 begin_reached = 1;
151 page = buf; 156 page = buf;
152 refresh_text_box(dialog, box, boxh, boxw, 157 refresh_text_box(dialog, box, boxh, boxw,
153 cur_y, cur_x); 158 cur_y, cur_x, update_text,
159 data);
154 } 160 }
155 break; 161 break;
156 case 'G': /* Last page */ 162 case 'G': /* Last page */
@@ -160,8 +166,8 @@ do_resize:
160 /* point to last char in buf */ 166 /* point to last char in buf */
161 page = buf + strlen(buf); 167 page = buf + strlen(buf);
162 back_lines(boxh); 168 back_lines(boxh);
163 refresh_text_box(dialog, box, boxh, boxw, 169 refresh_text_box(dialog, box, boxh, boxw, cur_y,
164 cur_y, cur_x); 170 cur_x, update_text, data);
165 break; 171 break;
166 case 'K': /* Previous line */ 172 case 'K': /* Previous line */
167 case 'k': 173 case 'k':
@@ -171,7 +177,7 @@ do_resize:
171 177
172 back_lines(page_length + 1); 178 back_lines(page_length + 1);
173 refresh_text_box(dialog, box, boxh, boxw, cur_y, 179 refresh_text_box(dialog, box, boxh, boxw, cur_y,
174 cur_x); 180 cur_x, update_text, data);
175 break; 181 break;
176 case 'B': /* Previous page */ 182 case 'B': /* Previous page */
177 case 'b': 183 case 'b':
@@ -180,8 +186,8 @@ do_resize:
180 if (begin_reached) 186 if (begin_reached)
181 break; 187 break;
182 back_lines(page_length + boxh); 188 back_lines(page_length + boxh);
183 refresh_text_box(dialog, box, boxh, boxw, 189 refresh_text_box(dialog, box, boxh, boxw, cur_y,
184 cur_y, cur_x); 190 cur_x, update_text, data);
185 break; 191 break;
186 case 'J': /* Next line */ 192 case 'J': /* Next line */
187 case 'j': 193 case 'j':
@@ -191,7 +197,7 @@ do_resize:
191 197
192 back_lines(page_length - 1); 198 back_lines(page_length - 1);
193 refresh_text_box(dialog, box, boxh, boxw, cur_y, 199 refresh_text_box(dialog, box, boxh, boxw, cur_y,
194 cur_x); 200 cur_x, update_text, data);
195 break; 201 break;
196 case KEY_NPAGE: /* Next page */ 202 case KEY_NPAGE: /* Next page */
197 case ' ': 203 case ' ':
@@ -200,8 +206,8 @@ do_resize:
200 break; 206 break;
201 207
202 begin_reached = 0; 208 begin_reached = 0;
203 refresh_text_box(dialog, box, boxh, boxw, 209 refresh_text_box(dialog, box, boxh, boxw, cur_y,
204 cur_y, cur_x); 210 cur_x, update_text, data);
205 break; 211 break;
206 case '0': /* Beginning of line */ 212 case '0': /* Beginning of line */
207 case 'H': /* Scroll left */ 213 case 'H': /* Scroll left */
@@ -216,8 +222,8 @@ do_resize:
216 hscroll--; 222 hscroll--;
217 /* Reprint current page to scroll horizontally */ 223 /* Reprint current page to scroll horizontally */
218 back_lines(page_length); 224 back_lines(page_length);
219 refresh_text_box(dialog, box, boxh, boxw, 225 refresh_text_box(dialog, box, boxh, boxw, cur_y,
220 cur_y, cur_x); 226 cur_x, update_text, data);
221 break; 227 break;
222 case 'L': /* Scroll right */ 228 case 'L': /* Scroll right */
223 case 'l': 229 case 'l':
@@ -227,8 +233,8 @@ do_resize:
227 hscroll++; 233 hscroll++;
228 /* Reprint current page to scroll horizontally */ 234 /* Reprint current page to scroll horizontally */
229 back_lines(page_length); 235 back_lines(page_length);
230 refresh_text_box(dialog, box, boxh, boxw, 236 refresh_text_box(dialog, box, boxh, boxw, cur_y,
231 cur_y, cur_x); 237 cur_x, update_text, data);
232 break; 238 break;
233 case KEY_ESC: 239 case KEY_ESC:
234 if (on_key_esc(dialog) == KEY_ESC) 240 if (on_key_esc(dialog) == KEY_ESC)
@@ -301,12 +307,23 @@ static void back_lines(int n)
301} 307}
302 308
303/* 309/*
304 * Print a new page of text. Called by dialog_textbox(). 310 * Print a new page of text.
305 */ 311 */
306static void print_page(WINDOW * win, int height, int width) 312static void print_page(WINDOW *win, int height, int width, update_text_fn
313 update_text, void *data)
307{ 314{
308 int i, passed_end = 0; 315 int i, passed_end = 0;
309 316
317 if (update_text) {
318 char *end;
319
320 for (i = 0; i < height; i++)
321 get_line();
322 end = page;
323 back_lines(height);
324 update_text(buf, page - buf, end - buf, data);
325 }
326
310 page_length = 0; 327 page_length = 0;
311 for (i = 0; i < height; i++) { 328 for (i = 0; i < height; i++) {
312 print_line(win, i, width); 329 print_line(win, i, width);
@@ -319,7 +336,7 @@ static void print_page(WINDOW * win, int height, int width)
319} 336}
320 337
321/* 338/*
322 * Print a new line of text. Called by dialog_textbox() and print_page(). 339 * Print a new line of text.
323 */ 340 */
324static void print_line(WINDOW * win, int row, int width) 341static void print_line(WINDOW * win, int row, int width)
325{ 342{
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 6f409745b373..48f67448af7b 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -286,8 +286,9 @@ static void conf_choice(struct menu *menu);
286static void conf_string(struct menu *menu); 286static void conf_string(struct menu *menu);
287static void conf_load(void); 287static void conf_load(void);
288static void conf_save(void); 288static void conf_save(void);
289static int show_textbox_ext(const char *title, const char *text, int r, int c, 289static int show_textbox_ext(const char *title, char *text, int r, int c,
290 int *keys, int *vscroll, int *hscroll); 290 int *keys, int *vscroll, int *hscroll,
291 update_text_fn update_text, void *data);
291static void show_textbox(const char *title, const char *text, int r, int c); 292static void show_textbox(const char *title, const char *text, int r, int c);
292static void show_helptext(const char *title, const char *text); 293static void show_helptext(const char *title, const char *text);
293static void show_help(struct menu *menu); 294static void show_help(struct menu *menu);
@@ -310,6 +311,39 @@ static void set_config_filename(const char *config_filename)
310} 311}
311 312
312 313
314struct search_data {
315 struct jk_head *head;
316 struct menu **targets;
317 int *keys;
318};
319
320static void update_text(char *buf, size_t start, size_t end, void *_data)
321{
322 struct search_data *data = _data;
323 struct jump_key *pos;
324 int k = 0;
325
326 CIRCLEQ_FOREACH(pos, data->head, entries) {
327 if (pos->offset >= start && pos->offset < end) {
328 char header[4];
329
330 if (k < JUMP_NB) {
331 int key = '0' + (pos->index % JUMP_NB) + 1;
332
333 sprintf(header, "(%c)", key);
334 data->keys[k] = key;
335 data->targets[k] = pos->target;
336 k++;
337 } else {
338 sprintf(header, " ");
339 }
340
341 memcpy(buf + pos->offset, header, sizeof(header) - 1);
342 }
343 }
344 data->keys[k] = 0;
345}
346
313static void search_conf(void) 347static void search_conf(void)
314{ 348{
315 struct symbol **sym_arr; 349 struct symbol **sym_arr;
@@ -341,18 +375,24 @@ again:
341 375
342 sym_arr = sym_re_search(dialog_input); 376 sym_arr = sym_re_search(dialog_input);
343 do { 377 do {
344 struct menu *jumps[JUMP_NB] = {0}; 378 struct jk_head head = CIRCLEQ_HEAD_INITIALIZER(head);
345 int keys[JUMP_NB + 1] = {0}, i; 379 struct menu *targets[JUMP_NB];
346 380 int keys[JUMP_NB + 1], i;
347 res = get_relations_str(sym_arr, jumps); 381 struct search_data data = {
348 for (i = 0; i < JUMP_NB && jumps[i]; i++) 382 .head = &head,
349 keys[i] = '1' + i; 383 .targets = targets,
350 dres = show_textbox_ext(_("Search Results"), str_get(&res), 0, 384 .keys = keys,
351 0, keys, &vscroll, &hscroll); 385 };
386
387 res = get_relations_str(sym_arr, &head);
388 dres = show_textbox_ext(_("Search Results"), (char *)
389 str_get(&res), 0, 0, keys, &vscroll,
390 &hscroll, &update_text, (void *)
391 &data);
352 again = false; 392 again = false;
353 for (i = 0; i < JUMP_NB && jumps[i]; i++) 393 for (i = 0; i < JUMP_NB && keys[i]; i++)
354 if (dres == keys[i]) { 394 if (dres == keys[i]) {
355 conf(jumps[i]->parent, jumps[i]); 395 conf(targets[i]->parent, targets[i]);
356 again = true; 396 again = true;
357 } 397 }
358 str_free(&res); 398 str_free(&res);
@@ -642,16 +682,19 @@ static void conf(struct menu *menu, struct menu *active_menu)
642 } 682 }
643} 683}
644 684
645static int show_textbox_ext(const char *title, const char *text, int r, int c, 685static int show_textbox_ext(const char *title, char *text, int r, int c, int
646 int *keys, int *vscroll, int *hscroll) 686 *keys, int *vscroll, int *hscroll, update_text_fn
687 update_text, void *data)
647{ 688{
648 dialog_clear(); 689 dialog_clear();
649 return dialog_textbox(title, text, r, c, keys, vscroll, hscroll); 690 return dialog_textbox(title, text, r, c, keys, vscroll, hscroll,
691 update_text, data);
650} 692}
651 693
652static void show_textbox(const char *title, const char *text, int r, int c) 694static void show_textbox(const char *title, const char *text, int r, int c)
653{ 695{
654 show_textbox_ext(title, text, r, c, (int []) {0}, NULL, NULL); 696 show_textbox_ext(title, (char *) text, r, c, (int []) {0}, NULL, NULL,
697 NULL, NULL);
655} 698}
656 699
657static void show_helptext(const char *title, const char *text) 700static void show_helptext(const char *title, const char *text)
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index a5241859326a..a3cade659f89 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -507,12 +507,12 @@ const char *menu_get_help(struct menu *menu)
507 return ""; 507 return "";
508} 508}
509 509
510static int get_prompt_str(struct gstr *r, struct property *prop, struct menu 510static void get_prompt_str(struct gstr *r, struct property *prop,
511 **jumps, int jump_nb) 511 struct jk_head *head)
512{ 512{
513 int i, j; 513 int i, j;
514 char header[4];
515 struct menu *submenu[8], *menu, *location = NULL; 514 struct menu *submenu[8], *menu, *location = NULL;
515 struct jump_key *jump;
516 516
517 str_printf(r, _("Prompt: %s\n"), _(prop->text)); 517 str_printf(r, _("Prompt: %s\n"), _(prop->text));
518 str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name, 518 str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name,
@@ -530,7 +530,9 @@ static int get_prompt_str(struct gstr *r, struct property *prop, struct menu
530 if (location == NULL && accessible) 530 if (location == NULL && accessible)
531 location = menu; 531 location = menu;
532 } 532 }
533 if (jumps && jump_nb < JUMP_NB && location) { 533 if (head && location) {
534 jump = malloc(sizeof(struct jump_key));
535
534 if (menu_is_visible(prop->menu)) { 536 if (menu_is_visible(prop->menu)) {
535 /* 537 /*
536 * There is not enough room to put the hint at the 538 * There is not enough room to put the hint at the
@@ -538,19 +540,26 @@ static int get_prompt_str(struct gstr *r, struct property *prop, struct menu
538 * last "Location" line even when it would belong on 540 * last "Location" line even when it would belong on
539 * the former. 541 * the former.
540 */ 542 */
541 jumps[jump_nb] = prop->menu; 543 jump->target = prop->menu;
542 } else 544 } else
543 jumps[jump_nb] = location; 545 jump->target = location;
544 snprintf(header, 4, "(%d)", jump_nb + 1); 546
545 } else 547 if (CIRCLEQ_EMPTY(head))
546 location = NULL; 548 jump->index = 0;
549 else
550 jump->index = CIRCLEQ_LAST(head)->index + 1;
551
552 CIRCLEQ_INSERT_TAIL(head, jump, entries);
553 }
547 554
548 if (i > 0) { 555 if (i > 0) {
549 str_printf(r, _(" Location:\n")); 556 str_printf(r, _(" Location:\n"));
550 for (j = 1; --i >= 0; j += 2) { 557 for (j = 4; --i >= 0; j += 2) {
551 menu = submenu[i]; 558 menu = submenu[i];
552 str_printf(r, "%s%*c-> %s", menu == location ? header 559 if (head && location && menu == location)
553 : " ", j, ' ', _(menu_get_prompt(menu))); 560 jump->offset = r->len - 1;
561 str_printf(r, "%*c-> %s", j, ' ',
562 _(menu_get_prompt(menu)));
554 if (menu->sym) { 563 if (menu->sym) {
555 str_printf(r, " (%s [=%s])", menu->sym->name ? 564 str_printf(r, " (%s [=%s])", menu->sym->name ?
556 menu->sym->name : _("<choice>"), 565 menu->sym->name : _("<choice>"),
@@ -559,20 +568,15 @@ static int get_prompt_str(struct gstr *r, struct property *prop, struct menu
559 str_append(r, "\n"); 568 str_append(r, "\n");
560 } 569 }
561 } 570 }
562
563 return location ? 1 : 0;
564} 571}
565 572
566/* 573/*
567 * jumps is optional and may be NULL 574 * head is optional and may be NULL
568 * returns the number of jumps inserted
569 */ 575 */
570int get_symbol_str(struct gstr *r, struct symbol *sym, struct menu **jumps, 576void get_symbol_str(struct gstr *r, struct symbol *sym, struct jk_head *head)
571 int jump_nb)
572{ 577{
573 bool hit; 578 bool hit;
574 struct property *prop; 579 struct property *prop;
575 int i = 0;
576 580
577 if (sym && sym->name) { 581 if (sym && sym->name) {
578 str_printf(r, "Symbol: %s [=%s]\n", sym->name, 582 str_printf(r, "Symbol: %s [=%s]\n", sym->name,
@@ -588,7 +592,7 @@ int get_symbol_str(struct gstr *r, struct symbol *sym, struct menu **jumps,
588 } 592 }
589 } 593 }
590 for_all_prompts(sym, prop) 594 for_all_prompts(sym, prop)
591 i += get_prompt_str(r, prop, jumps, jump_nb + i); 595 get_prompt_str(r, prop, head);
592 hit = false; 596 hit = false;
593 for_all_properties(sym, prop, P_SELECT) { 597 for_all_properties(sym, prop, P_SELECT) {
594 if (!hit) { 598 if (!hit) {
@@ -606,18 +610,16 @@ int get_symbol_str(struct gstr *r, struct symbol *sym, struct menu **jumps,
606 str_append(r, "\n"); 610 str_append(r, "\n");
607 } 611 }
608 str_append(r, "\n\n"); 612 str_append(r, "\n\n");
609
610 return i;
611} 613}
612 614
613struct gstr get_relations_str(struct symbol **sym_arr, struct menu **jumps) 615struct gstr get_relations_str(struct symbol **sym_arr, struct jk_head *head)
614{ 616{
615 struct symbol *sym; 617 struct symbol *sym;
616 struct gstr res = str_new(); 618 struct gstr res = str_new();
617 int i, jump_nb = 0; 619 int i;
618 620
619 for (i = 0; sym_arr && (sym = sym_arr[i]); i++) 621 for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
620 jump_nb += get_symbol_str(&res, sym, jumps, jump_nb); 622 get_symbol_str(&res, sym, head);
621 if (!i) 623 if (!i)
622 str_append(&res, _("No matches found.\n")); 624 str_append(&res, _("No matches found.\n"));
623 return res; 625 return res;
@@ -636,5 +638,5 @@ void menu_get_ext_help(struct menu *menu, struct gstr *help)
636 } 638 }
637 str_printf(help, "%s\n", _(help_text)); 639 str_printf(help, "%s\n", _(help_text));
638 if (sym) 640 if (sym)
639 get_symbol_str(help, sym, NULL, 0); 641 get_symbol_str(help, sym, NULL);
640} 642}