diff --git a/mu/mu-cmd-server.cc b/mu/mu-cmd-server.cc index 0b05417f..d6261d60 100644 --- a/mu/mu-cmd-server.cc +++ b/mu/mu-cmd-server.cc @@ -1375,6 +1375,12 @@ mu_cmd_server (MuConfig *opts, GError **err) try Context context{opts}; context.command_map = make_command_map (context); + if (opts->eval) { // evaluate command-line command & exit + auto call{Sexp::parse(opts->eval)}; + invoke(context.command_map, call); + return MU_OK; + } + const auto histpath{std::string{mu_runtime_path(MU_RUNTIME_PATH_CACHE)} + "/history"}; Readline readline(histpath, 50); diff --git a/mu/mu-config.c b/mu/mu-config.c index af98a372..89538cdc 100644 --- a/mu/mu-config.c +++ b/mu/mu-config.c @@ -453,6 +453,8 @@ config_options_group_server (void) GOptionEntry entries[] = { {"commands", 0, 0, G_OPTION_ARG_NONE, &MU_CONFIG.commands, "list the available command and their parameters, then exit", NULL}, + {"eval", 'e', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, + &MU_CONFIG.eval, "expression to evaluate", ""}, {NULL, 0, 0, 0, NULL, NULL, NULL} }; @@ -766,6 +768,7 @@ mu_config_uninit (MuConfig *opts) g_free (opts->targetdir); g_free (opts->parts); g_free (opts->script); + g_free (opts->eval); g_strfreev (opts->params); diff --git a/mu/mu-config.h b/mu/mu-config.h index 1d1bec00..43418ae0 100644 --- a/mu/mu-config.h +++ b/mu/mu-config.h @@ -184,8 +184,9 @@ struct _MuConfig { /* for server */ gboolean commands; /* dump documentations for server * commands */ + gchar *eval; /* command to evaluate */ - /* options for mu-script */ + /* options for mu-script */ gchar *script; /* script to run */ const char **script_params; /* parameters for scripts */ };