]> git.ozlabs.org Git - petitboot/blobdiff - ui/ncurses/nc-cui.c
ui/ncurses: Spawn shell in exit handler
[petitboot] / ui / ncurses / nc-cui.c
index 46b783972dbda3a2b9d97621be8425759295620c..6ced24c3857aec9302ef6f75a712e966e2e543f0 100644 (file)
@@ -151,7 +151,30 @@ void cui_resize(struct cui *cui)
 
 void cui_on_exit(struct pmenu *menu)
 {
-       cui_abort(cui_from_pmenu(menu));
+       struct cui *cui = cui_from_pmenu(menu);
+       char *sh_cmd;
+
+       sh_cmd = talloc_asprintf(cui,
+               "echo \"Exiting petitboot. Type 'exit' to return.\";\
+                echo \"You may run 'pb-sos' to gather diagnostic data\";\
+                %s", pb_system_apps.sh);
+
+       if (!sh_cmd) {
+               pb_log("Failed to allocate shell arguments\n");
+               return;
+       }
+
+       const char *argv[] = {
+               pb_system_apps.sh,
+               "-c",
+               sh_cmd,
+               NULL
+       };
+
+       cui_run_cmd(cui, argv);
+
+       nc_scr_status_printf(cui->current, _("Returned from shell"));
+       talloc_free(sh_cmd);
 }
 
 /**
@@ -173,6 +196,10 @@ int cui_run_cmd(struct cui *cui, const char **cmd_argv)
 
        nc_scr_status_printf(cui->current, _("Running %s..."), cmd_argv[0]);
 
+       nc_scr_unpost(cui->current);
+       clear();
+       refresh();
+
        def_prog_mode();
        endwin();
 
@@ -182,6 +209,7 @@ int cui_run_cmd(struct cui *cui, const char **cmd_argv)
        refresh();
 
        redrawwin(cui->current->main_ncw);
+       nc_scr_post(cui->current);
 
        if (result) {
                pb_log("%s: failed: '%s'\n", __func__, cmd_argv[0]);
@@ -901,7 +929,7 @@ fallback:
 
        talloc_free(cod->name);
        /* Name is still tabbed across */
-       cod->name = talloc_asprintf(cod, "  %s [installed]", opt->name);
+       cod->name = talloc_asprintf(cod, _("  %s [installed]"), opt->name);
 
        cod->pd->opt = opt;
        item->on_execute = NULL;
@@ -1268,7 +1296,7 @@ static struct pmenu *plugin_menu_init(struct cui *cui)
        item_opts_off(i->nci, O_SELECTABLE);
        pmenu_item_insert(m, i, 0);
 
-       i = pmenu_item_create(m, ("Return to Main Menu"));
+       i = pmenu_item_create(m, _("Return to Main Menu"));
        i->on_execute = pmenu_exit_cb;
        pmenu_item_insert(m, i, 1);