ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.39
Committed: Fri Jan 6 05:28:55 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.38: +6 -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.6 =item $cellwidth = $term->strwidth $string
669    
670     Returns the number of screen-cells this string would need. Correctly
671     accounts for wide and combining characters.
672    
673     =item $octets = $term->locale_encode $string
674    
675     Convert the given text string into the corresponding locale encoding.
676    
677     =item $string = $term->locale_decode $octets
678    
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.32 =item $window_width = $term->width
705    
706     =item $window_height = $term->height
707    
708     =item $font_width = $term->fwidth
709    
710     =item $font_height = $term->fheight
711    
712     =item $font_ascent = $term->fbase
713    
714     =item $terminal_rows = $term->nrow
715    
716     =item $terminal_columns = $term->ncol
717    
718     =item $has_focus = $term->focus
719    
720     =item $is_mapped = $term->mapped
721 root 1.13
722 root 1.32 =item $max_scrollback = $term->saveLines
723 root 1.13
724 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
725 root 1.13
726 root 1.32 =item $lines_in_scrollback = $term->nsaved
727 root 1.12
728 root 1.32 Return various integers describing terminal characteristics.
729 root 1.12
730     =item $view_start = $term->view_start ([$newvalue])
731    
732     Returns the negative row number of the topmost line. Minimum value is
733     C<0>, which displays the normal terminal contents. Larger values scroll
734     this many lines into the scrollback buffer.
735    
736 root 1.14 =item $term->want_refresh
737    
738     Requests a screen refresh. At the next opportunity, rxvt-unicode will
739     compare the on-screen display with its stored representation. If they
740     differ, it redraws the differences.
741    
742     Used after changing terminal contents to display them.
743    
744 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
745 root 1.12
746     Returns the text of the entire row with number C<$row_number>. Row C<0>
747     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
748     terminal line. The scrollback buffer starts at line C<-1> and extends to
749 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
750     is requested.
751 root 1.12
752 root 1.13 If C<$new_text> is specified, it will replace characters in the current
753     line, starting at column C<$start_col> (default C<0>), which is useful
754 root 1.18 to replace only parts of a line. The font index in the rendition will
755 root 1.13 automatically be updated.
756 root 1.12
757     C<$text> is in a special encoding: tabs and wide characters that use more
758     than one cell when displayed are padded with urxvt::NOCHAR characters
759     (C<chr 65535>). Characters with combining characters and other characters
760     that do not fit into the normal tetx encoding will be replaced with
761     characters in the private use area.
762    
763     You have to obey this encoding when changing text. The advantage is
764     that C<substr> and similar functions work on screen cells and not on
765     characters.
766    
767     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
768     can be used to convert normal strings into this encoding and vice versa.
769    
770 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
771    
772     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
773     bitsets. Rendition bitsets contain information about colour, font, font
774     styles and similar information. See also C<< $term->ROW_t >>.
775    
776     When setting rendition, the font mask will be ignored.
777 root 1.12
778 root 1.18 See the section on RENDITION, above.
779 root 1.13
780     =item $length = $term->ROW_l ($row_number[, $new_length])
781    
782 root 1.24 Returns the number of screen cells that are in use ("the line
783     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
784     line is joined with the following one.
785    
786     =item $bool = $term->is_longer ($row_number)
787    
788     Returns true if the row is part of a multiple-row logical "line" (i.e.
789     joined with the following row), which means all characters are in use
790     and it is continued on the next row (and possibly a continuation of the
791     previous row(s)).
792    
793     =item $line = $term->line ($row_number)
794    
795     Create and return a new C<urxvt::line> object that stores information
796     about the logical line that row C<$row_number> is part of. It supports the
797     following methods:
798 root 1.12
799 root 1.24 =over 4
800    
801 root 1.35 =item $text = $line->t ([$new_text])
802 root 1.24
803 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
804 root 1.24
805 root 1.35 =item $rend = $line->r ([$new_rend])
806 root 1.24
807 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
808 root 1.24
809     =item $length = $line->l
810    
811     Returns the length of the line in cells, similar to C<ROW_l>.
812    
813     =item $rownum = $line->beg
814    
815     =item $rownum = $line->end
816    
817     Return the row number of the first/last row of the line, respectively.
818    
819     =item $offset = $line->offset_of ($row, $col)
820    
821     Returns the character offset of the given row|col pair within the logical
822     line.
823    
824     =item ($row, $col) = $line->coord_of ($offset)
825    
826     Translates a string offset into terminal coordinates again.
827    
828     =back
829    
830     =cut
831    
832     sub urxvt::term::line {
833     my ($self, $row) = @_;
834    
835     my $maxrow = $self->nrow - 1;
836    
837     my ($beg, $end) = ($row, $row);
838    
839     --$beg while $self->ROW_is_longer ($beg - 1);
840     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
841    
842     bless {
843     term => $self,
844     beg => $beg,
845     end => $end,
846 root 1.34 ncol => $self->ncol,
847 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
848     }, urxvt::line::
849     }
850    
851     sub urxvt::line::t {
852     my ($self) = @_;
853    
854 root 1.34 if (@_ > 1)
855     {
856     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
857     for $self->{beg} .. $self->{end};
858     }
859    
860     defined wantarray &&
861     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
862     0, $self->{len}
863 root 1.24 }
864    
865     sub urxvt::line::r {
866     my ($self) = @_;
867    
868 root 1.34 if (@_ > 1)
869     {
870     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
871     for $self->{beg} .. $self->{end};
872     }
873    
874     if (defined wantarray) {
875     my $rend = [
876     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
877     ];
878     $#$rend = $self->{len} - 1;
879     return $rend;
880     }
881    
882     ()
883 root 1.24 }
884    
885     sub urxvt::line::beg { $_[0]{beg} }
886     sub urxvt::line::end { $_[0]{end} }
887     sub urxvt::line::l { $_[0]{len} }
888    
889     sub urxvt::line::offset_of {
890     my ($self, $row, $col) = @_;
891    
892 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
893 root 1.24 }
894    
895     sub urxvt::line::coord_of {
896     my ($self, $offset) = @_;
897    
898     use integer;
899    
900     (
901 root 1.34 $offset / $self->{ncol} + $self->{beg},
902     $offset % $self->{ncol}
903 root 1.24 )
904     }
905    
906     =item ($row, $col) = $line->coord_of ($offset)
907 root 1.12 =item $text = $term->special_encode $string
908    
909     Converts a perl string into the special encoding used by rxvt-unicode,
910     where one character corresponds to one screen cell. See
911     C<< $term->ROW_t >> for details.
912    
913     =item $string = $term->special_decode $text
914    
915     Converts rxvt-unicodes text reprsentation into a perl string. See
916     C<< $term->ROW_t >> for details.
917 root 1.6
918 root 1.1 =back
919    
920     =head2 The C<urxvt::timer> Class
921    
922     This class implements timer watchers/events. Time is represented as a
923     fractional number of seconds since the epoch. Example:
924    
925 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
926 root 1.1 $term->{timer} = urxvt::timer
927     ->new
928 root 1.20 ->interval (1)
929 root 1.1 ->cb (sub {
930 root 1.20 $term->{overlay}->set (0, 0,
931     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
932     });
933 root 1.1
934     =over 4
935    
936     =item $timer = new urxvt::timer
937    
938 root 1.20 Create a new timer object in started state. It is scheduled to fire
939     immediately.
940 root 1.1
941     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
942    
943     Set the callback to be called when the timer triggers.
944    
945     =item $tstamp = $timer->at
946    
947     Return the time this watcher will fire next.
948    
949     =item $timer = $timer->set ($tstamp)
950    
951     Set the time the event is generated to $tstamp.
952    
953 root 1.20 =item $timer = $timer->interval ($interval)
954    
955     Normally (and when C<$interval> is C<0>), the timer will automatically
956     stop after it has fired once. If C<$interval> is non-zero, then the timer
957     is automatically rescheduled at the given intervals.
958    
959 root 1.1 =item $timer = $timer->start
960    
961     Start the timer.
962    
963     =item $timer = $timer->start ($tstamp)
964    
965     Set the event trigger time to C<$tstamp> and start the timer.
966    
967     =item $timer = $timer->stop
968    
969     Stop the timer.
970    
971     =back
972    
973     =head2 The C<urxvt::iow> Class
974    
975     This class implements io watchers/events. Example:
976    
977     $term->{socket} = ...
978     $term->{iow} = urxvt::iow
979     ->new
980     ->fd (fileno $term->{socket})
981     ->events (1) # wait for read data
982     ->start
983     ->cb (sub {
984     my ($iow, $revents) = @_;
985     # $revents must be 1 here, no need to check
986     sysread $term->{socket}, my $buf, 8192
987     or end-of-file;
988     });
989    
990    
991     =over 4
992    
993     =item $iow = new urxvt::iow
994    
995     Create a new io watcher object in stopped state.
996    
997     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
998    
999     Set the callback to be called when io events are triggered. C<$reventmask>
1000     is a bitset as described in the C<events> method.
1001    
1002     =item $iow = $iow->fd ($fd)
1003    
1004     Set the filedescriptor (not handle) to watch.
1005    
1006     =item $iow = $iow->events ($eventmask)
1007    
1008     Set the event mask to watch. Bit #0 (value C<1>) enables watching for read
1009     data, Bit #1 (value C<2>) enables watching for write data.
1010    
1011     =item $iow = $iow->start
1012    
1013     Start watching for requested events on the given handle.
1014    
1015     =item $iow = $iow->stop
1016    
1017     Stop watching for events on the given filehandle.
1018    
1019     =back
1020    
1021 root 1.4 =head1 ENVIRONMENT
1022    
1023     =head2 URXVT_PERL_VERBOSITY
1024    
1025     This variable controls the verbosity level of the perl extension. Higher
1026     numbers indicate more verbose output.
1027    
1028     =over 4
1029    
1030 root 1.27 =item =0 - only fatal messages
1031 root 1.4
1032 root 1.27 =item =3 - script loading and management
1033 root 1.4
1034 root 1.27 =item =10 - all events received
1035 root 1.4
1036     =back
1037    
1038 root 1.1 =head1 AUTHOR
1039    
1040     Marc Lehmann <pcg@goof.com>
1041     http://software.schmorp.de/pkg/rxvt-unicode
1042    
1043     =cut
1044    
1045     1