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