searching for parameters in 'make menuconfig'
Hello,
I added the ability to search for parameters in make menuconfig (find a given parameter's location in the tree).
The patch is for the 2.6.8.1 release.
Thanks,
Signature · 1 line
Yuval Turgeman
scripts/kconfig/mconf.c +97 -1
@@ -28,7 +28,7 @@"<Enter> selects submenus --->. " "Highlighted letters are hotkeys. " "Pressing <Y> includes, <N> excludes, <M> modularizes features. " -"Press <Esc><Esc> to exit, <?> for Help. " +"Press <Esc><Esc> to exit, <?> for Help, </> for Search. " "Legend: [*] built-in [ ] excluded <M> module < > module capable" , radiolist_instructions[] ="Use the arrow keys to navigate this window or "
@@ -102,6 +102,7 @@static void show_helptext (const char *title,const char *text);static void show_help (struct menu *menu);static void show_readme (void ); +static void search_conf (char *);static void cprint_init (void );static int cprint1 (const char *fmt, ...);
@@ -274,6 +275,84 @@return WEXITSTATUS (stat); } +static struct menu *do_search (struct menu *menu,struct symbol *sym) +{ +struct menu *child, *ret; +/* Ignore invisible menus ? +if (!menu_is_visible(menu)) +return NULL; +*/ + +if ( menu->sym ) { +if ( menu->sym->name && !strcmp (menu->sym->name, sym->name )) { +return menu; + } + } +for (child = menu->list; child; child = child->next) { + ret =do_search (child, sym); +if ( ret )return ret; + } +return NULL ; +} + +static void search_conf (char *search_str) +{ +struct symbol *sym; +struct menu *menu[32 ] = {0 }; +int i, j, k; +FILE *fp; +bool hit = false; + + fp =fopen (".search.tmp" ,"w" ); +if ( fp ==NULL ) { +perror ("fopen" ); +return ; + } + for_all_symbols(i, sym) { +if ( sym->name &&strstr (sym->name, search_str) ) { +struct menu *submenu =do_search (&rootmenu, sym); + j =0 ; +while ( submenu ) { + menu[j++] = submenu; + submenu = submenu->parent; + } +if ( j >0 ) { +if ( sym->prop && sym->prop->text ) { +fprintf (fp,"%s (%s)\n" , sym->prop->text, sym->name); + }else { +fprintf (fp,"%s\n" , sym->name); + } + } +for (k = j-2 ; k >0 ; k-- ) { +if ( ! hit ) hit = true; + submenu = menu[k]; +const char *prompt =menu_get_prompt (submenu); +if ( submenu->sym ) { +fprintf (fp," -> %s (%s)\n" , prompt, submenu->sym->name); + }else { +fprintf (fp," -> %s\n" , prompt); + } + } +if ( hit ) +fprintf (fp,"\n" ); + } + } +if ( ! hit ) { +fprintf (fp,"No matches found." ); + } +fclose (fp); +do { +cprint_init (); +cprint ("--title" ); +cprint ("Search Results" ); +cprint ("--textbox" ); +cprint (".search.tmp" ); +cprint ("%d" , rows); +cprint ("%d" , cols); + }while (exec_conf () <0 ); +unlink (".search.tmp" ); +} +static void build_conf (struct menu *menu) {struct symbol *sym;
@@ -463,6 +542,23 @@cprint (" Save Configuration to an Alternate File" ); } stat =exec_conf (); +if ( stat ==26 ) { +if ( !strlen (input_buf) )continue ; +char *search_str = (char *)malloc (sizeof (char )*sizeof (input_buf)); +if ( search_str ==NULL ) { +perror ("malloc" ); +continue ; + } +/* Capitalizing the string */ +for ( i =0 ; input_buf[i]; i++ ) { + search_str[i] =toupper (input_buf[i]); + } + search_str[i] ='\0' ; +/* Searching and displaying all matches */ +search_conf ( search_str ); +free (search_str); +continue ; + }if (stat <0 )continue ;
scripts/lxdialog/menubox.c +10 -0
@@ -276,6 +276,16 @@while (key !=ESC ) { key =wgetch (menu); +if ( key =='/' ) { +int ret =dialog_inputbox ("Search Configuration Parameter" , +"Enter Keyword" , height, width, + (char *)NULL ); +if ( ret ==0 ) + { +fprintf (stderr,"%s" , dialog_input_result); +return 26 ; + } + }if (key <256 &&isalpha (key)) key =tolower (key);
On Mon, 30 Aug 2004 12:28:07 +0300 Yuval Turgeman wrote:
| Hello, | I added the ability to search for parameters in make menuconfig (find | a given parameter's location in the tree). | The patch is for the 2.6.8.1 release.
That's nice. Thanks.
--
~Randy
Quoted 3 lines · Yuval Turgeman
I added the ability to search for parameters in make menuconfig (find
a given parameter's location in the tree).
Well that beats grepping the Kconfig files. Thanks - I just used it.
I extensively reworked your code layout. Please follow Documentation/CodginStyle, and the surrounding code in future.