diff mbox

[v3] mconf: Add Save button

Message ID 20121008050513.GA22078@udknight (mailing list archive)
State New, archived
Headers show

Commit Message

wang yanqing Oct. 8, 2012, 5:05 a.m. UTC
mconf make me annoying I have to make menuconfig && exit to save
the config when I am tuning .config time by time, it is even
worse I have to search down to my desire submenu time by time.
So I add "Save" button to save our time. With "Save" button,
I can use CRTL-Z after save config, and then use "%" or fg to
resume menuconfig and go on tuning.

v2: Rewrite the most code to make it more correct
v3: Fix the behavior of conf_message_callback when exit.

Signed-off-by: Wang YanQing <udknight@gmail.com>
---
 scripts/kconfig/lxdialog/menubox.c | 17 +++++++-------
 scripts/kconfig/mconf.c            | 47 ++++++++++++++++++++++++++++++++------
 2 files changed, 49 insertions(+), 15 deletions(-)

Comments

Borislav Petkov Oct. 8, 2012, 6:03 a.m. UTC | #1
On Mon, Oct 08, 2012 at 01:05:14PM +0800, Wang YanQing wrote:
> mconf make me annoying I have to make menuconfig && exit to save the
> config when I am tuning .config time by time, it is even worse I have
> to search down to my desire submenu time by time.

Well, there are a bunch of patches from Benjamin Poirier adding the
possibility to jump to search results and you could use them to go to
your desired submenu.

They're not upstream yet, AFAICT, although Michal applied them.

> So I add "Save" button to save our time. With "Save" button, I can use
> CRTL-Z after save config, and then use "%" or fg to resume menuconfig
> and go on tuning.

Ok, IIUC, when you put menuconfig in the background, edit .config by
hand in the shell and then do 'fg', you need to reload the edited
.config back otherwise you lose your changes you just did by hand.

And generally speaking, why exactly do you need to edit .config by hand,
and, at same time, do it over menuconfig? IMO, with Benjamin's patches,
you don't need to do that anymore, right?

Thanks.
wang yanqing Oct. 8, 2012, 7:22 a.m. UTC | #2
On Mon, Oct 08, 2012 at 08:03:40AM +0200, Borislav Petkov wrote:
> Well, there are a bunch of patches from Benjamin Poirier adding the
> possibility to jump to search results and you could use them to go to
> your desired submenu.
First there are two ways to save the .config in menuconfig
1:Exit menuconfig with choice the "Yes" to save .config
2:go to top menu and use the "Save an alternate Configuration File" to save .config

No matter which way you choice, it is slow and annoying to find the origin
submenu where you have interest.The bunch of patches from Benjamin make it
a little annoying, but not ignore it.Just image the situation that you have 
to exit menuconfig then "make menuconfig" and search down the submenu time 
by time, it is really annoying.

> > So I add "Save" button to save our time. With "Save" button, I can use
> > CRTL-Z after save config, and then use "%" or fg to resume menuconfig
> > and go on tuning.
> 
> Ok, IIUC, when you put menuconfig in the background, edit .config by
> hand in the shell and then do 'fg', you need to reload the edited
> .config back otherwise you lose your changes you just did by hand.
> 
> And generally speaking, why exactly do you need to edit .config by hand,
> and, at same time, do it over menuconfig? IMO, with Benjamin's patches,
> you don't need to do that anymore, right?
> 
> Thanks.
It is not the first time to make me trouble with representation by my poor English,
sorry for that.I hope the below words show the really meaning that I want to give you.

With one terminal, I can do:
1: make menuconfig
2: ajust and use "Save" button to save .config
3: use CRTL-Z(konsole) to "menuconfig" run in background
3: make && test kernel
4: fg or "%1" to resume the menuconfig

With two terminal, I can do:
in first terminal
1: make menuconfig 
2: ajust and use "Save" button to save .config

in second terminal
3: make && test kernel

go back the first terminal and go on tuning.

