[236] in BarnOwl Developers
[D-O-H] r413 - trunk/owl
daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:03:59 2009
Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
Date: Fri, 27 Oct 2006 15:08:01 -0400
To: dirty-owl-hackers@MIT.EDU
From: nelhage@MIT.EDU
Reply-To: dirty-owl-hackers@MIT.EDU
Author: nelhage
Date: 2006-10-27 15:07:59 -0400 (Fri, 27 Oct 2006)
New Revision: 413
Modified:
trunk/owl/commands.c
trunk/owl/functions.c
trunk/owl/global.c
trunk/owl/perlconfig.c
trunk/owl/perlglue.xs
Log:
Exposing edit window hooks to perl
Modified: trunk/owl/commands.c
===================================================================
--- trunk/owl/commands.c 2006-10-27 19:01:06 UTC (rev 412)
+++ trunk/owl/commands.c 2006-10-27 19:07:59 UTC (rev 413)
@@ -2505,14 +2505,12 @@
void owl_command_editresponse_done(owl_editwin *e)
{
- owl_global_set_response(&g, owl_editwin_get_text(e));
+ owl_function_run_buffercommand();
owl_global_set_typwin_inactive(&g);
owl_editwin_fullclear(e);
wnoutrefresh(owl_editwin_get_curswin(e));
owl_global_set_needrefresh(&g);
-
- owl_function_run_buffercommand();
}
Modified: trunk/owl/functions.c
===================================================================
--- trunk/owl/functions.c 2006-10-27 19:01:06 UTC (rev 412)
+++ trunk/owl/functions.c 2006-10-27 19:07:59 UTC (rev 413)
@@ -949,7 +949,7 @@
void owl_callback_aimlogin(owl_editwin *e) {
owl_function_aimlogin(owl_editwin_get_command(e),
- owl_global_get_response(&g));
+ owl_editwin_get_text(e));
}
void owl_function_aimlogin(char *user, char *passwd) {
Modified: trunk/owl/global.c
===================================================================
--- trunk/owl/global.c 2006-10-27 19:01:06 UTC (rev 412)
+++ trunk/owl/global.c 2006-10-27 19:07:59 UTC (rev 413)
@@ -98,7 +98,6 @@
owl_timer_create_countdown(&(g->aim_buddyinfo_timer), 60);
owl_buddylist_init(&(g->buddylist));
- g->response=NULL;
g->havezephyr=0;
g->haveaim=0;
owl_global_set_no_doaimevents(g);
@@ -813,19 +812,6 @@
s, (void(*)(void*))owl_style_free);
}
-char *owl_global_get_response(owl_global *g)
-{
- if (g->response==NULL) return("");
- return(g->response);
-}
-
-void owl_global_set_response(owl_global *g, char *resp)
-{
- if (g->response) owl_free(g->response);
- g->response=owl_strdup(resp);
-}
-
-
void owl_global_set_haveaim(owl_global *g)
{
g->haveaim=1;
Modified: trunk/owl/perlconfig.c
===================================================================
--- trunk/owl/perlconfig.c 2006-10-27 19:01:06 UTC (rev 412)
+++ trunk/owl/perlconfig.c 2006-10-27 19:07:59 UTC (rev 413)
@@ -377,3 +377,28 @@
{
SvREFCNT_dec(cmd);
}
+
+void owl_perlconfig_edit_callback(owl_editwin *e)
+{
+ SV *cb = (SV*)(e->cbdata);
+ if(cb == NULL) {
+ owl_function_error("Perl callback is NULL!");
+ }
+
+ dSP;
+
+ ENTER;
+ SAVETMPS;
+
+ PUSHMARK(SP);
+ XPUSHs(sv_2mortal(newSVpv(owl_editwin_get_text(e), 0)));
+ PUTBACK;
+
+ call_sv(cb, G_DISCARD);
+
+ FREETMPS;
+ LEAVE;
+
+ SvREFCNT_dec(cb);
+ e->cbdata = NULL;
+}
Modified: trunk/owl/perlglue.xs
===================================================================
--- trunk/owl/perlglue.xs 2006-10-27 19:01:06 UTC (rev 412)
+++ trunk/owl/perlglue.xs 2006-10-27 19:07:59 UTC (rev 413)
@@ -10,6 +10,8 @@
#include "owl.h"
SV *owl_perlconfig_curmessage2hashref(void);
+#define SV_IS_CODEREF(sv) (SvROK((sv)) && SvTYPE(SvRV((sv))) == SVt_PVCV)
+
MODULE = owl PACKAGE = owl
char *
@@ -83,6 +85,10 @@
PREINIT:
owl_cmd cmd;
CODE:
+ {
+ if(!SV_IS_CODEREF(func)) {
+ croak("Command function must be a coderef!");
+ }
SvREFCNT_inc(func);
cmd.name = name;
cmd.cmd_perl = func;
@@ -98,6 +104,7 @@
cmd.cmd_ctxv_fn = NULL;
cmd.cmd_ctxi_fn = NULL;
owl_cmddict_add_cmd(owl_global_get_cmddict(&g), &cmd);
+ }
void queue_message(msg)
SV *msg
@@ -139,3 +146,61 @@
owl_global_messagequeue_addmsg(&g, m);
}
+
+void start_question(line, callback)
+ char *line
+ SV *callback
+ PREINIT:
+ CODE:
+ {
+ if(!SV_IS_CODEREF(callback))
+ croak("Callback must be a subref");
+
+ owl_function_start_question(line);
+
+ SvREFCNT_inc(callback);
+ owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback);
+ owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback);
+ }
+
+void start_password(line, callback)
+ char *line
+ SV *callback
+ PREINIT:
+ CODE:
+ {
+ if(!SV_IS_CODEREF(callback))
+ croak("Callback must be a subref");
+
+ owl_function_start_password(line);
+
+ SvREFCNT_inc(callback);
+ owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback);
+ owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback);
+ }
+
+void start_edit_win(line, callback)
+ char *line
+ SV *callback
+ PREINIT:
+ owl_editwin * e;
+ char buff[1024];
+ CODE:
+ {
+ if(!SV_IS_CODEREF(callback))
+ croak("Callback must be a subref");
+
+ e = owl_global_get_typwin(&g);
+ owl_editwin_new_style(e, OWL_EDITWIN_STYLE_MULTILINE,
+ owl_global_get_msg_history(&g));
+ owl_editwin_clear(e);
+ owl_editwin_set_dotsend(e);
+ snprintf(buff, 1023, "----> %s\n", line);
+ owl_editwin_set_locktext(e, buff);
+
+ owl_global_set_typwin_active(&g);
+
+ SvREFCNT_inc(callback);
+ owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback);
+ owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback);
+ }