ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.44
Committed: Sat Jan 7 19:29:17 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.43: +24 -19 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.44 Everytime a terminal object gets created, extension scripts specified via
23     the C<perl> resource are loaded and associated with it.
24 root 1.10
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 root 1.42 Uses per-line display filtering (C<on_line_update>) to underline urls.
68    
69     =item block-graphics-to-ascii
70    
71     A not very useful example of filtering all text output to the terminal,
72     by replacing all line-drawing characters (U+2500 .. U+259F) by a
73     similar-looking ascii character.
74 root 1.35
75 root 1.20 =item example-refresh-hooks
76    
77 root 1.15 Displays a very simple digital clock in the upper right corner of the
78     window. Illustrates overwriting the refresh callbacks to create your own
79     overlays or changes.
80    
81     =back
82    
83 root 1.6 =head2 General API Considerations
84    
85     All objects (such as terminals, time watchers etc.) are typical
86     reference-to-hash objects. The hash can be used to store anything you
87 root 1.7 like. All members starting with an underscore (such as C<_ptr> or
88 root 1.23 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
89 root 1.7 modified).
90 root 1.6
91     When objects are destroyed on the C++ side, the perl object hashes are
92     emptied, so its best to store related objects such as time watchers and
93     the like inside the terminal object so they get destroyed as soon as the
94     terminal is destroyed.
95    
96 root 1.33 Argument names also often indicate the type of a parameter. Here are some
97     hints on what they mean:
98    
99     =over 4
100    
101     =item $text
102    
103     Rxvt-unicodes special way of encoding text, where one "unicode" character
104     always represents one screen cell. See L<row_t> for a discussion of this format.
105    
106     =item $string
107    
108     A perl text string, with an emphasis on I<text>. It can store all unicode
109     characters and is to be distinguished with text encoded in a specific
110     encoding (often locale-specific) and binary data.
111    
112     =item $octets
113    
114     Either binary data or - more common - a text string encoded in a
115     locale-specific way.
116    
117     =back
118    
119 root 1.1 =head2 Hooks
120    
121 root 1.43 The following subroutines can be declared in extension files, and will be
122 root 1.23 called whenever the relevant event happens.
123    
124     The first argument passed to them is an object private to each terminal
125 root 1.44 and extension package. You can call all C<urxvt::term> methods on it, but
126 root 1.23 its not a real C<urxvt::term> object. Instead, the real C<urxvt::term>
127     object that is shared between all packages is stored in the C<term>
128 root 1.44 member. It is, however, blessed intot he package of the extension script,
129     so for all practical purposes you can treat an extension script as a class.
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 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
297     object, whenever a callback/hook is executing.
298 root 1.23
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 root 1.44 my $extension_pkg = "extension0000";
435     my %extension_pkg;
436 root 1.1
437     # load a single script into its own package, once only
438 root 1.44 sub extension_package($) {
439 root 1.1 my ($path) = @_;
440    
441 root 1.44 $extension_pkg{$path} ||= do {
442     my $pkg = "urxvt::" . ($extension_pkg++);
443 root 1.8
444 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
445 root 1.1
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 root 1.44 . "use base urxvt::term::proxy::;\n"
451 root 1.8 . "#line 1 \"$path\"\n{\n"
452     . (do { local $/; <$fh> })
453     . "\n};\n1";
454    
455     eval $source or die "$path: $@";
456 root 1.1
457     $pkg
458 root 1.7 }
459 root 1.1 }
460    
461 root 1.31 our $retval; # return value for urxvt
462    
463 root 1.8 # called by the rxvt core
464     sub invoke {
465 root 1.23 local $TERM = shift;
466 root 1.8 my $htype = shift;
467 root 1.6
468 root 1.8 if ($htype == 0) { # INIT
469 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
470 root 1.6
471 root 1.41 for my $ext (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
472 root 1.8 my @files = grep -f $_, map "$_/$ext", @dirs;
473 root 1.6
474 root 1.8 if (@files) {
475 root 1.44 register_package extension_package $files[0];
476 root 1.8 } else {
477     warn "perl extension '$ext' not found in perl library search path\n";
478     }
479     }
480 root 1.31 }
481    
482     $retval = undef;
483 root 1.6
484 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
485     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
486     if $verbosity >= 10;
487    
488     keys %$cb;
489    
490     while (my ($pkg, $cb) = each %$cb) {
491 root 1.44 eval {
492     $retval = $cb->(
493     $TERM->{_pkg}{$pkg} ||= do {
494     my $proxy = bless { }, $pkg;
495     Scalar::Util::weaken ($proxy->{term} = $TERM);
496     $proxy
497     },
498     @_,
499     ) and last;
500     };
501     warn $@ if $@;#d#
502 root 1.31 }
503     }
504    
505     if ($htype == 1) { # DESTROY
506     # remove hooks if unused
507 root 1.23 if (my $hook = $TERM->{_hook}) {
508 root 1.8 for my $htype (0..$#$hook) {
509     $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} }
510     or set_should_invoke $htype, 0;
511     }
512     }
513 root 1.7
514 root 1.31 # clear package objects
515     %$_ = () for values %{ $TERM->{_pkg} };
516 root 1.25
517 root 1.31 # clear package
518     %$TERM = ();
519 root 1.7 }
520    
521 root 1.31 $retval
522 root 1.7 }
523 root 1.1
524 root 1.23 sub urxvt::term::proxy::AUTOLOAD {
525     $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/
526     or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable";
527    
528     eval qq{
529     sub $urxvt::term::proxy::AUTOLOAD {
530 root 1.24 my \$proxy = shift;
531     \$proxy->{term}->$1 (\@_)
532 root 1.23 }
533     1
534     } or die "FATAL: unable to compile method forwarder: $@";
535    
536     goto &$urxvt::term::proxy::AUTOLOAD;
537     }
538    
539 root 1.1 =head2 The C<urxvt::term> Class
540    
541     =over 4
542    
543 root 1.36 =item $term->destroy
544    
545     Destroy the terminal object (close the window, free resources etc.).
546    
547 root 1.4 =item $value = $term->resource ($name[, $newval])
548    
549     Returns the current resource value associated with a given name and
550     optionally sets a new value. Setting values is most useful in the C<init>
551     hook. Unset resources are returned and accepted as C<undef>.
552    
553     The new value must be properly encoded to a suitable character encoding
554     before passing it to this method. Similarly, the returned value may need
555     to be converted from the used encoding to text.
556    
557     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
558     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
559     likely change).
560    
561     Please note that resource strings will currently only be freed when the
562     terminal is destroyed, so changing options frequently will eat memory.
563    
564 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
565     are supported in every build, please see the source to see the actual
566     list:
567    
568     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
569     borderLess color cursorBlink cursorUnderline cutchars delete_key
570     display_name embed ext_bwidth fade font geometry hold iconName
571     imFont imLocale inputMethod insecure int_bwidth intensityStyles
572 root 1.8 italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 modifier
573 root 1.30 mouseWheelScrollPage name pastableTabs path perl_eval perl_ext_1 perl_ext_2
574 root 1.6 perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd
575     reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating
576     scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput
577     scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle
578     shade term_name title transparent transparent_all tripleclickwords
579     utmpInhibit visualBell
580 root 1.5
581 root 1.4 =cut
582    
583     sub urxvt::term::resource($$;$) {
584     my ($self, $name) = (shift, shift);
585     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
586     goto &urxvt::term::_resource;
587     }
588    
589 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
590 root 1.32
591 root 1.33 Return and optionally change the current rendition. Text that is output by
592     the terminal application will use this style.
593 root 1.32
594     =item ($row, $col) = $term->screen_cur ([$row, $col])
595    
596     Return the current coordinates of the text cursor position and optionally
597     set it (which is usually bad as applications don't expect that).
598    
599 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
600    
601     =item ($row, $col) = $term->selection_beg ([$row, $col])
602    
603     =item ($row, $col) = $term->selection_end ([$row, $col])
604    
605     Return the current values of the selection mark, begin or end positions,
606     and optionally set them to new values.
607    
608     =item $success = $term->selection_grab ($eventtime)
609    
610     Try to request the primary selection from the server (for example, as set
611     by the next method).
612    
613     =item $oldtext = $term->selection ([$newtext])
614    
615     Return the current selection text and optionally replace it by C<$newtext>.
616    
617 root 1.20 #=item $term->overlay ($x, $y, $text)
618     #
619     #Create a simple multi-line overlay box. See the next method for details.
620     #
621     #=cut
622 root 1.33 #
623     #sub urxvt::term::scr_overlay {
624     # my ($self, $x, $y, $text) = @_;
625     #
626     # my @lines = split /\n/, $text;
627     #
628     # my $w = 0;
629     # for (map $self->strwidth ($_), @lines) {
630     # $w = $_ if $w < $_;
631     # }
632     #
633     # $self->scr_overlay_new ($x, $y, $w, scalar @lines);
634     # $self->scr_overlay_set (0, $_, $lines[$_]) for 0.. $#lines;
635     #}
636 root 1.1
637 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
638 root 1.1
639     Create a new (empty) overlay at the given position with the given
640 root 1.20 width/height. C<$rstyle> defines the initial rendition style
641     (default: C<OVERLAY_RSTYLE>).
642 root 1.1
643 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
644     around the box.
645 root 1.1
646 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
647     right/bottom side, respectively.
648 root 1.1
649 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
650     as long as the perl object is referenced.
651 root 1.1
652 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
653    
654     =over 4
655 root 1.1
656 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
657 root 1.1
658 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
659     text in rxvt-unicode's special encoding and an array of rendition values
660     at a specific position inside the overlay.
661 root 1.1
662 root 1.22 =item $overlay->hide
663    
664     If visible, hide the overlay, but do not destroy it.
665    
666     =item $overlay->show
667    
668     If hidden, display the overlay again.
669    
670     =back
671    
672 root 1.40 =item $cellwidth = $term->strwidth ($string)
673 root 1.6
674     Returns the number of screen-cells this string would need. Correctly
675     accounts for wide and combining characters.
676    
677 root 1.40 =item $octets = $term->locale_encode ($string)
678 root 1.6
679     Convert the given text string into the corresponding locale encoding.
680    
681 root 1.40 =item $string = $term->locale_decode ($octets)
682 root 1.6
683     Convert the given locale-encoded octets into a perl string.
684    
685 root 1.33 =item $term->scr_add_lines ($string)
686    
687     Write the given text string to the screen, as if output by the application
688     running inside the terminal. It may not contain command sequences (escape
689     codes), but is free to use line feeds, carriage returns and tabs. The
690     string is a normal text string, not in locale-dependent encoding.
691    
692     Normally its not a good idea to use this function, as programs might be
693     confused by changes in cursor position or scrolling. Its useful inside a
694     C<on_add_lines> hook, though.
695    
696 root 1.36 =item $term->cmd_parse ($octets)
697    
698     Similar to C<scr_add_lines>, but the argument must be in the
699     locale-specific encoding of the terminal and can contain command sequences
700     (escape codes) that will be interpreted.
701    
702 root 1.6 =item $term->tt_write ($octets)
703    
704     Write the octets given in C<$data> to the tty (i.e. as program input). To
705 root 1.12 pass characters instead of octets, you should convert your strings first
706     to the locale-specific encoding using C<< $term->locale_encode >>.
707    
708 root 1.40 =item $windowid = $term->parent
709    
710     Return the window id of the toplevel window.
711    
712     =item $windowid = $term->vt
713    
714     Return the window id of the terminal window.
715    
716 root 1.32 =item $window_width = $term->width
717    
718     =item $window_height = $term->height
719    
720     =item $font_width = $term->fwidth
721    
722     =item $font_height = $term->fheight
723    
724     =item $font_ascent = $term->fbase
725    
726     =item $terminal_rows = $term->nrow
727    
728     =item $terminal_columns = $term->ncol
729    
730     =item $has_focus = $term->focus
731    
732     =item $is_mapped = $term->mapped
733 root 1.13
734 root 1.32 =item $max_scrollback = $term->saveLines
735 root 1.13
736 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
737 root 1.13
738 root 1.32 =item $lines_in_scrollback = $term->nsaved
739 root 1.12
740 root 1.32 Return various integers describing terminal characteristics.
741 root 1.12
742     =item $view_start = $term->view_start ([$newvalue])
743    
744     Returns the negative row number of the topmost line. Minimum value is
745     C<0>, which displays the normal terminal contents. Larger values scroll
746     this many lines into the scrollback buffer.
747    
748 root 1.14 =item $term->want_refresh
749    
750     Requests a screen refresh. At the next opportunity, rxvt-unicode will
751     compare the on-screen display with its stored representation. If they
752     differ, it redraws the differences.
753    
754     Used after changing terminal contents to display them.
755    
756 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
757 root 1.12
758     Returns the text of the entire row with number C<$row_number>. Row C<0>
759     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
760     terminal line. The scrollback buffer starts at line C<-1> and extends to
761 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
762     is requested.
763 root 1.12
764 root 1.13 If C<$new_text> is specified, it will replace characters in the current
765     line, starting at column C<$start_col> (default C<0>), which is useful
766 root 1.18 to replace only parts of a line. The font index in the rendition will
767 root 1.13 automatically be updated.
768 root 1.12
769     C<$text> is in a special encoding: tabs and wide characters that use more
770     than one cell when displayed are padded with urxvt::NOCHAR characters
771     (C<chr 65535>). Characters with combining characters and other characters
772     that do not fit into the normal tetx encoding will be replaced with
773     characters in the private use area.
774    
775     You have to obey this encoding when changing text. The advantage is
776     that C<substr> and similar functions work on screen cells and not on
777     characters.
778    
779     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
780     can be used to convert normal strings into this encoding and vice versa.
781    
782 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
783    
784     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
785     bitsets. Rendition bitsets contain information about colour, font, font
786     styles and similar information. See also C<< $term->ROW_t >>.
787    
788     When setting rendition, the font mask will be ignored.
789 root 1.12
790 root 1.18 See the section on RENDITION, above.
791 root 1.13
792     =item $length = $term->ROW_l ($row_number[, $new_length])
793    
794 root 1.24 Returns the number of screen cells that are in use ("the line
795     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
796     line is joined with the following one.
797    
798     =item $bool = $term->is_longer ($row_number)
799    
800     Returns true if the row is part of a multiple-row logical "line" (i.e.
801     joined with the following row), which means all characters are in use
802     and it is continued on the next row (and possibly a continuation of the
803     previous row(s)).
804    
805     =item $line = $term->line ($row_number)
806    
807     Create and return a new C<urxvt::line> object that stores information
808     about the logical line that row C<$row_number> is part of. It supports the
809     following methods:
810 root 1.12
811 root 1.24 =over 4
812    
813 root 1.35 =item $text = $line->t ([$new_text])
814 root 1.24
815 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
816 root 1.24
817 root 1.35 =item $rend = $line->r ([$new_rend])
818 root 1.24
819 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
820 root 1.24
821     =item $length = $line->l
822    
823     Returns the length of the line in cells, similar to C<ROW_l>.
824    
825     =item $rownum = $line->beg
826    
827     =item $rownum = $line->end
828    
829     Return the row number of the first/last row of the line, respectively.
830    
831     =item $offset = $line->offset_of ($row, $col)
832    
833     Returns the character offset of the given row|col pair within the logical
834     line.
835    
836     =item ($row, $col) = $line->coord_of ($offset)
837    
838     Translates a string offset into terminal coordinates again.
839    
840     =back
841    
842     =cut
843    
844     sub urxvt::term::line {
845     my ($self, $row) = @_;
846    
847     my $maxrow = $self->nrow - 1;
848    
849     my ($beg, $end) = ($row, $row);
850    
851     --$beg while $self->ROW_is_longer ($beg - 1);
852     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
853    
854     bless {
855     term => $self,
856     beg => $beg,
857     end => $end,
858 root 1.34 ncol => $self->ncol,
859 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
860     }, urxvt::line::
861     }
862    
863     sub urxvt::line::t {
864     my ($self) = @_;
865    
866 root 1.34 if (@_ > 1)
867     {
868     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
869     for $self->{beg} .. $self->{end};
870     }
871    
872     defined wantarray &&
873     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
874     0, $self->{len}
875 root 1.24 }
876    
877     sub urxvt::line::r {
878     my ($self) = @_;
879    
880 root 1.34 if (@_ > 1)
881     {
882     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
883     for $self->{beg} .. $self->{end};
884     }
885    
886     if (defined wantarray) {
887     my $rend = [
888     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
889     ];
890     $#$rend = $self->{len} - 1;
891     return $rend;
892     }
893    
894     ()
895 root 1.24 }
896    
897     sub urxvt::line::beg { $_[0]{beg} }
898     sub urxvt::line::end { $_[0]{end} }
899     sub urxvt::line::l { $_[0]{len} }
900    
901     sub urxvt::line::offset_of {
902     my ($self, $row, $col) = @_;
903    
904 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
905 root 1.24 }
906    
907     sub urxvt::line::coord_of {
908     my ($self, $offset) = @_;
909    
910     use integer;
911    
912     (
913 root 1.34 $offset / $self->{ncol} + $self->{beg},
914     $offset % $self->{ncol}
915 root 1.24 )
916     }
917    
918     =item ($row, $col) = $line->coord_of ($offset)
919 root 1.12 =item $text = $term->special_encode $string
920    
921     Converts a perl string into the special encoding used by rxvt-unicode,
922     where one character corresponds to one screen cell. See
923     C<< $term->ROW_t >> for details.
924    
925     =item $string = $term->special_decode $text
926    
927     Converts rxvt-unicodes text reprsentation into a perl string. See
928     C<< $term->ROW_t >> for details.
929 root 1.6
930 root 1.1 =back
931    
932     =head2 The C<urxvt::timer> Class
933    
934     This class implements timer watchers/events. Time is represented as a
935     fractional number of seconds since the epoch. Example:
936    
937 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
938 root 1.1 $term->{timer} = urxvt::timer
939     ->new
940 root 1.20 ->interval (1)
941 root 1.1 ->cb (sub {
942 root 1.20 $term->{overlay}->set (0, 0,
943     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
944     });
945 root 1.1
946     =over 4
947    
948     =item $timer = new urxvt::timer
949    
950 root 1.20 Create a new timer object in started state. It is scheduled to fire
951     immediately.
952 root 1.1
953     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
954    
955     Set the callback to be called when the timer triggers.
956    
957     =item $tstamp = $timer->at
958    
959     Return the time this watcher will fire next.
960    
961     =item $timer = $timer->set ($tstamp)
962    
963     Set the time the event is generated to $tstamp.
964    
965 root 1.20 =item $timer = $timer->interval ($interval)
966    
967     Normally (and when C<$interval> is C<0>), the timer will automatically
968     stop after it has fired once. If C<$interval> is non-zero, then the timer
969     is automatically rescheduled at the given intervals.
970    
971 root 1.1 =item $timer = $timer->start
972    
973     Start the timer.
974    
975     =item $timer = $timer->start ($tstamp)
976    
977     Set the event trigger time to C<$tstamp> and start the timer.
978    
979     =item $timer = $timer->stop
980    
981     Stop the timer.
982    
983     =back
984    
985     =head2 The C<urxvt::iow> Class
986    
987     This class implements io watchers/events. Example:
988    
989     $term->{socket} = ...
990     $term->{iow} = urxvt::iow
991     ->new
992     ->fd (fileno $term->{socket})
993     ->events (1) # wait for read data
994     ->start
995     ->cb (sub {
996     my ($iow, $revents) = @_;
997     # $revents must be 1 here, no need to check
998     sysread $term->{socket}, my $buf, 8192
999     or end-of-file;
1000     });
1001    
1002    
1003     =over 4
1004    
1005     =item $iow = new urxvt::iow
1006    
1007     Create a new io watcher object in stopped state.
1008    
1009     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1010    
1011     Set the callback to be called when io events are triggered. C<$reventmask>
1012     is a bitset as described in the C<events> method.
1013    
1014     =item $iow = $iow->fd ($fd)
1015    
1016     Set the filedescriptor (not handle) to watch.
1017    
1018     =item $iow = $iow->events ($eventmask)
1019    
1020     Set the event mask to watch. Bit #0 (value C<1>) enables watching for read
1021     data, Bit #1 (value C<2>) enables watching for write data.
1022    
1023     =item $iow = $iow->start
1024    
1025     Start watching for requested events on the given handle.
1026    
1027     =item $iow = $iow->stop
1028    
1029     Stop watching for events on the given filehandle.
1030    
1031     =back
1032    
1033 root 1.4 =head1 ENVIRONMENT
1034    
1035     =head2 URXVT_PERL_VERBOSITY
1036    
1037     This variable controls the verbosity level of the perl extension. Higher
1038     numbers indicate more verbose output.
1039    
1040     =over 4
1041    
1042 root 1.27 =item =0 - only fatal messages
1043 root 1.4
1044 root 1.27 =item =3 - script loading and management
1045 root 1.4
1046 root 1.27 =item =10 - all events received
1047 root 1.4
1048     =back
1049    
1050 root 1.1 =head1 AUTHOR
1051    
1052     Marc Lehmann <pcg@goof.com>
1053     http://software.schmorp.de/pkg/rxvt-unicode
1054    
1055     =cut
1056    
1057     1