--- rxvt-unicode/src/rxvtperl.xs 2006/01/02 18:20:23 1.3 +++ rxvt-unicode/src/rxvtperl.xs 2006/01/02 21:17:01 1.6 @@ -210,21 +210,13 @@ bool rxvt_perl_interp::invoke (rxvt_term *term, hook_type htype, ...) { - if (!perl) + if (!perl + || (!should_invoke [htype] && htype != HOOK_INIT && htype != HOOK_DESTROY)) return false; - + if (htype == HOOK_INIT) // first hook ever called term->self = (void *)newSVptr ((void *)term, "urxvt::term"); - else if (htype == HOOK_DESTROY) - { - // TODO: clear magic - hv_clear ((HV *)SvRV ((SV *)term->self)); - SvREFCNT_dec ((SV *)term->self); - } - if (!should_invoke [htype]) - return false; - dSP; va_list ap; @@ -251,6 +243,10 @@ XPUSHs (sv_2mortal (newSViv (va_arg (ap, long)))); break; + case DT_STRING: + XPUSHs (sv_2mortal (newSVpv (va_arg (ap, char *), 0))); + break; + case DT_END: { va_end (ap); @@ -272,6 +268,13 @@ if (SvTRUE (ERRSV)) rxvt_warn ("perl hook %d evaluation error: %s", htype, SvPV_nolen (ERRSV)); + if (htype == HOOK_DESTROY) + { + // TODO: clear magic + hv_clear ((HV *)SvRV ((SV *)term->self)); + SvREFCNT_dec ((SV *)term->self); + } + return count; } @@ -291,7 +294,6 @@ { # define set_hookname(sym) av_store (hookname, PP_CONCAT(HOOK_, sym), newSVpv (PP_STRINGIFY(sym), 0)) AV *hookname = get_av ("urxvt::HOOKNAME", 1); - set_hookname (LOAD); set_hookname (INIT); set_hookname (RESET); set_hookname (START); @@ -307,6 +309,7 @@ set_hookname (TTY_ACTIVITY); set_hookname (REFRESH_BEGIN); set_hookname (REFRESH_END); + set_hookname (KEYBOARD_COMMAND); sv_setpv (get_sv ("urxvt::LIBDIR", 1), LIBDIR); }