SF.net SVN: geany-plugins:[2070] trunk/geany-plugins/devhelp/src
codebrainz at users.sourceforge.net
codebrainz at xxxxx
Sun May 22 22:28:25 UTC 2011
Revision: 2070
http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2070&view=rev
Author: codebrainz
Date: 2011-05-22 22:28:24 +0000 (Sun, 22 May 2011)
Log Message:
-----------
Add support for searching manual pages.
Modified Paths:
--------------
trunk/geany-plugins/devhelp/src/Makefile.am
trunk/geany-plugins/devhelp/src/devhelpplugin.c
trunk/geany-plugins/devhelp/src/devhelpplugin.h
trunk/geany-plugins/devhelp/src/main-notebook.c
Added Paths:
-----------
trunk/geany-plugins/devhelp/src/manpages.c
trunk/geany-plugins/devhelp/src/manpages.h
Modified: trunk/geany-plugins/devhelp/src/Makefile.am
===================================================================
--- trunk/geany-plugins/devhelp/src/Makefile.am 2011-05-22 00:24:13 UTC (rev 2069)
+++ trunk/geany-plugins/devhelp/src/Makefile.am 2011-05-22 22:28:24 UTC (rev 2070)
@@ -12,7 +12,8 @@
devhelp_la_SOURCES = \
main-notebook.c \
devhelpplugin.c \
- plugin.c
+ plugin.c \
+ manpages.c
noinst_HEADERS = \
plugin.h \
Modified: trunk/geany-plugins/devhelp/src/devhelpplugin.c
===================================================================
--- trunk/geany-plugins/devhelp/src/devhelpplugin.c 2011-05-22 00:24:13 UTC (rev 2069)
+++ trunk/geany-plugins/devhelp/src/devhelpplugin.c 2011-05-22 22:28:24 UTC (rev 2070)
@@ -36,6 +36,7 @@
#include "main-notebook.h"
#include "devhelpplugin.h"
#include "plugin.h"
+#include "manpages.h"
struct _DevhelpPluginPrivate
@@ -51,6 +52,7 @@
* and webkit view */
GtkWidget* doc_notebook; /* Geany's document notebook */
GtkWidget* editor_menu_item; /* Item in the editor's context menu */
+ GtkWidget* editor_man_menu_item; /* Manpage search menu item in the editor's context menu */
GtkWidget* editor_menu_sep; /* Separator item above menu item */
gboolean webview_active; /* Tracks whether webview stuff is shown */
gboolean last_main_tab_id; /* These track the last id of the tabs */
@@ -75,8 +77,12 @@
G_DEFINE_TYPE(DevhelpPlugin, devhelp_plugin, G_TYPE_OBJECT)
+static DhBase *dhbase = NULL;
+
+
/* Internal callbacks */
static void on_search_help_activate(GtkMenuItem * menuitem, DevhelpPlugin *self);
+static void on_search_help_man_activate(GtkMenuItem * menuitem, DevhelpPlugin *self);
static void on_editor_menu_popup(GtkWidget * widget, DevhelpPlugin *self);
static void on_link_clicked(GObject * ignored, DhLink * dhlink, DevhelpPlugin *self);
static void on_back_button_clicked(GtkToolButton * btn, DevhelpPlugin *self);
@@ -106,10 +112,13 @@
gtk_notebook_remove_page(GTK_NOTEBOOK(self->priv->main_notebook), self->priv->webview_tab);
if (!self->priv->in_message_window)
+ {
+ g_debug("Destroying main notebook");
main_notebook_destroy();
-
+ }
gtk_widget_destroy(self->priv->editor_menu_sep);
gtk_widget_destroy(self->priv->editor_menu_item);
+ gtk_widget_destroy(self->priv->editor_man_menu_item);
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(geany->main_widgets->sidebar_notebook),
self->priv->orig_sb_tab_pos);
@@ -117,6 +126,8 @@
if (self->priv->last_uri != NULL)
g_free(self->priv->last_uri);
+ devhelp_plugin_remove_manpages_temp_files();
+
G_OBJECT_CLASS(devhelp_plugin_parent_class)->finalize(object);
}
@@ -144,7 +155,9 @@
GList *keywords;
#endif
- self->priv->dhbase = dh_base_new();
+ if (dhbase == NULL)
+ dhbase = dh_base_new();
+ self->priv->dhbase = dhbase;
#ifdef HAVE_BOOK_MANAGER /* for newer api */
book_manager = dh_base_get_book_manager(self->priv->dhbase);
@@ -174,16 +187,20 @@
p = self->priv;
p->editor_menu_sep = gtk_separator_menu_item_new();
- p->editor_menu_item = gtk_menu_item_new_with_label(_("Search Documentation for Tag"));
+ p->editor_menu_item = gtk_menu_item_new_with_label(_("Search Devhelp for Tag"));
+ p->editor_man_menu_item = gtk_menu_item_new_with_label(_("Search manual pages for Tag"));
g_signal_connect(geany->main_widgets->editor_menu, "show", G_CALLBACK(on_editor_menu_popup), self);
g_signal_connect(p->editor_menu_item, "activate", G_CALLBACK(on_search_help_activate), self);
+ g_signal_connect(p->editor_man_menu_item, "activate", G_CALLBACK(on_search_help_man_activate), self);
gtk_menu_shell_append(GTK_MENU_SHELL(geany->main_widgets->editor_menu), p->editor_menu_sep);
gtk_menu_shell_append(GTK_MENU_SHELL(geany->main_widgets->editor_menu), p->editor_menu_item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(geany->main_widgets->editor_menu), p->editor_man_menu_item);
gtk_widget_show(p->editor_menu_sep);
gtk_widget_show(p->editor_menu_item);
+ gtk_widget_show(p->editor_man_menu_item);
}
@@ -320,23 +337,58 @@
}
+void devhelp_plugin_search(DevhelpPlugin *self, const gchar *term)
+{
+ /* todo: fallback on manpages */
+ devhelp_plugin_search_books(self, term);
+}
+
+
/**
* Search for a term in Devhelp and activate/show the plugin's UI stuff.
*
* @param dhplug Devhelp plugin
* @param term The string to search for
*/
-void devhelp_plugin_search(DevhelpPlugin *self, const gchar *term)
+void devhelp_plugin_search_books(DevhelpPlugin *self, const gchar *term)
{
+
g_return_if_fail(self != NULL);
g_return_if_fail(term != NULL);
dh_search_set_search_string(DH_SEARCH(self->priv->search), term, NULL);
- devhelp_plugin_activate_ui(self, TRUE);
+
+ devhelp_plugin_activate_all_tabs(self);
}
/**
+ * Search for a term in Manual Pages and activate/show the plugin's UI stuff.
+ *
+ * @param dhplug Devhelp plugin
+ * @param term The string to search for
+ */
+void devhelp_plugin_search_manpages(DevhelpPlugin *self, const gchar *term)
+{
+ gchar *man_fn;
+
+ g_return_if_fail(self != NULL);
+ g_return_if_fail(term != NULL);
+
+ man_fn = devhelp_plugin_manpages_search(term, NULL);
+
+ if (man_fn == NULL)
+ return;
+
+ webkit_web_view_open(WEBKIT_WEB_VIEW(self->priv->webview), man_fn);
+
+ g_free(man_fn);
+
+ devhelp_plugin_activate_all_tabs(self);
+}
+
+
+/**
* Cleans up a word/tag before searching.
*
* Replaces non @c GEANY_WORDCHARS in str with spaces and then trims whitespace.
@@ -772,10 +824,24 @@
if ((current_tag = devhelp_plugin_get_current_tag()) == NULL)
return;
- dh_search_set_search_string(DH_SEARCH(self->priv->search), current_tag, NULL);
+ devhelp_plugin_search_books(self, current_tag);
- devhelp_plugin_activate_ui(self, TRUE);
+ g_free(current_tag);
+}
+
+/* Called when the editor menu item is selected */
+static void on_search_help_man_activate(GtkMenuItem * menuitem, DevhelpPlugin *self)
+{
+ gchar *current_tag;
+
+ g_return_if_fail(self != NULL);
+
+ if ((current_tag = devhelp_plugin_get_current_tag()) == NULL)
+ return;
+
+ devhelp_plugin_search_manpages(self, current_tag);
+
g_free(current_tag);
}
@@ -786,7 +852,7 @@
*/
static void on_editor_menu_popup(GtkWidget * widget, DevhelpPlugin *self)
{
- gchar *label_tag, *curword, *new_label;
+ gchar *label_tag, *curword, *new_label, *new_man_label;
g_return_if_fail(self != NULL);
@@ -795,18 +861,23 @@
if (curword == NULL)
{
gtk_widget_set_sensitive(self->priv->editor_menu_item, FALSE);
+ gtk_widget_set_sensitive(self->priv->editor_man_menu_item, FALSE);
return;
}
label_tag = g_strndup(curword, DHPLUG_MAX_LABEL_TAG);
new_label = g_strdup_printf(_("Search Devhelp for: %s..."), g_strstrip(label_tag));
+ new_man_label = g_strdup_printf(_("Search manual pages for: %s..."), label_tag);
gtk_menu_item_set_label(GTK_MENU_ITEM(self->priv->editor_menu_item), new_label);
+ gtk_menu_item_set_label(GTK_MENU_ITEM(self->priv->editor_man_menu_item), new_man_label);
g_free(new_label);
+ g_free(new_man_label);
g_free(label_tag);
gtk_widget_set_sensitive(self->priv->editor_menu_item, TRUE);
+ gtk_widget_set_sensitive(self->priv->editor_man_menu_item, TRUE);
g_free(curword);
}
Modified: trunk/geany-plugins/devhelp/src/devhelpplugin.h
===================================================================
--- trunk/geany-plugins/devhelp/src/devhelpplugin.h 2011-05-22 00:24:13 UTC (rev 2069)
+++ trunk/geany-plugins/devhelp/src/devhelpplugin.h 2011-05-22 22:28:24 UTC (rev 2070)
@@ -79,7 +79,9 @@
void devhelp_plugin_set_is_in_msgwin (DevhelpPlugin *self, gboolean in_msgwin);
void devhelp_plugin_activate_ui (DevhelpPlugin *self, gboolean show_search_tab);
-void devhelp_plugin_search (DevhelpPlugin *self, const gchar *term);
+void devhelp_plugin_search (DevhelpPlugin *self, const gchar *term);
+void devhelp_plugin_search_books (DevhelpPlugin *self, const gchar *term);
+void devhelp_plugin_search_manpages (DevhelpPlugin *self, const gchar *term);
const gchar* devhelp_plugin_get_last_uri (DevhelpPlugin *self);
void devhelp_plugin_set_last_uri (DevhelpPlugin *self, const gchar *uri);
Modified: trunk/geany-plugins/devhelp/src/main-notebook.c
===================================================================
--- trunk/geany-plugins/devhelp/src/main-notebook.c 2011-05-22 00:24:13 UTC (rev 2069)
+++ trunk/geany-plugins/devhelp/src/main-notebook.c 2011-05-22 22:28:24 UTC (rev 2070)
@@ -1,24 +1,24 @@
/*
* main-notebook.c - Part of the Geany Devhelp Plugin
- *
+ *
* Copyright 2010 Matthew Brush <mbrush at leftclick.ca>
- *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
-
+
#include <gtk/gtk.h>
#include "geanyplugin.h"
#include "plugin.h"
@@ -29,7 +29,7 @@
/**
* Checks to see if the main_notebook exists in Geany's UI.
- *
+ *
* @return TRUE if the main_notebook exists, FALSE if not.
*/
gboolean main_notebook_exists(void)
@@ -42,7 +42,7 @@
* even exists or if it only contains the code tab (ie. last tab). This
* function gets called from main_notebook_destroy() to ensure that you
* can't pull the rug out from under another plugin using the notebook.
- *
+ *
* @return TRUE if there are no other plugins using the main notebook
* and it's safe to destroy or FALSE if it should be left
* alone.
@@ -63,24 +63,25 @@
* is still using the main_notebook.
*/
void main_notebook_destroy(void)
-{
+{
GtkWidget *main_notebook, *doc_nb_parent, *vbox, *doc_nb;
-
+
if (!main_notebook_needs_destroying())
return;
-
- main_notebook = ui_lookup_widget(geany->main_widgets->window,
- "main_notebook");
+ main_notebook = ui_lookup_widget(geany->main_widgets->window, "main_notebook");
+
doc_nb_parent = gtk_widget_get_parent(main_notebook);
doc_nb = g_object_get_data(G_OBJECT(main_notebook), "doc_notebook");
-
+
/* temporarily disable the notebook to prevent a segfault when
* on_editor_focus_in() calls editor_check_colorize(). */
gtk_widget_set_sensitive(geany->main_widgets->notebook, FALSE);
vbox = ui_lookup_widget(geany->main_widgets->window, "vbox1");
- if (GTK_IS_WIDGET(doc_nb) && doc_nb->parent != NULL)
+
+ /* fixme */
+ if (GTK_IS_WIDGET(doc_nb) && gtk_widget_get_parent(GTK_WIDGET(doc_nb)) == main_notebook)
{
gtk_widget_ref(doc_nb);
gtk_container_remove(GTK_CONTAINER(main_notebook), doc_nb);
@@ -88,16 +89,16 @@
gtk_container_add(GTK_CONTAINER(doc_nb_parent), doc_nb);
gtk_widget_unref(doc_nb);
}
-
+
gtk_widget_set_sensitive(geany->main_widgets->notebook, TRUE);
}
/**
* Checks to see if the main_notebook already exists and if it does, it
- * returns a pointer to it, if not, it creates the main_notebook. This
+ * returns a pointer to it, if not, it creates the main_notebook. This
* function should be called by plugins wishing to use the main_notebook
* to ensure that there is no conflict with other plugins.
- *
+ *
* @return The main_notebook that already existed or was created. If
* there was a problem creating/getting the main_notebook,
* NULL is returned.
@@ -118,25 +119,25 @@
{
gboolean found = FALSE;
const gchar *widget_name = gtk_widget_get_name(widget);
-
+
if (widget_name != NULL && g_strcmp0(widget_name, "main_notebook") == 0)
found = TRUE;
if (GTK_IS_CONTAINER(widget))
{
GList *children, *iter;
-
+
children = gtk_container_get_children(GTK_CONTAINER(widget));
-
+
for (iter=children; !found && iter; iter=g_list_next(iter))
found = holds_main_notebook(iter->data);
-
+
g_list_free(children);
}
-
+
return found;
}
-/*
+/*
* Creates the main_notebook if it doesn't already exist and returns a
* pointer to it. If it does already exist, the function returns NULL.
*/
@@ -147,31 +148,32 @@
if (main_notebook_exists())
return NULL;
-
+
doc_nb_box = gtk_vbox_new(FALSE, 0);
vbox = ui_lookup_widget(geany->main_widgets->window, "vbox1");
-
+
main_notebook = gtk_notebook_new();
gtk_widget_set_name(main_notebook, "main_notebook");
-
+
doc_nb_parent = gtk_widget_get_parent(geany->main_widgets->sidebar_notebook);
-
+
/* sidebar on left */
if (gtk_paned_get_child1(GTK_PANED(doc_nb_parent)) == geany->main_widgets->sidebar_notebook)
doc_nb = gtk_paned_get_child2(GTK_PANED(doc_nb_parent));
else /* sidebar on right */
doc_nb = gtk_paned_get_child1(GTK_PANED(doc_nb_parent));
+ g_object_set_data(G_OBJECT(main_notebook), "doc_notebook", doc_nb);
- gtk_notebook_append_page(GTK_NOTEBOOK(main_notebook),
+ gtk_notebook_append_page(GTK_NOTEBOOK(main_notebook),
doc_nb_box,
gtk_label_new(_("Code")));
-
+
gtk_widget_ref(doc_nb);
gtk_container_remove(GTK_CONTAINER(doc_nb_parent), doc_nb);
gtk_container_add(GTK_CONTAINER(doc_nb_parent), main_notebook);
gtk_widget_show_all(main_notebook);
-
+
gtk_container_add(GTK_CONTAINER(doc_nb_box), doc_nb);
gtk_widget_unref(doc_nb);
gtk_widget_show_all(doc_nb);
@@ -181,9 +183,9 @@
/* from ui_utils: ui_hookup_widget() */
g_object_set_data_full(
- G_OBJECT(geany->main_widgets->window),
+ G_OBJECT(geany->main_widgets->window),
"main_notebook",
- g_object_ref(main_notebook),
+ g_object_ref(main_notebook),
(GDestroyNotify)g_object_unref);
return main_notebook;
Added: trunk/geany-plugins/devhelp/src/manpages.c
===================================================================
--- trunk/geany-plugins/devhelp/src/manpages.c (rev 0)
+++ trunk/geany-plugins/devhelp/src/manpages.c 2011-05-22 22:28:24 UTC (rev 2070)
@@ -0,0 +1,238 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <glib.h>
+
+#include "manpages.h"
+
+#define DEVHELP_MANPAGE_NUM_SECTIONS 8
+/* In order of most likely sections */
+static gint sections[DEVHELP_MANPAGE_NUM_SECTIONS] = { 3, 2, 1, 8, 5, 4, 7, 6 };
+
+#define DEVHELP_MANPAGE_BUF_SIZE 4096
+
+static GList *temp_files = NULL;
+
+
+/* Locates the path to the manpage found for the term and section. */
+static gchar *find_manpage(const gchar *term, const gchar *section)
+{
+ FILE *fp;
+ gint i, len, retcode=0;
+ gchar *cmd, buf[PATH_MAX];
+
+ g_return_val_if_fail(term != NULL, NULL);
+
+ if (section != NULL) /* user-specified section */
+ {
+ cmd = g_strdup_printf("man --where %s '%s'", section, term);
+ if ((fp = popen(cmd, "r")) != NULL)
+ {
+ g_free(cmd);
+
+ len = fread(buf, sizeof(gchar), PATH_MAX, fp);
+ retcode = pclose(fp);
+ }
+ g_free(cmd);
+ }
+ else
+ {
+
+ /* try in order of most-likely sections */
+ for (i = 0; i < DEVHELP_MANPAGE_NUM_SECTIONS; i++)
+ {
+ cmd = g_strdup_printf("man --where %d '%s'", sections[i], term);
+ if ((fp = popen(cmd, "r")) == NULL)
+ {
+ g_free(cmd);
+ continue;
+ }
+
+ g_free(cmd);
+ len = fread(buf, sizeof(gchar), PATH_MAX, fp);
+ retcode = pclose(fp);
+
+ if (retcode != 0)
+ continue;
+ else
+ break;
+ }
+
+ /* try without section if all else fails */
+ if (retcode != 0)
+ {
+ cmd = g_strdup_printf("man --where '%s'", term);
+ if ((fp = popen(cmd, "r")) == NULL)
+ {
+ g_free(cmd);
+ return NULL;
+ }
+
+ g_free(cmd);
+ len = fread(buf, sizeof(gchar), PATH_MAX, fp);
+ retcode = pclose(fp);
+ }
+ }
+
+ buf[PATH_MAX - 1] = '\0';
+
+ if (strlen(buf) == 0 || retcode != 0)
+ return NULL;
+
+ return g_strstrip(g_strdup(buf));
+}
+
+
+/* Finds the full URI to the manpage for term and section. */
+/*
+static gchar *find_manpage_uri(const gchar *term, const gchar *section)
+{
+ gchar *uri, *fn;
+
+ g_return_val_if_fail(term != NULL, NULL);
+
+ fn = find_manpage(term, section);
+ if (fn == NULL)
+ return NULL;
+
+ uri = g_strdup_printf("file://%s", fn);
+ g_free(fn);
+
+ return uri;
+}
+*/
+
+
+/* Read the text output from man2html or NULL. */
+/*
+static gchar *devhelp_plugin_man2html(const gchar *filename)
+{
+ FILE *fp;
+ gint size = DEVHELP_MANPAGE_BUF_SIZE;
+ gchar buf[DEVHELP_MANPAGE_BUF_SIZE] = { 0 };
+ gchar *text=NULL, *cmd;
+
+ g_return_val_if_fail(filename != NULL, NULL);
+
+ cmd = g_strdup_printf("man2html '%s'", filename);
+
+ fp = popen(cmd, "r");
+ g_free(cmd);
+ if (fp == NULL)
+ return NULL;
+
+ while(fgets(buf, DEVHELP_MANPAGE_BUF_SIZE-1, fp) != NULL)
+ {
+ text = g_realloc(text, size);
+ strncat(text, buf, DEVHELP_MANPAGE_BUF_SIZE);
+ size += DEVHELP_MANPAGE_BUF_SIZE;
+ }
+
+ pclose(fp);
+ return text;
+}
+*/
+
+
+/* Read the text output from man or NULL. */
+static gchar *devhelp_plugin_man(const gchar *filename)
+{
+ FILE *fp;
+ gint size = DEVHELP_MANPAGE_BUF_SIZE;
+ gchar buf[DEVHELP_MANPAGE_BUF_SIZE] = { 0 };
+ gchar *text=NULL, *cmd;
+
+ g_return_val_if_fail(filename != NULL, NULL);
+
+ cmd = g_strdup_printf("man \"%s\"", filename);
+
+ fp = popen(cmd, "r");
+ g_free(cmd);
+ if (fp == NULL)
+ return NULL;
+
+ while (fgets(buf, DEVHELP_MANPAGE_BUF_SIZE-1, fp) != NULL)
+ {
+ text = g_realloc(text, size);
+ strncat(text, buf, DEVHELP_MANPAGE_BUF_SIZE);
+ size += DEVHELP_MANPAGE_BUF_SIZE;
+ }
+
+ pclose(fp);
+ return g_strstrip(text);
+}
+
+
+/* Gets the manpage content as text, writes it to a temp file and returns
+ * the path to the tempfile */
+gchar *devhelp_plugin_manpages_search(const gchar *term, const gchar *section)
+{
+ FILE *fp;
+ gint fd, len;
+ gchar *man_fn, *tmp_fn, *uri, *text;
+ const gchar *tmpl = "devhelp_manpage_XXXXXX.txt";
+
+ man_fn = find_manpage(term, section);
+ if (man_fn == NULL)
+ return NULL;
+
+ tmp_fn = NULL;
+ if ((fd = g_file_open_tmp(tmpl, &tmp_fn, NULL)) == -1)
+ {
+ g_free(man_fn);
+ g_free(tmp_fn); /* is NULL? */
+ return NULL;
+ }
+
+ fp = fdopen(fd, "w");
+ fseek(fp, 0, SEEK_SET);
+
+ text = devhelp_plugin_man(man_fn);
+ if (text == NULL)
+ {
+ g_free(man_fn);
+ g_free(tmp_fn);
+ fclose(fp);
+ return NULL;
+ }
+
+ len = strlen(text);
+ if (fwrite(text, sizeof(gchar), len, fp) != len)
+ {
+ g_free(man_fn);
+ g_free(tmp_fn);
+ g_free(text);
+ fclose(fp);
+ return NULL;
+ }
+
+ g_free(man_fn);
+ g_free(text);
+ fclose(fp);
+
+ temp_files = g_list_append(temp_files, tmp_fn);
+ uri = g_strdup_printf("file://%s", tmp_fn);
+
+ return uri;
+}
+
+
+void devhelp_plugin_remove_manpages_temp_files(void)
+{
+ GList *iter;
+
+ if (temp_files == NULL)
+ return;
+
+ for (iter = temp_files; iter != NULL; iter = iter->next)
+ {
+ if (remove(iter->data) == -1)
+ g_warning("Unable to delete temp file: %s", strerror(errno));
+ g_free(iter->data);
+ }
+
+ g_list_free(temp_files);
+
+ temp_files = NULL;
+}
Added: trunk/geany-plugins/devhelp/src/manpages.h
===================================================================
--- trunk/geany-plugins/devhelp/src/manpages.h (rev 0)
+++ trunk/geany-plugins/devhelp/src/manpages.h 2011-05-22 22:28:24 UTC (rev 2070)
@@ -0,0 +1,36 @@
+/*
+ * manpages.h
+ *
+ * Copyright 2011 Matthew Brush <mbrush at desktop>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ *
+ */
+
+#ifndef MANPAGES_H
+#define MANPAGES_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+gchar *devhelp_plugin_manpages_search(const gchar *term, const gchar *section);
+void devhelp_plugin_remove_manpages_temp_files(void);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+#endif /* MANPAGES_H */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Plugins-Commits
mailing list