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