462 lines
12 KiB
Plaintext
462 lines
12 KiB
Plaintext
%%
|
|
headers
|
|
#include <pygobject.h>
|
|
#include <pygtk/pygtk.h>
|
|
|
|
#include <pluma/pluma-language-manager.h>
|
|
#include <pluma/pluma-plugin.h>
|
|
#include <pluma/pluma-app.h>
|
|
#include <pluma/pluma-encodings.h>
|
|
#include <pluma/pluma-enum-types.h>
|
|
#include <pluma/pluma-statusbar.h>
|
|
#include <pluma/pluma-debug.h>
|
|
#include <pluma/pluma-help.h>
|
|
|
|
#include "pluma-plugin-python.h"
|
|
|
|
void pypluma_register_classes (PyObject *d);
|
|
void pypluma_add_constants (PyObject *module, const gchar *strip_prefix);
|
|
|
|
static PyObject *
|
|
_helper_wrap_gobject_glist (const GList *list)
|
|
{
|
|
PyObject *py_list;
|
|
const GList *tmp;
|
|
|
|
if ((py_list = PyList_New(0)) == NULL) {
|
|
return NULL;
|
|
}
|
|
for (tmp = list; tmp != NULL; tmp = tmp->next) {
|
|
PyObject *py_obj = pygobject_new(G_OBJECT(tmp->data));
|
|
|
|
if (py_obj == NULL) {
|
|
Py_DECREF(py_list);
|
|
return NULL;
|
|
}
|
|
PyList_Append(py_list, py_obj);
|
|
Py_DECREF(py_obj);
|
|
}
|
|
return py_list;
|
|
}
|
|
|
|
static PyObject *
|
|
_helper_wrap_gobject_gslist (const GSList *list)
|
|
{
|
|
PyObject *py_list;
|
|
const GSList *tmp;
|
|
|
|
if ((py_list = PyList_New(0)) == NULL) {
|
|
return NULL;
|
|
}
|
|
for (tmp = list; tmp != NULL; tmp = tmp->next) {
|
|
PyObject *py_obj = pygobject_new(G_OBJECT(tmp->data));
|
|
|
|
if (py_obj == NULL) {
|
|
Py_DECREF(py_list);
|
|
return NULL;
|
|
}
|
|
PyList_Append(py_list, py_obj);
|
|
Py_DECREF(py_obj);
|
|
}
|
|
return py_list;
|
|
}
|
|
%%
|
|
include
|
|
plumaplugin.override
|
|
plumamessage.override
|
|
%%
|
|
modulename pluma
|
|
%%
|
|
import gtk.Widget as PyGtkWidget_Type
|
|
import gobject.GObject as PyGObject_Type
|
|
import gtk.gdk.Screen as PyGdkScreen_Type
|
|
import gtk.VBox as PyGtkVBox_Type
|
|
import gtk.Window as PyGtkWindow_Type
|
|
import gtk.Image as PyGtkImage_Type
|
|
import gtk.Statusbar as PyGtkStatusbar_Type
|
|
import gtksourceview2.Buffer as PyGtkSourceBuffer_Type
|
|
import gtksourceview2.View as PyGtkSourceView_Type
|
|
import gtksourceview2.Language as PyGtkSourceLanguage_Type
|
|
import gtksourceview2.LanguageManager as PyGtkSourceLanguageManager_Type
|
|
%%
|
|
ignore-glob
|
|
*_get_type
|
|
pluma_document_error_quark
|
|
pluma_panel_add_item_with_stock_icon
|
|
%%
|
|
override pluma_app_create_window kwargs
|
|
static PyObject *
|
|
_wrap_pluma_app_create_window(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "screen", NULL};
|
|
PyGObject *screen = NULL;
|
|
PlumaWindow *ret;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
"|O!", kwlist,
|
|
&PyGdkScreen_Type, &screen))
|
|
return NULL;
|
|
|
|
ret = pluma_app_create_window(PLUMA_APP(self->obj),
|
|
screen ? GDK_SCREEN(screen->obj) : NULL);
|
|
|
|
/* pygobject_new handles NULL checking */
|
|
return pygobject_new((GObject *)ret);
|
|
}
|
|
%%
|
|
override pluma_app_get_windows
|
|
static PyObject *
|
|
_wrap_pluma_app_get_windows(PyGObject *self)
|
|
{
|
|
const GList *list;
|
|
PyObject *py_list;
|
|
|
|
list = pluma_app_get_windows (PLUMA_APP (self->obj));
|
|
|
|
py_list = _helper_wrap_gobject_glist (list);
|
|
|
|
return py_list;
|
|
}
|
|
%%
|
|
override pluma_app_get_views
|
|
static PyObject *
|
|
_wrap_pluma_app_get_views(PyGObject *self)
|
|
{
|
|
GList *list;
|
|
PyObject *py_list;
|
|
|
|
list = pluma_app_get_views (PLUMA_APP (self->obj));
|
|
|
|
py_list = _helper_wrap_gobject_glist (list);
|
|
|
|
g_list_free (list);
|
|
|
|
return py_list;
|
|
}
|
|
%%
|
|
override pluma_app_get_documents
|
|
static PyObject *
|
|
_wrap_pluma_app_get_documents(PyGObject *self)
|
|
{
|
|
GList *list;
|
|
PyObject *py_list;
|
|
|
|
list = pluma_app_get_documents (PLUMA_APP (self->obj));
|
|
|
|
py_list = _helper_wrap_gobject_glist (list);
|
|
|
|
g_list_free (list);
|
|
|
|
return py_list;
|
|
}
|
|
%%
|
|
override pluma_window_get_documents
|
|
static PyObject *
|
|
_wrap_pluma_window_get_documents(PyGObject *self)
|
|
{
|
|
GList *list;
|
|
PyObject *py_list;
|
|
|
|
list = pluma_window_get_documents (PLUMA_WINDOW (self->obj));
|
|
|
|
py_list = _helper_wrap_gobject_glist (list);
|
|
|
|
g_list_free(list);
|
|
|
|
return py_list;
|
|
}
|
|
%%
|
|
override pluma_window_get_unsaved_documents
|
|
static PyObject *
|
|
_wrap_pluma_window_get_unsaved_documents(PyGObject *self)
|
|
{
|
|
GList *list;
|
|
PyObject *py_list;
|
|
|
|
list = pluma_window_get_unsaved_documents (PLUMA_WINDOW (self->obj));
|
|
|
|
py_list = _helper_wrap_gobject_glist (list);
|
|
|
|
g_list_free(list);
|
|
|
|
return py_list;
|
|
}
|
|
%%
|
|
override pluma_window_get_views
|
|
static PyObject *
|
|
_wrap_pluma_window_get_views(PyGObject *self)
|
|
{
|
|
GList *list;
|
|
PyObject *py_list;
|
|
|
|
list = pluma_window_get_views (PLUMA_WINDOW (self->obj));
|
|
|
|
py_list = _helper_wrap_gobject_glist (list);
|
|
|
|
g_list_free(list);
|
|
|
|
return py_list;
|
|
}
|
|
%%
|
|
override pluma_window_close_tabs kwargs
|
|
static PyObject *
|
|
_wrap_pluma_window_close_tabs (PyGObject *self,
|
|
PyObject *args,
|
|
PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "tabs", NULL };
|
|
PyObject *list, *item;
|
|
GList *glist = NULL;
|
|
int len, i;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords (args, kwargs,
|
|
"O:PlumaWindow.close_tabs", kwlist,
|
|
&list))
|
|
return NULL;
|
|
|
|
if (!PySequence_Check (list))
|
|
{
|
|
PyErr_SetString (PyExc_TypeError,
|
|
"first argument must be a sequence");
|
|
return NULL;
|
|
}
|
|
|
|
len = PySequence_Length (list);
|
|
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
item = PySequence_GetItem (list, i);
|
|
Py_DECREF(item);
|
|
|
|
if (!pygobject_check (item, &PyPlumaTab_Type))
|
|
{
|
|
PyErr_SetString (PyExc_TypeError,
|
|
"sequence item not a Gtkwidget object");
|
|
g_list_free (glist);
|
|
return NULL;
|
|
}
|
|
|
|
glist = g_list_append (glist, pygobject_get (item));
|
|
}
|
|
|
|
pluma_window_close_tabs (PLUMA_WINDOW (self->obj), glist);
|
|
|
|
g_list_free (glist);
|
|
Py_INCREF (Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override pluma_document_get_search_text
|
|
static PyObject *
|
|
_wrap_pluma_document_get_search_text(PyGObject *self)
|
|
{
|
|
PyObject *tuple, *string;
|
|
guint flags;
|
|
gchar *ret;
|
|
|
|
ret = pluma_document_get_search_text (PLUMA_DOCUMENT (self->obj), &flags);
|
|
|
|
tuple = PyTuple_New(2);
|
|
if (ret) {
|
|
string = PyString_FromString(ret);
|
|
PyTuple_SetItem(tuple, 0, string);
|
|
} else {
|
|
Py_INCREF(Py_None);
|
|
PyTuple_SetItem(tuple, 0, Py_None);
|
|
}
|
|
PyTuple_SetItem(tuple, 1, PyInt_FromLong(flags));
|
|
|
|
g_free(ret);
|
|
|
|
return tuple;
|
|
}
|
|
%%
|
|
override pluma_panel_add_item kwargs
|
|
static PyObject *
|
|
_wrap_pluma_panel_add_item(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist1[] = { "item", "name", "image", NULL };
|
|
static char *kwlist2[] = { "item", "name", "stock_id", NULL };
|
|
PyGObject *item, *image;
|
|
char *name = NULL;
|
|
char *stock_id = NULL;
|
|
|
|
if (PyArg_ParseTupleAndKeywords(args, kwargs, "O!sO!:PlumaPanel.add_item", kwlist1, &PyGtkWidget_Type, &item, &name, &PyGtkImage_Type, &image)) {
|
|
pluma_panel_add_item(PLUMA_PANEL(self->obj), GTK_WIDGET(item->obj), name, GTK_WIDGET(image->obj));
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
|
|
PyErr_Clear();
|
|
|
|
if (PyArg_ParseTupleAndKeywords(args, kwargs, "O!ss:PlumaPanel.add_item", kwlist2, &PyGtkWidget_Type, &item, &name, &stock_id)) {
|
|
pluma_panel_add_item_with_stock_icon(PLUMA_PANEL(self->obj), GTK_WIDGET(item->obj), name, stock_id);
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
|
|
PyErr_Clear();
|
|
PyErr_SetString(PyExc_TypeError, "the last arg should be either a gtk.Image or a stock_id string");
|
|
return NULL;
|
|
}
|
|
%%
|
|
override pluma_app_get_default_deprecated
|
|
/* deprecated wrappers */
|
|
static PyObject *
|
|
_wrap_pluma_app_get_default_deprecated(PyObject *self)
|
|
{
|
|
if (PyErr_Warn(PyExc_DeprecationWarning, "use pluma.app_get_default instead") < 0)
|
|
return NULL;
|
|
return _wrap_pluma_app_get_default(self);
|
|
}
|
|
%%
|
|
override pluma_encoding_get_from_charset_deprecated kwargs
|
|
static PyObject *
|
|
_wrap_pluma_encoding_get_from_charset_deprecated(PyObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
if (PyErr_Warn(PyExc_DeprecationWarning, "use pluma.encoding_get_from_charset instead") < 0)
|
|
return NULL;
|
|
return _wrap_pluma_encoding_get_from_charset(self, args, kwargs);
|
|
}
|
|
%%
|
|
override pluma_encoding_get_from_index_deprecated kwargs
|
|
static PyObject *
|
|
_wrap_pluma_encoding_get_from_index_deprecated(PyObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
if (PyErr_Warn(PyExc_DeprecationWarning, "use pluma.encoding_get_from_index instead") < 0)
|
|
return NULL;
|
|
return _wrap_pluma_encoding_get_from_index(self, args, kwargs);
|
|
}
|
|
%%
|
|
override pluma_encoding_get_utf8_deprecated
|
|
static PyObject *
|
|
_wrap_pluma_encoding_get_utf8_deprecated(PyObject *self)
|
|
{
|
|
if (PyErr_Warn(PyExc_DeprecationWarning, "use pluma.encoding_get_utf8 instead") < 0)
|
|
return NULL;
|
|
return _wrap_pluma_encoding_get_utf8(self);
|
|
}
|
|
%%
|
|
override pluma_encoding_get_current_deprecated
|
|
static PyObject *
|
|
_wrap_pluma_encoding_get_current_deprecated(PyObject *self)
|
|
{
|
|
if (PyErr_Warn(PyExc_DeprecationWarning, "use pluma.encoding_get_current instead") < 0)
|
|
return NULL;
|
|
return _wrap_pluma_encoding_get_current(self);
|
|
}
|
|
%%
|
|
override pluma_tab_get_from_document_deprecated kwargs
|
|
static PyObject *
|
|
_wrap_pluma_tab_get_from_document_deprecated(PyObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
if (PyErr_Warn(PyExc_DeprecationWarning, "use pluma.tab_get_from_document instead") < 0)
|
|
return NULL;
|
|
return _wrap_pluma_tab_get_from_document(self, args, kwargs);
|
|
}
|
|
%%
|
|
override pluma_language_manager_list_languages_sorted kwargs
|
|
static PyObject *
|
|
_wrap_pluma_language_manager_list_languages_sorted(PyObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "lm", "include_hidden", NULL };
|
|
PyGObject *lm;
|
|
int include_hidden;
|
|
PyObject *py_list;
|
|
GSList *list;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords (args, kwargs,
|
|
"O!i:language_manager_list_languages_sorted",
|
|
kwlist, &PyGtkSourceLanguageManager_Type, &lm,
|
|
&include_hidden))
|
|
return NULL;
|
|
|
|
list = pluma_language_manager_list_languages_sorted (GTK_SOURCE_LANGUAGE_MANAGER (lm->obj),
|
|
include_hidden);
|
|
|
|
py_list = _helper_wrap_gobject_gslist (list);
|
|
|
|
g_slist_free (list);
|
|
|
|
return py_list;
|
|
}
|
|
%%
|
|
override pluma_debug kwargs
|
|
static PyObject *
|
|
_wrap_pluma_debug(PyObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "message", NULL };
|
|
PyObject *traceback_module, *mdict, *func, *traceback, *tuple;
|
|
PyObject *filename, *lineno, *funcname;
|
|
char *message = NULL;
|
|
|
|
if (g_getenv ("PLUMA_DEBUG_PLUGINS") == NULL)
|
|
{
|
|
Py_INCREF (Py_None);
|
|
return Py_None;
|
|
}
|
|
|
|
if (!PyArg_ParseTupleAndKeywords (args, kwargs, "|s", kwlist, &message))
|
|
return NULL;
|
|
|
|
traceback_module = PyImport_ImportModule ("traceback");
|
|
if (traceback_module == NULL)
|
|
{
|
|
g_warning ("traceback module cannot be imported");
|
|
Py_INCREF (Py_None);
|
|
return Py_None;
|
|
}
|
|
|
|
mdict = PyModule_GetDict (traceback_module);
|
|
func = PyDict_GetItemString (mdict, "extract_stack");
|
|
traceback = PyObject_CallFunction (func, "zi", NULL, 1);
|
|
tuple = PyList_GetItem (traceback, 0);
|
|
|
|
if (tuple == NULL || !PyTuple_Check (tuple))
|
|
{
|
|
g_warning ("traceback tuple is null!");
|
|
}
|
|
else
|
|
{
|
|
filename = PyTuple_GetItem (tuple, 0);
|
|
lineno = PyTuple_GetItem (tuple, 1);
|
|
funcname = PyTuple_GetItem (tuple, 2);
|
|
|
|
if (message == NULL)
|
|
pluma_debug (PLUMA_DEBUG_PLUGINS,
|
|
PyString_AsString (filename),
|
|
PyInt_AsLong (lineno),
|
|
PyString_AsString (funcname));
|
|
else
|
|
pluma_debug_message (PLUMA_DEBUG_PLUGINS,
|
|
PyString_AsString (filename),
|
|
PyInt_AsLong (lineno),
|
|
PyString_AsString (funcname),
|
|
"%s",
|
|
message);
|
|
}
|
|
Py_DECREF (traceback);
|
|
Py_DECREF (traceback_module);
|
|
|
|
Py_INCREF (Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|
|
override pluma_statusbar_flash_message kwargs
|
|
static PyObject *
|
|
_wrap_pluma_statusbar_flash_message(PyGObject *self, PyObject *args, PyObject *kwargs)
|
|
{
|
|
static char *kwlist[] = { "context_id", "message", NULL };
|
|
int context_id;
|
|
char *message;
|
|
|
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,"is:PlumaStatusbar.flash_message", kwlist, &context_id, &message))
|
|
return NULL;
|
|
|
|
pluma_statusbar_flash_message(PLUMA_STATUSBAR(self->obj), context_id, "%s", message);
|
|
|
|
Py_INCREF(Py_None);
|
|
return Py_None;
|
|
}
|
|
%%
|