Changeset db8b00b


Ignore:
Timestamp:
Oct 27, 2006, 3:07:59 PM (17 years ago)
Author:
Nelson Elhage <nelhage@mit.edu>
Branches:
master, barnowl_perlaim, debian, release-1.10, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
Children:
bbd2fdc
Parents:
e74c01c
Message:
Exposing edit window hooks to perl
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • commands.c

    r1b6b2f3 rdb8b00b  
    25062506void owl_command_editresponse_done(owl_editwin *e)
    25072507{
    2508   owl_global_set_response(&g, owl_editwin_get_text(e));
     2508  owl_function_run_buffercommand();
    25092509
    25102510  owl_global_set_typwin_inactive(&g);
     
    25122512  wnoutrefresh(owl_editwin_get_curswin(e));
    25132513  owl_global_set_needrefresh(&g);
    2514 
    2515   owl_function_run_buffercommand();
    25162514}
    25172515
  • functions.c

    r1b6b2f3 rdb8b00b  
    950950void owl_callback_aimlogin(owl_editwin *e) {
    951951  owl_function_aimlogin(owl_editwin_get_command(e),
    952                         owl_global_get_response(&g));
     952                        owl_editwin_get_text(e));
    953953}
    954954
  • global.c

    r1b6b2f3 rdb8b00b  
    9999  owl_buddylist_init(&(g->buddylist));
    100100   
    101   g->response=NULL;
    102101  g->havezephyr=0;
    103102  g->haveaim=0;
     
    814813}
    815814
    816 char *owl_global_get_response(owl_global *g)
    817 {
    818   if (g->response==NULL) return("");
    819   return(g->response);
    820 }
    821 
    822 void owl_global_set_response(owl_global *g, char *resp)
    823 {
    824   if (g->response) owl_free(g->response);
    825   g->response=owl_strdup(resp);
    826 }
    827 
    828 
    829815void owl_global_set_haveaim(owl_global *g)
    830816{
  • perlconfig.c

    r6922edd rdb8b00b  
    378378  SvREFCNT_dec(cmd);
    379379}
     380
     381void owl_perlconfig_edit_callback(owl_editwin *e)
     382{
     383  SV *cb = (SV*)(e->cbdata);
     384  if(cb == NULL) {
     385    owl_function_error("Perl callback is NULL!");
     386  }
     387
     388  dSP;
     389
     390  ENTER;
     391  SAVETMPS;
     392
     393  PUSHMARK(SP);
     394  XPUSHs(sv_2mortal(newSVpv(owl_editwin_get_text(e), 0)));
     395  PUTBACK;
     396 
     397  call_sv(cb, G_DISCARD);
     398
     399  FREETMPS;
     400  LEAVE;
     401
     402  SvREFCNT_dec(cb);
     403  e->cbdata = NULL;
     404}
  • perlglue.xs

    r1b6b2f3 rdb8b00b  
    1010#include "owl.h"
    1111SV *owl_perlconfig_curmessage2hashref(void);
     12
     13#define SV_IS_CODEREF(sv) (SvROK((sv)) && SvTYPE(SvRV((sv))) == SVt_PVCV)
    1214
    1315MODULE = owl            PACKAGE = owl           
     
    8486                owl_cmd cmd;
    8587        CODE:
     88        {
     89                if(!SV_IS_CODEREF(func)) {
     90                        croak("Command function must be a coderef!");
     91                }
    8692                SvREFCNT_inc(func);
    8793                cmd.name = name;
     
    99105                cmd.cmd_ctxi_fn = NULL;
    100106                owl_cmddict_add_cmd(owl_global_get_cmddict(&g), &cmd);
     107           }
    101108
    102109void queue_message(msg)
     
    140147                owl_global_messagequeue_addmsg(&g, m);
    141148        }
     149
     150void start_question(line, callback)
     151        char *line
     152        SV *callback
     153        PREINIT:
     154        CODE:
     155        {
     156                if(!SV_IS_CODEREF(callback))
     157                        croak("Callback must be a subref");
     158
     159                owl_function_start_question(line);
     160
     161                SvREFCNT_inc(callback);
     162                owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback);
     163                owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback);
     164        }
     165
     166void start_password(line, callback)
     167        char *line
     168        SV *callback
     169        PREINIT:
     170        CODE:
     171        {
     172                if(!SV_IS_CODEREF(callback))
     173                        croak("Callback must be a subref");
     174
     175                owl_function_start_password(line);
     176
     177                SvREFCNT_inc(callback);
     178                owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback);
     179                owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback);
     180        }
     181
     182void start_edit_win(line, callback)
     183        char *line
     184        SV *callback
     185        PREINIT:
     186                owl_editwin * e;
     187                char buff[1024];
     188        CODE:
     189        {
     190                if(!SV_IS_CODEREF(callback))
     191                        croak("Callback must be a subref");
     192
     193                e = owl_global_get_typwin(&g);
     194                owl_editwin_new_style(e, OWL_EDITWIN_STYLE_MULTILINE,
     195                                      owl_global_get_msg_history(&g));
     196                owl_editwin_clear(e);
     197                owl_editwin_set_dotsend(e);
     198                snprintf(buff, 1023, "----> %s\n", line);
     199                owl_editwin_set_locktext(e, buff);
     200
     201                owl_global_set_typwin_active(&g);
     202
     203                SvREFCNT_inc(callback);
     204                owl_editwin_set_cbdata(owl_global_get_typwin(&g), callback);
     205                owl_editwin_set_callback(owl_global_get_typwin(&g), owl_perlconfig_edit_callback);
     206        }
Note: See TracChangeset for help on using the changeset viewer.