ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.28
Committed: Wed Jan 4 00:09:12 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.27: +8 -0 lines
Log Message:
*** empty log message ***

File Contents

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