aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core-commands.c21
-rw-r--r--src/main.c8
2 files changed, 29 insertions, 0 deletions
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 <time.h>
#include <string.h>
+#include <stdio.h>
#include <glib.h>
#include <glib/gstdio.h>
@@ -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, &micro);
+ 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] = '-';