ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.23
Committed: Tue Jan 3 19:42:53 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.22: +54 -13 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.17 =encoding utf8
2    
3 root 1.1 =head1 NAME
4    
5 root 1.11 @@RXVT_NAME@@perl - rxvt-unicode's embedded perl interpreter
6 root 1.1
7     =head1 SYNOPSIS
8    
9 root 1.10 # create a file grab_test in $HOME:
10 root 1.1
11     sub on_sel_grab {
12     warn "you selected ", $_[0]->selection;
13 root 1.3 ()
14 root 1.1 }
15    
16 root 1.10 # start a @@RXVT_NAME@@ using it:
17    
18     @@RXVT_NAME@@ --perl-lib $HOME -pe grab_test
19 root 1.1
20     =head1 DESCRIPTION
21    
22 root 1.8 Everytime a terminal object gets created, scripts specified via the
23 root 1.10 C<perl> resource are loaded and associated with it.
24    
25     Scripts are compiled in a 'use strict' and 'use utf8' environment, and
26     thus must be encoded as UTF-8.
27 root 1.6
28     Each script will only ever be loaded once, even in @@RXVT_NAME@@d, where
29 root 1.16 scripts will be shared (but not enabled) for all terminals.
30 root 1.6
31 root 1.17 =head2 Prepackaged Extensions
32 root 1.15
33     This section describes the extensiosn delivered with this version. You can
34     find them in F<@@RXVT_LIBDIR@@/urxvt/perl/>.
35    
36     You can activate them like this:
37    
38     @@RXVT_NAME@@ -pe <extensionname>
39    
40     =over 4
41    
42     =item selection
43    
44 root 1.22 Intelligent selection. This etxension tries to be more intelligent when the user
45     extends selections (double-click).
46    
47     It also offers the following bindable event:
48 root 1.15
49     =over 4
50    
51     =item rot13
52    
53     Rot-13 the selection when activated. Used via keyboard trigger:
54    
55     URxvt.keysym.C-M-r: perl:selection:rot13
56    
57     =back
58    
59     =item digital-clock
60    
61 root 1.20 Displays a digital clock using the built-in overlay.
62    
63     =item example-refresh-hooks
64    
65 root 1.15 Displays a very simple digital clock in the upper right corner of the
66     window. Illustrates overwriting the refresh callbacks to create your own
67     overlays or changes.
68    
69     =back
70    
71 root 1.6 =head2 General API Considerations
72    
73     All objects (such as terminals, time watchers etc.) are typical
74     reference-to-hash objects. The hash can be used to store anything you
75 root 1.7 like. All members starting with an underscore (such as C<_ptr> or
76 root 1.23 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
77 root 1.7 modified).
78 root 1.6
79     When objects are destroyed on the C++ side, the perl object hashes are
80     emptied, so its best to store related objects such as time watchers and
81     the like inside the terminal object so they get destroyed as soon as the
82     terminal is destroyed.
83    
84 root 1.1 =head2 Hooks
85    
86 root 1.23 The following subroutines can be declared in loaded scripts, and will be
87     called whenever the relevant event happens.
88    
89     The first argument passed to them is an object private to each terminal
90     and extension package. You can call all C<urxvt::term> methods on it, but
91     its not a real C<urxvt::term> object. Instead, the real C<urxvt::term>
92     object that is shared between all packages is stored in the C<term>
93     member.
94 root 1.1
95     All of them must return a boolean value. If it is true, then the event
96     counts as being I<consumed>, and the invocation of other hooks is skipped,
97     and the relevant action might not be carried out by the C++ code.
98    
99     When in doubt, return a false value (preferably C<()>).
100    
101     =over 4
102    
103     =item on_init $term
104    
105     Called after a new terminal object has been initialized, but before
106     windows are created or the command gets run.
107    
108     =item on_reset $term
109    
110     Called after the screen is "reset" for any reason, such as resizing or
111     control sequences. Here is where you can react on changes to size-related
112     variables.
113    
114     =item on_start $term
115    
116     Called at the very end of initialisation of a new terminal, just before
117     returning to the mainloop.
118    
119     =item on_sel_make $term, $eventtime
120    
121     Called whenever a selection has been made by the user, but before the
122     selection text is copied, so changes to the beginning, end or type of the
123     selection will be honored.
124    
125     Returning a true value aborts selection making by urxvt, in which case you
126     have to make a selection yourself by calling C<< $term->selection_grab >>.
127    
128     =item on_sel_grab $term, $eventtime
129    
130     Called whenever a selection has been copied, but before the selection is
131     requested from the server. The selection text can be queried and changed
132     by calling C<< $term->selection >>.
133    
134     Returning a true value aborts selection grabbing. It will still be hilighted.
135    
136 root 1.22 =item on_sel_extend $term
137    
138     Called whenever the user tries to extend the selection (e.g. with a double
139     click) and is either supposed to return false (normal operation), or
140     should extend the selection itelf and return true to suppress the built-in
141     processing.
142    
143     See the F<selection> example extension.
144    
145 root 1.1 =item on_focus_in $term
146    
147     Called whenever the window gets the keyboard focus, before urxvt does
148     focus in processing.
149    
150     =item on_focus_out $term
151    
152     Called wheneever the window loses keyboard focus, before urxvt does focus
153     out processing.
154    
155     =item on_view_change $term, $offset
156    
157     Called whenever the view offset changes, i..e the user or program
158     scrolls. Offset C<0> means display the normal terminal, positive values
159     show this many lines of scrollback.
160    
161     =item on_scroll_back $term, $lines, $saved
162    
163     Called whenever lines scroll out of the terminal area into the scrollback
164     buffer. C<$lines> is the number of lines scrolled out and may be larger
165     than the scroll back buffer or the terminal.
166    
167     It is called before lines are scrolled out (so rows 0 .. min ($lines - 1,
168     $nrow - 1) represent the lines to be scrolled out). C<$saved> is the total
169     number of lines that will be in the scrollback buffer.
170    
171     =item on_tty_activity $term *NYI*
172    
173     Called whenever the program(s) running in the urxvt window send output.
174    
175     =item on_refresh_begin $term
176    
177     Called just before the screen gets redrawn. Can be used for overlay
178     or similar effects by modify terminal contents in refresh_begin, and
179     restoring them in refresh_end. The built-in overlay and selection display
180     code is run after this hook, and takes precedence.
181    
182     =item on_refresh_end $term
183    
184     Called just after the screen gets redrawn. See C<on_refresh_begin>.
185    
186 root 1.11 =item on_keyboard_command $term, $string
187    
188     Called whenever the user presses a key combination that has a
189     C<perl:string> action bound to it (see description of the B<keysym>
190     resource in the @@RXVT_NAME@@(1) manpage).
191    
192 root 1.1 =back
193    
194 root 1.23 =head2 Variables in the C<urxvt> Package
195    
196     =over 4
197    
198     =item $urxvt::TERM
199    
200     The current terminal. Whenever a callback/Hook is bein executed, this
201     variable stores the current C<urxvt::term> object.
202    
203     =back
204    
205 root 1.1 =head2 Functions in the C<urxvt> Package
206    
207     =over 4
208    
209     =item urxvt::fatal $errormessage
210    
211     Fatally aborts execution with the given error message. Avoid at all
212     costs! The only time this is acceptable is when the terminal process
213     starts up.
214    
215     =item urxvt::warn $string
216    
217 root 1.6 Calls C<rxvt_warn> with the given string which should not include a
218 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
219     that calls this function.
220    
221     Using this function has the advantage that its output ends up in the
222     correct place, e.g. on stderr of the connecting urxvtc client.
223    
224     =item $time = urxvt::NOW
225    
226     Returns the "current time" (as per the event loop).
227    
228 root 1.21 =back
229    
230 root 1.18 =head2 RENDITION
231    
232     Rendition bitsets contain information about colour, font, font styles and
233     similar information for each screen cell.
234    
235     The following "macros" deal with changes in rendition sets. You should
236     never just create a bitset, you should always modify an existing one,
237     as they contain important information required for correct operation of
238     rxvt-unicode.
239    
240     =over 4
241    
242     =item $rend = urxvt::DEFAULT_RSTYLE
243    
244     Returns the default rendition, as used when the terminal is starting up or
245     being reset. Useful as a base to start when creating renditions.
246    
247     =item $rend = urxvt::OVERLAY_RSTYLE
248    
249     Return the rendition mask used for overlays by default.
250    
251     =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
252    
253     Return the bit that enabled bold, italic, blink, reverse-video and
254 root 1.19 underline, respectively. To enable such a style, just logically OR it into
255     the bitset.
256 root 1.18
257     =item $foreground = urxvt::GET_BASEFG $rend
258    
259     =item $background = urxvt::GET_BASEBG $rend
260    
261     Return the foreground/background colour index, respectively.
262    
263     =item $rend = urxvt::SET_FGCOLOR ($rend, $new_colour)
264    
265     =item $rend = urxvt::SET_BGCOLOR ($rend, $new_colour)
266    
267     Replace the foreground/background colour in the rendition mask with the
268     specified one.
269    
270 root 1.19 =item $value = urxvt::GET_CUSTOM ($rend)
271    
272     Return the "custom" value: Every rendition has 5 bits for use by
273     extensions. They can be set and changed as you like and are initially
274     zero.
275    
276     =item $rend = urxvt::SET_CUSTOM ($rend, $new_value)
277    
278     Change the custom value.
279    
280 root 1.18 =back
281    
282 root 1.1 =cut
283    
284     package urxvt;
285    
286     use strict;
287 root 1.23 use Scalar::Util ();
288 root 1.1
289 root 1.23 our $TERM;
290 root 1.1 our @HOOKNAME;
291     our $LIBDIR;
292    
293     BEGIN {
294     urxvt->bootstrap;
295    
296     # overwrite perl's warn
297     *CORE::GLOBAL::warn = sub {
298     my $msg = join "", @_;
299     $msg .= "\n"
300     unless $msg =~ /\n$/;
301     urxvt::warn ($msg);
302     };
303     }
304    
305 root 1.8 my @hook_count;
306 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
307 root 1.1
308     sub verbose {
309     my ($level, $msg) = @_;
310 root 1.8 warn "$msg\n" if $level <= $verbosity;
311 root 1.1 }
312    
313     # find on_xxx subs in the package and register them
314     # as hooks
315     sub register_package($) {
316     my ($pkg) = @_;
317    
318 root 1.7 for my $htype (0.. $#HOOKNAME) {
319     my $name = $HOOKNAME[$htype];
320 root 1.1
321     my $ref = $pkg->can ("on_" . lc $name)
322     or next;
323    
324 root 1.23 $TERM->{_hook}[$htype]{$pkg} = $ref;
325 root 1.7 $hook_count[$htype]++
326     or set_should_invoke $htype, 1;
327 root 1.1 }
328     }
329    
330     my $script_pkg = "script0000";
331     my %script_pkg;
332    
333     # load a single script into its own package, once only
334 root 1.7 sub script_package($) {
335 root 1.1 my ($path) = @_;
336    
337     $script_pkg{$path} ||= do {
338 root 1.8 my $pkg = "urxvt::" . ($script_pkg++);
339    
340 root 1.1 verbose 3, "loading script '$path' into package '$pkg'";
341    
342     open my $fh, "<:raw", $path
343     or die "$path: $!";
344    
345 root 1.8 my $source = "package $pkg; use strict; use utf8;\n"
346     . "#line 1 \"$path\"\n{\n"
347     . (do { local $/; <$fh> })
348     . "\n};\n1";
349    
350     eval $source or die "$path: $@";
351 root 1.1
352     $pkg
353 root 1.7 }
354 root 1.1 }
355    
356 root 1.8 # called by the rxvt core
357     sub invoke {
358 root 1.23 local $TERM = shift;
359 root 1.8 my $htype = shift;
360 root 1.6
361 root 1.8 if ($htype == 0) { # INIT
362 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
363 root 1.6
364 root 1.23 for my $ext (split /:/, $TERM->resource ("perl_ext")) {
365 root 1.8 my @files = grep -f $_, map "$_/$ext", @dirs;
366 root 1.6
367 root 1.8 if (@files) {
368     register_package script_package $files[0];
369     } else {
370     warn "perl extension '$ext' not found in perl library search path\n";
371     }
372     }
373 root 1.6
374 root 1.8 } elsif ($htype == 1) { # DESTROY
375 root 1.23 if (my $hook = $TERM->{_hook}) {
376 root 1.8 for my $htype (0..$#$hook) {
377     $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} }
378     or set_should_invoke $htype, 0;
379     }
380     }
381     }
382 root 1.6
383 root 1.23 my $cb = $TERM->{_hook}[$htype]
384 root 1.8 or return;
385 root 1.6
386 root 1.23 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
387 root 1.8 if $verbosity >= 10;
388 root 1.7
389 root 1.23 while (my ($pkg, $cb) = each %$cb) {
390     return 1
391     if $cb->(
392     $TERM->{$pkg} ||= do {
393     my $proxy = bless { }, urxvt::term::proxy::;
394     Scalar::Util::weaken ($proxy->{term} = $TERM);
395     $proxy
396     },
397     @_,
398     );
399 root 1.7 }
400    
401 root 1.8 0
402 root 1.7 }
403 root 1.1
404 root 1.23 sub urxvt::term::proxy::AUTOLOAD {
405     $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/
406     or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable";
407    
408     eval qq{
409     sub $urxvt::term::proxy::AUTOLOAD {
410     unshift \@_, shift->{term};
411     goto &urxvt::term::$1;
412     }
413     1
414     } or die "FATAL: unable to compile method forwarder: $@";
415    
416     goto &$urxvt::term::proxy::AUTOLOAD;
417     }
418    
419 root 1.1 =head2 The C<urxvt::term> Class
420    
421     =over 4
422    
423 root 1.4 =item $value = $term->resource ($name[, $newval])
424    
425     Returns the current resource value associated with a given name and
426     optionally sets a new value. Setting values is most useful in the C<init>
427     hook. Unset resources are returned and accepted as C<undef>.
428    
429     The new value must be properly encoded to a suitable character encoding
430     before passing it to this method. Similarly, the returned value may need
431     to be converted from the used encoding to text.
432    
433     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
434     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
435     likely change).
436    
437     Please note that resource strings will currently only be freed when the
438     terminal is destroyed, so changing options frequently will eat memory.
439    
440 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
441     are supported in every build, please see the source to see the actual
442     list:
443    
444     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
445     borderLess color cursorBlink cursorUnderline cutchars delete_key
446     display_name embed ext_bwidth fade font geometry hold iconName
447     imFont imLocale inputMethod insecure int_bwidth intensityStyles
448 root 1.8 italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 modifier
449     mouseWheelScrollPage name pastableTabs path perl_eval perl_ext
450 root 1.6 perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd
451     reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating
452     scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput
453     scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle
454     shade term_name title transparent transparent_all tripleclickwords
455     utmpInhibit visualBell
456 root 1.5
457 root 1.4 =cut
458    
459     sub urxvt::term::resource($$;$) {
460     my ($self, $name) = (shift, shift);
461     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
462     goto &urxvt::term::_resource;
463     }
464    
465 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
466    
467     =item ($row, $col) = $term->selection_beg ([$row, $col])
468    
469     =item ($row, $col) = $term->selection_end ([$row, $col])
470    
471     Return the current values of the selection mark, begin or end positions,
472     and optionally set them to new values.
473    
474     =item $success = $term->selection_grab ($eventtime)
475    
476     Try to request the primary selection from the server (for example, as set
477     by the next method).
478    
479     =item $oldtext = $term->selection ([$newtext])
480    
481     Return the current selection text and optionally replace it by C<$newtext>.
482    
483 root 1.20 #=item $term->overlay ($x, $y, $text)
484     #
485     #Create a simple multi-line overlay box. See the next method for details.
486     #
487     #=cut
488 root 1.1
489     sub urxvt::term::scr_overlay {
490 root 1.20 die;
491 root 1.1 my ($self, $x, $y, $text) = @_;
492    
493     my @lines = split /\n/, $text;
494    
495     my $w = 0;
496 root 1.6 for (map $self->strwidth ($_), @lines) {
497 root 1.1 $w = $_ if $w < $_;
498     }
499    
500     $self->scr_overlay_new ($x, $y, $w, scalar @lines);
501     $self->scr_overlay_set (0, $_, $lines[$_]) for 0.. $#lines;
502     }
503    
504 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
505 root 1.1
506     Create a new (empty) overlay at the given position with the given
507 root 1.20 width/height. C<$rstyle> defines the initial rendition style
508     (default: C<OVERLAY_RSTYLE>).
509 root 1.1
510 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
511     around the box.
512 root 1.1
513 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
514     right/bottom side, respectively.
515 root 1.1
516 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
517     as long as the perl object is referenced.
518 root 1.1
519 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
520    
521     =over 4
522 root 1.1
523 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
524 root 1.1
525 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
526     text in rxvt-unicode's special encoding and an array of rendition values
527     at a specific position inside the overlay.
528 root 1.1
529 root 1.22 =item $overlay->hide
530    
531     If visible, hide the overlay, but do not destroy it.
532    
533     =item $overlay->show
534    
535     If hidden, display the overlay again.
536    
537     =back
538    
539 root 1.6 =item $cellwidth = $term->strwidth $string
540    
541     Returns the number of screen-cells this string would need. Correctly
542     accounts for wide and combining characters.
543    
544     =item $octets = $term->locale_encode $string
545    
546     Convert the given text string into the corresponding locale encoding.
547    
548     =item $string = $term->locale_decode $octets
549    
550     Convert the given locale-encoded octets into a perl string.
551    
552     =item $term->tt_write ($octets)
553    
554     Write the octets given in C<$data> to the tty (i.e. as program input). To
555 root 1.12 pass characters instead of octets, you should convert your strings first
556     to the locale-specific encoding using C<< $term->locale_encode >>.
557    
558 root 1.13 =item $nrow = $term->nrow
559    
560     =item $ncol = $term->ncol
561    
562     Return the number of rows/columns of the terminal window (i.e. as
563     specified by C<-geometry>, excluding any scrollback).
564    
565 root 1.12 =item $nsaved = $term->nsaved
566    
567     Returns the number of lines in the scrollback buffer.
568    
569     =item $view_start = $term->view_start ([$newvalue])
570    
571     Returns the negative row number of the topmost line. Minimum value is
572     C<0>, which displays the normal terminal contents. Larger values scroll
573     this many lines into the scrollback buffer.
574    
575 root 1.14 =item $term->want_refresh
576    
577     Requests a screen refresh. At the next opportunity, rxvt-unicode will
578     compare the on-screen display with its stored representation. If they
579     differ, it redraws the differences.
580    
581     Used after changing terminal contents to display them.
582    
583 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
584 root 1.12
585     Returns the text of the entire row with number C<$row_number>. Row C<0>
586     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
587     terminal line. The scrollback buffer starts at line C<-1> and extends to
588     line C<< -$term->nsaved >>.
589    
590 root 1.13 If C<$new_text> is specified, it will replace characters in the current
591     line, starting at column C<$start_col> (default C<0>), which is useful
592 root 1.18 to replace only parts of a line. The font index in the rendition will
593 root 1.13 automatically be updated.
594 root 1.12
595     C<$text> is in a special encoding: tabs and wide characters that use more
596     than one cell when displayed are padded with urxvt::NOCHAR characters
597     (C<chr 65535>). Characters with combining characters and other characters
598     that do not fit into the normal tetx encoding will be replaced with
599     characters in the private use area.
600    
601     You have to obey this encoding when changing text. The advantage is
602     that C<substr> and similar functions work on screen cells and not on
603     characters.
604    
605     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
606     can be used to convert normal strings into this encoding and vice versa.
607    
608 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
609    
610     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
611     bitsets. Rendition bitsets contain information about colour, font, font
612     styles and similar information. See also C<< $term->ROW_t >>.
613    
614     When setting rendition, the font mask will be ignored.
615 root 1.12
616 root 1.18 See the section on RENDITION, above.
617 root 1.13
618     =item $length = $term->ROW_l ($row_number[, $new_length])
619    
620     Returns the number of screen cells that are in use ("the line length"). If
621     it is C<-1>, then the line is part of a multiple-row logical "line", which
622     means all characters are in use and it is continued on the next row.
623 root 1.12
624     =item $text = $term->special_encode $string
625    
626     Converts a perl string into the special encoding used by rxvt-unicode,
627     where one character corresponds to one screen cell. See
628     C<< $term->ROW_t >> for details.
629    
630     =item $string = $term->special_decode $text
631    
632     Converts rxvt-unicodes text reprsentation into a perl string. See
633     C<< $term->ROW_t >> for details.
634 root 1.6
635 root 1.1 =back
636    
637     =head2 The C<urxvt::timer> Class
638    
639     This class implements timer watchers/events. Time is represented as a
640     fractional number of seconds since the epoch. Example:
641    
642 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
643 root 1.1 $term->{timer} = urxvt::timer
644     ->new
645 root 1.20 ->interval (1)
646 root 1.1 ->cb (sub {
647 root 1.20 $term->{overlay}->set (0, 0,
648     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
649     });
650 root 1.1
651     =over 4
652    
653     =item $timer = new urxvt::timer
654    
655 root 1.20 Create a new timer object in started state. It is scheduled to fire
656     immediately.
657 root 1.1
658     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
659    
660     Set the callback to be called when the timer triggers.
661    
662     =item $tstamp = $timer->at
663    
664     Return the time this watcher will fire next.
665    
666     =item $timer = $timer->set ($tstamp)
667    
668     Set the time the event is generated to $tstamp.
669    
670 root 1.20 =item $timer = $timer->interval ($interval)
671    
672     Normally (and when C<$interval> is C<0>), the timer will automatically
673     stop after it has fired once. If C<$interval> is non-zero, then the timer
674     is automatically rescheduled at the given intervals.
675    
676 root 1.1 =item $timer = $timer->start
677    
678     Start the timer.
679    
680     =item $timer = $timer->start ($tstamp)
681    
682     Set the event trigger time to C<$tstamp> and start the timer.
683    
684     =item $timer = $timer->stop
685    
686     Stop the timer.
687    
688     =back
689    
690     =head2 The C<urxvt::iow> Class
691    
692     This class implements io watchers/events. Example:
693    
694     $term->{socket} = ...
695     $term->{iow} = urxvt::iow
696     ->new
697     ->fd (fileno $term->{socket})
698     ->events (1) # wait for read data
699     ->start
700     ->cb (sub {
701     my ($iow, $revents) = @_;
702     # $revents must be 1 here, no need to check
703     sysread $term->{socket}, my $buf, 8192
704     or end-of-file;
705     });
706    
707    
708     =over 4
709    
710     =item $iow = new urxvt::iow
711    
712     Create a new io watcher object in stopped state.
713    
714     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
715    
716     Set the callback to be called when io events are triggered. C<$reventmask>
717     is a bitset as described in the C<events> method.
718    
719     =item $iow = $iow->fd ($fd)
720    
721     Set the filedescriptor (not handle) to watch.
722    
723     =item $iow = $iow->events ($eventmask)
724    
725     Set the event mask to watch. Bit #0 (value C<1>) enables watching for read
726     data, Bit #1 (value C<2>) enables watching for write data.
727    
728     =item $iow = $iow->start
729    
730     Start watching for requested events on the given handle.
731    
732     =item $iow = $iow->stop
733    
734     Stop watching for events on the given filehandle.
735    
736     =back
737    
738 root 1.4 =head1 ENVIRONMENT
739    
740     =head2 URXVT_PERL_VERBOSITY
741    
742     This variable controls the verbosity level of the perl extension. Higher
743     numbers indicate more verbose output.
744    
745     =over 4
746    
747     =item 0 - only fatal messages
748    
749     =item 3 - script loading and management
750    
751     =item 10 - all events received
752    
753     =back
754    
755 root 1.1 =head1 AUTHOR
756    
757     Marc Lehmann <pcg@goof.com>
758     http://software.schmorp.de/pkg/rxvt-unicode
759    
760     =cut
761    
762     1