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