ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.38
Committed: Fri Jan 6 03:43:12 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.37: +7 -3 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.38 =item on_key_press $term, $event, $octets
267 root 1.37
268     =item on_key_release $term, $event
269    
270     =item on_button_press $term, $event
271    
272     =item on_button_release $term, $event
273    
274     =item on_motion_notify $term, $event
275    
276 root 1.38 Called whenever the corresponding X event is received for the terminal
277     (see the XEvent manpage) If the hook returns true, then the even will be
278     ignored by rxvt-unicode.
279    
280     C<on_key_press> additionally receives the string rxvt-unicode would
281     output, if any, in locale-specific encoding.
282 root 1.37
283     subwindow.
284    
285 root 1.1 =back
286    
287 root 1.23 =head2 Variables in the C<urxvt> Package
288    
289     =over 4
290    
291     =item $urxvt::TERM
292    
293     The current terminal. Whenever a callback/Hook is bein executed, this
294     variable stores the current C<urxvt::term> object.
295    
296     =back
297    
298 root 1.1 =head2 Functions in the C<urxvt> Package
299    
300     =over 4
301    
302 root 1.36 =item $term = new urxvt [arg...]
303    
304     Creates a new terminal, very similar as if you had started it with
305     C<system $binfile, arg...>. Croaks (and probably outputs an error message)
306     if the new instance couldn't be created. Returns C<undef> if the new
307     instance didn't initialise perl, and the terminal object otherwise. The
308     C<init> and C<start> hooks will be called during the call.
309    
310 root 1.1 =item urxvt::fatal $errormessage
311    
312     Fatally aborts execution with the given error message. Avoid at all
313     costs! The only time this is acceptable is when the terminal process
314     starts up.
315    
316     =item urxvt::warn $string
317    
318 root 1.6 Calls C<rxvt_warn> with the given string which should not include a
319 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
320     that calls this function.
321    
322     Using this function has the advantage that its output ends up in the
323     correct place, e.g. on stderr of the connecting urxvtc client.
324    
325     =item $time = urxvt::NOW
326    
327     Returns the "current time" (as per the event loop).
328    
329 root 1.21 =back
330    
331 root 1.18 =head2 RENDITION
332    
333     Rendition bitsets contain information about colour, font, font styles and
334     similar information for each screen cell.
335    
336     The following "macros" deal with changes in rendition sets. You should
337     never just create a bitset, you should always modify an existing one,
338     as they contain important information required for correct operation of
339     rxvt-unicode.
340    
341     =over 4
342    
343     =item $rend = urxvt::DEFAULT_RSTYLE
344    
345     Returns the default rendition, as used when the terminal is starting up or
346     being reset. Useful as a base to start when creating renditions.
347    
348     =item $rend = urxvt::OVERLAY_RSTYLE
349    
350     Return the rendition mask used for overlays by default.
351    
352     =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
353    
354     Return the bit that enabled bold, italic, blink, reverse-video and
355 root 1.19 underline, respectively. To enable such a style, just logically OR it into
356     the bitset.
357 root 1.18
358     =item $foreground = urxvt::GET_BASEFG $rend
359    
360     =item $background = urxvt::GET_BASEBG $rend
361    
362     Return the foreground/background colour index, respectively.
363    
364     =item $rend = urxvt::SET_FGCOLOR ($rend, $new_colour)
365    
366     =item $rend = urxvt::SET_BGCOLOR ($rend, $new_colour)
367    
368     Replace the foreground/background colour in the rendition mask with the
369     specified one.
370    
371 root 1.19 =item $value = urxvt::GET_CUSTOM ($rend)
372    
373     Return the "custom" value: Every rendition has 5 bits for use by
374     extensions. They can be set and changed as you like and are initially
375     zero.
376    
377     =item $rend = urxvt::SET_CUSTOM ($rend, $new_value)
378    
379     Change the custom value.
380    
381 root 1.18 =back
382    
383 root 1.1 =cut
384    
385     package urxvt;
386    
387     use strict;
388 root 1.23 use Scalar::Util ();
389 root 1.1
390 root 1.23 our $TERM;
391 root 1.1 our @HOOKNAME;
392     our $LIBDIR;
393    
394     BEGIN {
395     urxvt->bootstrap;
396    
397     # overwrite perl's warn
398     *CORE::GLOBAL::warn = sub {
399     my $msg = join "", @_;
400     $msg .= "\n"
401     unless $msg =~ /\n$/;
402     urxvt::warn ($msg);
403     };
404     }
405    
406 root 1.8 my @hook_count;
407 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
408 root 1.1
409     sub verbose {
410     my ($level, $msg) = @_;
411 root 1.8 warn "$msg\n" if $level <= $verbosity;
412 root 1.1 }
413    
414     # find on_xxx subs in the package and register them
415     # as hooks
416     sub register_package($) {
417     my ($pkg) = @_;
418    
419 root 1.7 for my $htype (0.. $#HOOKNAME) {
420     my $name = $HOOKNAME[$htype];
421 root 1.1
422     my $ref = $pkg->can ("on_" . lc $name)
423     or next;
424    
425 root 1.23 $TERM->{_hook}[$htype]{$pkg} = $ref;
426 root 1.7 $hook_count[$htype]++
427     or set_should_invoke $htype, 1;
428 root 1.1 }
429     }
430    
431     my $script_pkg = "script0000";
432     my %script_pkg;
433    
434     # load a single script into its own package, once only
435 root 1.7 sub script_package($) {
436 root 1.1 my ($path) = @_;
437    
438     $script_pkg{$path} ||= do {
439 root 1.8 my $pkg = "urxvt::" . ($script_pkg++);
440    
441 root 1.1 verbose 3, "loading script '$path' into package '$pkg'";
442    
443     open my $fh, "<:raw", $path
444     or die "$path: $!";
445    
446 root 1.8 my $source = "package $pkg; use strict; use utf8;\n"
447     . "#line 1 \"$path\"\n{\n"
448     . (do { local $/; <$fh> })
449     . "\n};\n1";
450    
451     eval $source or die "$path: $@";
452 root 1.1
453     $pkg
454 root 1.7 }
455 root 1.1 }
456    
457 root 1.31 our $retval; # return value for urxvt
458    
459 root 1.8 # called by the rxvt core
460     sub invoke {
461 root 1.23 local $TERM = shift;
462 root 1.8 my $htype = shift;
463 root 1.6
464 root 1.8 if ($htype == 0) { # INIT
465 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
466 root 1.6
467 root 1.30 for my $ext (map { split /:/, $TERM->resource ("perl_ext_$_") } 1, 2) {
468 root 1.8 my @files = grep -f $_, map "$_/$ext", @dirs;
469 root 1.6
470 root 1.8 if (@files) {
471     register_package script_package $files[0];
472     } else {
473     warn "perl extension '$ext' not found in perl library search path\n";
474     }
475     }
476 root 1.31 }
477    
478     $retval = undef;
479 root 1.6
480 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
481     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
482     if $verbosity >= 10;
483    
484     keys %$cb;
485    
486     while (my ($pkg, $cb) = each %$cb) {
487     $retval = $cb->(
488     $TERM->{_pkg}{$pkg} ||= do {
489     my $proxy = bless { }, urxvt::term::proxy::;
490     Scalar::Util::weaken ($proxy->{term} = $TERM);
491     $proxy
492     },
493     @_,
494     ) and last;
495     }
496     }
497    
498     if ($htype == 1) { # DESTROY
499     # remove hooks if unused
500 root 1.23 if (my $hook = $TERM->{_hook}) {
501 root 1.8 for my $htype (0..$#$hook) {
502     $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} }
503     or set_should_invoke $htype, 0;
504     }
505     }
506 root 1.7
507 root 1.31 # clear package objects
508     %$_ = () for values %{ $TERM->{_pkg} };
509 root 1.25
510 root 1.31 # clear package
511     %$TERM = ();
512 root 1.7 }
513    
514 root 1.31 $retval
515 root 1.7 }
516 root 1.1
517 root 1.23 sub urxvt::term::proxy::AUTOLOAD {
518     $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/
519     or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable";
520    
521     eval qq{
522     sub $urxvt::term::proxy::AUTOLOAD {
523 root 1.24 my \$proxy = shift;
524     \$proxy->{term}->$1 (\@_)
525 root 1.23 }
526     1
527     } or die "FATAL: unable to compile method forwarder: $@";
528    
529     goto &$urxvt::term::proxy::AUTOLOAD;
530     }
531    
532 root 1.1 =head2 The C<urxvt::term> Class
533    
534     =over 4
535    
536 root 1.36 =item $term->destroy
537    
538     Destroy the terminal object (close the window, free resources etc.).
539    
540 root 1.4 =item $value = $term->resource ($name[, $newval])
541    
542     Returns the current resource value associated with a given name and
543     optionally sets a new value. Setting values is most useful in the C<init>
544     hook. Unset resources are returned and accepted as C<undef>.
545    
546     The new value must be properly encoded to a suitable character encoding
547     before passing it to this method. Similarly, the returned value may need
548     to be converted from the used encoding to text.
549    
550     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
551     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
552     likely change).
553    
554     Please note that resource strings will currently only be freed when the
555     terminal is destroyed, so changing options frequently will eat memory.
556    
557 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
558     are supported in every build, please see the source to see the actual
559     list:
560    
561     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
562     borderLess color cursorBlink cursorUnderline cutchars delete_key
563     display_name embed ext_bwidth fade font geometry hold iconName
564     imFont imLocale inputMethod insecure int_bwidth intensityStyles
565 root 1.8 italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 modifier
566 root 1.30 mouseWheelScrollPage name pastableTabs path perl_eval perl_ext_1 perl_ext_2
567 root 1.6 perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd
568     reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating
569     scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput
570     scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle
571     shade term_name title transparent transparent_all tripleclickwords
572     utmpInhibit visualBell
573 root 1.5
574 root 1.4 =cut
575    
576     sub urxvt::term::resource($$;$) {
577     my ($self, $name) = (shift, shift);
578     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
579     goto &urxvt::term::_resource;
580     }
581    
582 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
583 root 1.32
584 root 1.33 Return and optionally change the current rendition. Text that is output by
585     the terminal application will use this style.
586 root 1.32
587     =item ($row, $col) = $term->screen_cur ([$row, $col])
588    
589     Return the current coordinates of the text cursor position and optionally
590     set it (which is usually bad as applications don't expect that).
591    
592 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
593    
594     =item ($row, $col) = $term->selection_beg ([$row, $col])
595    
596     =item ($row, $col) = $term->selection_end ([$row, $col])
597    
598     Return the current values of the selection mark, begin or end positions,
599     and optionally set them to new values.
600    
601     =item $success = $term->selection_grab ($eventtime)
602    
603     Try to request the primary selection from the server (for example, as set
604     by the next method).
605    
606     =item $oldtext = $term->selection ([$newtext])
607    
608     Return the current selection text and optionally replace it by C<$newtext>.
609    
610 root 1.20 #=item $term->overlay ($x, $y, $text)
611     #
612     #Create a simple multi-line overlay box. See the next method for details.
613     #
614     #=cut
615 root 1.33 #
616     #sub urxvt::term::scr_overlay {
617     # my ($self, $x, $y, $text) = @_;
618     #
619     # my @lines = split /\n/, $text;
620     #
621     # my $w = 0;
622     # for (map $self->strwidth ($_), @lines) {
623     # $w = $_ if $w < $_;
624     # }
625     #
626     # $self->scr_overlay_new ($x, $y, $w, scalar @lines);
627     # $self->scr_overlay_set (0, $_, $lines[$_]) for 0.. $#lines;
628     #}
629 root 1.1
630 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
631 root 1.1
632     Create a new (empty) overlay at the given position with the given
633 root 1.20 width/height. C<$rstyle> defines the initial rendition style
634     (default: C<OVERLAY_RSTYLE>).
635 root 1.1
636 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
637     around the box.
638 root 1.1
639 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
640     right/bottom side, respectively.
641 root 1.1
642 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
643     as long as the perl object is referenced.
644 root 1.1
645 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
646    
647     =over 4
648 root 1.1
649 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
650 root 1.1
651 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
652     text in rxvt-unicode's special encoding and an array of rendition values
653     at a specific position inside the overlay.
654 root 1.1
655 root 1.22 =item $overlay->hide
656    
657     If visible, hide the overlay, but do not destroy it.
658    
659     =item $overlay->show
660    
661     If hidden, display the overlay again.
662    
663     =back
664    
665 root 1.6 =item $cellwidth = $term->strwidth $string
666    
667     Returns the number of screen-cells this string would need. Correctly
668     accounts for wide and combining characters.
669    
670     =item $octets = $term->locale_encode $string
671    
672     Convert the given text string into the corresponding locale encoding.
673    
674     =item $string = $term->locale_decode $octets
675    
676     Convert the given locale-encoded octets into a perl string.
677    
678 root 1.33 =item $term->scr_add_lines ($string)
679    
680     Write the given text string to the screen, as if output by the application
681     running inside the terminal. It may not contain command sequences (escape
682     codes), but is free to use line feeds, carriage returns and tabs. The
683     string is a normal text string, not in locale-dependent encoding.
684    
685     Normally its not a good idea to use this function, as programs might be
686     confused by changes in cursor position or scrolling. Its useful inside a
687     C<on_add_lines> hook, though.
688    
689 root 1.36 =item $term->cmd_parse ($octets)
690    
691     Similar to C<scr_add_lines>, but the argument must be in the
692     locale-specific encoding of the terminal and can contain command sequences
693     (escape codes) that will be interpreted.
694    
695 root 1.6 =item $term->tt_write ($octets)
696    
697     Write the octets given in C<$data> to the tty (i.e. as program input). To
698 root 1.12 pass characters instead of octets, you should convert your strings first
699     to the locale-specific encoding using C<< $term->locale_encode >>.
700    
701 root 1.32 =item $window_width = $term->width
702    
703     =item $window_height = $term->height
704    
705     =item $font_width = $term->fwidth
706    
707     =item $font_height = $term->fheight
708    
709     =item $font_ascent = $term->fbase
710    
711     =item $terminal_rows = $term->nrow
712    
713     =item $terminal_columns = $term->ncol
714    
715     =item $has_focus = $term->focus
716    
717     =item $is_mapped = $term->mapped
718 root 1.13
719 root 1.32 =item $max_scrollback = $term->saveLines
720 root 1.13
721 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
722 root 1.13
723 root 1.32 =item $lines_in_scrollback = $term->nsaved
724 root 1.12
725 root 1.32 Return various integers describing terminal characteristics.
726 root 1.12
727     =item $view_start = $term->view_start ([$newvalue])
728    
729     Returns the negative row number of the topmost line. Minimum value is
730     C<0>, which displays the normal terminal contents. Larger values scroll
731     this many lines into the scrollback buffer.
732    
733 root 1.14 =item $term->want_refresh
734    
735     Requests a screen refresh. At the next opportunity, rxvt-unicode will
736     compare the on-screen display with its stored representation. If they
737     differ, it redraws the differences.
738    
739     Used after changing terminal contents to display them.
740    
741 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
742 root 1.12
743     Returns the text of the entire row with number C<$row_number>. Row C<0>
744     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
745     terminal line. The scrollback buffer starts at line C<-1> and extends to
746 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
747     is requested.
748 root 1.12
749 root 1.13 If C<$new_text> is specified, it will replace characters in the current
750     line, starting at column C<$start_col> (default C<0>), which is useful
751 root 1.18 to replace only parts of a line. The font index in the rendition will
752 root 1.13 automatically be updated.
753 root 1.12
754     C<$text> is in a special encoding: tabs and wide characters that use more
755     than one cell when displayed are padded with urxvt::NOCHAR characters
756     (C<chr 65535>). Characters with combining characters and other characters
757     that do not fit into the normal tetx encoding will be replaced with
758     characters in the private use area.
759    
760     You have to obey this encoding when changing text. The advantage is
761     that C<substr> and similar functions work on screen cells and not on
762     characters.
763    
764     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
765     can be used to convert normal strings into this encoding and vice versa.
766    
767 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
768    
769     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
770     bitsets. Rendition bitsets contain information about colour, font, font
771     styles and similar information. See also C<< $term->ROW_t >>.
772    
773     When setting rendition, the font mask will be ignored.
774 root 1.12
775 root 1.18 See the section on RENDITION, above.
776 root 1.13
777     =item $length = $term->ROW_l ($row_number[, $new_length])
778    
779 root 1.24 Returns the number of screen cells that are in use ("the line
780     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
781     line is joined with the following one.
782    
783     =item $bool = $term->is_longer ($row_number)
784    
785     Returns true if the row is part of a multiple-row logical "line" (i.e.
786     joined with the following row), which means all characters are in use
787     and it is continued on the next row (and possibly a continuation of the
788     previous row(s)).
789    
790     =item $line = $term->line ($row_number)
791    
792     Create and return a new C<urxvt::line> object that stores information
793     about the logical line that row C<$row_number> is part of. It supports the
794     following methods:
795 root 1.12
796 root 1.24 =over 4
797    
798 root 1.35 =item $text = $line->t ([$new_text])
799 root 1.24
800 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
801 root 1.24
802 root 1.35 =item $rend = $line->r ([$new_rend])
803 root 1.24
804 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
805 root 1.24
806     =item $length = $line->l
807    
808     Returns the length of the line in cells, similar to C<ROW_l>.
809    
810     =item $rownum = $line->beg
811    
812     =item $rownum = $line->end
813    
814     Return the row number of the first/last row of the line, respectively.
815    
816     =item $offset = $line->offset_of ($row, $col)
817    
818     Returns the character offset of the given row|col pair within the logical
819     line.
820    
821     =item ($row, $col) = $line->coord_of ($offset)
822    
823     Translates a string offset into terminal coordinates again.
824    
825     =back
826    
827     =cut
828    
829     sub urxvt::term::line {
830     my ($self, $row) = @_;
831    
832     my $maxrow = $self->nrow - 1;
833    
834     my ($beg, $end) = ($row, $row);
835    
836     --$beg while $self->ROW_is_longer ($beg - 1);
837     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
838    
839     bless {
840     term => $self,
841     beg => $beg,
842     end => $end,
843 root 1.34 ncol => $self->ncol,
844 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
845     }, urxvt::line::
846     }
847    
848     sub urxvt::line::t {
849     my ($self) = @_;
850    
851 root 1.34 if (@_ > 1)
852     {
853     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
854     for $self->{beg} .. $self->{end};
855     }
856    
857     defined wantarray &&
858     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
859     0, $self->{len}
860 root 1.24 }
861    
862     sub urxvt::line::r {
863     my ($self) = @_;
864    
865 root 1.34 if (@_ > 1)
866     {
867     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
868     for $self->{beg} .. $self->{end};
869     }
870    
871     if (defined wantarray) {
872     my $rend = [
873     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
874     ];
875     $#$rend = $self->{len} - 1;
876     return $rend;
877     }
878    
879     ()
880 root 1.24 }
881    
882     sub urxvt::line::beg { $_[0]{beg} }
883     sub urxvt::line::end { $_[0]{end} }
884     sub urxvt::line::l { $_[0]{len} }
885    
886     sub urxvt::line::offset_of {
887     my ($self, $row, $col) = @_;
888    
889 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
890 root 1.24 }
891    
892     sub urxvt::line::coord_of {
893     my ($self, $offset) = @_;
894    
895     use integer;
896    
897     (
898 root 1.34 $offset / $self->{ncol} + $self->{beg},
899     $offset % $self->{ncol}
900 root 1.24 )
901     }
902    
903     =item ($row, $col) = $line->coord_of ($offset)
904 root 1.12 =item $text = $term->special_encode $string
905    
906     Converts a perl string into the special encoding used by rxvt-unicode,
907     where one character corresponds to one screen cell. See
908     C<< $term->ROW_t >> for details.
909    
910     =item $string = $term->special_decode $text
911    
912     Converts rxvt-unicodes text reprsentation into a perl string. See
913     C<< $term->ROW_t >> for details.
914 root 1.6
915 root 1.1 =back
916    
917     =head2 The C<urxvt::timer> Class
918    
919     This class implements timer watchers/events. Time is represented as a
920     fractional number of seconds since the epoch. Example:
921    
922 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
923 root 1.1 $term->{timer} = urxvt::timer
924     ->new
925 root 1.20 ->interval (1)
926 root 1.1 ->cb (sub {
927 root 1.20 $term->{overlay}->set (0, 0,
928     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
929     });
930 root 1.1
931     =over 4
932    
933     =item $timer = new urxvt::timer
934    
935 root 1.20 Create a new timer object in started state. It is scheduled to fire
936     immediately.
937 root 1.1
938     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
939    
940     Set the callback to be called when the timer triggers.
941    
942     =item $tstamp = $timer->at
943    
944     Return the time this watcher will fire next.
945    
946     =item $timer = $timer->set ($tstamp)
947    
948     Set the time the event is generated to $tstamp.
949    
950 root 1.20 =item $timer = $timer->interval ($interval)
951    
952     Normally (and when C<$interval> is C<0>), the timer will automatically
953     stop after it has fired once. If C<$interval> is non-zero, then the timer
954     is automatically rescheduled at the given intervals.
955    
956 root 1.1 =item $timer = $timer->start
957    
958     Start the timer.
959    
960     =item $timer = $timer->start ($tstamp)
961    
962     Set the event trigger time to C<$tstamp> and start the timer.
963    
964     =item $timer = $timer->stop
965    
966     Stop the timer.
967    
968     =back
969    
970     =head2 The C<urxvt::iow> Class
971    
972     This class implements io watchers/events. Example:
973    
974     $term->{socket} = ...
975     $term->{iow} = urxvt::iow
976     ->new
977     ->fd (fileno $term->{socket})
978     ->events (1) # wait for read data
979     ->start
980     ->cb (sub {
981     my ($iow, $revents) = @_;
982     # $revents must be 1 here, no need to check
983     sysread $term->{socket}, my $buf, 8192
984     or end-of-file;
985     });
986    
987    
988     =over 4
989    
990     =item $iow = new urxvt::iow
991    
992     Create a new io watcher object in stopped state.
993    
994     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
995    
996     Set the callback to be called when io events are triggered. C<$reventmask>
997     is a bitset as described in the C<events> method.
998    
999     =item $iow = $iow->fd ($fd)
1000    
1001     Set the filedescriptor (not handle) to watch.
1002    
1003     =item $iow = $iow->events ($eventmask)
1004    
1005     Set the event mask to watch. Bit #0 (value C<1>) enables watching for read
1006     data, Bit #1 (value C<2>) enables watching for write data.
1007    
1008     =item $iow = $iow->start
1009    
1010     Start watching for requested events on the given handle.
1011    
1012     =item $iow = $iow->stop
1013    
1014     Stop watching for events on the given filehandle.
1015    
1016     =back
1017    
1018 root 1.4 =head1 ENVIRONMENT
1019    
1020     =head2 URXVT_PERL_VERBOSITY
1021    
1022     This variable controls the verbosity level of the perl extension. Higher
1023     numbers indicate more verbose output.
1024    
1025     =over 4
1026    
1027 root 1.27 =item =0 - only fatal messages
1028 root 1.4
1029 root 1.27 =item =3 - script loading and management
1030 root 1.4
1031 root 1.27 =item =10 - all events received
1032 root 1.4
1033     =back
1034    
1035 root 1.1 =head1 AUTHOR
1036    
1037     Marc Lehmann <pcg@goof.com>
1038     http://software.schmorp.de/pkg/rxvt-unicode
1039    
1040     =cut
1041    
1042     1