Add script-init-file option

The script-init-file is the file to be loaded and executed when the
interpreter starts.

If this option is defined, it will be executed after the tio module is
loaded as a built-in module.

Example of .tioconfig:
script-init-file = /home/user/.tio-script-init.lua

Example of option specification:
tio --script-init-file /home/user/.tio-script-init.lua
This commit is contained in:
yabu76 2026-02-03 22:42:45 +09:00
parent c009ed755c
commit b7ccd28300
4 changed files with 21 additions and 0 deletions

View file

@ -294,6 +294,7 @@ static void config_parse_keys(GKeyFile *key_file, char *group)
string = NULL;
}
config_get_bool(key_file, group, "mute", &option.mute);
config_get_string(key_file, group, "script-init-file", &option.script_init_filename, NULL);
config_get_string(key_file, group, "script", &option.script, NULL);
config_get_string(key_file, group, "script-file", &option.script_filename, NULL);
config_get_string(key_file, group, "script-run", &string, NULL);

View file

@ -51,6 +51,7 @@ enum opt_t
OPT_ALERT,
OPT_COMPLETE_PROFILES,
OPT_MUTE,
OPT_SCRIPT_INIT_FILE,
OPT_SCRIPT,
OPT_SCRIPT_FILE,
OPT_SCRIPT_RUN,
@ -107,6 +108,7 @@ struct option_t option =
.rs485_delay_rts_after_send = -1,
.alert = ALERT_NONE,
.complete_profiles = false,
.script_init_filename = NULL,
.script = NULL,
.script_filename = NULL,
.script_run = SCRIPT_RUN_ALWAYS,
@ -933,6 +935,10 @@ void options_print()
{
tio_printf(" Socket: %s", option.socket);
}
if (option.script_init_filename != NULL)
{
tio_printf(" Script init file: %s", option.script_init_filename);
}
if (option.script_filename != NULL)
{
tio_printf(" Script file: %s", option.script_filename);
@ -1005,6 +1011,7 @@ void options_parse(int argc, char *argv[])
{"rs-485-config", required_argument, 0, OPT_RS485_CONFIG },
{"alert", required_argument, 0, OPT_ALERT },
{"mute", no_argument, 0, OPT_MUTE },
{"script-init-file", required_argument, 0, OPT_SCRIPT_INIT_FILE },
{"script", required_argument, 0, OPT_SCRIPT },
{"script-file", required_argument, 0, OPT_SCRIPT_FILE },
{"script-run", required_argument, 0, OPT_SCRIPT_RUN },
@ -1179,6 +1186,10 @@ void options_parse(int argc, char *argv[])
option.mute = true;
break;
case OPT_SCRIPT_INIT_FILE:
option.script_init_filename = optarg;
break;
case OPT_SCRIPT:
option.script = optarg;
break;

View file

@ -94,6 +94,7 @@ struct option_t
int32_t rs485_delay_rts_after_send;
alert_t alert;
bool complete_profiles;
char *script_init_filename;
char *script;
char *script_filename;
script_run_t script_run;

View file

@ -636,6 +636,14 @@ static lua_State *script_interp_new(void)
// Initialize globals
script_set_globals(L);
// Execute script-init file
if (option.script_init_filename) {
if (luaL_dofile(L, option.script_init_filename)) {
tio_warning_printf("lua: %s", lua_tostring(L, -1));
lua_pop(L, 1);
}
}
return L;
}