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.108 by root, Thu Jan 19 09:47:15 2006 UTC vs.
Revision 1.118 by root, Fri Jan 20 18:50:49 2006 UTC

34find them in F<@@RXVT_LIBDIR@@/urxvt/perl/>. 34find them in F<@@RXVT_LIBDIR@@/urxvt/perl/>.
35 35
36You can activate them like this: 36You can activate them like this:
37 37
38 @@RXVT_NAME@@ -pe <extensionname> 38 @@RXVT_NAME@@ -pe <extensionname>
39
40Or by adding them to the resource for extensions loaded by default:
41
42 URxvt.perl-ext-common: default,automove-background,selection-autotransform
39 43
40=over 4 44=over 4
41 45
42=item selection (enabled by default) 46=item selection (enabled by default)
43 47
87 91
88=item selection-popup (enabled by default) 92=item selection-popup (enabled by default)
89 93
90Binds a popup menu to Ctrl-Button3 that lets you convert the selection 94Binds a popup menu to Ctrl-Button3 that lets you convert the selection
91text into various other formats/action (such as uri unescaping, perl 95text into various other formats/action (such as uri unescaping, perl
92evalution, web-browser starting etc.), depending on content. 96evaluation, web-browser starting etc.), depending on content.
93 97
94Other extensions can extend this popup menu by pushing a code reference onto 98Other extensions can extend this popup menu by pushing a code reference
95C<@urxvt::ext::selection_popup::hook>, that is called whenever the popup is displayed. 99onto C<@{ $term->{selection_popup_hook} }>, that is called whenever the
100popup is displayed.
96 101
97It's sole argument is the popup menu, which can be modified. The selection 102It's sole argument is the popup menu, which can be modified. The selection
98is in C<$_>, which can be used to decide wether to add something or not. 103is in C<$_>, which can be used to decide wether to add something or not.
99It should either return nothing or a string and a code reference. The 104It should either return nothing or a string and a code reference. The
100string will be used as button text and the code reference will be called 105string will be used as button text and the code reference will be called
102 107
103The following will add an entry C<a to b> that transforms all C<a>s in 108The following will add an entry C<a to b> that transforms all C<a>s in
104the selection to C<b>s, but only if the selection currently contains any 109the selection to C<b>s, but only if the selection currently contains any
105C<a>s: 110C<a>s:
106 111
107 push urxvt::ext::selection_popup::hook, sub { 112 push @{ $self->{term}{selection_popup_hook} }, sub {
108 /a/ ? ("a to be" => sub { s/a/b/g } 113 /a/ ? ("a to be" => sub { s/a/b/g }
109 : () 114 : ()
110 }; 115 };
111 116
112=item searchable-scrollback<hotkey> (enabled by default) 117=item searchable-scrollback<hotkey> (enabled by default)
157 162
158The first line tells the selection code to treat the unchanging part of 163The first line tells the selection code to treat the unchanging part of
159every error message as a selection pattern, and the second line transforms 164every error message as a selection pattern, and the second line transforms
160the message into vi commands to load the file. 165the message into vi commands to load the file.
161 166
167=item tabbed
168
169This transforms the terminal into a tabbar with additional terminals, that
170is, it implements what is commonly refered to as "tabbed terminal". The topmost line
171displays a "[NEW]" button, which, when clicked, will add a new tab, followed by one
172button per tab.
173
174Clicking a button will activate that tab. Pressing B<Shift-Left> and
175B<Shift-Right> will switch to the tab left or right of the current one,
176while B<Shift-Down> creates a new tab.
177
162=item mark-urls 178=item mark-urls
163 179
164Uses per-line display filtering (C<on_line_update>) to underline urls and 180Uses per-line display filtering (C<on_line_update>) to underline urls and
165make them clickable. When middle-clicked, the program specified in the 181make them clickable. When middle-clicked, the program specified in the
166resource C<urlLauncher> (default C<x-www-browser>) will be started with 182resource C<urlLauncher> (default C<x-www-browser>) will be started with
298called whenever the relevant event happens. 314called whenever the relevant event happens.
299 315
300The first argument passed to them is an extension oject as described in 316The first argument passed to them is an extension oject as described in
301the in the C<Extension Objects> section. 317the in the C<Extension Objects> section.
302 318
303B<All> of these hooks must return a boolean value. If it is true, then the 319B<All> of these hooks must return a boolean value. If any of the called
304event counts as being I<consumed>, and the invocation of other hooks is 320hooks returns true, then the event counts as being I<consumed>, and the
305skipped, and the relevant action might not be carried out by the C++ code. 321relevant action might not be carried out by the C++ code.
306 322
307I<< When in doubt, return a false value (preferably C<()>). >> 323I<< When in doubt, return a false value (preferably C<()>). >>
308 324
309=over 4 325=over 4
310 326
311=item on_init $term 327=item on_init $term
312 328
313Called after a new terminal object has been initialized, but before 329Called after a new terminal object has been initialized, but before
314windows are created or the command gets run. Most methods are unsafe to 330windows are created or the command gets run. Most methods are unsafe to
315call or deliver senseless data, as terminal size and other characteristics 331call or deliver senseless data, as terminal size and other characteristics
316have not yet been determined. You can safely query and change resources, 332have not yet been determined. You can safely query and change resources
317though. 333and options, though. For many purposes the C<on_start> hook is a better
334place.
335
336=item on_start $term
337
338Called at the very end of initialisation of a new terminal, just before
339trying to map (display) the toplevel and returning to the mainloop.
340
341=item on_destroy $term
342
343Called whenever something tries to destroy terminal, before doing anything
344yet. If this hook returns true, then destruction is skipped, but this is
345rarely a good idea.
318 346
319=item on_reset $term 347=item on_reset $term
320 348
321Called after the screen is "reset" for any reason, such as resizing or 349Called after the screen is "reset" for any reason, such as resizing or
322control sequences. Here is where you can react on changes to size-related 350control sequences. Here is where you can react on changes to size-related
323variables. 351variables.
324
325=item on_start $term
326
327Called at the very end of initialisation of a new terminal, just before
328returning to the mainloop.
329 352
330=item on_child_start $term, $pid 353=item on_child_start $term, $pid
331 354
332Called just after the child process has been C<fork>ed. 355Called just after the child process has been C<fork>ed.
333 356
453Called wheneever the window loses keyboard focus, before rxvt-unicode does 476Called wheneever the window loses keyboard focus, before rxvt-unicode does
454focus out processing. 477focus out processing.
455 478
456=item on_configure_notify $term, $event 479=item on_configure_notify $term, $event
457 480
481=item on_property_notify $term, $event
482
458=item on_key_press $term, $event, $keysym, $octets 483=item on_key_press $term, $event, $keysym, $octets
459 484
460=item on_key_release $term, $event, $keysym 485=item on_key_release $term, $event, $keysym
461 486
462=item on_button_press $term, $event 487=item on_button_press $term, $event
478 503
479C<on_key_press> additionally receives the string rxvt-unicode would 504C<on_key_press> additionally receives the string rxvt-unicode would
480output, if any, in locale-specific encoding. 505output, if any, in locale-specific encoding.
481 506
482subwindow. 507subwindow.
508
509=item on_client_message $term, $event
510
511=item on_wm_protocols $term, $event
512
513=item on_wm_delete_window $term, $event
514
515Called when various types of ClientMessage events are received (all with
516format=32, WM_PROTOCOLS or WM_PROTOCOLS:WM_DELETE_WINDOW).
483 517
484=back 518=back
485 519
486=cut 520=cut
487 521
493use Scalar::Util (); 527use Scalar::Util ();
494use List::Util (); 528use List::Util ();
495 529
496our $VERSION = 1; 530our $VERSION = 1;
497our $TERM; 531our $TERM;
532our @TERM_INIT;
533our @TERM_EXT;
498our @HOOKNAME; 534our @HOOKNAME;
499our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME; 535our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
500our %OPTION; 536our %OPTION;
501 537
502our $LIBDIR; 538our $LIBDIR;
523 559
524=item $urxvt::TERM 560=item $urxvt::TERM
525 561
526The current terminal. This variable stores the current C<urxvt::term> 562The current terminal. This variable stores the current C<urxvt::term>
527object, whenever a callback/hook is executing. 563object, whenever a callback/hook is executing.
564
565=item @urxvt::TERM_INIT
566
567All coderefs in this array will be called as methods of the next newly
568created C<urxvt::term> object (during the C<on_init> phase). The array
569gets cleared before the codereferences that were in it are being executed,
570so coderefs can push themselves onto it again if they so desire.
571
572This complements to the perl-eval commandline option, but gets executed
573first.
574
575=item @urxvt::TERM_EXT
576
577Works similar to C<@TERM_INIT>, but contains perl package/class names, which
578get registered as normal extensions after calling the hooks in C<@TERM_INIT>
579but before other extensions. Gets cleared just like C<@TERM_INIT>.
528 580
529=back 581=back
530 582
531=head2 Functions in the C<urxvt> Package 583=head2 Functions in the C<urxvt> Package
532 584
654 706
655# load a single script into its own package, once only 707# load a single script into its own package, once only
656sub extension_package($) { 708sub extension_package($) {
657 my ($path) = @_; 709 my ($path) = @_;
658 710
659 no strict 'refs';
660
661 $extension_pkg{$path} ||= do { 711 $extension_pkg{$path} ||= do {
662 $path =~ /([^\/\\]+)$/; 712 $path =~ /([^\/\\]+)$/;
663 my $pkg = $1; 713 my $pkg = $1;
664 $pkg =~ s/[^[:word:]]/_/g; 714 $pkg =~ s/[^[:word:]]/_/g;
665 $pkg = "urxvt::ext::$pkg"; 715 $pkg = "urxvt::ext::$pkg";
667 verbose 3, "loading extension '$path' into package '$pkg'"; 717 verbose 3, "loading extension '$path' into package '$pkg'";
668 718
669 open my $fh, "<:raw", $path 719 open my $fh, "<:raw", $path
670 or die "$path: $!"; 720 or die "$path: $!";
671 721
672 @{"$pkg\::ISA"} = urxvt::term::extension::;
673
674 my $source = 722 my $source =
675 "package $pkg; use strict; use utf8;\n" 723 "package $pkg; use strict; use utf8;\n"
676 . "#line 1 \"$path\"\n{\n" 724 . "#line 1 \"$path\"\n{\n"
677 . (do { local $/; <$fh> }) 725 . (do { local $/; <$fh> })
678 . "\n};\n1"; 726 . "\n};\n1";
694 if ($htype == 0) { # INIT 742 if ($htype == 0) { # INIT
695 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl"); 743 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
696 744
697 my %ext_arg; 745 my %ext_arg;
698 746
747 {
748 my @init = @TERM_INIT;
749 @TERM_INIT = ();
750 $_->($TERM) for @init;
751 my @pkg = @TERM_EXT;
752 @TERM_EXT = ();
753 $TERM->register_package ($_) for @pkg;
754 }
755
699 for (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) { 756 for (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
700 if ($_ eq "default") { 757 if ($_ eq "default") {
701 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback); 758 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback);
702 } elsif (/^-(.*)$/) { 759 } elsif (/^-(.*)$/) {
703 delete $ext_arg{$1}; 760 delete $ext_arg{$1};
704 } elsif (/^([^<]+)<(.*)>$/) { 761 } elsif (/^([^<]+)<(.*)>$/) {
729 if $verbosity >= 10; 786 if $verbosity >= 10;
730 787
731 keys %$cb; 788 keys %$cb;
732 789
733 while (my ($pkg, $cb) = each %$cb) { 790 while (my ($pkg, $cb) = each %$cb) {
734 $retval = eval { $cb->($TERM->{_pkg}{$pkg}, @_) } 791 my $retval_ = eval { $cb->($TERM->{_pkg}{$pkg}, @_) };
735 and last; 792 $retval ||= $retval_;
736 793
737 if ($@) { 794 if ($@) {
738 $TERM->ungrab; # better to lose the grab than the session 795 $TERM->ungrab; # better to lose the grab than the session
739 warn $@; 796 warn $@;
740 } 797 }
898 955
899# find on_xxx subs in the package and register them 956# find on_xxx subs in the package and register them
900# as hooks 957# as hooks
901sub register_package { 958sub register_package {
902 my ($self, $pkg, $argv) = @_; 959 my ($self, $pkg, $argv) = @_;
960
961 no strict 'refs';
962
963 urxvt::verbose 6, "register package $pkg to $self";
964
965 @{"$pkg\::ISA"} = urxvt::term::extension::;
903 966
904 my $proxy = bless { 967 my $proxy = bless {
905 _pkg => $pkg, 968 _pkg => $pkg,
906 argv => $argv, 969 argv => $argv,
907 }, $pkg; 970 }, $pkg;
1634 $self->{term}->ungrab; 1697 $self->{term}->ungrab;
1635} 1698}
1636 1699
1637=back 1700=back
1638 1701
1702=cut
1703
1704package urxvt::watcher;
1705
1706@urxvt::timer::ISA = __PACKAGE__;
1707@urxvt::iow::ISA = __PACKAGE__;
1708@urxvt::pw::ISA = __PACKAGE__;
1709@urxvt::iw::ISA = __PACKAGE__;
1710
1639=head2 The C<urxvt::timer> Class 1711=head2 The C<urxvt::timer> Class
1640 1712
1641This class implements timer watchers/events. Time is represented as a 1713This class implements timer watchers/events. Time is represented as a
1642fractional number of seconds since the epoch. Example: 1714fractional number of seconds since the epoch. Example:
1643 1715
1740 1812
1741Stop watching for events on the given filehandle. 1813Stop watching for events on the given filehandle.
1742 1814
1743=back 1815=back
1744 1816
1817=head2 The C<urxvt::iw> Class
1818
1819This class implements idle watchers, that get called automatically when
1820the process is idle. They should return as fast as possible, after doing
1821some useful work.
1822
1823=over 4
1824
1825=item $iw = new urxvt::iw
1826
1827Create a new idle watcher object in stopped state.
1828
1829=item $iw = $iw->cb (sub { my ($iw) = @_; ... })
1830
1831Set the callback to be called when the watcher triggers.
1832
1833=item $timer = $timer->start
1834
1835Start the watcher.
1836
1837=item $timer = $timer->stop
1838
1839Stop the watcher.
1840
1841=back
1842
1843=head2 The C<urxvt::pw> Class
1844
1845This class implements process watchers. They create an event whenever a
1846process exits, after which they stop automatically.
1847
1848 my $pid = fork;
1849 ...
1850 $term->{pw} = urxvt::pw
1851 ->new
1852 ->start ($pid)
1853 ->cb (sub {
1854 my ($pw, $exit_status) = @_;
1855 ...
1856 });
1857
1858=over 4
1859
1860=item $pw = new urxvt::pw
1861
1862Create a new process watcher in stopped state.
1863
1864=item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
1865
1866Set the callback to be called when the timer triggers.
1867
1868=item $pw = $timer->start ($pid)
1869
1870Tells the wqtcher to start watching for process C<$pid>.
1871
1872=item $pw = $pw->stop
1873
1874Stop the watcher.
1875
1876=back
1877
1745=head1 ENVIRONMENT 1878=head1 ENVIRONMENT
1746 1879
1747=head2 URXVT_PERL_VERBOSITY 1880=head2 URXVT_PERL_VERBOSITY
1748 1881
1749This variable controls the verbosity level of the perl extension. Higher 1882This variable controls the verbosity level of the perl extension. Higher

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines