ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtperl.xs
(Generate patch)

Comparing rxvt-unicode/src/rxvtperl.xs (file contents):
Revision 1.3 by root, Mon Jan 2 18:20:23 2006 UTC vs.
Revision 1.5 by root, Mon Jan 2 20:35:39 2006 UTC

208} 208}
209 209
210bool 210bool
211rxvt_perl_interp::invoke (rxvt_term *term, hook_type htype, ...) 211rxvt_perl_interp::invoke (rxvt_term *term, hook_type htype, ...)
212{ 212{
213 if (!perl) 213 if (!perl
214 || (!should_invoke [htype] && htype != HOOK_INIT && htype != HOOK_DESTROY))
214 return false; 215 return false;
215 216
216 if (htype == HOOK_INIT) // first hook ever called 217 if (htype == HOOK_INIT) // first hook ever called
217 term->self = (void *)newSVptr ((void *)term, "urxvt::term"); 218 term->self = (void *)newSVptr ((void *)term, "urxvt::term");
218 else if (htype == HOOK_DESTROY)
219 {
220 // TODO: clear magic
221 hv_clear ((HV *)SvRV ((SV *)term->self));
222 SvREFCNT_dec ((SV *)term->self);
223 }
224 219
225 if (!should_invoke [htype])
226 return false;
227
228 dSP; 220 dSP;
229 va_list ap; 221 va_list ap;
230 222
231 va_start (ap, htype); 223 va_start (ap, htype);
232 224
270 LEAVE; 262 LEAVE;
271 263
272 if (SvTRUE (ERRSV)) 264 if (SvTRUE (ERRSV))
273 rxvt_warn ("perl hook %d evaluation error: %s", htype, SvPV_nolen (ERRSV)); 265 rxvt_warn ("perl hook %d evaluation error: %s", htype, SvPV_nolen (ERRSV));
274 266
267 if (htype == HOOK_DESTROY)
268 {
269 // TODO: clear magic
270 hv_clear ((HV *)SvRV ((SV *)term->self));
271 SvREFCNT_dec ((SV *)term->self);
272 }
273
275 return count; 274 return count;
276 } 275 }
277 276
278 default: 277 default:
279 rxvt_fatal ("FATAL: unable to pass data type %d\n", dt); 278 rxvt_fatal ("FATAL: unable to pass data type %d\n", dt);
289 288
290BOOT: 289BOOT:
291{ 290{
292# define set_hookname(sym) av_store (hookname, PP_CONCAT(HOOK_, sym), newSVpv (PP_STRINGIFY(sym), 0)) 291# define set_hookname(sym) av_store (hookname, PP_CONCAT(HOOK_, sym), newSVpv (PP_STRINGIFY(sym), 0))
293 AV *hookname = get_av ("urxvt::HOOKNAME", 1); 292 AV *hookname = get_av ("urxvt::HOOKNAME", 1);
294 set_hookname (LOAD);
295 set_hookname (INIT); 293 set_hookname (INIT);
296 set_hookname (RESET); 294 set_hookname (RESET);
297 set_hookname (START); 295 set_hookname (START);
298 set_hookname (DESTROY); 296 set_hookname (DESTROY);
299 set_hookname (SEL_BEGIN); 297 set_hookname (SEL_BEGIN);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines