changeset 884:ff16ed0d2c8a

Improve ways to specify html browser (used for help, see bug 2015099). Two new rc file options were added: - helpers.html_browser.command_name - helpers.html_browser.command_line These are checked first before trying common browser locations. If these do not lead to a valid browser, then geeqie will search for geeqie_html_browser script in the path, then it will try various common browsers.
author zas_
date Sun, 13 Jul 2008 14:50:07 +0000
parents 391a9e3336db
children ad420f2eb789
files src/options.h src/rcfile.c src/window.c
diffstat 3 files changed, 35 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/options.h	Sun Jul 13 13:51:23 2008 +0000
+++ b/src/options.h	Sun Jul 13 14:50:07 2008 +0000
@@ -38,6 +38,7 @@
 
 	gboolean save_metadata_in_image_file;
 
+	/* start up */
 	struct {
 		gboolean restore_path;
 		gboolean use_last_path;
@@ -237,6 +238,13 @@
 
 	} color_profile;
 
+	/* Helpers programs */
+	struct {
+		struct {
+			gchar *command_name;
+			gchar *command_line;
+		} html_browser;
+	} helpers;
 };
 
 ConfOptions *options;
--- a/src/rcfile.c	Sun Jul 13 13:51:23 2008 +0000
+++ b/src/rcfile.c	Sun Jul 13 14:50:07 2008 +0000
@@ -578,6 +578,18 @@
 	WRITE_CHAR(shell.options);
 
 
+	WRITE_SUBTITLE("Helpers");
+	secure_fprintf(ssi, "# Html browser\n");
+	secure_fprintf(ssi, "# command_name is: the binary's name to look for in the path\n");
+	secure_fprintf(ssi, "# If command_name is empty, the program will try various common html browsers\n");
+	secure_fprintf(ssi, "# command_line is:\n");
+	secure_fprintf(ssi, "# \"\" (empty string)  = execute binary with html file path as command line\n");
+	secure_fprintf(ssi, "# \"string\"           = execute string and use results for command line\n");
+	secure_fprintf(ssi, "# \"!string\"          = use text following ! as command line, replacing optional %%s with html file path\n");
+	WRITE_CHAR(helpers.html_browser.command_name);
+	WRITE_CHAR(helpers.html_browser.command_line);
+
+
 	WRITE_SUBTITLE("External Programs");
 	secure_fprintf(ssi, "# Maximum of %d programs (external_1 through external_%d)\n", GQ_EDITOR_GENERIC_SLOTS, GQ_EDITOR_GENERIC_SLOTS);
 	secure_fprintf(ssi, "# external_%d through external_%d are used for file ops\n", GQ_EDITOR_GENERIC_SLOTS + 1, GQ_EDITOR_SLOTS);
@@ -939,6 +951,10 @@
 		READ_CHAR(shell.path);
 		READ_CHAR(shell.options);
 
+		/* Helpers */
+		READ_CHAR(helpers.html_browser.command_name);
+		READ_CHAR(helpers.html_browser.command_line);
+
 		/* External Programs */
 
 		if (is_numbered_option(option, "external_", &i))
--- a/src/window.c	Sun Jul 13 13:51:23 2008 +0000
+++ b/src/window.c	Sun Jul 13 14:50:07 2008 +0000
@@ -77,7 +77,7 @@
 
 /*
  *-----------------------------------------------------------------------------
- * Open  browser with the help Documentation
+ * Open browser with the help Documentation
  *-----------------------------------------------------------------------------
  */
 
@@ -85,13 +85,13 @@
 {
 	gchar *result = NULL;
 	FILE *f;
-	char buf[2048];
-	int l;
+	gchar buf[2048];
+	gint l;
 
-	if (!binary) return NULL;
+	if (!binary || binary[0] == '\0') return NULL;
 	if (!file_in_path(binary)) return NULL;
 
-	if (!command) return g_strdup(binary);
+	if (!command || command[0] == '\0') return g_strdup(binary);
 	if (command[0] == '!') return g_strdup(command + 1);
 
 	f = popen(command, "r");
@@ -101,7 +101,7 @@
 		{
 		if (!result)
 			{
-			int n = 0;
+			gint n = 0;
 
 			while (n < l && buf[n] != '\n' && buf[n] != '\r') n++;
 			if (n > 0) result = g_strndup(buf, n);
@@ -157,6 +157,8 @@
 */
 static gchar *html_browsers[] =
 {
+	/* Our specific script */
+	GQ_APPNAME_LC "_html_browser", NULL,
 	/* Redhat has a nifty htmlview script to start the user's preferred browser */
 	"htmlview",	NULL,
 	/* Debian has even better approach with alternatives */
@@ -175,9 +177,11 @@
 
 static void help_browser_run(void)
 {
-	gchar *result = NULL;
+	gchar *result;
 	gint i;
 
+	result = command_result(options->helpers.html_browser.command_name, options->helpers.html_browser.command_line);
+
 	i = 0;
 	while (!result && html_browsers[i])
 		{