From ca70c9061146386ce0986631cd7fc9209a935a34 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Thu, 31 Jul 2025 17:19:07 +0300 Subject: added -v/--version and command * DEC TECO had an command. In contrast to DEC TECO's implementation, the value reported by encodes a major.minor.micro semantic version. --- src/core-commands.c | 21 +++++++++++++++++++++ src/main.c | 8 ++++++++ 2 files changed, 29 insertions(+) (limited to 'src') diff --git a/src/core-commands.c b/src/core-commands.c index 67eb51a..a2d3c92 100644 --- a/src/core-commands.c +++ b/src/core-commands.c @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -2600,6 +2601,25 @@ teco_state_ecommand_encoding(teco_machine_main_t *ctx, GError **error) teco_interface_ssm(SCI_GOTOPOS, teco_interface_glyphs2bytes(dot_glyphs), 0); } +/*$ EO version + * EO -> major*10000 + minor*100 + micro + * + * Return the version of \*(ST encoded into an integer. + */ +static void +teco_state_ecommand_version(teco_machine_main_t *ctx, GError **error) +{ + /* + * FIXME: This is inefficient and could be done at build-time. + * Or we could have PACKAGE_MAJOR_VERSION, PACKAGE_MINOR_VERSION etc. macros. + * But then, who cares? + */ + guint major, minor, micro; + G_GNUC_UNUSED gint rc = sscanf(PACKAGE_VERSION, "%u.%u.%u", &major, &minor, µ); + g_assert(rc == 3); + teco_expressions_push(major*10000 + minor*100 + micro); +} + /*$ "EX" ":EX" exit quit * [bool]EX -- Exit program * -EX @@ -2715,6 +2735,7 @@ teco_state_ecommand_input(teco_machine_main_t *ctx, gunichar chr, GError **error .modifier_colon = 1}, ['E'] = {&teco_state_start, teco_state_ecommand_encoding, .modifier_colon = 1}, + ['O'] = {&teco_state_start, teco_state_ecommand_version}, ['X'] = {&teco_state_start, teco_state_ecommand_exit, .modifier_colon = 1}, }; diff --git a/src/main.c b/src/main.c index a04d1d1..42e1520 100644 --- a/src/main.c +++ b/src/main.c @@ -108,6 +108,7 @@ teco_get_default_config_path(void) #endif +static gboolean teco_show_version = FALSE; static gchar *teco_eval_macro = NULL; static gboolean teco_mung_file = FALSE; static gboolean teco_mung_profile = TRUE; @@ -119,6 +120,8 @@ static gchar * teco_process_options(gchar ***argv) { static const GOptionEntry option_entries[] = { + {"version", 'v', 0, G_OPTION_ARG_NONE, &teco_show_version, + "Show version"}, {"eval", 'e', 0, G_OPTION_ARG_STRING, &teco_eval_macro, "Evaluate macro", "macro"}, {"mung", 'm', 0, G_OPTION_ARG_NONE, &teco_mung_file, @@ -187,6 +190,11 @@ teco_process_options(gchar ***argv) exit(EXIT_FAILURE); } + if (teco_show_version) { + puts(PACKAGE_VERSION); + exit(EXIT_SUCCESS); + } + if ((*argv)[0] && !g_strcmp0((*argv)[1], "-S")) { /* translate -S to --, this is always passed down */ (*argv)[1][1] = '-'; -- cgit v1.2.3