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.54 by root, Sun Jan 8 01:59:29 2006 UTC vs.
Revision 1.60 by root, Mon Jan 9 01:21:43 2006 UTC

58 58
59=back 59=back
60 60
61=item option-popup (enabled by default) 61=item option-popup (enabled by default)
62 62
63Binds a popup menu to Ctrl-Button3 that lets you toggle (some) options at 63Binds a popup menu to Ctrl-Button2 that lets you toggle (some) options at
64runtime. 64runtime.
65
66=item selection-popup (enabled by default)
67
68Binds a popup menu to Ctrl-Button3 that lets you convert the selection
69text into various other formats/action.
65 70
66=item digital-clock 71=item digital-clock
67 72
68Displays a digital clock using the built-in overlay. 73Displays a digital clock using the built-in overlay.
69 74
342 347
343=item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, 348=item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
344Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask, 349Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
345Button4Mask, Button5Mask, AnyModifier 350Button4Mask, Button5Mask, AnyModifier
346 351
347Various constants for use in X events. 352Various constants for use in X calls and event processing.
348 353
349=back 354=back
350 355
351=head2 RENDITION 356=head2 RENDITION
352 357
407use utf8; 412use utf8;
408use strict; 413use strict;
409use Scalar::Util (); 414use Scalar::Util ();
410use List::Util (); 415use List::Util ();
411 416
417our $VERSION = 1;
412our $TERM; 418our $TERM;
413our @HOOKNAME; 419our @HOOKNAME;
414our %OPTION; 420our %OPTION;
415our $LIBDIR; 421our $LIBDIR;
416 422
422 my $msg = join "", @_; 428 my $msg = join "", @_;
423 $msg .= "\n" 429 $msg .= "\n"
424 unless $msg =~ /\n$/; 430 unless $msg =~ /\n$/;
425 urxvt::warn ($msg); 431 urxvt::warn ($msg);
426 }; 432 };
433
434 delete $ENV{IFS};
435 delete $ENV{CDPATH};
436 delete $ENV{BASH_ENV};
437 $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin";
427} 438}
428 439
429my @hook_count; 440my @hook_count;
430my $verbosity = $ENV{URXVT_PERL_VERBOSITY}; 441my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
431 442
464 verbose 3, "loading extension '$path' into package '$pkg'"; 475 verbose 3, "loading extension '$path' into package '$pkg'";
465 476
466 open my $fh, "<:raw", $path 477 open my $fh, "<:raw", $path
467 or die "$path: $!"; 478 or die "$path: $!";
468 479
469 my $source = "package $pkg; use strict; use utf8;\n" 480 my $source = untaint "package $pkg; use strict; use utf8;\n"
470 . "use base urxvt::term::proxy::;\n" 481 . "use base urxvt::term::proxy::;\n"
471 . "#line 1 \"$path\"\n{\n" 482 . "#line 1 \"$path\"\n{\n"
472 . (do { local $/; <$fh> }) 483 . (do { local $/; <$fh> })
473 . "\n};\n1"; 484 . "\n};\n1";
474 485
490 501
491 my %want_ext; 502 my %want_ext;
492 503
493 for (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) { 504 for (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
494 if ($_ eq "default") { 505 if ($_ eq "default") {
495 $want_ext{$_}++ for qw(selection option-popup); 506 $want_ext{$_}++ for qw(selection option-popup selection-popup);
496 } elsif (/^-(.*)$/) { 507 } elsif (/^-(.*)$/) {
497 delete $want_ext{$1}; 508 delete $want_ext{$1};
498 } else { 509 } else {
499 $want_ext{$_}++; 510 $want_ext{$_}++;
500 } 511 }
507 register_package extension_package $files[0]; 518 register_package extension_package $files[0];
508 } else { 519 } else {
509 warn "perl extension '$ext' not found in perl library search path\n"; 520 warn "perl extension '$ext' not found in perl library search path\n";
510 } 521 }
511 } 522 }
523
524 eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
525 warn $@ if $@;
512 } 526 }
513 527
514 $retval = undef; 528 $retval = undef;
515 529
516 if (my $cb = $TERM->{_hook}[$htype]) { 530 if (my $cb = $TERM->{_hook}[$htype]) {
528 $proxy 542 $proxy
529 }, 543 },
530 @_, 544 @_,
531 ) and last; 545 ) and last;
532 }; 546 };
533 warn $@ if $@;#d# 547 if ($@) {
548 $TERM->ungrab; # better to lose the grab than the session
549 warn $@;
550 }
534 } 551 }
535 } 552 }
536 553
537 if ($htype == 1) { # DESTROY 554 if ($htype == 1) { # DESTROY
538 # remove hooks if unused 555 # remove hooks if unused
551 } 568 }
552 569
553 $retval 570 $retval
554} 571}
555 572
573# urxvt::term::proxy
574
556sub urxvt::term::proxy::AUTOLOAD { 575sub urxvt::term::proxy::AUTOLOAD {
557 $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/ 576 $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/
558 or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable"; 577 or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable";
559 578
560 eval qq{ 579 eval qq{
566 } or die "FATAL: unable to compile method forwarder: $@"; 585 } or die "FATAL: unable to compile method forwarder: $@";
567 586
568 goto &$urxvt::term::proxy::AUTOLOAD; 587 goto &$urxvt::term::proxy::AUTOLOAD;
569} 588}
570 589
590sub urxvt::term::proxy::DESTROY {
591 # nop
592}
593
594# urxvt::destroy_hook
595
571sub urxvt::destroy_hook::DESTROY { 596sub urxvt::destroy_hook::DESTROY {
572 ${$_[0]}->(); 597 ${$_[0]}->();
573} 598}
574 599
575sub urxvt::destroy_hook(&) { 600sub urxvt::destroy_hook(&) {
576 bless \shift, urxvt::destroy_hook:: 601 bless \shift, urxvt::destroy_hook::
577} 602}
603
604package urxvt::anyevent;
605
606=head2 The C<urxvt::anyevent> Class
607
608The sole purpose of this class is to deliver an interface to the
609C<AnyEvent> module - any module using it will work inside urxvt without
610further work. The only exception is that you cannot wait on condition
611variables, but non-blocking condvar use is ok. What this means is that you
612cannot use blocking APIs, but the non-blocking variant should work.
613
614=cut
615
616our $VERSION = 1;
617
618$INC{"urxvt/anyevent.pm"} = 1; # mark us as there
619push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
620
621sub timer {
622 my ($class, %arg) = @_;
623
624 my $cb = $arg{cb};
625
626 urxvt::timer
627 ->new
628 ->start (urxvt::NOW + $arg{after})
629 ->cb (sub {
630 $_[0]->stop; # need to cancel manually
631 $cb->();
632 })
633}
634
635sub io {
636 my ($class, %arg) = @_;
637
638 my $cb = $arg{cb};
639
640 bless [$arg{fh}, urxvt::iow
641 ->new
642 ->fd (fileno $arg{fh})
643 ->events (($arg{poll} =~ /r/ ? 1 : 0)
644 | ($arg{poll} =~ /w/ ? 2 : 0))
645 ->start
646 ->cb (sub {
647 $cb->(($_[1] & 1 ? 'r' : '')
648 . ($_[1] & 2 ? 'w' : ''));
649 })],
650 urxvt::anyevent::
651}
652
653sub DESTROY {
654 $_[0][1]->stop;
655}
656
657sub condvar {
658 bless \my $flag, urxvt::anyevent::condvar::
659}
660
661sub urxvt::anyevent::condvar::broadcast {
662 ${$_[0]}++;
663}
664
665sub urxvt::anyevent::condvar::wait {
666 unless (${$_[0]}) {
667 require Carp;
668 Carp::croak ("AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API");
669 }
670}
671
672package urxvt::term;
578 673
579=head2 The C<urxvt::term> Class 674=head2 The C<urxvt::term> Class
580 675
581=over 4 676=over 4
582 677
634 shade term_name title transparent transparent_all tripleclickwords 729 shade term_name title transparent transparent_all tripleclickwords
635 utmpInhibit visualBell 730 utmpInhibit visualBell
636 731
637=cut 732=cut
638 733
639sub urxvt::term::resource($$;$) { 734sub resource($$;$) {
640 my ($self, $name) = (shift, shift); 735 my ($self, $name) = (shift, shift);
641 unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0); 736 unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
642 &urxvt::term::_resource 737 &urxvt::term::_resource
643} 738}
644 739
731C<$event> I<must> be the event causing the menu to pop up (a button event, 826C<$event> I<must> be the event causing the menu to pop up (a button event,
732currently). 827currently).
733 828
734=cut 829=cut
735 830
736sub urxvt::term::popup { 831sub popup {
737 my ($self, $event) = @_; 832 my ($self, $event) = @_;
738 833
739 $self->grab ($event->{time}, 1) 834 $self->grab ($event->{time}, 1)
740 or return; 835 or return;
741 836
931 1026
932=back 1027=back
933 1028
934=cut 1029=cut
935 1030
936sub urxvt::term::line { 1031sub line {
937 my ($self, $row) = @_; 1032 my ($self, $row) = @_;
938 1033
939 my $maxrow = $self->nrow - 1; 1034 my $maxrow = $self->nrow - 1;
940 1035
941 my ($beg, $end) = ($row, $row); 1036 my ($beg, $end) = ($row, $row);
1019Converts rxvt-unicodes text reprsentation into a perl string. See 1114Converts rxvt-unicodes text reprsentation into a perl string. See
1020C<< $term->ROW_t >> for details. 1115C<< $term->ROW_t >> for details.
1021 1116
1022=back 1117=back
1023 1118
1119=cut
1120
1121package urxvt::popup;
1122
1024=head2 The C<urxvt::popup> Class 1123=head2 The C<urxvt::popup> Class
1025 1124
1026=over 4 1125=over 4
1027 1126
1028=cut 1127=cut
1029
1030package urxvt::popup;
1031 1128
1032sub add_item { 1129sub add_item {
1033 my ($self, $item) = @_; 1130 my ($self, $item) = @_;
1034 1131
1035 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal}; 1132 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1075 1172
1076 my $item; $item = { 1173 my $item; $item = {
1077 type => "button", 1174 type => "button",
1078 text => " $text", 1175 text => " $text",
1079 value => $value, 1176 value => $value,
1080 render => sub { ($item->{value} ? "* " : " ") . $text }, 1177 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1081 activate => sub { $cb->($item->{value} = !$item->{value}); }, 1178 activate => sub { $cb->($_[0]{value} = !$_[0]{value}); },
1082 }; 1179 };
1083 1180
1084 $self->add_item ($item); 1181 $self->add_item ($item);
1085} 1182}
1086 1183
1096} 1193}
1097 1194
1098sub DESTROY { 1195sub DESTROY {
1099 my ($self) = @_; 1196 my ($self) = @_;
1100 1197
1198 delete $self->{term}{_destroy}{$self};
1101 $self->{term}->ungrab; 1199 $self->{term}->ungrab;
1102} 1200}
1103 1201
1104=head2 The C<urxvt::timer> Class 1202=head2 The C<urxvt::timer> Class
1105 1203
1209This variable controls the verbosity level of the perl extension. Higher 1307This variable controls the verbosity level of the perl extension. Higher
1210numbers indicate more verbose output. 1308numbers indicate more verbose output.
1211 1309
1212=over 4 1310=over 4
1213 1311
1214=item =0 - only fatal messages 1312=item == 0 - fatal messages
1215 1313
1216=item =3 - script loading and management 1314=item >= 3 - script loading and management
1217 1315
1218=item =10 - all events received 1316=item >=10 - all events received
1219 1317
1220=back 1318=back
1221 1319
1222=head1 AUTHOR 1320=head1 AUTHOR
1223 1321

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines