mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2025-01-04 00:55:59 +01:00
Parse command line arguments in main
This commit is contained in:
parent
38ef6ff598
commit
ec554bc33d
3 changed files with 318 additions and 152 deletions
117
main.c
117
main.c
|
@ -1,33 +1,146 @@
|
||||||
/* See LICENSE file for license and copyright information */
|
/* See LICENSE file for license and copyright information */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <glib/gstdio.h>
|
#include <glib/gstdio.h>
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
#include <girara/utils.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
#include "zathura.h"
|
#include "zathura.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
/* main function */
|
/* main function */
|
||||||
int main(int argc, char* argv[])
|
int
|
||||||
|
main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
|
/* init locale */
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
|
bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
|
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
|
||||||
textdomain(GETTEXT_PACKAGE);
|
textdomain(GETTEXT_PACKAGE);
|
||||||
|
|
||||||
|
/* init gtk */
|
||||||
g_thread_init(NULL);
|
g_thread_init(NULL);
|
||||||
gdk_threads_init();
|
gdk_threads_init();
|
||||||
gtk_init(&argc, &argv);
|
gtk_init(&argc, &argv);
|
||||||
|
|
||||||
zathura_t* zathura = zathura_init(argc, argv);
|
/* create zathura session */
|
||||||
|
zathura_t* zathura = zathura_create();
|
||||||
if (zathura == NULL) {
|
if (zathura == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* parse command line arguments */
|
||||||
|
gchar* config_dir = NULL;
|
||||||
|
gchar* data_dir = NULL;
|
||||||
|
gchar* plugin_path = NULL;
|
||||||
|
gchar* loglevel = NULL;
|
||||||
|
gchar* password = NULL;
|
||||||
|
gchar* synctex_editor = NULL;
|
||||||
|
bool forkback = false;
|
||||||
|
bool print_version = false;
|
||||||
|
|
||||||
|
#if (GTK_MAJOR_VERSION == 3)
|
||||||
|
Window embed = 0;
|
||||||
|
#else
|
||||||
|
GdkNativeWindow embed = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
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" },
|
||||||
|
{ "version", 'v', 0, G_OPTION_ARG_NONE, &print_version, _("Print version information"), NULL },
|
||||||
|
{ "synctex-editor-command", 'x', 0, G_OPTION_ARG_STRING, &synctex_editor, _("Synctex editor (forwarded to the synctex command)"), "cmd" },
|
||||||
|
{ NULL, '\0', 0, 0, NULL, NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
GOptionContext* context = g_option_context_new(" [file1] [file2] [...]");
|
||||||
|
g_option_context_add_main_entries(context, entries, NULL);
|
||||||
|
|
||||||
|
GError* error = NULL;
|
||||||
|
if (g_option_context_parse(context, &argc, &argv, &error) == false) {
|
||||||
|
girara_error("Error parsing command line arguments: %s\n", error->message);
|
||||||
|
g_option_context_free(context);
|
||||||
|
g_error_free(error);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
g_option_context_free(context);
|
||||||
|
|
||||||
|
/* Fork into the background if the user really wants to ... */
|
||||||
|
if (forkback == true) {
|
||||||
|
int pid = fork();
|
||||||
|
if (pid > 0) { /* parent */
|
||||||
|
exit(0);
|
||||||
|
} else if (pid < 0) { /* error */
|
||||||
|
girara_error("Couldn't fork.");
|
||||||
|
}
|
||||||
|
|
||||||
|
setsid();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set log level. */
|
||||||
|
if (loglevel == NULL || g_strcmp0(loglevel, "info") == 0) {
|
||||||
|
girara_set_debug_level(GIRARA_INFO);
|
||||||
|
} else if (g_strcmp0(loglevel, "warning") == 0) {
|
||||||
|
girara_set_debug_level(GIRARA_WARNING);
|
||||||
|
} else if (g_strcmp0(loglevel, "error") == 0) {
|
||||||
|
girara_set_debug_level(GIRARA_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
zathura_set_xid(zathura, embed);
|
||||||
|
zathura_set_config_dir(zathura, config_dir);
|
||||||
|
zathura_set_data_dir(zathura, data_dir);
|
||||||
|
zathura_set_plugin_dir(zathura, plugin_path);
|
||||||
|
zathura_set_synctex_editor_command(zathura, synctex_editor);
|
||||||
|
zathura_set_argv(zathura, argv);
|
||||||
|
|
||||||
|
/* Init zathura */
|
||||||
|
if(zathura_init(zathura) == false) {
|
||||||
|
girara_error("Could not initialize zathura.");
|
||||||
|
zathura_free(zathura);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print version */
|
||||||
|
if (print_version == true) {
|
||||||
|
char* string = zathura_get_version_string(zathura, false);
|
||||||
|
if (string != NULL) {
|
||||||
|
fprintf(stdout, "%s\n", string);
|
||||||
|
}
|
||||||
|
zathura_free(zathura);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* open document if passed */
|
||||||
|
if (argc > 1) {
|
||||||
|
document_open_idle(zathura, argv[1], password);
|
||||||
|
|
||||||
|
/* open additional files */
|
||||||
|
for (int i = 2; i < argc; i++) {
|
||||||
|
char* new_argv[] = {
|
||||||
|
*(zathura->global.arguments),
|
||||||
|
argv[i],
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
g_spawn_async(NULL, new_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* run zathura */
|
||||||
gdk_threads_enter();
|
gdk_threads_enter();
|
||||||
gtk_main();
|
gtk_main();
|
||||||
gdk_threads_leave();
|
gdk_threads_leave();
|
||||||
|
|
||||||
|
/* free zathura */
|
||||||
zathura_free(zathura);
|
zathura_free(zathura);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
278
zathura.c
278
zathura.c
|
@ -57,132 +57,18 @@ static gboolean purge_pages(gpointer data);
|
||||||
|
|
||||||
/* function implementation */
|
/* function implementation */
|
||||||
zathura_t*
|
zathura_t*
|
||||||
zathura_init(int argc, char* argv[])
|
zathura_create(void)
|
||||||
{
|
{
|
||||||
/* parse command line options */
|
|
||||||
#if (GTK_MAJOR_VERSION == 2)
|
|
||||||
GdkNativeWindow embed = 0;
|
|
||||||
#else
|
|
||||||
Window embed = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gchar* config_dir = NULL, *data_dir = NULL, *plugin_path = NULL, *loglevel = NULL, *password = NULL, *synctex_editor = NULL;
|
|
||||||
bool forkback = false, print_version = false, synctex = 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" },
|
|
||||||
{ "version", 'v', 0, G_OPTION_ARG_NONE, &print_version, _("Print version information"), NULL },
|
|
||||||
{ "synctex", 's', 0, G_OPTION_ARG_NONE, &synctex, _("Enable synctex support"), NULL },
|
|
||||||
{ "editor-command", 'x', 0, G_OPTION_ARG_STRING, &synctex_editor, _("Synctex editor (this flag is forwarded to the synctex command)"), "cmd" },
|
|
||||||
{ NULL, '\0', 0, 0, NULL, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
GOptionContext* context = g_option_context_new(" [file1] [file2] [...]");
|
|
||||||
g_option_context_add_main_entries(context, entries, NULL);
|
|
||||||
|
|
||||||
GError* error = NULL;
|
|
||||||
if (g_option_context_parse(context, &argc, &argv, &error) == false) {
|
|
||||||
printf("Error parsing command line arguments: %s\n", error->message);
|
|
||||||
g_option_context_free(context);
|
|
||||||
g_error_free(error);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
g_option_context_free(context);
|
|
||||||
|
|
||||||
/* Fork into the background if the user really wants to ... */
|
|
||||||
if (forkback == true) {
|
|
||||||
int pid = fork();
|
|
||||||
if (pid > 0) { /* parent */
|
|
||||||
exit(0);
|
|
||||||
} else if (pid < 0) { /* error */
|
|
||||||
printf("Error: couldn't fork.");
|
|
||||||
}
|
|
||||||
|
|
||||||
setsid();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set log level. */
|
|
||||||
if (loglevel == NULL || g_strcmp0(loglevel, "info") == 0) {
|
|
||||||
girara_set_debug_level(GIRARA_INFO);
|
|
||||||
} else if (g_strcmp0(loglevel, "warning") == 0) {
|
|
||||||
girara_set_debug_level(GIRARA_WARNING);
|
|
||||||
} else if (g_strcmp0(loglevel, "error") == 0) {
|
|
||||||
girara_set_debug_level(GIRARA_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
zathura_t* zathura = g_malloc0(sizeof(zathura_t));
|
zathura_t* zathura = g_malloc0(sizeof(zathura_t));
|
||||||
|
|
||||||
/* global settings */
|
/* global settings */
|
||||||
zathura->global.recolor = false;
|
zathura->global.recolor = false;
|
||||||
zathura->global.update_page_number = true;
|
zathura->global.update_page_number = true;
|
||||||
zathura->global.arguments = argv;
|
|
||||||
|
|
||||||
/* plugins */
|
/* plugins */
|
||||||
zathura->plugins.manager = zathura_plugin_manager_new();
|
zathura->plugins.manager = zathura_plugin_manager_new();
|
||||||
if (zathura->plugins.manager == NULL) {
|
if (zathura->plugins.manager == NULL) {
|
||||||
goto error_free;
|
goto error_out;
|
||||||
}
|
|
||||||
|
|
||||||
/* configuration and data */
|
|
||||||
if (config_dir != NULL) {
|
|
||||||
zathura->config.config_dir = g_strdup(config_dir);
|
|
||||||
} else {
|
|
||||||
gchar* path = girara_get_xdg_path(XDG_CONFIG);
|
|
||||||
zathura->config.config_dir = g_build_filename(path, "zathura", NULL);
|
|
||||||
g_free(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data_dir != NULL) {
|
|
||||||
zathura->config.data_dir = g_strdup(data_dir);
|
|
||||||
} else {
|
|
||||||
gchar* path = girara_get_xdg_path(XDG_DATA);
|
|
||||||
zathura->config.data_dir = g_build_filename(path, "zathura", NULL);
|
|
||||||
g_free(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* synctex */
|
|
||||||
zathura->synctex.enabled = synctex;
|
|
||||||
if (synctex_editor) {
|
|
||||||
zathura->synctex.editor = g_strdup(synctex_editor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* create zathura (config/data) directory */
|
|
||||||
g_mkdir_with_parents(zathura->config.config_dir, 0771);
|
|
||||||
g_mkdir_with_parents(zathura->config.data_dir, 0771);
|
|
||||||
|
|
||||||
if (plugin_path != NULL) {
|
|
||||||
girara_list_t* paths = girara_split_path_array(plugin_path);
|
|
||||||
GIRARA_LIST_FOREACH(paths, char*, iter, path)
|
|
||||||
zathura_plugin_manager_add_dir(zathura->plugins.manager, path);
|
|
||||||
GIRARA_LIST_FOREACH_END(paths, char*, iter, path);
|
|
||||||
girara_list_free(paths);
|
|
||||||
} else {
|
|
||||||
#ifdef ZATHURA_PLUGINDIR
|
|
||||||
girara_list_t* paths = girara_split_path_array(ZATHURA_PLUGINDIR);
|
|
||||||
GIRARA_LIST_FOREACH(paths, char*, iter, path)
|
|
||||||
zathura_plugin_manager_add_dir(zathura->plugins.manager, path);
|
|
||||||
GIRARA_LIST_FOREACH_END(paths, char*, iter, path);
|
|
||||||
girara_list_free(paths);
|
|
||||||
#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 */
|
/* UI */
|
||||||
|
@ -192,6 +78,29 @@ zathura_init(int argc, char* argv[])
|
||||||
|
|
||||||
zathura->ui.session->global.data = zathura;
|
zathura->ui.session->global.data = zathura;
|
||||||
|
|
||||||
|
return zathura;
|
||||||
|
|
||||||
|
error_out:
|
||||||
|
|
||||||
|
zathura_free(zathura);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
zathura_init(zathura_t* zathura)
|
||||||
|
{
|
||||||
|
if (zathura == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* create zathura (config/data) directory */
|
||||||
|
g_mkdir_with_parents(zathura->config.config_dir, 0771);
|
||||||
|
g_mkdir_with_parents(zathura->config.data_dir, 0771);
|
||||||
|
|
||||||
|
/* load plugins */
|
||||||
|
zathura_plugin_manager_load(zathura->plugins.manager);
|
||||||
|
|
||||||
/* configuration */
|
/* configuration */
|
||||||
config_load_default(zathura);
|
config_load_default(zathura);
|
||||||
|
|
||||||
|
@ -215,9 +124,7 @@ zathura_init(int argc, char* argv[])
|
||||||
config_load_file(zathura, configuration_file);
|
config_load_file(zathura, configuration_file);
|
||||||
g_free(configuration_file);
|
g_free(configuration_file);
|
||||||
|
|
||||||
/* initialize girara */
|
/* UI */
|
||||||
zathura->ui.session->gtk.embed = embed;
|
|
||||||
|
|
||||||
if (girara_session_init(zathura->ui.session, "zathura") == false) {
|
if (girara_session_init(zathura->ui.session, "zathura") == false) {
|
||||||
goto error_free;
|
goto error_free;
|
||||||
}
|
}
|
||||||
|
@ -313,33 +220,12 @@ zathura_init(int argc, char* argv[])
|
||||||
zathura->bookmarks.bookmarks = girara_sorted_list_new2((girara_compare_function_t) zathura_bookmarks_compare,
|
zathura->bookmarks.bookmarks = girara_sorted_list_new2((girara_compare_function_t) zathura_bookmarks_compare,
|
||||||
(girara_free_function_t) zathura_bookmark_free);
|
(girara_free_function_t) zathura_bookmark_free);
|
||||||
|
|
||||||
/* open document if passed */
|
|
||||||
if (argc > 1) {
|
|
||||||
zathura_document_info_t* document_info = g_malloc0(sizeof(zathura_document_info_t));
|
|
||||||
|
|
||||||
document_info->zathura = zathura;
|
|
||||||
document_info->path = argv[1];
|
|
||||||
document_info->password = password;
|
|
||||||
gdk_threads_add_idle(document_info_open, document_info);
|
|
||||||
|
|
||||||
/* open additional files */
|
|
||||||
for (int i = 2; i < argc; i++) {
|
|
||||||
char* new_argv[] = {
|
|
||||||
*(zathura->global.arguments),
|
|
||||||
argv[i],
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
g_spawn_async(NULL, new_argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add even to purge old pages */
|
/* add even to purge old pages */
|
||||||
int interval = 30;
|
int interval = 30;
|
||||||
girara_setting_get(zathura->ui.session, "page-store-interval", &interval);
|
girara_setting_get(zathura->ui.session, "page-store-interval", &interval);
|
||||||
g_timeout_add_seconds(interval, purge_pages, zathura);
|
g_timeout_add_seconds(interval, purge_pages, zathura);
|
||||||
|
|
||||||
return zathura;
|
return true;
|
||||||
|
|
||||||
error_free:
|
error_free:
|
||||||
|
|
||||||
|
@ -351,11 +237,7 @@ error_free:
|
||||||
g_object_unref(zathura->ui.page_widget_alignment);
|
g_object_unref(zathura->ui.page_widget_alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
error_out:
|
return false;
|
||||||
|
|
||||||
zathura_free(zathura);
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -402,6 +284,94 @@ zathura_free(zathura_t* zathura)
|
||||||
g_free(zathura);
|
g_free(zathura);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
#if (GTK_MAJOR_VERSION == 2)
|
||||||
|
zathura_set_xid(zathura_t* zathura, GdkNativeWindow xid)
|
||||||
|
#else
|
||||||
|
zathura_set_xid(zathura_t* zathura, Window xid)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
g_return_if_fail(zathura != NULL);
|
||||||
|
|
||||||
|
zathura->ui.session->gtk.embed = xid;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
zathura_set_config_dir(zathura_t* zathura, const char* dir)
|
||||||
|
{
|
||||||
|
g_return_if_fail(zathura != NULL);
|
||||||
|
|
||||||
|
if (dir != NULL) {
|
||||||
|
zathura->config.config_dir = g_strdup(dir);
|
||||||
|
} else {
|
||||||
|
gchar* path = girara_get_xdg_path(XDG_CONFIG);
|
||||||
|
zathura->config.config_dir = g_build_filename(path, "zathura", NULL);
|
||||||
|
g_free(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
zathura_set_data_dir(zathura_t* zathura, const char* dir)
|
||||||
|
{
|
||||||
|
if (dir != NULL) {
|
||||||
|
zathura->config.data_dir = g_strdup(dir);
|
||||||
|
} else {
|
||||||
|
gchar* path = girara_get_xdg_path(XDG_DATA);
|
||||||
|
zathura->config.data_dir = g_build_filename(path, "zathura", NULL);
|
||||||
|
g_free(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_return_if_fail(zathura != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
zathura_set_plugin_dir(zathura_t* zathura, const char* dir)
|
||||||
|
{
|
||||||
|
g_return_if_fail(zathura != NULL);
|
||||||
|
g_return_if_fail(zathura->plugins.manager != NULL);
|
||||||
|
|
||||||
|
if (dir != NULL) {
|
||||||
|
girara_list_t* paths = girara_split_path_array(dir);
|
||||||
|
GIRARA_LIST_FOREACH(paths, char*, iter, path)
|
||||||
|
zathura_plugin_manager_add_dir(zathura->plugins.manager, path);
|
||||||
|
GIRARA_LIST_FOREACH_END(paths, char*, iter, path);
|
||||||
|
girara_list_free(paths);
|
||||||
|
} else {
|
||||||
|
#ifdef ZATHURA_PLUGINDIR
|
||||||
|
girara_list_t* paths = girara_split_path_array(ZATHURA_PLUGINDIR);
|
||||||
|
GIRARA_LIST_FOREACH(paths, char*, iter, path)
|
||||||
|
zathura_plugin_manager_add_dir(zathura->plugins.manager, path);
|
||||||
|
GIRARA_LIST_FOREACH_END(paths, char*, iter, path);
|
||||||
|
girara_list_free(paths);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
zathura_set_synctex_editor_command(zathura_t* zathura, const char* command)
|
||||||
|
{
|
||||||
|
g_return_if_fail(zathura != NULL);
|
||||||
|
|
||||||
|
if (zathura->synctex.editor != NULL) {
|
||||||
|
g_free(zathura->synctex.editor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (command != NULL) {
|
||||||
|
zathura->synctex.editor = g_strdup(command);
|
||||||
|
} else {
|
||||||
|
zathura->synctex.editor = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
zathura_set_argv(zathura_t* zathura, char** argv)
|
||||||
|
{
|
||||||
|
g_return_if_fail(zathura != NULL);
|
||||||
|
|
||||||
|
zathura->global.arguments = argv;
|
||||||
|
}
|
||||||
|
|
||||||
static gchar*
|
static gchar*
|
||||||
prepare_document_open_from_stdin(zathura_t* zathura)
|
prepare_document_open_from_stdin(zathura_t* zathura)
|
||||||
{
|
{
|
||||||
|
@ -717,6 +687,22 @@ error_out:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
document_open_idle(zathura_t* zathura, const char* path, const char* password)
|
||||||
|
{
|
||||||
|
if (zathura == NULL || path == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
zathura_document_info_t* document_info = g_malloc0(sizeof(zathura_document_info_t));
|
||||||
|
|
||||||
|
document_info->zathura = zathura;
|
||||||
|
document_info->path = path;
|
||||||
|
document_info->password = password;
|
||||||
|
|
||||||
|
gdk_threads_add_idle(document_info_open, document_info);
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
document_save(zathura_t* zathura, const char* path, bool overwrite)
|
document_save(zathura_t* zathura, const char* path, bool overwrite)
|
||||||
{
|
{
|
||||||
|
|
75
zathura.h
75
zathura.h
|
@ -121,14 +121,20 @@ struct zathura_s
|
||||||
} file_monitor;
|
} file_monitor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a zathura session
|
||||||
|
*
|
||||||
|
* @return zathura session object or NULL if zathura could not be creeated
|
||||||
|
*/
|
||||||
|
zathura_t* zathura_create(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes zathura
|
* Initializes zathura
|
||||||
*
|
*
|
||||||
* @param argc Number of arguments
|
* @param zathura The zathura session
|
||||||
* @param argv Values of arguments
|
* @return true if initialization has been successful
|
||||||
* @return zathura session object or NULL if zathura could not been initialized
|
|
||||||
*/
|
*/
|
||||||
zathura_t* zathura_init(int argc, char* argv[]);
|
bool zathura_init(zathura_t* zathura);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free zathura session
|
* Free zathura session
|
||||||
|
@ -137,6 +143,58 @@ zathura_t* zathura_init(int argc, char* argv[]);
|
||||||
*/
|
*/
|
||||||
void zathura_free(zathura_t* zathura);
|
void zathura_free(zathura_t* zathura);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set parent window id
|
||||||
|
*
|
||||||
|
* @param zathura The zathura session
|
||||||
|
* @param xid The window id
|
||||||
|
*/
|
||||||
|
#if (GTK_MAJOR_VERSION == 2)
|
||||||
|
void zathura_set_xid(zathura_t* zathura, GdkNativeWindow xid);
|
||||||
|
#else
|
||||||
|
void zathura_set_xid(zathura_t* zathura, Window xid);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the path to the configuration directory
|
||||||
|
*
|
||||||
|
* @param zathura The zathura session
|
||||||
|
* @param dir Directory path
|
||||||
|
*/
|
||||||
|
void zathura_set_config_dir(zathura_t* zathura, const char* dir);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the path to the data directory
|
||||||
|
*
|
||||||
|
* @param zathura The zathura session
|
||||||
|
* @param dir Directory path
|
||||||
|
*/
|
||||||
|
void zathura_set_data_dir(zathura_t* zathura, const char* dir);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the path to the plugin directory
|
||||||
|
*
|
||||||
|
* @param zathura The zathura session
|
||||||
|
* @param dir Directory path
|
||||||
|
*/
|
||||||
|
void zathura_set_plugin_dir(zathura_t* zathura, const char* dir);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables synctex support and sets the synctex editor command
|
||||||
|
*
|
||||||
|
* @param zathura The zathura session
|
||||||
|
* @param command Synctex editor command
|
||||||
|
*/
|
||||||
|
void zathura_set_synctex_editor_command(zathura_t* zathura, const char* command);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the program parameters
|
||||||
|
*
|
||||||
|
* @param zathura The zathura session
|
||||||
|
* @param argv List of arguments
|
||||||
|
*/
|
||||||
|
void zathura_set_argv(zathura_t* zathura, char** argv);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens a file
|
* Opens a file
|
||||||
*
|
*
|
||||||
|
@ -148,6 +206,15 @@ void zathura_free(zathura_t* zathura);
|
||||||
*/
|
*/
|
||||||
bool document_open(zathura_t* zathura, const char* path, const char* password);
|
bool document_open(zathura_t* zathura, const char* path, const char* password);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a file (idle)
|
||||||
|
*
|
||||||
|
* @param zathura The zathura session
|
||||||
|
* @param path The path to the file
|
||||||
|
* @param password The password of the file
|
||||||
|
*/
|
||||||
|
void document_open_idle(zathura_t* zathura, const char* path, const char* password);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save a open file
|
* Save a open file
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue