ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.74
Committed: Tue Jan 10 04:26:54 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.73: +9 -6 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 root 1.54 =item selection (enabled by default)
43 root 1.15
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 root 1.54 =item option-popup (enabled by default)
62    
63 root 1.59 Binds a popup menu to Ctrl-Button2 that lets you toggle (some) options at
64 root 1.54 runtime.
65    
66 root 1.59 =item selection-popup (enabled by default)
67    
68     Binds a popup menu to Ctrl-Button3 that lets you convert the selection
69     text into various other formats/action.
70    
71 root 1.74 =item searchable-scrollback<hotkey> (enabled by default)
72 root 1.69
73 root 1.74 Adds regex search functionality to the scrollback buffer, triggered
74     by a hotkey (default: C<M-s>). When in search mode, normal terminal
75     input/output is suspended.
76    
77     C</> starts an incremental regex search, C<n> searches further, C<p> or
78     C<N> jump to the previous match, C<G> jumps to the bottom and clears the
79     history, C<enter> leaves search mode at the current position and C<escape>
80     returns to the original position.
81 root 1.69
82 root 1.15 =item digital-clock
83    
84 root 1.20 Displays a digital clock using the built-in overlay.
85    
86 root 1.35 =item mark-urls
87    
88 root 1.42 Uses per-line display filtering (C<on_line_update>) to underline urls.
89    
90     =item block-graphics-to-ascii
91    
92     A not very useful example of filtering all text output to the terminal,
93     by replacing all line-drawing characters (U+2500 .. U+259F) by a
94     similar-looking ascii character.
95 root 1.35
96 root 1.20 =item example-refresh-hooks
97    
98 root 1.15 Displays a very simple digital clock in the upper right corner of the
99     window. Illustrates overwriting the refresh callbacks to create your own
100     overlays or changes.
101    
102     =back
103    
104 root 1.6 =head2 General API Considerations
105    
106     All objects (such as terminals, time watchers etc.) are typical
107     reference-to-hash objects. The hash can be used to store anything you
108 root 1.7 like. All members starting with an underscore (such as C<_ptr> or
109 root 1.23 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
110 root 1.7 modified).
111 root 1.6
112     When objects are destroyed on the C++ side, the perl object hashes are
113     emptied, so its best to store related objects such as time watchers and
114     the like inside the terminal object so they get destroyed as soon as the
115     terminal is destroyed.
116    
117 root 1.33 Argument names also often indicate the type of a parameter. Here are some
118     hints on what they mean:
119    
120     =over 4
121    
122     =item $text
123    
124     Rxvt-unicodes special way of encoding text, where one "unicode" character
125     always represents one screen cell. See L<row_t> for a discussion of this format.
126    
127     =item $string
128    
129     A perl text string, with an emphasis on I<text>. It can store all unicode
130     characters and is to be distinguished with text encoded in a specific
131     encoding (often locale-specific) and binary data.
132    
133     =item $octets
134    
135     Either binary data or - more common - a text string encoded in a
136     locale-specific way.
137    
138     =back
139    
140 root 1.69 =head2 Extension Objects
141    
142     Very perl extension is a perl class. A separate perl object is created
143     for each terminal and each extension and passed as the first parameter to
144     hooks. So extensions can use their C<$self> object without having to think
145     about other extensions, with the exception of methods and members that
146     begin with an underscore character C<_>: these are reserved for internal
147     use.
148    
149     Although it isn't a C<urxvt::term> object, you can call all methods of the
150     C<urxvt::term> class on this object.
151    
152     It has the following methods and data members:
153    
154     =over 4
155    
156     =item $urxvt_term = $self->{term}
157    
158     Returns the C<urxvt::term> object associated with this instance of the
159     extension. This member I<must not> be changed in any way.
160    
161     =item $self->enable ($hook_name => $cb, [$hook_name => $cb..])
162    
163     Dynamically enable the given hooks (named without the C<on_> prefix) for
164     this extension, replacing any previous hook. This is useful when you want
165     to overwrite time-critical hooks only temporarily.
166    
167     =item $self->disable ($hook_name[, $hook_name..])
168    
169     Dynamically disable the given hooks.
170    
171     =back
172    
173 root 1.1 =head2 Hooks
174    
175 root 1.43 The following subroutines can be declared in extension files, and will be
176 root 1.23 called whenever the relevant event happens.
177    
178 root 1.69 The first argument passed to them is an extension oject as described in
179     the in the C<Extension Objects> section.
180    
181     B<All> of these hooks must return a boolean value. If it is true, then the
182     event counts as being I<consumed>, and the invocation of other hooks is
183     skipped, and the relevant action might not be carried out by the C++ code.
184 root 1.1
185 root 1.69 I<< When in doubt, return a false value (preferably C<()>). >>
186 root 1.1
187     =over 4
188    
189     =item on_init $term
190    
191     Called after a new terminal object has been initialized, but before
192 root 1.36 windows are created or the command gets run. Most methods are unsafe to
193     call or deliver senseless data, as terminal size and other characteristics
194     have not yet been determined. You can safely query and change resources,
195     though.
196 root 1.1
197     =item on_reset $term
198    
199     Called after the screen is "reset" for any reason, such as resizing or
200     control sequences. Here is where you can react on changes to size-related
201     variables.
202    
203     =item on_start $term
204    
205     Called at the very end of initialisation of a new terminal, just before
206     returning to the mainloop.
207    
208     =item on_sel_make $term, $eventtime
209    
210     Called whenever a selection has been made by the user, but before the
211     selection text is copied, so changes to the beginning, end or type of the
212     selection will be honored.
213    
214     Returning a true value aborts selection making by urxvt, in which case you
215     have to make a selection yourself by calling C<< $term->selection_grab >>.
216    
217     =item on_sel_grab $term, $eventtime
218    
219     Called whenever a selection has been copied, but before the selection is
220     requested from the server. The selection text can be queried and changed
221     by calling C<< $term->selection >>.
222    
223     Returning a true value aborts selection grabbing. It will still be hilighted.
224    
225 root 1.22 =item on_sel_extend $term
226    
227     Called whenever the user tries to extend the selection (e.g. with a double
228     click) and is either supposed to return false (normal operation), or
229     should extend the selection itelf and return true to suppress the built-in
230     processing.
231    
232     See the F<selection> example extension.
233    
234 root 1.1 =item on_view_change $term, $offset
235    
236     Called whenever the view offset changes, i..e the user or program
237     scrolls. Offset C<0> means display the normal terminal, positive values
238     show this many lines of scrollback.
239    
240     =item on_scroll_back $term, $lines, $saved
241    
242     Called whenever lines scroll out of the terminal area into the scrollback
243     buffer. C<$lines> is the number of lines scrolled out and may be larger
244     than the scroll back buffer or the terminal.
245    
246     It is called before lines are scrolled out (so rows 0 .. min ($lines - 1,
247     $nrow - 1) represent the lines to be scrolled out). C<$saved> is the total
248     number of lines that will be in the scrollback buffer.
249    
250 root 1.28 =item on_osc_seq $term, $string
251    
252 root 1.29 Called whenever the B<ESC ] 777 ; string ST> command sequence (OSC =
253     operating system command) is processed. Cursor position and other state
254     information is up-to-date when this happens. For interoperability, the
255     string should start with the extension name and a colon, to distinguish
256     it from commands for other extensions, and this might be enforced in the
257     future.
258    
259     Be careful not ever to trust (in a security sense) the data you receive,
260     as its source can not easily be controleld (e-mail content, messages from
261     other users on the same system etc.).
262 root 1.28
263 root 1.33 =item on_add_lines $term, $string
264    
265     Called whenever text is about to be output, with the text as argument. You
266     can filter/change and output the text yourself by returning a true value
267     and calling C<< $term->scr_add_lines >> yourself. Please note that this
268     might be very slow, however, as your hook is called for B<all> text being
269     output.
270    
271 root 1.72 =item on_tt_write $term, $octets
272    
273     Called whenever some data is written to the tty/pty and can be used to
274     suppress or filter tty input.
275    
276 root 1.35 =item on_line_update $term, $row
277    
278     Called whenever a line was updated or changed. Can be used to filter
279     screen output (e.g. underline urls or other useless stuff). Only lines
280     that are being shown will be filtered, and, due to performance reasons,
281     not always immediately.
282    
283     The row number is always the topmost row of the line if the line spans
284     multiple rows.
285    
286     Please note that, if you change the line, then the hook might get called
287     later with the already-modified line (e.g. if unrelated parts change), so
288     you cannot just toggle rendition bits, but only set them.
289    
290 root 1.1 =item on_refresh_begin $term
291    
292     Called just before the screen gets redrawn. Can be used for overlay
293     or similar effects by modify terminal contents in refresh_begin, and
294     restoring them in refresh_end. The built-in overlay and selection display
295     code is run after this hook, and takes precedence.
296    
297     =item on_refresh_end $term
298    
299     Called just after the screen gets redrawn. See C<on_refresh_begin>.
300    
301 root 1.11 =item on_keyboard_command $term, $string
302    
303     Called whenever the user presses a key combination that has a
304     C<perl:string> action bound to it (see description of the B<keysym>
305     resource in the @@RXVT_NAME@@(1) manpage).
306    
307 root 1.45 =item on_focus_in $term
308    
309     Called whenever the window gets the keyboard focus, before rxvt-unicode
310     does focus in processing.
311    
312     =item on_focus_out $term
313    
314     Called wheneever the window loses keyboard focus, before rxvt-unicode does
315     focus out processing.
316    
317 root 1.69 =item on_key_press $term, $event, $keysym, $octets
318 root 1.37
319 root 1.69 =item on_key_release $term, $event, $keysym
320 root 1.37
321     =item on_button_press $term, $event
322    
323     =item on_button_release $term, $event
324    
325     =item on_motion_notify $term, $event
326    
327 root 1.45 =item on_map_notify $term, $event
328    
329     =item on_unmap_notify $term, $event
330    
331 root 1.39 Called whenever the corresponding X event is received for the terminal If
332     the hook returns true, then the even will be ignored by rxvt-unicode.
333    
334     The event is a hash with most values as named by Xlib (see the XEvent
335     manpage), with the additional members C<row> and C<col>, which are the row
336     and column under the mouse cursor.
337 root 1.38
338     C<on_key_press> additionally receives the string rxvt-unicode would
339     output, if any, in locale-specific encoding.
340 root 1.37
341     subwindow.
342    
343 root 1.1 =back
344    
345 root 1.23 =head2 Variables in the C<urxvt> Package
346    
347     =over 4
348    
349     =item $urxvt::TERM
350    
351 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
352     object, whenever a callback/hook is executing.
353 root 1.23
354     =back
355    
356 root 1.1 =head2 Functions in the C<urxvt> Package
357    
358     =over 4
359    
360 root 1.36 =item $term = new urxvt [arg...]
361    
362     Creates a new terminal, very similar as if you had started it with
363     C<system $binfile, arg...>. Croaks (and probably outputs an error message)
364     if the new instance couldn't be created. Returns C<undef> if the new
365     instance didn't initialise perl, and the terminal object otherwise. The
366     C<init> and C<start> hooks will be called during the call.
367    
368 root 1.1 =item urxvt::fatal $errormessage
369    
370     Fatally aborts execution with the given error message. Avoid at all
371     costs! The only time this is acceptable is when the terminal process
372     starts up.
373    
374     =item urxvt::warn $string
375    
376 root 1.6 Calls C<rxvt_warn> with the given string which should not include a
377 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
378     that calls this function.
379    
380     Using this function has the advantage that its output ends up in the
381     correct place, e.g. on stderr of the connecting urxvtc client.
382    
383 root 1.62 =item $is_safe = urxvt::safe
384    
385     Returns true when it is safe to do potentially unsafe things, such as
386     evaluating perl code specified by the user. This is true when urxvt was
387     started setuid or setgid.
388    
389 root 1.1 =item $time = urxvt::NOW
390    
391     Returns the "current time" (as per the event loop).
392    
393 root 1.47 =item urxvt::CurrentTime
394    
395     =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
396     Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
397     Button4Mask, Button5Mask, AnyModifier
398    
399 root 1.55 Various constants for use in X calls and event processing.
400 root 1.47
401 root 1.21 =back
402    
403 root 1.18 =head2 RENDITION
404    
405     Rendition bitsets contain information about colour, font, font styles and
406     similar information for each screen cell.
407    
408     The following "macros" deal with changes in rendition sets. You should
409     never just create a bitset, you should always modify an existing one,
410     as they contain important information required for correct operation of
411     rxvt-unicode.
412    
413     =over 4
414    
415     =item $rend = urxvt::DEFAULT_RSTYLE
416    
417     Returns the default rendition, as used when the terminal is starting up or
418     being reset. Useful as a base to start when creating renditions.
419    
420     =item $rend = urxvt::OVERLAY_RSTYLE
421    
422     Return the rendition mask used for overlays by default.
423    
424     =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
425    
426     Return the bit that enabled bold, italic, blink, reverse-video and
427 root 1.19 underline, respectively. To enable such a style, just logically OR it into
428     the bitset.
429 root 1.18
430     =item $foreground = urxvt::GET_BASEFG $rend
431    
432     =item $background = urxvt::GET_BASEBG $rend
433    
434     Return the foreground/background colour index, respectively.
435    
436     =item $rend = urxvt::SET_FGCOLOR ($rend, $new_colour)
437    
438     =item $rend = urxvt::SET_BGCOLOR ($rend, $new_colour)
439    
440     Replace the foreground/background colour in the rendition mask with the
441     specified one.
442    
443 root 1.19 =item $value = urxvt::GET_CUSTOM ($rend)
444    
445     Return the "custom" value: Every rendition has 5 bits for use by
446     extensions. They can be set and changed as you like and are initially
447     zero.
448    
449     =item $rend = urxvt::SET_CUSTOM ($rend, $new_value)
450    
451     Change the custom value.
452    
453 root 1.18 =back
454    
455 root 1.1 =cut
456    
457     package urxvt;
458    
459 root 1.48 use utf8;
460 root 1.1 use strict;
461 root 1.69 use Carp ();
462 root 1.23 use Scalar::Util ();
463 root 1.48 use List::Util ();
464 root 1.1
465 root 1.55 our $VERSION = 1;
466 root 1.23 our $TERM;
467 root 1.1 our @HOOKNAME;
468 root 1.69 our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
469 root 1.49 our %OPTION;
470 root 1.73
471 root 1.1 our $LIBDIR;
472 root 1.73 our $RESNAME;
473     our $RESCLASS;
474     our $RXVTNAME;
475 root 1.1
476     BEGIN {
477     urxvt->bootstrap;
478    
479     # overwrite perl's warn
480     *CORE::GLOBAL::warn = sub {
481     my $msg = join "", @_;
482     $msg .= "\n"
483     unless $msg =~ /\n$/;
484     urxvt::warn ($msg);
485     };
486 root 1.59
487 root 1.60 delete $ENV{IFS};
488     delete $ENV{CDPATH};
489     delete $ENV{BASH_ENV};
490 root 1.59 $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin";
491 root 1.1 }
492    
493 root 1.8 my @hook_count;
494 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
495 root 1.1
496     sub verbose {
497     my ($level, $msg) = @_;
498 root 1.8 warn "$msg\n" if $level <= $verbosity;
499 root 1.1 }
500    
501 root 1.44 my $extension_pkg = "extension0000";
502     my %extension_pkg;
503 root 1.1
504     # load a single script into its own package, once only
505 root 1.44 sub extension_package($) {
506 root 1.1 my ($path) = @_;
507    
508 root 1.44 $extension_pkg{$path} ||= do {
509     my $pkg = "urxvt::" . ($extension_pkg++);
510 root 1.8
511 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
512 root 1.1
513     open my $fh, "<:raw", $path
514     or die "$path: $!";
515    
516 root 1.69 my $source = untaint
517     "package $pkg; use strict; use utf8;\n"
518 root 1.71 . "use base urxvt::term::extension::;\n"
519 root 1.69 . "#line 1 \"$path\"\n{\n"
520     . (do { local $/; <$fh> })
521     . "\n};\n1";
522 root 1.8
523 root 1.69 eval $source
524     or die "$path: $@";
525 root 1.1
526     $pkg
527 root 1.7 }
528 root 1.1 }
529    
530 root 1.31 our $retval; # return value for urxvt
531    
532 root 1.8 # called by the rxvt core
533     sub invoke {
534 root 1.23 local $TERM = shift;
535 root 1.8 my $htype = shift;
536 root 1.6
537 root 1.8 if ($htype == 0) { # INIT
538 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
539 root 1.49
540 root 1.68 my %ext_arg;
541 root 1.6
542 root 1.50 for (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
543     if ($_ eq "default") {
544 root 1.69 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback);
545 root 1.51 } elsif (/^-(.*)$/) {
546 root 1.68 delete $ext_arg{$1};
547     } elsif (/^([^<]+)<(.*)>$/) {
548     push @{ $ext_arg{$1} }, $2;
549 root 1.49 } else {
550 root 1.68 $ext_arg{$_} ||= [];
551 root 1.50 }
552     }
553 root 1.6
554 root 1.68 while (my ($ext, $argv) = each %ext_arg) {
555 root 1.50 my @files = grep -f $_, map "$_/$ext", @dirs;
556    
557     if (@files) {
558 root 1.68 $TERM->register_package (extension_package $files[0], $argv);
559 root 1.50 } else {
560     warn "perl extension '$ext' not found in perl library search path\n";
561 root 1.8 }
562     }
563 root 1.55
564     eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
565     warn $@ if $@;
566 root 1.31 }
567    
568     $retval = undef;
569 root 1.6
570 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
571     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
572     if $verbosity >= 10;
573    
574     keys %$cb;
575    
576     while (my ($pkg, $cb) = each %$cb) {
577 root 1.68 $retval = eval { $cb->($TERM->{_pkg}{$pkg}, @_) }
578     and last;
579    
580 root 1.58 if ($@) {
581     $TERM->ungrab; # better to lose the grab than the session
582     warn $@;
583     }
584 root 1.31 }
585     }
586    
587     if ($htype == 1) { # DESTROY
588 root 1.69 if (my $hook = delete $TERM->{_hook}) {
589 root 1.8 for my $htype (0..$#$hook) {
590     $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} }
591     or set_should_invoke $htype, 0;
592     }
593     }
594 root 1.7
595 root 1.31 # clear package objects
596     %$_ = () for values %{ $TERM->{_pkg} };
597 root 1.25
598 root 1.31 # clear package
599     %$TERM = ();
600 root 1.7 }
601    
602 root 1.31 $retval
603 root 1.7 }
604 root 1.1
605 root 1.71 # urxvt::term::extension
606 root 1.55
607 root 1.71 package urxvt::term::extension;
608 root 1.69
609     sub enable {
610     my ($self, %hook) = @_;
611     my $pkg = $self->{_pkg};
612    
613     while (my ($name, $cb) = each %hook) {
614     my $htype = $HOOKTYPE{uc $name};
615     defined $htype
616     or Carp::croak "unsupported hook type '$name'";
617    
618     unless (exists $self->{term}{_hook}[$htype]{$pkg}) {
619     $hook_count[$htype]++
620     or urxvt::set_should_invoke $htype, 1;
621     }
622    
623     $self->{term}{_hook}[$htype]{$pkg} = $cb;
624     }
625     }
626    
627     sub disable {
628     my ($self, @hook) = @_;
629     my $pkg = $self->{_pkg};
630    
631     for my $name (@hook) {
632     my $htype = $HOOKTYPE{uc $name};
633     defined $htype
634     or Carp::croak "unsupported hook type '$name'";
635    
636     if (delete $self->{term}{_hook}[$htype]{$pkg}) {
637     --$hook_count[$htype]
638     or urxvt::set_should_invoke $htype, 0;
639     }
640     }
641     }
642    
643     our $AUTOLOAD;
644    
645     sub AUTOLOAD {
646     $AUTOLOAD =~ /:([^:]+)$/
647     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
648 root 1.23
649     eval qq{
650 root 1.69 sub $AUTOLOAD {
651 root 1.24 my \$proxy = shift;
652     \$proxy->{term}->$1 (\@_)
653 root 1.23 }
654     1
655     } or die "FATAL: unable to compile method forwarder: $@";
656    
657 root 1.69 goto &$AUTOLOAD;
658 root 1.23 }
659    
660 root 1.69 sub DESTROY {
661 root 1.58 # nop
662     }
663    
664 root 1.55 # urxvt::destroy_hook
665    
666 root 1.45 sub urxvt::destroy_hook::DESTROY {
667     ${$_[0]}->();
668     }
669    
670     sub urxvt::destroy_hook(&) {
671     bless \shift, urxvt::destroy_hook::
672     }
673    
674 root 1.56 package urxvt::anyevent;
675    
676     =head2 The C<urxvt::anyevent> Class
677    
678     The sole purpose of this class is to deliver an interface to the
679     C<AnyEvent> module - any module using it will work inside urxvt without
680     further work. The only exception is that you cannot wait on condition
681     variables, but non-blocking condvar use is ok. What this means is that you
682     cannot use blocking APIs, but the non-blocking variant should work.
683 root 1.55
684 root 1.56 =cut
685 root 1.55
686     our $VERSION = 1;
687    
688     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
689     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
690    
691     sub timer {
692     my ($class, %arg) = @_;
693    
694     my $cb = $arg{cb};
695    
696     urxvt::timer
697     ->new
698     ->start (urxvt::NOW + $arg{after})
699     ->cb (sub {
700     $_[0]->stop; # need to cancel manually
701     $cb->();
702     })
703     }
704    
705     sub io {
706     my ($class, %arg) = @_;
707    
708     my $cb = $arg{cb};
709    
710     bless [$arg{fh}, urxvt::iow
711     ->new
712     ->fd (fileno $arg{fh})
713     ->events (($arg{poll} =~ /r/ ? 1 : 0)
714     | ($arg{poll} =~ /w/ ? 2 : 0))
715     ->start
716     ->cb (sub {
717     $cb->(($_[1] & 1 ? 'r' : '')
718     . ($_[1] & 2 ? 'w' : ''));
719     })],
720     urxvt::anyevent::
721     }
722    
723     sub DESTROY {
724     $_[0][1]->stop;
725     }
726    
727     sub condvar {
728     bless \my $flag, urxvt::anyevent::condvar::
729     }
730    
731     sub urxvt::anyevent::condvar::broadcast {
732     ${$_[0]}++;
733     }
734    
735     sub urxvt::anyevent::condvar::wait {
736     unless (${$_[0]}) {
737 root 1.69 Carp::croak "AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API";
738 root 1.55 }
739     }
740    
741     package urxvt::term;
742    
743 root 1.1 =head2 The C<urxvt::term> Class
744    
745     =over 4
746    
747 root 1.68 =cut
748    
749     # find on_xxx subs in the package and register them
750     # as hooks
751     sub register_package {
752     my ($self, $pkg, $argv) = @_;
753    
754 root 1.69 my $proxy = bless {
755     _pkg => $pkg,
756     argv => $argv,
757     }, $pkg;
758     Scalar::Util::weaken ($proxy->{term} = $self);
759 root 1.68
760     $self->{_pkg}{$pkg} = $proxy;
761    
762 root 1.69 for my $name (@HOOKNAME) {
763     if (my $ref = $pkg->can ("on_" . lc $name)) {
764     $proxy->enable ($name => $ref);
765     }
766 root 1.68 }
767     }
768    
769 root 1.36 =item $term->destroy
770    
771     Destroy the terminal object (close the window, free resources etc.).
772    
773 root 1.49 =item $isset = $term->option ($optval[, $set])
774    
775     Returns true if the option specified by C<$optval> is enabled, and
776     optionally change it. All option values are stored by name in the hash
777     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
778    
779     Here is a a likely non-exhaustive list of option names, please see the
780     source file F</src/optinc.h> to see the actual list:
781    
782     borderLess console cursorBlink cursorUnderline hold iconic insecure
783     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
784     pastableTabs pointerBlank reverseVideo scrollBar scrollBar_floating
785     scrollBar_right scrollTtyKeypress scrollTtyOutput scrollWithBuffer
786     secondaryScreen secondaryScroll skipBuiltinGlyphs transparent
787     tripleclickwords utmpInhibit visualBell
788    
789 root 1.4 =item $value = $term->resource ($name[, $newval])
790    
791     Returns the current resource value associated with a given name and
792     optionally sets a new value. Setting values is most useful in the C<init>
793     hook. Unset resources are returned and accepted as C<undef>.
794    
795     The new value must be properly encoded to a suitable character encoding
796     before passing it to this method. Similarly, the returned value may need
797     to be converted from the used encoding to text.
798    
799     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
800     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
801     likely change).
802    
803     Please note that resource strings will currently only be freed when the
804     terminal is destroyed, so changing options frequently will eat memory.
805    
806 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
807 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
808     to see the actual list:
809 root 1.5
810     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
811     borderLess color cursorBlink cursorUnderline cutchars delete_key
812     display_name embed ext_bwidth fade font geometry hold iconName
813     imFont imLocale inputMethod insecure int_bwidth intensityStyles
814 root 1.8 italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 modifier
815 root 1.30 mouseWheelScrollPage name pastableTabs path perl_eval perl_ext_1 perl_ext_2
816 root 1.6 perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd
817     reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating
818     scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput
819     scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle
820     shade term_name title transparent transparent_all tripleclickwords
821     utmpInhibit visualBell
822 root 1.5
823 root 1.4 =cut
824    
825 root 1.55 sub resource($$;$) {
826 root 1.4 my ($self, $name) = (shift, shift);
827     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
828 root 1.45 &urxvt::term::_resource
829 root 1.4 }
830    
831 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
832    
833     Adds a keymap translation exactly as specified via a resource. See the
834     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
835    
836 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
837 root 1.32
838 root 1.33 Return and optionally change the current rendition. Text that is output by
839     the terminal application will use this style.
840 root 1.32
841     =item ($row, $col) = $term->screen_cur ([$row, $col])
842    
843     Return the current coordinates of the text cursor position and optionally
844     set it (which is usually bad as applications don't expect that).
845    
846 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
847    
848     =item ($row, $col) = $term->selection_beg ([$row, $col])
849    
850     =item ($row, $col) = $term->selection_end ([$row, $col])
851    
852     Return the current values of the selection mark, begin or end positions,
853     and optionally set them to new values.
854    
855     =item $success = $term->selection_grab ($eventtime)
856    
857     Try to request the primary selection from the server (for example, as set
858     by the next method).
859    
860     =item $oldtext = $term->selection ([$newtext])
861    
862     Return the current selection text and optionally replace it by C<$newtext>.
863    
864 root 1.69 =item $term->overlay_simple ($x, $y, $text)
865    
866     Create a simple multi-line overlay box. See the next method for details.
867    
868     =cut
869    
870     sub overlay_simple {
871     my ($self, $x, $y, $text) = @_;
872    
873     my @lines = split /\n/, $text;
874    
875     my $w = List::Util::max map $self->strwidth ($_), @lines;
876    
877     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
878     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
879    
880     $overlay
881     }
882 root 1.1
883 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
884 root 1.1
885     Create a new (empty) overlay at the given position with the given
886 root 1.20 width/height. C<$rstyle> defines the initial rendition style
887     (default: C<OVERLAY_RSTYLE>).
888 root 1.1
889 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
890     around the box.
891 root 1.1
892 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
893     right/bottom side, respectively.
894 root 1.1
895 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
896     as long as the perl object is referenced.
897 root 1.1
898 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
899    
900     =over 4
901 root 1.1
902 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
903 root 1.1
904 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
905     text in rxvt-unicode's special encoding and an array of rendition values
906     at a specific position inside the overlay.
907 root 1.1
908 root 1.22 =item $overlay->hide
909    
910     If visible, hide the overlay, but do not destroy it.
911    
912     =item $overlay->show
913    
914     If hidden, display the overlay again.
915    
916     =back
917    
918 root 1.45 =item $popup = $term->popup ($event)
919    
920     Creates a new C<urxvt::popup> object that implements a popup menu. The
921     C<$event> I<must> be the event causing the menu to pop up (a button event,
922     currently).
923    
924     =cut
925    
926 root 1.55 sub popup {
927 root 1.45 my ($self, $event) = @_;
928    
929     $self->grab ($event->{time}, 1)
930     or return;
931    
932     my $popup = bless {
933     term => $self,
934     event => $event,
935     }, urxvt::popup::;
936    
937     Scalar::Util::weaken $popup->{term};
938    
939     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
940     Scalar::Util::weaken $self->{_destroy}{$popup};
941    
942     $popup
943     }
944    
945 root 1.40 =item $cellwidth = $term->strwidth ($string)
946 root 1.6
947     Returns the number of screen-cells this string would need. Correctly
948     accounts for wide and combining characters.
949    
950 root 1.40 =item $octets = $term->locale_encode ($string)
951 root 1.6
952     Convert the given text string into the corresponding locale encoding.
953    
954 root 1.40 =item $string = $term->locale_decode ($octets)
955 root 1.6
956     Convert the given locale-encoded octets into a perl string.
957    
958 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
959    
960     XORs the rendition values in the given span with the provided value
961     (default: C<RS_RVid>). Useful in refresh hooks to provide effects similar
962     to the selection.
963    
964     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
965    
966     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
967     whitespace will additionally be xored with the C<$rstyle2>, which defaults
968     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
969     it instead.
970    
971 root 1.69 =item $term->scr_bell
972    
973     Ring the bell!
974    
975 root 1.33 =item $term->scr_add_lines ($string)
976    
977     Write the given text string to the screen, as if output by the application
978     running inside the terminal. It may not contain command sequences (escape
979     codes), but is free to use line feeds, carriage returns and tabs. The
980     string is a normal text string, not in locale-dependent encoding.
981    
982     Normally its not a good idea to use this function, as programs might be
983     confused by changes in cursor position or scrolling. Its useful inside a
984     C<on_add_lines> hook, though.
985    
986 root 1.36 =item $term->cmd_parse ($octets)
987    
988     Similar to C<scr_add_lines>, but the argument must be in the
989     locale-specific encoding of the terminal and can contain command sequences
990     (escape codes) that will be interpreted.
991    
992 root 1.6 =item $term->tt_write ($octets)
993    
994     Write the octets given in C<$data> to the tty (i.e. as program input). To
995 root 1.12 pass characters instead of octets, you should convert your strings first
996     to the locale-specific encoding using C<< $term->locale_encode >>.
997    
998 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
999    
1000     Replaces the event mask of the pty watcher by the given event mask. Can
1001     be used to suppress input and output handling to the pty/tty. See the
1002     description of C<< urxvt::timer->events >>. Make sure to always restore
1003     the previous value.
1004    
1005 root 1.40 =item $windowid = $term->parent
1006    
1007     Return the window id of the toplevel window.
1008    
1009     =item $windowid = $term->vt
1010    
1011     Return the window id of the terminal window.
1012    
1013 root 1.32 =item $window_width = $term->width
1014    
1015     =item $window_height = $term->height
1016    
1017     =item $font_width = $term->fwidth
1018    
1019     =item $font_height = $term->fheight
1020    
1021     =item $font_ascent = $term->fbase
1022    
1023     =item $terminal_rows = $term->nrow
1024    
1025     =item $terminal_columns = $term->ncol
1026    
1027     =item $has_focus = $term->focus
1028    
1029     =item $is_mapped = $term->mapped
1030 root 1.13
1031 root 1.32 =item $max_scrollback = $term->saveLines
1032 root 1.13
1033 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1034 root 1.13
1035 root 1.32 =item $lines_in_scrollback = $term->nsaved
1036 root 1.12
1037 root 1.32 Return various integers describing terminal characteristics.
1038 root 1.12
1039 root 1.66 =item $lc_ctype = $term->locale
1040    
1041     Returns the LC_CTYPE category string used by this rxvt-unicode.
1042    
1043     =item $x_display = $term->display_id
1044    
1045     Return the DISPLAY used by rxvt-unicode.
1046    
1047 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1048    
1049     =item $modifiermask = $term->ModMetaMask
1050    
1051     =item $modifiermask = $term->ModNumLockMask
1052    
1053     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1054     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1055    
1056 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1057    
1058     Returns the negative row number of the topmost line. Minimum value is
1059     C<0>, which displays the normal terminal contents. Larger values scroll
1060     this many lines into the scrollback buffer.
1061    
1062 root 1.14 =item $term->want_refresh
1063    
1064     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1065     compare the on-screen display with its stored representation. If they
1066     differ, it redraws the differences.
1067    
1068     Used after changing terminal contents to display them.
1069    
1070 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1071 root 1.12
1072     Returns the text of the entire row with number C<$row_number>. Row C<0>
1073     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1074     terminal line. The scrollback buffer starts at line C<-1> and extends to
1075 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1076     is requested.
1077 root 1.12
1078 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1079     line, starting at column C<$start_col> (default C<0>), which is useful
1080 root 1.18 to replace only parts of a line. The font index in the rendition will
1081 root 1.13 automatically be updated.
1082 root 1.12
1083     C<$text> is in a special encoding: tabs and wide characters that use more
1084     than one cell when displayed are padded with urxvt::NOCHAR characters
1085     (C<chr 65535>). Characters with combining characters and other characters
1086     that do not fit into the normal tetx encoding will be replaced with
1087     characters in the private use area.
1088    
1089     You have to obey this encoding when changing text. The advantage is
1090     that C<substr> and similar functions work on screen cells and not on
1091     characters.
1092    
1093     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1094     can be used to convert normal strings into this encoding and vice versa.
1095    
1096 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1097    
1098     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1099     bitsets. Rendition bitsets contain information about colour, font, font
1100     styles and similar information. See also C<< $term->ROW_t >>.
1101    
1102     When setting rendition, the font mask will be ignored.
1103 root 1.12
1104 root 1.18 See the section on RENDITION, above.
1105 root 1.13
1106     =item $length = $term->ROW_l ($row_number[, $new_length])
1107    
1108 root 1.24 Returns the number of screen cells that are in use ("the line
1109     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1110     line is joined with the following one.
1111    
1112     =item $bool = $term->is_longer ($row_number)
1113    
1114     Returns true if the row is part of a multiple-row logical "line" (i.e.
1115     joined with the following row), which means all characters are in use
1116     and it is continued on the next row (and possibly a continuation of the
1117     previous row(s)).
1118    
1119     =item $line = $term->line ($row_number)
1120    
1121     Create and return a new C<urxvt::line> object that stores information
1122     about the logical line that row C<$row_number> is part of. It supports the
1123     following methods:
1124 root 1.12
1125 root 1.24 =over 4
1126    
1127 root 1.35 =item $text = $line->t ([$new_text])
1128 root 1.24
1129 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1130 root 1.24
1131 root 1.35 =item $rend = $line->r ([$new_rend])
1132 root 1.24
1133 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1134 root 1.24
1135     =item $length = $line->l
1136    
1137     Returns the length of the line in cells, similar to C<ROW_l>.
1138    
1139     =item $rownum = $line->beg
1140    
1141     =item $rownum = $line->end
1142    
1143     Return the row number of the first/last row of the line, respectively.
1144    
1145     =item $offset = $line->offset_of ($row, $col)
1146    
1147     Returns the character offset of the given row|col pair within the logical
1148     line.
1149    
1150     =item ($row, $col) = $line->coord_of ($offset)
1151    
1152     Translates a string offset into terminal coordinates again.
1153    
1154     =back
1155    
1156     =cut
1157    
1158 root 1.55 sub line {
1159 root 1.24 my ($self, $row) = @_;
1160    
1161     my $maxrow = $self->nrow - 1;
1162    
1163     my ($beg, $end) = ($row, $row);
1164    
1165     --$beg while $self->ROW_is_longer ($beg - 1);
1166     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1167    
1168     bless {
1169     term => $self,
1170     beg => $beg,
1171     end => $end,
1172 root 1.34 ncol => $self->ncol,
1173 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1174     }, urxvt::line::
1175     }
1176    
1177     sub urxvt::line::t {
1178     my ($self) = @_;
1179    
1180 root 1.34 if (@_ > 1)
1181     {
1182     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1183     for $self->{beg} .. $self->{end};
1184     }
1185    
1186     defined wantarray &&
1187     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1188     0, $self->{len}
1189 root 1.24 }
1190    
1191     sub urxvt::line::r {
1192     my ($self) = @_;
1193    
1194 root 1.34 if (@_ > 1)
1195     {
1196     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1197     for $self->{beg} .. $self->{end};
1198     }
1199    
1200     if (defined wantarray) {
1201     my $rend = [
1202     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1203     ];
1204     $#$rend = $self->{len} - 1;
1205     return $rend;
1206     }
1207    
1208     ()
1209 root 1.24 }
1210    
1211     sub urxvt::line::beg { $_[0]{beg} }
1212     sub urxvt::line::end { $_[0]{end} }
1213     sub urxvt::line::l { $_[0]{len} }
1214    
1215     sub urxvt::line::offset_of {
1216     my ($self, $row, $col) = @_;
1217    
1218 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1219 root 1.24 }
1220    
1221     sub urxvt::line::coord_of {
1222     my ($self, $offset) = @_;
1223    
1224     use integer;
1225    
1226     (
1227 root 1.34 $offset / $self->{ncol} + $self->{beg},
1228     $offset % $self->{ncol}
1229 root 1.24 )
1230     }
1231    
1232 root 1.12 =item $text = $term->special_encode $string
1233    
1234     Converts a perl string into the special encoding used by rxvt-unicode,
1235     where one character corresponds to one screen cell. See
1236     C<< $term->ROW_t >> for details.
1237    
1238     =item $string = $term->special_decode $text
1239    
1240     Converts rxvt-unicodes text reprsentation into a perl string. See
1241     C<< $term->ROW_t >> for details.
1242 root 1.6
1243 root 1.61 =item $success = $term->grab_button ($button, $modifiermask)
1244    
1245 root 1.64 Registers a synchronous button grab. See the XGrabButton manpage.
1246 root 1.61
1247     =item $success = $term->grab ($eventtime[, $sync])
1248    
1249     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1250     synchronous (C<$sync> is true). Also remembers the grab timestampe.
1251    
1252     =item $term->allow_events_async
1253    
1254     Calls XAllowEvents with AsyncBoth for the most recent grab.
1255    
1256     =item $term->allow_events_sync
1257    
1258     Calls XAllowEvents with SyncBoth for the most recent grab.
1259    
1260     =item $term->allow_events_replay
1261    
1262     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1263     recent grab.
1264    
1265     =item $term->ungrab
1266    
1267     Calls XUngrab for the most recent grab. Is called automatically on
1268     evaluation errors, as it is better to lose the grab in the error case as
1269     the session.
1270    
1271 root 1.1 =back
1272    
1273 root 1.55 =cut
1274    
1275     package urxvt::popup;
1276    
1277 root 1.45 =head2 The C<urxvt::popup> Class
1278    
1279     =over 4
1280    
1281     =cut
1282    
1283     sub add_item {
1284     my ($self, $item) = @_;
1285    
1286 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1287     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1288     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1289    
1290     $item->{render} ||= sub { $_[0]{text} };
1291    
1292 root 1.45 push @{ $self->{item} }, $item;
1293     }
1294    
1295 root 1.53 sub add_separator {
1296     my ($self, $sep) = @_;
1297    
1298 root 1.67 $sep ||= "=";
1299 root 1.53
1300     $self->add_item ({
1301     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1302     text => "",
1303 root 1.65 render => sub { $sep x $self->{term}->ncol },
1304 root 1.53 activate => sub { },
1305     });
1306     }
1307    
1308     sub add_title {
1309     my ($self, $title) = @_;
1310    
1311     $self->add_item ({
1312     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1313     text => $title,
1314     activate => sub { },
1315     });
1316     }
1317    
1318 root 1.45 sub add_button {
1319     my ($self, $text, $cb) = @_;
1320    
1321 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1322 root 1.48 }
1323    
1324     sub add_toggle {
1325     my ($self, $text, $cb, $value) = @_;
1326    
1327 root 1.49 my $item; $item = {
1328     type => "button",
1329     text => " $text",
1330     value => $value,
1331 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1332     activate => sub { $cb->($_[0]{value} = !$_[0]{value}); },
1333 root 1.49 };
1334    
1335     $self->add_item ($item);
1336 root 1.45 }
1337    
1338     sub show {
1339     my ($self) = @_;
1340    
1341     local $urxvt::popup::self = $self;
1342    
1343 root 1.65 local $ENV{LC_ALL} = $self->{term}->locale;
1344    
1345 root 1.45 urxvt->new ("--perl-lib" => "", "--perl-ext-common" => "", "-pty-fd" => -1, "-sl" => 0, "-b" => 0,
1346     "--transient-for" => $self->{term}->parent,
1347 root 1.63 "-display" => $self->{term}->display_id,
1348 root 1.46 "-pe" => "urxvt-popup")
1349 root 1.45 or die "unable to create popup window\n";
1350     }
1351    
1352     sub DESTROY {
1353     my ($self) = @_;
1354    
1355 root 1.58 delete $self->{term}{_destroy}{$self};
1356 root 1.45 $self->{term}->ungrab;
1357     }
1358    
1359 root 1.1 =head2 The C<urxvt::timer> Class
1360    
1361     This class implements timer watchers/events. Time is represented as a
1362     fractional number of seconds since the epoch. Example:
1363    
1364 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1365 root 1.1 $term->{timer} = urxvt::timer
1366     ->new
1367 root 1.20 ->interval (1)
1368 root 1.1 ->cb (sub {
1369 root 1.20 $term->{overlay}->set (0, 0,
1370     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1371     });
1372 root 1.1
1373     =over 4
1374    
1375     =item $timer = new urxvt::timer
1376    
1377 root 1.20 Create a new timer object in started state. It is scheduled to fire
1378     immediately.
1379 root 1.1
1380     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1381    
1382     Set the callback to be called when the timer triggers.
1383    
1384     =item $tstamp = $timer->at
1385    
1386     Return the time this watcher will fire next.
1387    
1388     =item $timer = $timer->set ($tstamp)
1389    
1390     Set the time the event is generated to $tstamp.
1391    
1392 root 1.20 =item $timer = $timer->interval ($interval)
1393    
1394     Normally (and when C<$interval> is C<0>), the timer will automatically
1395     stop after it has fired once. If C<$interval> is non-zero, then the timer
1396     is automatically rescheduled at the given intervals.
1397    
1398 root 1.1 =item $timer = $timer->start
1399    
1400     Start the timer.
1401    
1402     =item $timer = $timer->start ($tstamp)
1403    
1404     Set the event trigger time to C<$tstamp> and start the timer.
1405    
1406     =item $timer = $timer->stop
1407    
1408     Stop the timer.
1409    
1410     =back
1411    
1412     =head2 The C<urxvt::iow> Class
1413    
1414     This class implements io watchers/events. Example:
1415    
1416     $term->{socket} = ...
1417     $term->{iow} = urxvt::iow
1418     ->new
1419     ->fd (fileno $term->{socket})
1420 root 1.69 ->events (urxvt::EVENT_READ)
1421 root 1.1 ->start
1422     ->cb (sub {
1423     my ($iow, $revents) = @_;
1424     # $revents must be 1 here, no need to check
1425     sysread $term->{socket}, my $buf, 8192
1426     or end-of-file;
1427     });
1428    
1429    
1430     =over 4
1431    
1432     =item $iow = new urxvt::iow
1433    
1434     Create a new io watcher object in stopped state.
1435    
1436     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1437    
1438     Set the callback to be called when io events are triggered. C<$reventmask>
1439     is a bitset as described in the C<events> method.
1440    
1441     =item $iow = $iow->fd ($fd)
1442    
1443     Set the filedescriptor (not handle) to watch.
1444    
1445     =item $iow = $iow->events ($eventmask)
1446    
1447 root 1.69 Set the event mask to watch. The only allowed values are
1448     C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
1449     together, or C<urxvt::EVENT_NONE>.
1450 root 1.1
1451     =item $iow = $iow->start
1452    
1453     Start watching for requested events on the given handle.
1454    
1455     =item $iow = $iow->stop
1456    
1457     Stop watching for events on the given filehandle.
1458    
1459     =back
1460    
1461 root 1.4 =head1 ENVIRONMENT
1462    
1463     =head2 URXVT_PERL_VERBOSITY
1464    
1465     This variable controls the verbosity level of the perl extension. Higher
1466     numbers indicate more verbose output.
1467    
1468     =over 4
1469    
1470 root 1.58 =item == 0 - fatal messages
1471 root 1.4
1472 root 1.58 =item >= 3 - script loading and management
1473 root 1.4
1474 root 1.58 =item >=10 - all events received
1475 root 1.4
1476     =back
1477    
1478 root 1.1 =head1 AUTHOR
1479    
1480     Marc Lehmann <pcg@goof.com>
1481     http://software.schmorp.de/pkg/rxvt-unicode
1482    
1483     =cut
1484    
1485     1