void owl_perlconfig_edit_callback(owl_editwin *e, bool success) { SV *cb = owl_editwin_get_cbdata(e); SV *text; dSP; if(cb == NULL) { owl_function_error("Perl callback is NULL!"); return; } text = owl_new_sv(owl_editwin_get_text(e)); ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(sv_2mortal(text)); XPUSHs(sv_2mortal(newSViv(success))); PUTBACK; call_sv(cb, G_DISCARD|G_EVAL); if(SvTRUE(ERRSV)) { owl_function_error("%s", SvPV_nolen(ERRSV)); } FREETMPS; LEAVE; }
int owl_editwin_regtest(void) { int numfailed = 0; const char *p; printf("# BEGIN testing owl_editwin\n"); owl_editwin *oe; oe = owl_editwin_new(NULL, 80, 80, OWL_EDITWIN_STYLE_MULTILINE, NULL); /* TODO: make the strings a little more lenient w.r.t trailing whitespace */ /* check paragraph fill */ owl_editwin_insert_string(oe, "blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah.\n\nblah"); owl_editwin_move_to_top(oe); owl_editwin_fill_paragraph(oe); p = owl_editwin_get_text(oe); FAIL_UNLESS("text was correctly wrapped", p && !strcmp(p, "blah blah blah blah blah blah blah blah blah blah blah blah blah blah\n" "blah blah blah.\n" "\n" "blah")); owl_editwin_delete(oe); oe = NULL; oe = owl_editwin_new(NULL, 80, 80, OWL_EDITWIN_STYLE_MULTILINE, NULL); /* check that lines ending with ". " correctly fill */ owl_editwin_insert_string(oe, "blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah. \n\nblah"); owl_editwin_move_to_top(oe); owl_editwin_fill_paragraph(oe); p = owl_editwin_get_text(oe); FAIL_UNLESS("text was correctly wrapped", p && !strcmp(p, "blah blah blah blah blah blah blah blah blah blah blah blah blah blah\n" "blah blah blah. \n" "\n" "blah")); owl_editwin_delete(oe); oe = NULL; printf("# END testing owl_editwin (%d failures)\n", numfailed); return numfailed; }
static void owl_viewwin_callback_search(owl_editwin *e) { int consider_current = false; const char *line = owl_editwin_get_text(e); owl_viewwin_search_data *data = owl_editwin_get_cbdata(e); /* Given an empty string, just continue the current search. */ if (line && *line) { owl_function_set_search(line); consider_current = true; } if (!owl_viewwin_search(data->v, owl_global_get_search_re(&g), consider_current, data->direction)) owl_function_makemsg("No matches"); }