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

Comparing rxvt-unicode/src/urxvt.pm (file contents):
Revision 1.30 by root, Wed Jan 4 05:35:34 2006 UTC vs.
Revision 1.31 by root, Wed Jan 4 19:39:46 2006 UTC

366 366
367 $pkg 367 $pkg
368 } 368 }
369} 369}
370 370
371our $retval; # return value for urxvt
372
371# called by the rxvt core 373# called by the rxvt core
372sub invoke { 374sub invoke {
373 local $TERM = shift; 375 local $TERM = shift;
374 my $htype = shift; 376 my $htype = shift;
375 377
383 register_package script_package $files[0]; 385 register_package script_package $files[0];
384 } else { 386 } else {
385 warn "perl extension '$ext' not found in perl library search path\n"; 387 warn "perl extension '$ext' not found in perl library search path\n";
386 } 388 }
387 } 389 }
390 }
388 391
392 $retval = undef;
393
394 if (my $cb = $TERM->{_hook}[$htype]) {
395 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
396 if $verbosity >= 10;
397
398 keys %$cb;
399
400 while (my ($pkg, $cb) = each %$cb) {
401 $retval = $cb->(
402 $TERM->{_pkg}{$pkg} ||= do {
403 my $proxy = bless { }, urxvt::term::proxy::;
404 Scalar::Util::weaken ($proxy->{term} = $TERM);
405 $proxy
406 },
407 @_,
408 ) and last;
409 }
410 }
411
389 } elsif ($htype == 1) { # DESTROY 412 if ($htype == 1) { # DESTROY
413 # remove hooks if unused
390 if (my $hook = $TERM->{_hook}) { 414 if (my $hook = $TERM->{_hook}) {
391 for my $htype (0..$#$hook) { 415 for my $htype (0..$#$hook) {
392 $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} } 416 $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} }
393 or set_should_invoke $htype, 0; 417 or set_should_invoke $htype, 0;
394 } 418 }
395 } 419 }
420
421 # clear package objects
422 %$_ = () for values %{ $TERM->{_pkg} };
423
424 # clear package
425 %$TERM = ();
396 } 426 }
397 427
398 my $cb = $TERM->{_hook}[$htype] 428 $retval
399 or return;
400
401 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
402 if $verbosity >= 10;
403
404 keys %$cb;
405
406 while (my ($pkg, $cb) = each %$cb) {
407 return 1
408 if $cb->(
409 $TERM->{$pkg} ||= do {
410 my $proxy = bless { }, urxvt::term::proxy::;
411 Scalar::Util::weaken ($proxy->{term} = $TERM);
412 $proxy
413 },
414 @_,
415 );
416 }
417
418 0
419} 429}
420 430
421sub urxvt::term::proxy::AUTOLOAD { 431sub urxvt::term::proxy::AUTOLOAD {
422 $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/ 432 $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/
423 or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable"; 433 or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable";

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines