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