From b7ccd28300e1fdce0a626103029bb0f7416b5df7 Mon Sep 17 00:00:00 2001 From: yabu76 Date: Tue, 3 Feb 2026 22:42:45 +0900 Subject: [PATCH] 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 --- src/configfile.c | 1 + src/options.c | 11 +++++++++++ src/options.h | 1 + src/script.c | 8 ++++++++ 4 files changed, 21 insertions(+) diff --git a/src/configfile.c b/src/configfile.c index 686cae9..d9323a7 100644 --- a/src/configfile.c +++ b/src/configfile.c @@ -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); diff --git a/src/options.c b/src/options.c index d85a5c6..cf96712 100644 --- a/src/options.c +++ b/src/options.c @@ -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; diff --git a/src/options.h b/src/options.h index 337768c..6589c16 100644 --- a/src/options.h +++ b/src/options.h @@ -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; diff --git a/src/script.c b/src/script.c index 2bf4a66..f66f0bd 100644 --- a/src/script.c +++ b/src/script.c @@ -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; }