diff --git a/commands.c b/commands.c
index 8c248c0..c8b8d3c 100644
--- a/commands.c
+++ b/commands.c
@@ -527,35 +527,15 @@ cmd_version(girara_session_t* session, girara_list_t* UNUSED(argument_list))
g_return_val_if_fail(session->global.data != NULL, false);
zathura_t* zathura = session->global.data;
- GString* string = g_string_new(NULL);
-
- /* zathura version */
- char* zathura_version = g_strdup_printf("zathura %d.%d.%d", ZATHURA_VERSION_MAJOR, ZATHURA_VERSION_MINOR, ZATHURA_VERSION_REV);
- g_string_append(string, zathura_version);
- g_free(zathura_version);
-
- /* plugin information */
- girara_list_t* plugins = zathura_plugin_manager_get_plugins(zathura->plugins.manager);
- if (plugins != NULL) {
- GIRARA_LIST_FOREACH(plugins, zathura_plugin_t*, iter, plugin)
- char* name = zathura_plugin_get_name(plugin);
- zathura_plugin_version_t version = zathura_plugin_get_version(plugin);
- char* text = g_strdup_printf("\n(plugin) %s (%d.%d.%d) (%s)",
- (name == NULL) ? "-" : name,
- version.major,
- version.minor,
- version.rev,
- zathura_plugin_get_path(plugin)
- );
- g_string_append(string, text);
- g_free(text);
- GIRARA_LIST_FOREACH_END(plugins, zathura_plugin_t*, iter, plugin);
- }
+ char* string = zathura_get_version_string(zathura, true);
+ if (string == NULL) {
+ return false;
+ }
/* display information */
- girara_notify(session, GIRARA_INFO, "%s", string->str);
+ girara_notify(session, GIRARA_INFO, "%s", string);
- g_string_free(string, TRUE);
+ g_free(string);
return true;
}
diff --git a/main.c b/main.c
index 7c80083..7ffd90c 100644
--- a/main.c
+++ b/main.c
@@ -21,7 +21,6 @@ int main(int argc, char* argv[])
zathura_t* zathura = zathura_init(argc, argv);
if (zathura == NULL) {
- fprintf(stderr, "error: could not initialize zathura\n");
return -1;
}
diff --git a/utils.c b/utils.c
index 777d86e..724b591 100644
--- a/utils.c
+++ b/utils.c
@@ -353,3 +353,43 @@ document_draw_search_results(zathura_t* zathura, bool value)
g_object_set(zathura->pages[page_id], "draw-search-results", (value == true) ? TRUE : FALSE, NULL);
}
}
+
+char*
+zathura_get_version_string(zathura_t* zathura, bool markup)
+{
+ if (zathura == NULL) {
+ return NULL;
+ }
+
+ GString* string = g_string_new(NULL);
+
+ /* zathura version */
+ char* zathura_version = g_strdup_printf("zathura %d.%d.%d", ZATHURA_VERSION_MAJOR, ZATHURA_VERSION_MINOR, ZATHURA_VERSION_REV);
+ g_string_append(string, zathura_version);
+ g_free(zathura_version);
+
+ char* format = (markup == true) ? "\n(plugin) %s (%d.%d.%d) (%s)" : "\n(plugin) %s (%d.%d.%d) (%s)";
+
+ /* plugin information */
+ girara_list_t* plugins = zathura_plugin_manager_get_plugins(zathura->plugins.manager);
+ if (plugins != NULL) {
+ GIRARA_LIST_FOREACH(plugins, zathura_plugin_t*, iter, plugin)
+ char* name = zathura_plugin_get_name(plugin);
+ zathura_plugin_version_t version = zathura_plugin_get_version(plugin);
+ char* text = g_strdup_printf(format,
+ (name == NULL) ? "-" : name,
+ version.major,
+ version.minor,
+ version.rev,
+ zathura_plugin_get_path(plugin)
+ );
+ g_string_append(string, text);
+ g_free(text);
+ GIRARA_LIST_FOREACH_END(plugins, zathura_plugin_t*, iter, plugin);
+ }
+
+ char* version = string->str;
+ g_string_free(string, FALSE);
+
+ return version;
+}
diff --git a/utils.h b/utils.h
index a13c832..2fffab8 100644
--- a/utils.h
+++ b/utils.h
@@ -131,4 +131,13 @@ void readjust_view_after_zooming(zathura_t* zathura, float old_zoom, bool delay)
*/
void document_draw_search_results(zathura_t* zathura, bool value);
+/**
+ * Create zathura version string
+ *
+ * @param zathura The zathura instance
+ * @param markup Enable markup
+ * @return Version string
+ */
+char* zathura_get_version_string(zathura_t* zathura, bool markup);
+
#endif // UTILS_H
diff --git a/zathura.c b/zathura.c
index bd6c195..0b29170 100644
--- a/zathura.c
+++ b/zathura.c
@@ -67,16 +67,17 @@ zathura_init(int argc, char* argv[])
#endif
gchar* config_dir = NULL, *data_dir = NULL, *plugin_path = NULL, *loglevel = NULL, *password = NULL;
- bool forkback = false;
+ bool forkback = false, print_version = false;
GOptionEntry entries[] =
{
- { "reparent", 'e', 0, G_OPTION_ARG_INT, &embed, _("Reparents to window specified by xid"), "xid" },
- { "config-dir", 'c', 0, G_OPTION_ARG_FILENAME, &config_dir, _("Path to the config directory"), "path" },
- { "data-dir", 'd', 0, G_OPTION_ARG_FILENAME, &data_dir, _("Path to the data directory"), "path" },
- { "plugins-dir", 'p', 0, G_OPTION_ARG_STRING, &plugin_path, _("Path to the directories containing plugins"), "path" },
- { "fork", '\0', 0, G_OPTION_ARG_NONE, &forkback, _("Fork into the background"), NULL },
- { "password", 'w', 0, G_OPTION_ARG_STRING, &password, _("Document password"), "password" },
- { "debug", 'l', 0, G_OPTION_ARG_STRING, &loglevel, _("Log level (debug, info, warning, error)"), "level" },
+ { "reparent", 'e', 0, G_OPTION_ARG_INT, &embed, _("Reparents to window specified by xid"), "xid" },
+ { "config-dir", 'c', 0, G_OPTION_ARG_FILENAME, &config_dir, _("Path to the config directory"), "path" },
+ { "data-dir", 'd', 0, G_OPTION_ARG_FILENAME, &data_dir, _("Path to the data directory"), "path" },
+ { "plugins-dir", 'p', 0, G_OPTION_ARG_STRING, &plugin_path, _("Path to the directories containing plugins"), "path" },
+ { "fork", '\0', 0, G_OPTION_ARG_NONE, &forkback, _("Fork into the background"), NULL },
+ { "password", 'w', 0, G_OPTION_ARG_STRING, &password, _("Document password"), "password" },
+ { "debug", 'l', 0, G_OPTION_ARG_STRING, &loglevel, _("Log level (debug, info, warning, error)"), "level" },
+ { "version", 'v', 0, G_OPTION_ARG_NONE, &print_version, _("Print version information"), NULL },
{ NULL, '\0', 0, 0, NULL, NULL, NULL }
};
@@ -117,6 +118,11 @@ zathura_init(int argc, char* argv[])
zathura_t* zathura = g_malloc0(sizeof(zathura_t));
+ /* global settings */
+ zathura->global.recolor = false;
+ zathura->global.update_page_number = true;
+ zathura->global.arguments = argv;
+
/* plugins */
zathura->plugins.manager = zathura_plugin_manager_new();
if (zathura->plugins.manager == NULL) {
@@ -160,6 +166,19 @@ zathura_init(int argc, char* argv[])
#endif
}
+ /* load plugins */
+ zathura_plugin_manager_load(zathura->plugins.manager);
+
+ /* Print version */
+ if (print_version == true) {
+ char* string = zathura_get_version_string(zathura, false);
+ if (string != NULL) {
+ fprintf(stdout, "%s\n", string);
+ }
+
+ goto error_free; // FIXME
+ }
+
/* UI */
if ((zathura->ui.session = girara_session_create()) == NULL) {
goto error_out;
@@ -167,14 +186,6 @@ zathura_init(int argc, char* argv[])
zathura->ui.session->global.data = zathura;
- /* global settings */
- zathura->global.recolor = false;
- zathura->global.update_page_number = true;
- zathura->global.arguments = argv;
-
- /* load plugins */
- zathura_plugin_manager_load(zathura->plugins.manager);
-
/* configuration */
config_load_default(zathura);