aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorWang YanQing <udknight@gmail.com>2012-12-18 20:50:58 -0500
committerYann E. MORIN <yann.morin.1998@free.fr>2013-01-15 18:00:34 -0500
commit6364fd0cb1e4c7f72b974613e0cf5744ae4d2cb2 (patch)
tree82ddce27af13bb046b75b89470bb505908affb2b /scripts
parent87727d453b4677a21312712c8a4bb5dcd81a1ebe (diff)
menuconfig: Add Save/Load buttons
If menuconfig have Save/Load button like alternative .config editors, xconfig, nconfig, etc.We will have a obvious benefit when use menuconfig just like when we use others, we can Save/Load our .config quickly and conveniently. This patch add the Save/Load button for menuconfig. [remove trailing space while at it for below line: "*) Formerly when I used Page Down and Page Up, the cursor would be set" ] Changes: V1-V2: 1:use PATH_MAX instead of hard code suggested by Yann E. MORIN 2:drop the spurious empty-line removal suggested by Yann E. MORIN V2-V3: 1:ajust buttons position well centered reported by Yann E. MORIN Signed-off-by: Wang YanQing <udknight@gmail.com> Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Tested-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/kconfig/lxdialog/menubox.c20
-rw-r--r--scripts/kconfig/mconf.c30
2 files changed, 36 insertions, 14 deletions
diff --git a/scripts/kconfig/lxdialog/menubox.c b/scripts/kconfig/lxdialog/menubox.c
index 1d604738fa13..48d382e7e374 100644
--- a/scripts/kconfig/lxdialog/menubox.c
+++ b/scripts/kconfig/lxdialog/menubox.c
@@ -26,7 +26,7 @@
26 * 26 *
27 * *) A bugfix for the Page-Down problem 27 * *) A bugfix for the Page-Down problem
28 * 28 *
29 * *) Formerly when I used Page Down and Page Up, the cursor would be set 29 * *) Formerly when I used Page Down and Page Up, the cursor would be set
30 * to the first position in the menu box. Now lxdialog is a bit 30 * to the first position in the menu box. Now lxdialog is a bit
31 * smarter and works more like other menu systems (just have a look at 31 * smarter and works more like other menu systems (just have a look at
32 * it). 32 * it).
@@ -154,12 +154,14 @@ static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x,
154 */ 154 */
155static void print_buttons(WINDOW * win, int height, int width, int selected) 155static void print_buttons(WINDOW * win, int height, int width, int selected)
156{ 156{
157 int x = width / 2 - 16; 157 int x = width / 2 - 28;
158 int y = height - 2; 158 int y = height - 2;
159 159
160 print_button(win, gettext("Select"), y, x, selected == 0); 160 print_button(win, gettext("Select"), y, x, selected == 0);
161 print_button(win, gettext(" Exit "), y, x + 12, selected == 1); 161 print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
162 print_button(win, gettext(" Help "), y, x + 24, selected == 2); 162 print_button(win, gettext(" Help "), y, x + 24, selected == 2);
163 print_button(win, gettext(" Save "), y, x + 36, selected == 3);
164 print_button(win, gettext(" Load "), y, x + 48, selected == 4);
163 165
164 wmove(win, y, x + 1 + 12 * selected); 166 wmove(win, y, x + 1 + 12 * selected);
165 wrefresh(win); 167 wrefresh(win);
@@ -372,7 +374,7 @@ do_resize:
372 case TAB: 374 case TAB:
373 case KEY_RIGHT: 375 case KEY_RIGHT:
374 button = ((key == KEY_LEFT ? --button : ++button) < 0) 376 button = ((key == KEY_LEFT ? --button : ++button) < 0)
375 ? 2 : (button > 2 ? 0 : button); 377 ? 4 : (button > 4 ? 0 : button);
376 378
377 print_buttons(dialog, height, width, button); 379 print_buttons(dialog, height, width, button);
378 wrefresh(menu); 380 wrefresh(menu);
@@ -399,17 +401,17 @@ do_resize:
399 return 2; 401 return 2;
400 case 's': 402 case 's':
401 case 'y': 403 case 'y':
402 return 3; 404 return 5;
403 case 'n': 405 case 'n':
404 return 4; 406 return 6;
405 case 'm': 407 case 'm':
406 return 5; 408 return 7;
407 case ' ': 409 case ' ':
408 return 6; 410 return 8;
409 case '/': 411 case '/':
410 return 7; 412 return 9;
411 case 'z': 413 case 'z':
412 return 8; 414 return 10;
413 case '\n': 415 case '\n':
414 return button; 416 return button;
415 } 417 }
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index 5f29618d1845..88e806857dc3 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -280,6 +280,7 @@ static struct menu *current_menu;
280static int child_count; 280static int child_count;
281static int single_menu_mode; 281static int single_menu_mode;
282static int show_all_options; 282static int show_all_options;
283static int save_and_exit;
283 284
284static void conf(struct menu *menu, struct menu *active_menu); 285static void conf(struct menu *menu, struct menu *active_menu);
285static void conf_choice(struct menu *menu); 286static void conf_choice(struct menu *menu);
@@ -657,6 +658,12 @@ static void conf(struct menu *menu, struct menu *active_menu)
657 show_helptext(_("README"), _(mconf_readme)); 658 show_helptext(_("README"), _(mconf_readme));
658 break; 659 break;
659 case 3: 660 case 3:
661 conf_save();
662 break;
663 case 4:
664 conf_load();
665 break;
666 case 5:
660 if (item_is_tag('t')) { 667 if (item_is_tag('t')) {
661 if (sym_set_tristate_value(sym, yes)) 668 if (sym_set_tristate_value(sym, yes))
662 break; 669 break;
@@ -664,24 +671,24 @@ static void conf(struct menu *menu, struct menu *active_menu)
664 show_textbox(NULL, setmod_text, 6, 74); 671 show_textbox(NULL, setmod_text, 6, 74);
665 } 672 }
666 break; 673 break;
667 case 4: 674 case 6:
668 if (item_is_tag('t')) 675 if (item_is_tag('t'))
669 sym_set_tristate_value(sym, no); 676 sym_set_tristate_value(sym, no);
670 break; 677 break;
671 case 5: 678 case 7:
672 if (item_is_tag('t')) 679 if (item_is_tag('t'))
673 sym_set_tristate_value(sym, mod); 680 sym_set_tristate_value(sym, mod);
674 break; 681 break;
675 case 6: 682 case 8:
676 if (item_is_tag('t')) 683 if (item_is_tag('t'))
677 sym_toggle_tristate_value(sym); 684 sym_toggle_tristate_value(sym);
678 else if (item_is_tag('m')) 685 else if (item_is_tag('m'))
679 conf(submenu, NULL); 686 conf(submenu, NULL);
680 break; 687 break;
681 case 7: 688 case 9:
682 search_conf(); 689 search_conf();
683 break; 690 break;
684 case 8: 691 case 10:
685 show_all_options = !show_all_options; 692 show_all_options = !show_all_options;
686 break; 693 break;
687 } 694 }
@@ -708,6 +715,17 @@ static void show_helptext(const char *title, const char *text)
708 show_textbox(title, text, 0, 0); 715 show_textbox(title, text, 0, 0);
709} 716}
710 717
718static void conf_message_callback(const char *fmt, va_list ap)
719{
720 char buf[PATH_MAX+1];
721
722 vsnprintf(buf, sizeof(buf), fmt, ap);
723 if (save_and_exit)
724 printf("%s", buf);
725 else
726 show_textbox(NULL, buf, 6, 60);
727}
728
711static void show_help(struct menu *menu) 729static void show_help(struct menu *menu)
712{ 730{
713 struct gstr help = str_new(); 731 struct gstr help = str_new();
@@ -876,6 +894,7 @@ static int handle_exit(void)
876{ 894{
877 int res; 895 int res;
878 896
897 save_and_exit = 1;
879 dialog_clear(); 898 dialog_clear();
880 if (conf_get_changed()) 899 if (conf_get_changed())
881 res = dialog_yesno(NULL, 900 res = dialog_yesno(NULL,
@@ -947,6 +966,7 @@ int main(int ac, char **av)
947 } 966 }
948 967
949 set_config_filename(conf_get_configname()); 968 set_config_filename(conf_get_configname());
969 conf_set_message_callback(conf_message_callback);
950 do { 970 do {
951 conf(&rootmenu, NULL); 971 conf(&rootmenu, NULL);
952 res = handle_exit(); 972 res = handle_exit();