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