summaryrefslogtreecommitdiff
path: root/src/perl
diff options
context:
space:
mode:
Diffstat (limited to 'src/perl')
-rw-r--r--src/perl/textui/TextBufferView.xs65
-rw-r--r--src/perl/textui/TextUI.xs2
2 files changed, 64 insertions, 3 deletions
diff --git a/src/perl/textui/TextBufferView.xs b/src/perl/textui/TextBufferView.xs
index dfb1d036..37efc856 100644
--- a/src/perl/textui/TextBufferView.xs
+++ b/src/perl/textui/TextBufferView.xs
@@ -1,17 +1,74 @@
#include "module.h"
+static char *default_indent_func;
+
+static int perl_indent_func(TEXT_BUFFER_VIEW_REC *view,
+ LINE_REC *line, int ypos)
+{
+ dSP;
+ int retcount, ret;
+
+ ENTER;
+ SAVETMPS;
+
+ PUSHMARK(SP);
+ XPUSHs(sv_2mortal(plain_bless(view, "Irssi::TextUI::TextBufferView")));
+ XPUSHs(sv_2mortal(plain_bless(line, "Irssi::TextUI::Line")));
+ XPUSHs(sv_2mortal(newSViv(ypos)));
+ PUTBACK;
+
+ retcount = perl_call_pv(default_indent_func, G_EVAL|G_DISCARD);
+ SPAGAIN;
+
+ ret = 0;
+ if (SvTRUE(ERRSV)) {
+ STRLEN n_a;
+ char *package;
+
+ package = perl_function_get_package(default_indent_func);
+ signal_emit("script error", 2,
+ perl_script_find_package(package),
+ SvPV(ERRSV, n_a));
+ g_free(package);
+ } else if (retcount > 0) {
+ ret = POPi;
+ }
+
+ PUTBACK;
+ FREETMPS;
+ LEAVE;
+
+ return ret;
+}
+
+void perl_textbuffer_view_init(void)
+{
+ default_indent_func = NULL;
+}
+
+void perl_textbuffer_view_deinit(void)
+{
+ g_free_not_null(default_indent_func);
+}
+
MODULE = Irssi::TextUI::TextBufferView PACKAGE = Irssi::TextUI::TextBuffer PREFIX = textbuffer_
PROTOTYPES: ENABLE
Irssi::TextUI::TextBufferView
-textbuffer_view_create(buffer, width, height, default_indent, longword_noindent, scroll)
+textbuffer_view_create(buffer, width, height, scroll)
Irssi::TextUI::TextBuffer buffer
int width
int height
- int default_indent
- int longword_noindent
int scroll
+void
+gui_windows_set_default_indent_func(func)
+ char *func
+CODE:
+ g_free_not_null(default_indent_func);
+ default_indent_func = g_strdup(func);
+ gui_windows_set_default_indent_func(perl_indent_func);
+
#*******************************
MODULE = Irssi::TextUI::TextBufferView PACKAGE = Irssi::TextUI::TextBufferView PREFIX = textbuffer_view_
#*******************************
@@ -25,6 +82,8 @@ textbuffer_view_set_default_indent(view, default_indent, longword_noindent)
Irssi::TextUI::TextBufferView view
int default_indent
int longword_noindent
+CODE:
+ textbuffer_view_set_default_indent(view, default_indent, longword_noindent, NULL);
void
textbuffer_view_set_scroll(view, scroll)
diff --git a/src/perl/textui/TextUI.xs b/src/perl/textui/TextUI.xs
index c92da84a..9ebd2c6b 100644
--- a/src/perl/textui/TextUI.xs
+++ b/src/perl/textui/TextUI.xs
@@ -96,11 +96,13 @@ CODE:
irssi_add_plains(textui_plains);
perl_statusbar_init();
+ perl_textbuffer_view_init();
void
deinit()
CODE:
perl_statusbar_deinit();
+ perl_textbuffer_view_deinit();
MODULE = Irssi::TextUI PACKAGE = Irssi