Now, you can see what the "Save" button can do,
it make there is no "exit menuconfig" or go to
the top menu when you want to save .config in 
menuconfig

Thanks!
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Borislav Petkov Oct. 8, 2012, 8:28 a.m. UTC | #3
On Mon, Oct 08, 2012 at 03:22:49PM +0800, Wang YanQing wrote:
> With one terminal, I can do:
> 1: make menuconfig
> 2: ajust and use "Save" button to save .config
> 3: use CRTL-Z(konsole) to "menuconfig" run in background
> 3: make && test kernel
> 4: fg or "%1" to resume the menuconfig

I understand all that, but why do you think your usecase should be
in the kernel? I still fail to see its relevance for the majority of
people.

AFAICT, this is only if you want to experiment with different options
but you're better off replicating your .config with the couple options
instead of adding a save button.

IOW, this would only make a distant sense if you were playing with all
kconfig options but why would you want to do that?

Thanks.
wang yanqing Oct. 8, 2012, 8:45 a.m. UTC | #4
On Mon, Oct 08, 2012 at 10:28:32AM +0200, Borislav Petkov wrote:
> On Mon, Oct 08, 2012 at 03:22:49PM +0800, Wang YanQing wrote:
> > With one terminal, I can do:
> > 1: make menuconfig
> > 2: ajust and use "Save" button to save .config
> > 3: use CRTL-Z(konsole) to "menuconfig" run in background
> > 3: make && test kernel
> > 4: fg or "%1" to resume the menuconfig
> 
> I understand all that, but why do you think your usecase should be
> in the kernel? I still fail to see its relevance for the majority of
> people.
No, I don't think it is only my usecase. Use fg,CRTL-Z is very normal
in terminal or in vt(console), without save button you have to exit 
menuconfig every time you want to save .config.

By the way,just a quick test, qconfig, xconfig, nconfig all have the
Save button, why do them exist if we follow your opinion?

Thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Borislav Petkov Oct. 8, 2012, 10:25 a.m. UTC | #5
On Mon, Oct 08, 2012 at 04:45:44PM +0800, Wang YanQing wrote:
> By the way,just a quick test, qconfig, xconfig, nconfig all have the
> Save button, why do them exist if we follow your opinion?

Because someone added them thinking it would be cool to have them, what
do I know...

In any case, I still fail to see a real value in this considering the
use case, that's all. Unless someone proves me wrong with a better
example that this...

Thanks.
diff mbox

Patch

diff --git a/scripts/kconfig/lxdialog/menubox.c b/scripts/kconfig/lxdialog/menubox.c
index 1d60473..f71f112 100644
--- a/scripts/kconfig/lxdialog/menubox.c
+++ b/scripts/kconfig/lxdialog/menubox.c
@@ -26,7 +26,7 @@ 
  *
  *    *)  A bugfix for the Page-Down problem
  *
- *    *)  Formerly when I used Page Down and Page Up, the cursor would be set 
+ *    *)  Formerly when I used Page Down and Page Up, the cursor would be set
  *        to the first position in the menu box.  Now lxdialog is a bit
  *        smarter and works more like other menu systems (just have a look at
  *        it).
@@ -160,6 +160,7 @@  static void print_buttons(WINDOW * win, int height, int width, int selected)
 	print_button(win, gettext("Select"), y, x, selected == 0);
 	print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
 	print_button(win, gettext(" Help "), y, x + 24, selected == 2);
+	print_button(win, gettext(" Save "), y, x + 36, selected == 3);
 
 	wmove(win, y, x + 1 + 12 * selected);
 	wrefresh(win);
@@ -372,7 +373,7 @@  do_resize:
 		case TAB:
 		case KEY_RIGHT:
 			button = ((key == KEY_LEFT ? --button : ++button) < 0)
-			    ? 2 : (button > 2 ? 0 : button);
+			    ? 3 : (button > 3 ? 0 : button);
 
 			print_buttons(dialog, height, width, button);
 			wrefresh(menu);
