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.48 by root, Sat Jan 7 21:43:17 2006 UTC vs.
Revision 1.56 by root, Sun Jan 8 05:52:42 2006 UTC

37 37
38 @@RXVT_NAME@@ -pe <extensionname> 38 @@RXVT_NAME@@ -pe <extensionname>
39 39
40=over 4 40=over 4
41 41
42=item selection 42=item selection (enabled by default)
43 43
44Intelligent selection. This extension tries to be more intelligent when 44Intelligent selection. This extension tries to be more intelligent when
45the user extends selections (double-click). Right now, it tries to select 45the user extends selections (double-click). Right now, it tries to select
46urls and complete shell-quoted arguments, which is very convenient, too, 46urls and complete shell-quoted arguments, which is very convenient, too,
47if your F<ls> supports C<--quoting-style=shell>. 47if your F<ls> supports C<--quoting-style=shell>.
55Rot-13 the selection when activated. Used via keyboard trigger: 55Rot-13 the selection when activated. Used via keyboard trigger:
56 56
57 URxvt.keysym.C-M-r: perl:selection:rot13 57 URxvt.keysym.C-M-r: perl:selection:rot13
58 58
59=back 59=back
60
61=item option-popup (enabled by default)
62
63Binds a popup menu to Ctrl-Button3 that lets you toggle (some) options at
64runtime.
60 65
61=item digital-clock 66=item digital-clock
62 67
63Displays a digital clock using the built-in overlay. 68Displays a digital clock using the built-in overlay.
64 69
337 342
338=item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, 343=item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
339Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask, 344Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
340Button4Mask, Button5Mask, AnyModifier 345Button4Mask, Button5Mask, AnyModifier
341 346
342Various constants for use in X events. 347Various constants for use in X calls and event processing.
343 348
344=back 349=back
345 350
346=head2 RENDITION 351=head2 RENDITION
347 352
402use utf8; 407use utf8;
403use strict; 408use strict;
404use Scalar::Util (); 409use Scalar::Util ();
405use List::Util (); 410use List::Util ();
406 411
412our $VERSION = 1;
407our $TERM; 413our $TERM;
408our @HOOKNAME; 414our @HOOKNAME;
415our %OPTION;
409our $LIBDIR; 416our $LIBDIR;
410 417
411BEGIN { 418BEGIN {
412 urxvt->bootstrap; 419 urxvt->bootstrap;
413 420
479 local $TERM = shift; 486 local $TERM = shift;
480 my $htype = shift; 487 my $htype = shift;
481 488
482 if ($htype == 0) { # INIT 489 if ($htype == 0) { # INIT
483 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl"); 490 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
491
492 my %want_ext;
484 493
485 for my $ext (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) { 494 for (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
495 if ($_ eq "default") {
496 $want_ext{$_}++ for qw(selection option-popup);
497 } elsif (/^-(.*)$/) {
498 delete $want_ext{$1};
499 } else {
500 $want_ext{$_}++;
501 }
502 }
503
504 for my $ext (keys %want_ext) {
486 my @files = grep -f $_, map "$_/$ext", @dirs; 505 my @files = grep -f $_, map "$_/$ext", @dirs;
487 506
488 if (@files) { 507 if (@files) {
489 register_package extension_package $files[0]; 508 register_package extension_package $files[0];
490 } else { 509 } else {
491 warn "perl extension '$ext' not found in perl library search path\n"; 510 warn "perl extension '$ext' not found in perl library search path\n";
492 } 511 }
493 } 512 }
513
514 eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
515 warn $@ if $@;
494 } 516 }
495 517
496 $retval = undef; 518 $retval = undef;
497 519
498 if (my $cb = $TERM->{_hook}[$htype]) { 520 if (my $cb = $TERM->{_hook}[$htype]) {
533 } 555 }
534 556
535 $retval 557 $retval
536} 558}
537 559
560# urxvt::term::proxy
561
538sub urxvt::term::proxy::AUTOLOAD { 562sub urxvt::term::proxy::AUTOLOAD {
539 $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/ 563 $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/
540 or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable"; 564 or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable";
541 565
542 eval qq{ 566 eval qq{
548 } or die "FATAL: unable to compile method forwarder: $@"; 572 } or die "FATAL: unable to compile method forwarder: $@";
549 573
550 goto &$urxvt::term::proxy::AUTOLOAD; 574 goto &$urxvt::term::proxy::AUTOLOAD;
551} 575}
552 576
577# urxvt::destroy_hook
578
553sub urxvt::destroy_hook::DESTROY { 579sub urxvt::destroy_hook::DESTROY {
554 ${$_[0]}->(); 580 ${$_[0]}->();
555} 581}
556 582
557sub urxvt::destroy_hook(&) { 583sub urxvt::destroy_hook(&) {
558 bless \shift, urxvt::destroy_hook:: 584 bless \shift, urxvt::destroy_hook::
559} 585}
560 586
587package urxvt::anyevent;
588
589=head2 The C<urxvt::anyevent> Class
590
591The sole purpose of this class is to deliver an interface to the
592C<AnyEvent> module - any module using it will work inside urxvt without
593further work. The only exception is that you cannot wait on condition
594variables, but non-blocking condvar use is ok. What this means is that you
595cannot use blocking APIs, but the non-blocking variant should work.
596
597=cut
598
599our $VERSION = 1;
600
601$INC{"urxvt/anyevent.pm"} = 1; # mark us as there
602push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
603
604sub timer {
605 my ($class, %arg) = @_;
606
607 my $cb = $arg{cb};
608
609 urxvt::timer
610 ->new
611 ->start (urxvt::NOW + $arg{after})
612 ->cb (sub {
613 $_[0]->stop; # need to cancel manually
614 $cb->();
615 })
616}
617
618sub io {
619 my ($class, %arg) = @_;
620
621 my $cb = $arg{cb};
622
623 bless [$arg{fh}, urxvt::iow
624 ->new
625 ->fd (fileno $arg{fh})
626 ->events (($arg{poll} =~ /r/ ? 1 : 0)
627 | ($arg{poll} =~ /w/ ? 2 : 0))
628 ->start
629 ->cb (sub {
630 $cb->(($_[1] & 1 ? 'r' : '')
631 . ($_[1] & 2 ? 'w' : ''));
632 })],
633 urxvt::anyevent::
634}
635
636sub DESTROY {
637 $_[0][1]->stop;
638}
639
640sub condvar {
641 bless \my $flag, urxvt::anyevent::condvar::
642}
643
644sub urxvt::anyevent::condvar::broadcast {
645 ${$_[0]}++;
646}
647
648sub urxvt::anyevent::condvar::wait {
649 unless (${$_[0]}) {
650 require Carp;
651 Carp::croak ("AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API");
652 }
653}
654
655package urxvt::term;
656
561=head2 The C<urxvt::term> Class 657=head2 The C<urxvt::term> Class
562 658
563=over 4 659=over 4
564 660
565=item $term->destroy 661=item $term->destroy
566 662
567Destroy the terminal object (close the window, free resources etc.). 663Destroy the terminal object (close the window, free resources etc.).
664
665=item $isset = $term->option ($optval[, $set])
666
667Returns true if the option specified by C<$optval> is enabled, and
668optionally change it. All option values are stored by name in the hash
669C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
670
671Here is a a likely non-exhaustive list of option names, please see the
672source file F</src/optinc.h> to see the actual list:
673
674 borderLess console cursorBlink cursorUnderline hold iconic insecure
675 intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
676 pastableTabs pointerBlank reverseVideo scrollBar scrollBar_floating
677 scrollBar_right scrollTtyKeypress scrollTtyOutput scrollWithBuffer
678 secondaryScreen secondaryScroll skipBuiltinGlyphs transparent
679 tripleclickwords utmpInhibit visualBell
568 680
569=item $value = $term->resource ($name[, $newval]) 681=item $value = $term->resource ($name[, $newval])
570 682
571Returns the current resource value associated with a given name and 683Returns the current resource value associated with a given name and
572optionally sets a new value. Setting values is most useful in the C<init> 684optionally sets a new value. Setting values is most useful in the C<init>
582 694
583Please note that resource strings will currently only be freed when the 695Please note that resource strings will currently only be freed when the
584terminal is destroyed, so changing options frequently will eat memory. 696terminal is destroyed, so changing options frequently will eat memory.
585 697
586Here is a a likely non-exhaustive list of resource names, not all of which 698Here is a a likely non-exhaustive list of resource names, not all of which
587are supported in every build, please see the source to see the actual 699are supported in every build, please see the source file F</src/rsinc.h>
588list: 700to see the actual list:
589 701
590 answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont 702 answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
591 borderLess color cursorBlink cursorUnderline cutchars delete_key 703 borderLess color cursorBlink cursorUnderline cutchars delete_key
592 display_name embed ext_bwidth fade font geometry hold iconName 704 display_name embed ext_bwidth fade font geometry hold iconName
593 imFont imLocale inputMethod insecure int_bwidth intensityStyles 705 imFont imLocale inputMethod insecure int_bwidth intensityStyles
600 shade term_name title transparent transparent_all tripleclickwords 712 shade term_name title transparent transparent_all tripleclickwords
601 utmpInhibit visualBell 713 utmpInhibit visualBell
602 714
603=cut 715=cut
604 716
605sub urxvt::term::resource($$;$) { 717sub resource($$;$) {
606 my ($self, $name) = (shift, shift); 718 my ($self, $name) = (shift, shift);
607 unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0); 719 unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
608 &urxvt::term::_resource 720 &urxvt::term::_resource
609} 721}
610 722
697C<$event> I<must> be the event causing the menu to pop up (a button event, 809C<$event> I<must> be the event causing the menu to pop up (a button event,
698currently). 810currently).
699 811
700=cut 812=cut
701 813
702sub urxvt::term::popup { 814sub popup {
703 my ($self, $event) = @_; 815 my ($self, $event) = @_;
704 816
705 $self->grab ($event->{time}, 1) 817 $self->grab ($event->{time}, 1)
706 or return; 818 or return;
707 819
897 1009
898=back 1010=back
899 1011
900=cut 1012=cut
901 1013
902sub urxvt::term::line { 1014sub line {
903 my ($self, $row) = @_; 1015 my ($self, $row) = @_;
904 1016
905 my $maxrow = $self->nrow - 1; 1017 my $maxrow = $self->nrow - 1;
906 1018
907 my ($beg, $end) = ($row, $row); 1019 my ($beg, $end) = ($row, $row);
985Converts rxvt-unicodes text reprsentation into a perl string. See 1097Converts rxvt-unicodes text reprsentation into a perl string. See
986C<< $term->ROW_t >> for details. 1098C<< $term->ROW_t >> for details.
987 1099
988=back 1100=back
989 1101
1102=cut
1103
1104package urxvt::popup;
1105
990=head2 The C<urxvt::popup> Class 1106=head2 The C<urxvt::popup> Class
991 1107
992=over 4 1108=over 4
993 1109
994=cut 1110=cut
995
996package urxvt::popup;
997 1111
998sub add_item { 1112sub add_item {
999 my ($self, $item) = @_; 1113 my ($self, $item) = @_;
1000 1114
1115 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1116 $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1117 $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1118
1119 $item->{render} ||= sub { $_[0]{text} };
1120
1001 push @{ $self->{item} }, $item; 1121 push @{ $self->{item} }, $item;
1122}
1123
1124sub add_separator {
1125 my ($self, $sep) = @_;
1126
1127 $sep ||= "═";
1128
1129 $self->add_item ({
1130 rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1131 text => "",
1132 render => sub { $sep x $urxvt::TERM->ncol },
1133 activate => sub { },
1134 });
1135}
1136
1137sub add_title {
1138 my ($self, $title) = @_;
1139
1140 $self->add_item ({
1141 rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1142 text => $title,
1143 activate => sub { },
1144 });
1002} 1145}
1003 1146
1004sub add_button { 1147sub add_button {
1005 my ($self, $text, $cb) = @_; 1148 my ($self, $text, $cb) = @_;
1006 1149
1007 $self->add_item ({ type => "button", text => "[ $text ]", activate => $cb, 1150 $self->add_item ({ type => "button", text => "[ $text ]", activate => $cb});
1008 render => sub { $_[0]{text} },
1009 });
1010} 1151}
1011 1152
1012sub add_toggle { 1153sub add_toggle {
1013 my ($self, $text, $cb, $value) = @_; 1154 my ($self, $text, $cb, $value) = @_;
1014 1155
1015 $self->add_item ({ type => "button", text => " $text", value => $value, 1156 my $item; $item = {
1157 type => "button",
1158 text => " $text",
1159 value => $value,
1016 render => sub { ($_[0]{value} ? "" : " ") . substr $_[0]{text}, 1 }, 1160 render => sub { ($item->{value} ? "* " : " ") . $text },
1017 activate => sub { $cb->($_[0]{value} = !$_[0]{value}); }, 1161 activate => sub { $cb->($item->{value} = !$item->{value}); },
1018 }); 1162 };
1163
1164 $self->add_item ($item);
1019} 1165}
1020 1166
1021sub show { 1167sub show {
1022 my ($self) = @_; 1168 my ($self) = @_;
1023 1169

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines