… | |
… | |
208 | } |
208 | } |
209 | |
209 | |
210 | bool |
210 | bool |
211 | rxvt_perl_interp::invoke (rxvt_term *term, hook_type htype, ...) |
211 | rxvt_perl_interp::invoke (rxvt_term *term, hook_type htype, ...) |
212 | { |
212 | { |
213 | // INIT and DESTROY must be requested by the runtime |
213 | if (!perl |
214 | |
214 | || (!should_invoke [htype] && htype != HOOK_INIT && htype != HOOK_DESTROY)) |
215 | if (!perl || !should_invoke [htype]) |
|
|
216 | return false; |
215 | return false; |
217 | |
216 | |
218 | if (htype == HOOK_INIT) // first hook ever called |
217 | if (htype == HOOK_INIT) // first hook ever called |
219 | term->self = (void *)newSVptr ((void *)term, "urxvt::term"); |
218 | term->self = (void *)newSVptr ((void *)term, "urxvt::term"); |
220 | |
219 | |
… | |
… | |
240 | XPUSHs (sv_2mortal (newSViv (va_arg (ap, int)))); |
239 | XPUSHs (sv_2mortal (newSViv (va_arg (ap, int)))); |
241 | break; |
240 | break; |
242 | |
241 | |
243 | case DT_LONG: |
242 | case DT_LONG: |
244 | XPUSHs (sv_2mortal (newSViv (va_arg (ap, long)))); |
243 | XPUSHs (sv_2mortal (newSViv (va_arg (ap, long)))); |
|
|
244 | break; |
|
|
245 | |
|
|
246 | case DT_STRING: |
|
|
247 | XPUSHs (sv_2mortal (newSVpv (va_arg (ap, char *), 0))); |
245 | break; |
248 | break; |
246 | |
249 | |
247 | case DT_END: |
250 | case DT_END: |
248 | { |
251 | { |
249 | va_end (ap); |
252 | va_end (ap); |
… | |
… | |
289 | |
292 | |
290 | BOOT: |
293 | BOOT: |
291 | { |
294 | { |
292 | # define set_hookname(sym) av_store (hookname, PP_CONCAT(HOOK_, sym), newSVpv (PP_STRINGIFY(sym), 0)) |
295 | # define set_hookname(sym) av_store (hookname, PP_CONCAT(HOOK_, sym), newSVpv (PP_STRINGIFY(sym), 0)) |
293 | AV *hookname = get_av ("urxvt::HOOKNAME", 1); |
296 | AV *hookname = get_av ("urxvt::HOOKNAME", 1); |
294 | set_hookname (LOAD); |
|
|
295 | set_hookname (INIT); |
297 | set_hookname (INIT); |
296 | set_hookname (RESET); |
298 | set_hookname (RESET); |
297 | set_hookname (START); |
299 | set_hookname (START); |
298 | set_hookname (DESTROY); |
300 | set_hookname (DESTROY); |
299 | set_hookname (SEL_BEGIN); |
301 | set_hookname (SEL_BEGIN); |
… | |
… | |
305 | set_hookname (VIEW_CHANGE); |
307 | set_hookname (VIEW_CHANGE); |
306 | set_hookname (SCROLL_BACK); |
308 | set_hookname (SCROLL_BACK); |
307 | set_hookname (TTY_ACTIVITY); |
309 | set_hookname (TTY_ACTIVITY); |
308 | set_hookname (REFRESH_BEGIN); |
310 | set_hookname (REFRESH_BEGIN); |
309 | set_hookname (REFRESH_END); |
311 | set_hookname (REFRESH_END); |
|
|
312 | set_hookname (KEYBOARD_COMMAND); |
310 | |
313 | |
311 | sv_setpv (get_sv ("urxvt::LIBDIR", 1), LIBDIR); |
314 | sv_setpv (get_sv ("urxvt::LIBDIR", 1), LIBDIR); |
312 | } |
315 | } |
313 | |
316 | |
314 | void |
317 | void |
… | |
… | |
386 | SvUTF8_on (RETVAL); |
389 | SvUTF8_on (RETVAL); |
387 | free (str); |
390 | free (str); |
388 | } |
391 | } |
389 | OUTPUT: |
392 | OUTPUT: |
390 | RETVAL |
393 | RETVAL |
|
|
394 | |
|
|
395 | int |
|
|
396 | rxvt_term::nsaved () |
|
|
397 | CODE: |
|
|
398 | RETVAL = THIS->nsaved; |
|
|
399 | OUTPUT: |
|
|
400 | RETVAL |
|
|
401 | |
|
|
402 | int |
|
|
403 | rxvt_term::view_start (int newval = -1) |
|
|
404 | CODE: |
|
|
405 | { |
|
|
406 | RETVAL = THIS->view_start; |
|
|
407 | |
|
|
408 | if (newval >= 0) |
|
|
409 | { |
|
|
410 | THIS->view_start = min (newval, THIS->nsaved); |
|
|
411 | THIS->scr_changeview (RETVAL); |
|
|
412 | } |
|
|
413 | } |
|
|
414 | OUTPUT: |
|
|
415 | RETVAL |
391 | |
416 | |
392 | void |
417 | void |
393 | rxvt_term::_resource (char *name, int index, SV *newval = 0) |
418 | rxvt_term::_resource (char *name, int index, SV *newval = 0) |
394 | PPCODE: |
419 | PPCODE: |
395 | { |
420 | { |