@@ -399,17 +400,17 @@  do_resize:
 				return 2;
 			case 's':
 			case 'y':
-				return 3;
-			case 'n':
 				return 4;
-			case 'm':
+			case 'n':
 				return 5;
-			case ' ':
+			case 'm':
 				return 6;
-			case '/':
+			case ' ':
 				return 7;
-			case 'z':
+			case '/':
 				return 8;
+			case 'z':
+				return 9;
 			case '\n':
 				return button;
 			}
diff --git a/scripts/kconfig/mconf.c b/scripts/kconfig/mconf.c
index f584a28..72c4ae6 100644
--- a/scripts/kconfig/mconf.c
+++ b/scripts/kconfig/mconf.c
@@ -274,6 +274,7 @@  static int child_count;
 static int single_menu_mode;
 static int show_all_options;
 static int saved_x, saved_y;
+static int save_and_exit;
 
 static void conf(struct menu *menu);
 static void conf_choice(struct menu *menu);
@@ -521,6 +522,7 @@  static void conf(struct menu *menu)
 	struct symbol *sym;
 	struct menu *active_menu = NULL;
 	int res;
+	int yesno;
 	int s_scroll = 0;
 
 	while (1) {
@@ -588,6 +590,25 @@  static void conf(struct menu *menu)
 				show_helptext(_("README"), _(mconf_readme));
 			break;
 		case 3:
+			if (!conf_get_changed()) {
+				break;
+			}
+
+			yesno = dialog_yesno(NULL,
+					_("Do you wish to save your "
+						"new configuration?\n"
+						"<ESC><ESC> to continue."),
+					6, 60);
+			if (yesno == 0) {
+				if (conf_write(filename)) {
+					show_textbox(NULL,
+						_("Error while writing of the configuration.\n"
+							"Your configuration changes were NOT saved."),
+						6,60);
+				}
+			}
+			break;
+		case 4:
 			if (item_is_tag('t')) {
 				if (sym_set_tristate_value(sym, yes))
 					break;
@@ -595,24 +616,24 @@  static void conf(struct menu *menu)
 					show_textbox(NULL, setmod_text, 6, 74);
 			}
 			break;
-		case 4:
+		case 5:
 			if (item_is_tag('t'))
 				sym_set_tristate_value(sym, no);
 			break;
-		case 5:
+		case 6:
 			if (item_is_tag('t'))
 				sym_set_tristate_value(sym, mod);
 			break;
-		case 6:
+		case 7:
 			if (item_is_tag('t'))
 				sym_toggle_tristate_value(sym);
 			else if (item_is_tag('m'))
 				conf(submenu);
 			break;
-		case 7:
+		case 8:
 			search_conf();
 			break;
-		case 8:
+		case 9:
 			show_all_options = !show_all_options;
 			break;
 		}
@@ -630,6 +651,17 @@  static void show_helptext(const char *title, const char *text)
 	show_textbox(title, text, 0, 0);
 }
 
+static void conf_message_callback(const char *fmt, va_list ap)
+{
+	char buf[1024];
+
+	vsnprintf(buf, sizeof(buf), fmt, ap);
+	if (save_and_exit)
+		printf("%s", buf);
+	else
+		show_textbox(NULL, buf, 6, 60);
+}
+
 static void show_help(struct menu *menu)
 {
 	struct gstr help = str_new();
@@ -797,7 +829,7 @@  static void conf_save(void)
 static int handle_exit(void)
 {
 	int res;
-
+	save_and_exit = 1;
 	dialog_clear();
 	if (conf_get_changed())
 		res = dialog_yesno(NULL,
@@ -872,11 +904,12 @@  int main(int ac, char **av)
 	}
 
 	set_config_filename(conf_get_configname());
+	conf_set_message_callback(conf_message_callback);
 	do {
+		save_and_exit = 0;
 		conf(&rootmenu);
 		res = handle_exit();
 	} while (res == KEY_ESC);
 
 	return res;
 }
-