ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.218
Committed: Sun Jun 10 17:31:53 2012 UTC (11 years, 11 months ago) by root
Branch: MAIN
Changes since 1.217: +5 -369 lines
Log Message:
move perl docs to extensions

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.144 Every time a terminal object gets created, extension scripts specified via
23 root 1.44 the C<perl> resource are loaded and associated with it.
24 root 1.10
25 root 1.215 Scripts are compiled in a 'use strict "vars"' and 'use utf8' environment, and
26 root 1.10 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.154 You can disable the embedded perl interpreter by setting both "perl-ext"
32     and "perl-ext-common" resources to the empty string.
33    
34 root 1.75 =head1 PREPACKAGED EXTENSIONS
35 root 1.15
36 root 1.218 A number of extensions are delivered with this release. You can find them
37     in F<@@RXVT_LIBDIR@@/urxvt/perl/>, and the documentation can be vewiwed
38     using F<< man urxvt-<EXTENSIONNAME> >>.
39 root 1.15
40     You can activate them like this:
41    
42     @@RXVT_NAME@@ -pe <extensionname>
43    
44 root 1.111 Or by adding them to the resource for extensions loaded by default:
45    
46 ayin 1.160 URxvt.perl-ext-common: default,selection-autotransform
47 root 1.111
48 root 1.218 Extensions that add command line parameters or resources on their own are
49     laoded automatically when used.
50 root 1.15
51 root 1.75 =head1 API DOCUMENTATION
52    
53 root 1.6 =head2 General API Considerations
54    
55     All objects (such as terminals, time watchers etc.) are typical
56     reference-to-hash objects. The hash can be used to store anything you
57 root 1.7 like. All members starting with an underscore (such as C<_ptr> or
58 root 1.23 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
59 root 1.7 modified).
60 root 1.6
61     When objects are destroyed on the C++ side, the perl object hashes are
62     emptied, so its best to store related objects such as time watchers and
63     the like inside the terminal object so they get destroyed as soon as the
64     terminal is destroyed.
65    
66 root 1.33 Argument names also often indicate the type of a parameter. Here are some
67     hints on what they mean:
68    
69     =over 4
70    
71     =item $text
72    
73 sf-exg 1.182 Rxvt-unicode's special way of encoding text, where one "unicode" character
74 root 1.78 always represents one screen cell. See L<ROW_t> for a discussion of this format.
75 root 1.33
76     =item $string
77    
78     A perl text string, with an emphasis on I<text>. It can store all unicode
79     characters and is to be distinguished with text encoded in a specific
80     encoding (often locale-specific) and binary data.
81    
82     =item $octets
83    
84     Either binary data or - more common - a text string encoded in a
85     locale-specific way.
86    
87 sf-exg 1.202 =item $keysym
88    
89     an integer that is a valid X11 keysym code. You can convert a string
90     into a keysym and viceversa by using C<XStringToKeysym> and
91     C<XKeysymToString>.
92    
93 root 1.33 =back
94    
95 root 1.69 =head2 Extension Objects
96    
97 root 1.139 Every perl extension is a perl class. A separate perl object is created
98 sf-exg 1.193 for each terminal, and each terminal has its own set of extension objects,
99 root 1.145 which are passed as the first parameter to hooks. So extensions can use
100     their C<$self> object without having to think about clashes with other
101     extensions or other terminals, with the exception of methods and members
102     that begin with an underscore character C<_>: these are reserved for
103     internal use.
104 root 1.69
105     Although it isn't a C<urxvt::term> object, you can call all methods of the
106     C<urxvt::term> class on this object.
107    
108     It has the following methods and data members:
109    
110     =over 4
111    
112     =item $urxvt_term = $self->{term}
113    
114     Returns the C<urxvt::term> object associated with this instance of the
115     extension. This member I<must not> be changed in any way.
116    
117     =item $self->enable ($hook_name => $cb, [$hook_name => $cb..])
118    
119     Dynamically enable the given hooks (named without the C<on_> prefix) for
120     this extension, replacing any previous hook. This is useful when you want
121     to overwrite time-critical hooks only temporarily.
122    
123     =item $self->disable ($hook_name[, $hook_name..])
124    
125     Dynamically disable the given hooks.
126    
127     =back
128    
129 root 1.1 =head2 Hooks
130    
131 root 1.43 The following subroutines can be declared in extension files, and will be
132 root 1.23 called whenever the relevant event happens.
133    
134 root 1.144 The first argument passed to them is an extension object as described in
135 root 1.69 the in the C<Extension Objects> section.
136    
137 root 1.112 B<All> of these hooks must return a boolean value. If any of the called
138     hooks returns true, then the event counts as being I<consumed>, and the
139     relevant action might not be carried out by the C++ code.
140 root 1.1
141 root 1.69 I<< When in doubt, return a false value (preferably C<()>). >>
142 root 1.1
143     =over 4
144    
145     =item on_init $term
146    
147     Called after a new terminal object has been initialized, but before
148 root 1.36 windows are created or the command gets run. Most methods are unsafe to
149     call or deliver senseless data, as terminal size and other characteristics
150 root 1.112 have not yet been determined. You can safely query and change resources
151     and options, though. For many purposes the C<on_start> hook is a better
152     place.
153    
154     =item on_start $term
155    
156     Called at the very end of initialisation of a new terminal, just before
157 root 1.144 trying to map (display) the toplevel and returning to the main loop.
158 root 1.113
159     =item on_destroy $term
160    
161 root 1.127 Called whenever something tries to destroy terminal, when the terminal is
162     still fully functional (not for long, though).
163 root 1.1
164     =item on_reset $term
165    
166     Called after the screen is "reset" for any reason, such as resizing or
167     control sequences. Here is where you can react on changes to size-related
168     variables.
169    
170 root 1.108 =item on_child_start $term, $pid
171    
172     Called just after the child process has been C<fork>ed.
173    
174     =item on_child_exit $term, $status
175    
176     Called just after the child process has exited. C<$status> is the status
177     from C<waitpid>.
178    
179 root 1.1 =item on_sel_make $term, $eventtime
180    
181     Called whenever a selection has been made by the user, but before the
182     selection text is copied, so changes to the beginning, end or type of the
183     selection will be honored.
184    
185     Returning a true value aborts selection making by urxvt, in which case you
186     have to make a selection yourself by calling C<< $term->selection_grab >>.
187    
188     =item on_sel_grab $term, $eventtime
189    
190     Called whenever a selection has been copied, but before the selection is
191     requested from the server. The selection text can be queried and changed
192     by calling C<< $term->selection >>.
193    
194 root 1.144 Returning a true value aborts selection grabbing. It will still be highlighted.
195 root 1.1
196 root 1.22 =item on_sel_extend $term
197    
198     Called whenever the user tries to extend the selection (e.g. with a double
199     click) and is either supposed to return false (normal operation), or
200 root 1.144 should extend the selection itself and return true to suppress the built-in
201 root 1.85 processing. This can happen multiple times, as long as the callback
202     returns true, it will be called on every further click by the user and is
203     supposed to enlarge the selection more and more, if possible.
204 root 1.22
205     See the F<selection> example extension.
206    
207 root 1.1 =item on_view_change $term, $offset
208    
209 root 1.144 Called whenever the view offset changes, i.e. the user or program
210 root 1.1 scrolls. Offset C<0> means display the normal terminal, positive values
211     show this many lines of scrollback.
212    
213     =item on_scroll_back $term, $lines, $saved
214    
215     Called whenever lines scroll out of the terminal area into the scrollback
216     buffer. C<$lines> is the number of lines scrolled out and may be larger
217     than the scroll back buffer or the terminal.
218    
219     It is called before lines are scrolled out (so rows 0 .. min ($lines - 1,
220     $nrow - 1) represent the lines to be scrolled out). C<$saved> is the total
221     number of lines that will be in the scrollback buffer.
222    
223 root 1.171 =item on_osc_seq $term, $op, $args, $resp
224 root 1.137
225     Called on every OSC sequence and can be used to suppress it or modify its
226 root 1.171 behaviour. The default should be to return an empty list. A true value
227 root 1.137 suppresses execution of the request completely. Make sure you don't get
228 root 1.171 confused by recursive invocations when you output an OSC sequence within
229 root 1.137 this callback.
230    
231     C<on_osc_seq_perl> should be used for new behaviour.
232    
233 root 1.171 =item on_osc_seq_perl $term, $args, $resp
234 root 1.28
235 root 1.29 Called whenever the B<ESC ] 777 ; string ST> command sequence (OSC =
236     operating system command) is processed. Cursor position and other state
237     information is up-to-date when this happens. For interoperability, the
238 root 1.171 string should start with the extension name (sans -osc) and a semicolon,
239     to distinguish it from commands for other extensions, and this might be
240     enforced in the future.
241    
242     For example, C<overlay-osc> uses this:
243    
244     sub on_osc_seq_perl {
245     my ($self, $osc, $resp) = @_;
246    
247     return unless $osc =~ s/^overlay;//;
248    
249     ... process remaining $osc string
250     }
251 root 1.29
252     Be careful not ever to trust (in a security sense) the data you receive,
253 root 1.144 as its source can not easily be controlled (e-mail content, messages from
254 root 1.29 other users on the same system etc.).
255 root 1.28
256 root 1.171 For responses, C<$resp> contains the end-of-args separator used by the
257     sender.
258    
259 root 1.33 =item on_add_lines $term, $string
260    
261     Called whenever text is about to be output, with the text as argument. You
262     can filter/change and output the text yourself by returning a true value
263     and calling C<< $term->scr_add_lines >> yourself. Please note that this
264     might be very slow, however, as your hook is called for B<all> text being
265     output.
266    
267 root 1.72 =item on_tt_write $term, $octets
268    
269     Called whenever some data is written to the tty/pty and can be used to
270     suppress or filter tty input.
271    
272 sf-exg 1.187 =item on_tt_paste $term, $octets
273    
274     Called whenever text is about to be pasted, with the text as argument. You
275     can filter/change and paste the text yourself by returning a true value
276     and calling C<< $term->tt_paste >> yourself. C<$octets> is
277     locale-encoded.
278    
279 root 1.35 =item on_line_update $term, $row
280    
281     Called whenever a line was updated or changed. Can be used to filter
282     screen output (e.g. underline urls or other useless stuff). Only lines
283     that are being shown will be filtered, and, due to performance reasons,
284     not always immediately.
285    
286     The row number is always the topmost row of the line if the line spans
287     multiple rows.
288    
289     Please note that, if you change the line, then the hook might get called
290     later with the already-modified line (e.g. if unrelated parts change), so
291     you cannot just toggle rendition bits, but only set them.
292    
293 root 1.1 =item on_refresh_begin $term
294    
295 root 1.171 Called just before the screen gets redrawn. Can be used for overlay or
296     similar effects by modifying the terminal contents in refresh_begin, and
297 root 1.1 restoring them in refresh_end. The built-in overlay and selection display
298     code is run after this hook, and takes precedence.
299    
300     =item on_refresh_end $term
301    
302     Called just after the screen gets redrawn. See C<on_refresh_begin>.
303    
304 root 1.130 =item on_user_command $term, $string
305 root 1.11
306 root 1.144 Called whenever a user-configured event is being activated (e.g. via
307 root 1.130 a C<perl:string> action bound to a key, see description of the B<keysym>
308 root 1.11 resource in the @@RXVT_NAME@@(1) manpage).
309    
310 root 1.130 The event is simply the action string. This interface is assumed to change
311     slightly in the future.
312    
313 sf-exg 1.203 =item on_register_command $term, $keysym, $modifiermask, $string
314    
315     Called after parsing a keysym resource but before registering the
316     associated binding. If this hook returns TRUE the binding is not
317     registered. It can be used to modify a binding by calling
318     C<register_command>.
319    
320 sf-exg 1.186 =item on_resize_all_windows $term, $new_width, $new_height
321 root 1.134
322 root 1.144 Called just after the new window size has been calculated, but before
323 root 1.134 windows are actually being resized or hints are being set. If this hook
324     returns TRUE, setting of the window hints is being skipped.
325    
326 root 1.92 =item on_x_event $term, $event
327    
328     Called on every X event received on the vt window (and possibly other
329     windows). Should only be used as a last resort. Most event structure
330     members are not passed.
331    
332 root 1.143 =item on_root_event $term, $event
333    
334     Like C<on_x_event>, but is called for events on the root window.
335    
336 root 1.45 =item on_focus_in $term
337    
338     Called whenever the window gets the keyboard focus, before rxvt-unicode
339     does focus in processing.
340    
341     =item on_focus_out $term
342    
343 root 1.144 Called whenever the window loses keyboard focus, before rxvt-unicode does
344 root 1.45 focus out processing.
345    
346 root 1.102 =item on_configure_notify $term, $event
347    
348 root 1.118 =item on_property_notify $term, $event
349    
350 root 1.69 =item on_key_press $term, $event, $keysym, $octets
351 root 1.37
352 root 1.69 =item on_key_release $term, $event, $keysym
353 root 1.37
354     =item on_button_press $term, $event
355    
356     =item on_button_release $term, $event
357    
358     =item on_motion_notify $term, $event
359    
360 root 1.45 =item on_map_notify $term, $event
361    
362     =item on_unmap_notify $term, $event
363    
364 sf-exg 1.182 Called whenever the corresponding X event is received for the terminal. If
365     the hook returns true, then the event will be ignored by rxvt-unicode.
366 root 1.39
367     The event is a hash with most values as named by Xlib (see the XEvent
368 root 1.120 manpage), with the additional members C<row> and C<col>, which are the
369     (real, not screen-based) row and column under the mouse cursor.
370 root 1.38
371     C<on_key_press> additionally receives the string rxvt-unicode would
372     output, if any, in locale-specific encoding.
373 root 1.37
374     subwindow.
375    
376 root 1.114 =item on_client_message $term, $event
377    
378     =item on_wm_protocols $term, $event
379    
380     =item on_wm_delete_window $term, $event
381    
382     Called when various types of ClientMessage events are received (all with
383     format=32, WM_PROTOCOLS or WM_PROTOCOLS:WM_DELETE_WINDOW).
384    
385 sf-exg 1.181 =item on_bell $term
386    
387     Called on receipt of a bell character.
388    
389 root 1.1 =back
390    
391 root 1.77 =cut
392    
393     package urxvt;
394    
395     use utf8;
396 root 1.215 use strict 'vars';
397 root 1.77 use Carp ();
398     use Scalar::Util ();
399     use List::Util ();
400    
401     our $VERSION = 1;
402     our $TERM;
403 root 1.211 our @TERM_INIT; # should go, prevents async I/O etc.
404     our @TERM_EXT; # should go, prevents async I/O etc.
405 root 1.77 our @HOOKNAME;
406     our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
407     our %OPTION;
408    
409     our $LIBDIR;
410     our $RESNAME;
411     our $RESCLASS;
412     our $RXVTNAME;
413    
414 root 1.124 our $NOCHAR = chr 0xffff;
415 root 1.121
416 root 1.23 =head2 Variables in the C<urxvt> Package
417    
418     =over 4
419    
420 root 1.75 =item $urxvt::LIBDIR
421    
422     The rxvt-unicode library directory, where, among other things, the perl
423     modules and scripts are stored.
424    
425     =item $urxvt::RESCLASS, $urxvt::RESCLASS
426    
427     The resource class and name rxvt-unicode uses to look up X resources.
428    
429     =item $urxvt::RXVTNAME
430    
431     The basename of the installed binaries, usually C<urxvt>.
432    
433 root 1.23 =item $urxvt::TERM
434    
435 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
436     object, whenever a callback/hook is executing.
437 root 1.23
438 root 1.113 =item @urxvt::TERM_INIT
439    
440 root 1.144 All code references in this array will be called as methods of the next newly
441 root 1.113 created C<urxvt::term> object (during the C<on_init> phase). The array
442 root 1.144 gets cleared before the code references that were in it are being executed,
443     so references can push themselves onto it again if they so desire.
444 root 1.113
445 root 1.144 This complements to the perl-eval command line option, but gets executed
446 root 1.113 first.
447    
448     =item @urxvt::TERM_EXT
449    
450     Works similar to C<@TERM_INIT>, but contains perl package/class names, which
451     get registered as normal extensions after calling the hooks in C<@TERM_INIT>
452     but before other extensions. Gets cleared just like C<@TERM_INIT>.
453    
454 root 1.23 =back
455    
456 root 1.1 =head2 Functions in the C<urxvt> Package
457    
458     =over 4
459    
460     =item urxvt::fatal $errormessage
461    
462 root 1.190 Fatally aborts execution with the given error message (which should
463     include a trailing newline). Avoid at all costs! The only time this
464     is acceptable (and useful) is in the init hook, where it prevents the
465 sf-exg 1.191 terminal from starting up.
466 root 1.1
467     =item urxvt::warn $string
468    
469 root 1.190 Calls C<rxvt_warn> with the given string which should include a trailing
470 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
471     that calls this function.
472    
473     Using this function has the advantage that its output ends up in the
474     correct place, e.g. on stderr of the connecting urxvtc client.
475    
476 root 1.77 Messages have a size limit of 1023 bytes currently.
477    
478 root 1.131 =item @terms = urxvt::termlist
479    
480     Returns all urxvt::term objects that exist in this process, regardless of
481 root 1.144 whether they are started, being destroyed etc., so be careful. Only term
482 root 1.131 objects that have perl extensions attached will be returned (because there
483 sf-exg 1.193 is no urxvt::term object associated with others).
484 root 1.131
485 root 1.1 =item $time = urxvt::NOW
486    
487     Returns the "current time" (as per the event loop).
488    
489 root 1.47 =item urxvt::CurrentTime
490    
491     =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
492     Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
493     Button4Mask, Button5Mask, AnyModifier
494    
495 root 1.92 =item urxvt::NoEventMask, KeyPressMask, KeyReleaseMask,
496     ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask,
497     PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask,
498     Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask,
499     KeymapStateMask, ExposureMask, VisibilityChangeMask, StructureNotifyMask,
500     ResizeRedirectMask, SubstructureNotifyMask, SubstructureRedirectMask,
501     FocusChangeMask, PropertyChangeMask, ColormapChangeMask, OwnerGrabButtonMask
502    
503     =item urxvt::KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify,
504     EnterNotify, LeaveNotify, FocusIn, FocusOut, KeymapNotify, Expose,
505     GraphicsExpose, NoExpose, VisibilityNotify, CreateNotify, DestroyNotify,
506     UnmapNotify, MapNotify, MapRequest, ReparentNotify, ConfigureNotify,
507     ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify,
508     CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest,
509     SelectionNotify, ColormapNotify, ClientMessage, MappingNotify
510    
511 root 1.55 Various constants for use in X calls and event processing.
512 root 1.47
513 root 1.21 =back
514    
515 root 1.18 =head2 RENDITION
516    
517     Rendition bitsets contain information about colour, font, font styles and
518     similar information for each screen cell.
519    
520     The following "macros" deal with changes in rendition sets. You should
521     never just create a bitset, you should always modify an existing one,
522     as they contain important information required for correct operation of
523     rxvt-unicode.
524    
525     =over 4
526    
527     =item $rend = urxvt::DEFAULT_RSTYLE
528    
529     Returns the default rendition, as used when the terminal is starting up or
530     being reset. Useful as a base to start when creating renditions.
531    
532     =item $rend = urxvt::OVERLAY_RSTYLE
533    
534     Return the rendition mask used for overlays by default.
535    
536 root 1.189 =item $rendbit = urxvt::RS_Bold, urxvt::RS_Italic, urxvt::RS_Blink,
537     urxvt::RS_RVid, urxvt::RS_Uline
538 root 1.18
539     Return the bit that enabled bold, italic, blink, reverse-video and
540 root 1.19 underline, respectively. To enable such a style, just logically OR it into
541     the bitset.
542 root 1.18
543     =item $foreground = urxvt::GET_BASEFG $rend
544    
545     =item $background = urxvt::GET_BASEBG $rend
546    
547     Return the foreground/background colour index, respectively.
548    
549 root 1.75 =item $rend = urxvt::SET_FGCOLOR $rend, $new_colour
550 root 1.18
551 root 1.75 =item $rend = urxvt::SET_BGCOLOR $rend, $new_colour
552 root 1.18
553 root 1.132 =item $rend = urxvt::SET_COLOR $rend, $new_fg, $new_bg
554    
555 root 1.18 Replace the foreground/background colour in the rendition mask with the
556     specified one.
557    
558 root 1.75 =item $value = urxvt::GET_CUSTOM $rend
559 root 1.19
560     Return the "custom" value: Every rendition has 5 bits for use by
561     extensions. They can be set and changed as you like and are initially
562     zero.
563    
564 root 1.75 =item $rend = urxvt::SET_CUSTOM $rend, $new_value
565 root 1.19
566     Change the custom value.
567    
568 root 1.18 =back
569    
570 root 1.1 =cut
571    
572     BEGIN {
573     # overwrite perl's warn
574     *CORE::GLOBAL::warn = sub {
575     my $msg = join "", @_;
576     $msg .= "\n"
577     unless $msg =~ /\n$/;
578     urxvt::warn ($msg);
579     };
580     }
581    
582 root 1.124 no warnings 'utf8';
583    
584 root 1.210 sub parse_resource {
585     my ($term, $name, $isarg, $longopt, $flag, $value) = @_;
586 root 1.206
587 root 1.216 $name =~ y/-/./ if $isarg;
588    
589 root 1.208 $term->scan_meta;
590 root 1.207
591 root 1.210 my $r = $term->{meta}{resource};
592 root 1.216 keys %$r; # reste iterator
593 root 1.210 while (my ($pattern, $v) = each %$r) {
594     if (
595 root 1.212 $pattern =~ /\.$/
596 root 1.210 ? $pattern eq substr $name, 0, length $pattern
597     : $pattern eq $name
598     ) {
599     $name = "$urxvt::RESCLASS.$name";
600 root 1.211
601 root 1.215 push @{ $term->{perl_ext_3} }, $v->[0];
602 root 1.211
603 root 1.210 if ($v->[1] eq "boolean") {
604     $term->put_option_db ($name, $flag ? "true" : "false");
605     return 1;
606     } else {
607     $term->put_option_db ($name, $value);
608     return 1 + 2;
609     }
610     }
611     }
612    
613 root 1.206 0
614     }
615    
616 root 1.208 sub usage {
617     my ($term, $usage_type) = @_;
618    
619     $term->scan_meta;
620    
621     my $r = $term->{meta}{resource};
622    
623 root 1.210 for my $pattern (sort keys %$r) {
624     my ($ext, $type, $desc) = @{ $r->{$pattern} };
625 root 1.208
626     $desc .= " (-pe $ext)";
627    
628     if ($usage_type == 1) {
629 root 1.210 $pattern =~ y/./-/;
630 root 1.212 $pattern =~ s/-$/-.../g;
631 root 1.210
632 root 1.208 if ($type eq "boolean") {
633 root 1.210 urxvt::log sprintf " -%-30s %s\n", "/+$pattern", $desc;
634 root 1.208 } else {
635 root 1.210 urxvt::log sprintf " -%-30s %s\n", "$pattern $type", $desc;
636 root 1.208 }
637     } else {
638 root 1.213 $pattern =~ s/\.$/.*/g;
639 root 1.210 urxvt::log sprintf " %-31s %s\n", "$pattern:", $type;
640 root 1.208 }
641     }
642     }
643    
644 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
645 root 1.1
646     sub verbose {
647     my ($level, $msg) = @_;
648 root 1.8 warn "$msg\n" if $level <= $verbosity;
649 root 1.1 }
650    
651 root 1.44 my %extension_pkg;
652 root 1.1
653     # load a single script into its own package, once only
654 root 1.44 sub extension_package($) {
655 root 1.1 my ($path) = @_;
656    
657 root 1.44 $extension_pkg{$path} ||= do {
658 root 1.100 $path =~ /([^\/\\]+)$/;
659     my $pkg = $1;
660     $pkg =~ s/[^[:word:]]/_/g;
661     $pkg = "urxvt::ext::$pkg";
662 root 1.8
663 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
664 root 1.1
665 root 1.217 (${"$pkg\::_NAME"} = $path) =~ s/^.*[\\\/]//; # hackish
666    
667 root 1.1 open my $fh, "<:raw", $path
668     or die "$path: $!";
669    
670 root 1.96 my $source =
671 root 1.215 "package $pkg; use strict 'vars'; use utf8; no warnings 'utf8';\n"
672 root 1.69 . "#line 1 \"$path\"\n{\n"
673     . (do { local $/; <$fh> })
674     . "\n};\n1";
675 root 1.8
676 root 1.69 eval $source
677     or die "$path: $@";
678 root 1.1
679     $pkg
680 root 1.7 }
681 root 1.1 }
682    
683 root 1.31 our $retval; # return value for urxvt
684    
685 root 1.8 # called by the rxvt core
686     sub invoke {
687 root 1.23 local $TERM = shift;
688 root 1.8 my $htype = shift;
689 root 1.6
690 root 1.8 if ($htype == 0) { # INIT
691 root 1.208 my @dirs = $TERM->perl_libdirs;
692 ayin 1.157
693 root 1.68 my %ext_arg;
694 root 1.6
695 root 1.113 {
696     my @init = @TERM_INIT;
697     @TERM_INIT = ();
698     $_->($TERM) for @init;
699     my @pkg = @TERM_EXT;
700     @TERM_EXT = ();
701     $TERM->register_package ($_) for @pkg;
702     }
703    
704 root 1.215 for (
705     @{ delete $TERM->{perl_ext_3} },
706     grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2
707     ) {
708 root 1.50 if ($_ eq "default") {
709 root 1.123 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback readline);
710 root 1.51 } elsif (/^-(.*)$/) {
711 root 1.68 delete $ext_arg{$1};
712     } elsif (/^([^<]+)<(.*)>$/) {
713     push @{ $ext_arg{$1} }, $2;
714 root 1.49 } else {
715 root 1.68 $ext_arg{$_} ||= [];
716 root 1.50 }
717     }
718 root 1.6
719 root 1.133 for my $ext (sort keys %ext_arg) {
720 root 1.50 my @files = grep -f $_, map "$_/$ext", @dirs;
721    
722     if (@files) {
723 root 1.133 $TERM->register_package (extension_package $files[0], $ext_arg{$ext});
724 root 1.50 } else {
725     warn "perl extension '$ext' not found in perl library search path\n";
726 root 1.8 }
727     }
728 root 1.55
729     eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
730     warn $@ if $@;
731 root 1.31 }
732    
733     $retval = undef;
734 root 1.6
735 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
736     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
737     if $verbosity >= 10;
738    
739 root 1.138 for my $pkg (keys %$cb) {
740     my $retval_ = eval { $cb->{$pkg}->($TERM->{_pkg}{$pkg}, @_) };
741 root 1.113 $retval ||= $retval_;
742 root 1.68
743 root 1.58 if ($@) {
744     $TERM->ungrab; # better to lose the grab than the session
745     warn $@;
746     }
747 root 1.31 }
748 root 1.85
749     verbose 11, "$HOOKNAME[$htype] returning <$retval>"
750     if $verbosity >= 11;
751 root 1.31 }
752    
753     if ($htype == 1) { # DESTROY
754     # clear package objects
755     %$_ = () for values %{ $TERM->{_pkg} };
756 root 1.25
757 root 1.31 # clear package
758     %$TERM = ();
759 root 1.7 }
760    
761 root 1.31 $retval
762 root 1.7 }
763 root 1.1
764 root 1.132 sub SET_COLOR($$$) {
765     SET_BGCOLOR (SET_FGCOLOR ($_[0], $_[1]), $_[2])
766     }
767    
768 tpope 1.152 sub rend2mask {
769     no strict 'refs';
770     my ($str, $mask) = (@_, 0);
771     my %color = ( fg => undef, bg => undef );
772     my @failed;
773     for my $spec ( split /\s+/, $str ) {
774     if ( $spec =~ /^([fb]g)[_:-]?(\d+)/i ) {
775     $color{lc($1)} = $2;
776     } else {
777     my $neg = $spec =~ s/^[-^]//;
778     unless ( exists &{"RS_$spec"} ) {
779     push @failed, $spec;
780     next;
781     }
782     my $cur = &{"RS_$spec"};
783     if ( $neg ) {
784     $mask &= ~$cur;
785     } else {
786     $mask |= $cur;
787     }
788     }
789     }
790     ($mask, @color{qw(fg bg)}, \@failed)
791     }
792    
793 root 1.71 package urxvt::term::extension;
794 root 1.69
795     sub enable {
796     my ($self, %hook) = @_;
797     my $pkg = $self->{_pkg};
798    
799     while (my ($name, $cb) = each %hook) {
800     my $htype = $HOOKTYPE{uc $name};
801     defined $htype
802     or Carp::croak "unsupported hook type '$name'";
803    
804 root 1.206 $self->set_should_invoke ($htype, +1)
805 root 1.92 unless exists $self->{term}{_hook}[$htype]{$pkg};
806 root 1.69
807     $self->{term}{_hook}[$htype]{$pkg} = $cb;
808     }
809     }
810    
811     sub disable {
812     my ($self, @hook) = @_;
813     my $pkg = $self->{_pkg};
814    
815     for my $name (@hook) {
816     my $htype = $HOOKTYPE{uc $name};
817     defined $htype
818     or Carp::croak "unsupported hook type '$name'";
819    
820 root 1.206 $self->set_should_invoke ($htype, -1)
821 root 1.92 if delete $self->{term}{_hook}[$htype]{$pkg};
822 root 1.69 }
823     }
824    
825     our $AUTOLOAD;
826    
827     sub AUTOLOAD {
828     $AUTOLOAD =~ /:([^:]+)$/
829     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
830 root 1.23
831     eval qq{
832 root 1.69 sub $AUTOLOAD {
833 root 1.24 my \$proxy = shift;
834     \$proxy->{term}->$1 (\@_)
835 root 1.23 }
836     1
837     } or die "FATAL: unable to compile method forwarder: $@";
838    
839 root 1.69 goto &$AUTOLOAD;
840 root 1.23 }
841    
842 root 1.69 sub DESTROY {
843 root 1.58 # nop
844     }
845    
846 root 1.55 # urxvt::destroy_hook
847    
848 root 1.45 sub urxvt::destroy_hook::DESTROY {
849     ${$_[0]}->();
850     }
851    
852     sub urxvt::destroy_hook(&) {
853     bless \shift, urxvt::destroy_hook::
854     }
855    
856 root 1.217 sub x_resource {
857     my ($self, $name) = @_;
858     $name =~ s/^%(\.|$)/$_[0]{_name}$1/;
859     $self->{term}->x_resource ($name)
860     }
861    
862     sub x_resource_boolean {
863     my ($self, $name) = @_;
864     $name =~ s/^%(\.|$)/$_[0]{_name}$1/;
865     $self->{term}->x_resource_boolean ($name)
866     }
867    
868 root 1.56 package urxvt::anyevent;
869    
870     =head2 The C<urxvt::anyevent> Class
871    
872     The sole purpose of this class is to deliver an interface to the
873     C<AnyEvent> module - any module using it will work inside urxvt without
874 root 1.75 further programming. The only exception is that you cannot wait on
875 root 1.209 condition variables, but non-blocking condvar use is ok.
876    
877     In practical terms this means is that you cannot use blocking APIs, but
878     the non-blocking variant should work.
879 root 1.55
880 root 1.56 =cut
881 root 1.55
882 root 1.178 our $VERSION = '5.23';
883 root 1.55
884     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
885     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
886    
887     sub timer {
888     my ($class, %arg) = @_;
889    
890     my $cb = $arg{cb};
891    
892     urxvt::timer
893     ->new
894 root 1.179 ->after ($arg{after}, $arg{interval})
895     ->cb ($arg{interval} ? $cb : sub {
896 root 1.55 $_[0]->stop; # need to cancel manually
897     $cb->();
898     })
899     }
900    
901     sub io {
902     my ($class, %arg) = @_;
903    
904     my $cb = $arg{cb};
905 root 1.176 my $fd = fileno $arg{fh};
906     defined $fd or $fd = $arg{fh};
907 root 1.55
908     bless [$arg{fh}, urxvt::iow
909     ->new
910 root 1.177 ->fd ($fd)
911 root 1.55 ->events (($arg{poll} =~ /r/ ? 1 : 0)
912     | ($arg{poll} =~ /w/ ? 2 : 0))
913     ->start
914 root 1.176 ->cb ($cb)
915     ], urxvt::anyevent::
916     }
917    
918     sub idle {
919     my ($class, %arg) = @_;
920    
921     my $cb = $arg{cb};
922    
923     urxvt::iw
924     ->new
925     ->start
926 root 1.178 ->cb ($cb)
927 root 1.176 }
928    
929     sub child {
930     my ($class, %arg) = @_;
931    
932     my $cb = $arg{cb};
933    
934     urxvt::pw
935     ->new
936     ->start ($arg{pid})
937     ->cb (sub {
938     $_[0]->stop; # need to cancel manually
939     $cb->($_[0]->rpid, $_[0]->rstatus);
940     })
941 root 1.55 }
942    
943     sub DESTROY {
944     $_[0][1]->stop;
945     }
946    
947 root 1.198 # only needed for AnyEvent < 6 compatibility
948 root 1.150 sub one_event {
949 root 1.149 Carp::croak "AnyEvent->one_event blocking wait unsupported in urxvt, use a non-blocking API";
950     }
951    
952 root 1.55 package urxvt::term;
953    
954 root 1.1 =head2 The C<urxvt::term> Class
955    
956     =over 4
957    
958 root 1.68 =cut
959    
960     # find on_xxx subs in the package and register them
961     # as hooks
962     sub register_package {
963     my ($self, $pkg, $argv) = @_;
964    
965 root 1.113 no strict 'refs';
966    
967     urxvt::verbose 6, "register package $pkg to $self";
968    
969     @{"$pkg\::ISA"} = urxvt::term::extension::;
970    
971 root 1.69 my $proxy = bless {
972 root 1.217 _pkg => $pkg,
973     _name => ${"$pkg\::_NAME"}, # hackish
974     argv => $argv,
975 root 1.69 }, $pkg;
976     Scalar::Util::weaken ($proxy->{term} = $self);
977 root 1.68
978     $self->{_pkg}{$pkg} = $proxy;
979    
980 root 1.69 for my $name (@HOOKNAME) {
981     if (my $ref = $pkg->can ("on_" . lc $name)) {
982     $proxy->enable ($name => $ref);
983     }
984 root 1.68 }
985     }
986    
987 root 1.208 sub perl_libdirs {
988     map { split /:/ }
989     $_[0]->resource ("perl_lib"),
990     $ENV{URXVT_PERL_LIB},
991     "$ENV{HOME}/.urxvt/ext",
992     "$LIBDIR/perl"
993     }
994    
995     sub scan_meta {
996     my ($self) = @_;
997     my @libdirs = perl_libdirs $self;
998    
999     return if $self->{meta_libdirs} eq join "\x00", @libdirs;
1000    
1001     my %meta;
1002    
1003     $self->{meta_libdirs} = join "\x00", @libdirs;
1004     $self->{meta} = \%meta;
1005    
1006     for my $dir (reverse @libdirs) {
1007     opendir my $fh, $dir
1008     or next;
1009     for my $ext (readdir $fh) {
1010     $ext ne "."
1011     and $ext ne ".."
1012     and open my $fh, "<", "$dir/$ext"
1013     or next;
1014    
1015     while (<$fh>) {
1016 root 1.210 if (/^#:META:X_RESOURCE:(.*)/) {
1017     my ($pattern, $type, $desc) = split /:/, $1;
1018 root 1.214 $pattern =~ s/^%(\.|$)/$ext$1/g; # % in pattern == extension name
1019 root 1.213 if ($pattern =~ /[^a-zA-Z0-9\-\.]/) {
1020 root 1.210 warn "$dir/$ext: meta resource '$pattern' contains illegal characters (not alphanumeric nor . nor *)\n";
1021     } else {
1022     $meta{resource}{$pattern} = [$ext, $type, $desc];
1023     }
1024 root 1.208 } elsif (/^\s*(?:#|$)/) {
1025     # skip other comments and empty lines
1026     } else {
1027     last; # stop parsing on first non-empty non-comment line
1028     }
1029     }
1030     }
1031     }
1032     }
1033    
1034 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
1035    
1036     Creates a new terminal, very similar as if you had started it with system
1037 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
1038     hash which defines the environment of the new terminal.
1039 root 1.77
1040     Croaks (and probably outputs an error message) if the new instance
1041     couldn't be created. Returns C<undef> if the new instance didn't
1042     initialise perl, and the terminal object otherwise. The C<init> and
1043 root 1.131 C<start> hooks will be called before this call returns, and are free to
1044     refer to global data (which is race free).
1045 root 1.77
1046     =cut
1047    
1048     sub new {
1049     my ($class, $env, @args) = @_;
1050    
1051 root 1.131 $env or Carp::croak "environment hash missing in call to urxvt::term->new";
1052     @args or Carp::croak "name argument missing in call to urxvt::term->new";
1053    
1054     _new ([ map "$_=$env->{$_}", keys %$env ], \@args);
1055 root 1.77 }
1056    
1057 root 1.36 =item $term->destroy
1058    
1059 root 1.75 Destroy the terminal object (close the window, free resources
1060     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
1061     watchers (timers, io watchers) are still active.
1062 root 1.36
1063 root 1.108 =item $term->exec_async ($cmd[, @args])
1064    
1065     Works like the combination of the C<fork>/C<exec> builtins, which executes
1066     ("starts") programs in the background. This function takes care of setting
1067     the user environment before exec'ing the command (e.g. C<PATH>) and should
1068     be preferred over explicit calls to C<exec> or C<system>.
1069    
1070     Returns the pid of the subprocess or C<undef> on error.
1071    
1072     =cut
1073    
1074     sub exec_async {
1075     my $self = shift;
1076    
1077     my $pid = fork;
1078    
1079     return $pid
1080     if !defined $pid or $pid;
1081    
1082     %ENV = %{ $self->env };
1083    
1084     exec @_;
1085     urxvt::_exit 255;
1086     }
1087    
1088 root 1.49 =item $isset = $term->option ($optval[, $set])
1089    
1090     Returns true if the option specified by C<$optval> is enabled, and
1091     optionally change it. All option values are stored by name in the hash
1092     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1093    
1094 root 1.144 Here is a likely non-exhaustive list of option names, please see the
1095 root 1.49 source file F</src/optinc.h> to see the actual list:
1096    
1097 sf-exg 1.195 borderLess buffered console cursorBlink cursorUnderline hold iconic
1098     insecure intensityStyles iso14755 iso14755_52 jumpScroll loginShell
1099 sf-exg 1.196 mapAlert meta8 mouseWheelScrollPage override_redirect pastableTabs
1100 sf-exg 1.195 pointerBlank reverseVideo scrollBar scrollBar_floating scrollBar_right
1101     scrollTtyKeypress scrollTtyOutput scrollWithBuffer secondaryScreen
1102     secondaryScroll skipBuiltinGlyphs skipScroll transparent tripleclickwords
1103     urgentOnBell utmpInhibit visualBell
1104 root 1.49
1105 root 1.4 =item $value = $term->resource ($name[, $newval])
1106    
1107     Returns the current resource value associated with a given name and
1108     optionally sets a new value. Setting values is most useful in the C<init>
1109     hook. Unset resources are returned and accepted as C<undef>.
1110    
1111     The new value must be properly encoded to a suitable character encoding
1112     before passing it to this method. Similarly, the returned value may need
1113     to be converted from the used encoding to text.
1114    
1115     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1116     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1117     likely change).
1118    
1119     Please note that resource strings will currently only be freed when the
1120     terminal is destroyed, so changing options frequently will eat memory.
1121    
1122 root 1.144 Here is a likely non-exhaustive list of resource names, not all of which
1123 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1124     to see the actual list:
1125 root 1.5
1126 sf-exg 1.194 answerbackstring backgroundPixmap backspace_key blendtype blurradius
1127     boldFont boldItalicFont borderLess buffered chdir color cursorBlink
1128     cursorUnderline cutchars delete_key depth display_name embed ext_bwidth
1129     fade font geometry hold iconName iconfile imFont imLocale inputMethod
1130     insecure int_bwidth intensityStyles iso14755 iso14755_52 italicFont
1131     jumpScroll letterSpace lineSpace loginShell mapAlert meta8 modifier
1132     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1133     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1134 root 1.105 preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1135     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1136     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1137 sf-exg 1.194 secondaryScreen secondaryScroll shade skipBuiltinGlyphs skipScroll
1138     term_name title transient_for transparent tripleclickwords urgentOnBell
1139     utmpInhibit visualBell
1140 root 1.5
1141 root 1.4 =cut
1142    
1143 root 1.55 sub resource($$;$) {
1144 root 1.4 my ($self, $name) = (shift, shift);
1145     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1146 root 1.169 goto &urxvt::term::_resource
1147 root 1.4 }
1148    
1149 root 1.79 =item $value = $term->x_resource ($pattern)
1150    
1151     Returns the X-Resource for the given pattern, excluding the program or
1152     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1153     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1154     resource with that pattern exists.
1155    
1156 root 1.217 Extensions that define extra resource or command line arguments also need
1157     to call this method to access their values.
1158    
1159     If the method is called on an extension object (basically, from an
1160     extension), then the special prefix C<%.> will be replaced by the name of
1161     the extension and a dot, and the lone string C<%> will be replcaed by the
1162     extension name itself. This makes it possible to code extensions so you
1163     can rename them and get a new set of commandline switches and resources
1164     without having to change the actual code.
1165    
1166 root 1.79 This method should only be called during the C<on_start> hook, as there is
1167     only one resource database per display, and later invocations might return
1168     the wrong resources.
1169    
1170 root 1.211 =item $value = $term->x_resource_boolean ($pattern)
1171    
1172     Like C<x_resource>, above, but interprets the string value as a boolean
1173     and returns C<1> for true values, C<0> for false values and C<undef> if
1174     the resource or option isn't specified.
1175    
1176     You should always use this method to parse boolean resources.
1177    
1178     =cut
1179    
1180     sub x_resource_boolean {
1181     my $res = &x_resource;
1182    
1183     $res =~ /^\s*(?:true|yes|on|1)\s*$/i ? 1 : defined $res && 0
1184     }
1185    
1186 sf-exg 1.201 =item $success = $term->parse_keysym ($key, $octets)
1187 root 1.69
1188 sf-exg 1.201 Adds a key binding exactly as specified via a resource. See the
1189 root 1.69 C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1190    
1191 sf-exg 1.203 =item $term->register_command ($keysym, $modifiermask, $string)
1192    
1193     Adds a key binding. This is a lower level api compared to
1194     C<parse_keysym>, as it expects a parsed key description, and can be
1195     used only inside either the C<on_init> hook, to add a binding, or the
1196     C<on_register_command> hook, to modify a parsed binding.
1197    
1198 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1199 root 1.32
1200 root 1.33 Return and optionally change the current rendition. Text that is output by
1201     the terminal application will use this style.
1202 root 1.32
1203     =item ($row, $col) = $term->screen_cur ([$row, $col])
1204    
1205     Return the current coordinates of the text cursor position and optionally
1206     set it (which is usually bad as applications don't expect that).
1207    
1208 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1209    
1210     =item ($row, $col) = $term->selection_beg ([$row, $col])
1211    
1212     =item ($row, $col) = $term->selection_end ([$row, $col])
1213    
1214 root 1.180 Return the current values of the selection mark, begin or end positions.
1215    
1216     When arguments are given, then the selection coordinates are set to
1217     C<$row> and C<$col>, and the selection screen is set to the current
1218     screen.
1219    
1220     =item $screen = $term->selection_screen ([$screen])
1221    
1222     Returns the current selection screen, and then optionally sets it.
1223 root 1.1
1224 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1225    
1226     Tries to make a selection as set by C<selection_beg> and
1227     C<selection_end>. If C<$rectangular> is true (default: false), a
1228 sf-exg 1.185 rectangular selection will be made. This is the preferred function to make
1229 root 1.86 a selection.
1230    
1231 sf-exg 1.184 =item $success = $term->selection_grab ($eventtime[, $clipboard])
1232 root 1.1
1233 sf-exg 1.184 Try to acquire ownership of the primary (clipboard if C<$clipboard> is
1234     true) selection from the server. The corresponding text can be set
1235     with the next method. No visual feedback will be given. This function
1236 root 1.86 is mostly useful from within C<on_sel_grab> hooks.
1237 root 1.1
1238 sf-exg 1.184 =item $oldtext = $term->selection ([$newtext, $clipboard])
1239 root 1.1
1240 sf-exg 1.184 Return the current selection (clipboard if C<$clipboard> is true) text
1241     and optionally replace it by C<$newtext>.
1242    
1243     =item $term->selection_clear ([$clipboard])
1244    
1245     Revoke ownership of the primary (clipboard if C<$clipboard> is true) selection.
1246 root 1.1
1247 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1248    
1249     Create a simple multi-line overlay box. See the next method for details.
1250    
1251     =cut
1252    
1253     sub overlay_simple {
1254     my ($self, $x, $y, $text) = @_;
1255    
1256     my @lines = split /\n/, $text;
1257    
1258     my $w = List::Util::max map $self->strwidth ($_), @lines;
1259    
1260     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1261     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1262    
1263     $overlay
1264     }
1265 root 1.1
1266 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1267 root 1.1
1268     Create a new (empty) overlay at the given position with the given
1269 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1270     (default: C<OVERLAY_RSTYLE>).
1271 root 1.1
1272 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1273     around the box.
1274 root 1.1
1275 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1276     right/bottom side, respectively.
1277 root 1.1
1278 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1279     as long as the perl object is referenced.
1280 root 1.1
1281 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1282    
1283     =over 4
1284 root 1.1
1285 root 1.172 =item $overlay->set ($x, $y, $text[, $rend])
1286 root 1.1
1287 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1288     text in rxvt-unicode's special encoding and an array of rendition values
1289     at a specific position inside the overlay.
1290 root 1.1
1291 root 1.172 If C<$rend> is missing, then the rendition will not be changed.
1292    
1293 root 1.22 =item $overlay->hide
1294    
1295     If visible, hide the overlay, but do not destroy it.
1296    
1297     =item $overlay->show
1298    
1299     If hidden, display the overlay again.
1300    
1301     =back
1302    
1303 root 1.45 =item $popup = $term->popup ($event)
1304    
1305     Creates a new C<urxvt::popup> object that implements a popup menu. The
1306     C<$event> I<must> be the event causing the menu to pop up (a button event,
1307     currently).
1308    
1309     =cut
1310    
1311 root 1.55 sub popup {
1312 root 1.45 my ($self, $event) = @_;
1313    
1314     $self->grab ($event->{time}, 1)
1315     or return;
1316    
1317     my $popup = bless {
1318     term => $self,
1319     event => $event,
1320     }, urxvt::popup::;
1321    
1322     Scalar::Util::weaken $popup->{term};
1323    
1324     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1325     Scalar::Util::weaken $self->{_destroy}{$popup};
1326    
1327     $popup
1328     }
1329    
1330 root 1.40 =item $cellwidth = $term->strwidth ($string)
1331 root 1.6
1332     Returns the number of screen-cells this string would need. Correctly
1333     accounts for wide and combining characters.
1334    
1335 root 1.40 =item $octets = $term->locale_encode ($string)
1336 root 1.6
1337     Convert the given text string into the corresponding locale encoding.
1338    
1339 root 1.40 =item $string = $term->locale_decode ($octets)
1340 root 1.6
1341     Convert the given locale-encoded octets into a perl string.
1342    
1343 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1344    
1345     XORs the rendition values in the given span with the provided value
1346 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1347     refresh hooks to provide effects similar to the selection.
1348 root 1.70
1349     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1350    
1351     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1352     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1353     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1354 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1355 root 1.70
1356 root 1.69 =item $term->scr_bell
1357    
1358     Ring the bell!
1359    
1360 root 1.33 =item $term->scr_add_lines ($string)
1361    
1362     Write the given text string to the screen, as if output by the application
1363     running inside the terminal. It may not contain command sequences (escape
1364     codes), but is free to use line feeds, carriage returns and tabs. The
1365     string is a normal text string, not in locale-dependent encoding.
1366    
1367     Normally its not a good idea to use this function, as programs might be
1368     confused by changes in cursor position or scrolling. Its useful inside a
1369     C<on_add_lines> hook, though.
1370    
1371 root 1.121 =item $term->scr_change_screen ($screen)
1372    
1373     Switch to given screen - 0 primary, 1 secondary.
1374    
1375 root 1.36 =item $term->cmd_parse ($octets)
1376    
1377     Similar to C<scr_add_lines>, but the argument must be in the
1378     locale-specific encoding of the terminal and can contain command sequences
1379     (escape codes) that will be interpreted.
1380    
1381 root 1.6 =item $term->tt_write ($octets)
1382    
1383 sf-exg 1.186 Write the octets given in C<$octets> to the tty (i.e. as program input). To
1384 root 1.12 pass characters instead of octets, you should convert your strings first
1385     to the locale-specific encoding using C<< $term->locale_encode >>.
1386    
1387 sf-exg 1.187 =item $term->tt_paste ($octets)
1388    
1389     Write the octets given in C<$octets> to the tty as a paste, converting NL to
1390     CR and bracketing the data with control sequences if bracketed paste mode
1391     is set.
1392    
1393 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1394    
1395     Replaces the event mask of the pty watcher by the given event mask. Can
1396     be used to suppress input and output handling to the pty/tty. See the
1397     description of C<< urxvt::timer->events >>. Make sure to always restore
1398     the previous value.
1399    
1400 root 1.125 =item $fd = $term->pty_fd
1401    
1402     Returns the master file descriptor for the pty in use, or C<-1> if no pty
1403     is used.
1404    
1405 root 1.40 =item $windowid = $term->parent
1406    
1407     Return the window id of the toplevel window.
1408    
1409     =item $windowid = $term->vt
1410    
1411     Return the window id of the terminal window.
1412    
1413 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1414    
1415     Adds the specified events to the vt event mask. Useful e.g. when you want
1416     to receive pointer events all the times:
1417    
1418     $term->vt_emask_add (urxvt::PointerMotionMask);
1419    
1420 sf-exg 1.204 =item $term->set_urgency ($set)
1421    
1422     Enable/disable the urgency hint on the toplevel window.
1423    
1424 root 1.132 =item $term->focus_in
1425    
1426     =item $term->focus_out
1427    
1428     =item $term->key_press ($state, $keycode[, $time])
1429    
1430     =item $term->key_release ($state, $keycode[, $time])
1431    
1432     Deliver various fake events to to terminal.
1433    
1434 root 1.32 =item $window_width = $term->width
1435    
1436     =item $window_height = $term->height
1437    
1438     =item $font_width = $term->fwidth
1439    
1440     =item $font_height = $term->fheight
1441    
1442     =item $font_ascent = $term->fbase
1443    
1444     =item $terminal_rows = $term->nrow
1445    
1446     =item $terminal_columns = $term->ncol
1447    
1448     =item $has_focus = $term->focus
1449    
1450     =item $is_mapped = $term->mapped
1451 root 1.13
1452 root 1.32 =item $max_scrollback = $term->saveLines
1453 root 1.13
1454 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1455 root 1.13
1456 root 1.94 =item $topmost_scrollback_row = $term->top_row
1457 root 1.12
1458 root 1.32 Return various integers describing terminal characteristics.
1459 root 1.12
1460 root 1.77 =item $x_display = $term->display_id
1461    
1462     Return the DISPLAY used by rxvt-unicode.
1463    
1464 root 1.66 =item $lc_ctype = $term->locale
1465    
1466     Returns the LC_CTYPE category string used by this rxvt-unicode.
1467    
1468 root 1.77 =item $env = $term->env
1469    
1470     Returns a copy of the environment in effect for the terminal as a hashref
1471     similar to C<\%ENV>.
1472    
1473 root 1.136 =item @envv = $term->envv
1474    
1475     Returns the environment as array of strings of the form C<VAR=VALUE>.
1476    
1477     =item @argv = $term->argv
1478    
1479     Return the argument vector as this terminal, similar to @ARGV, but
1480     includes the program name as first element.
1481    
1482 root 1.77 =cut
1483 root 1.66
1484 root 1.77 sub env {
1485 root 1.136 +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), $_[0]->envv }
1486 root 1.77 }
1487 root 1.66
1488 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1489    
1490     =item $modifiermask = $term->ModMetaMask
1491    
1492     =item $modifiermask = $term->ModNumLockMask
1493    
1494     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1495     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1496    
1497 root 1.121 =item $screen = $term->current_screen
1498    
1499     Returns the currently displayed screen (0 primary, 1 secondary).
1500    
1501 root 1.122 =item $cursor_is_hidden = $term->hidden_cursor
1502    
1503 root 1.144 Returns whether the cursor is currently hidden or not.
1504 root 1.122
1505 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1506    
1507 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1508     C<0>, which displays the normal terminal contents. Lower values scroll
1509 root 1.12 this many lines into the scrollback buffer.
1510    
1511 root 1.14 =item $term->want_refresh
1512    
1513     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1514     compare the on-screen display with its stored representation. If they
1515     differ, it redraws the differences.
1516    
1517     Used after changing terminal contents to display them.
1518    
1519 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1520 root 1.12
1521 root 1.166 Returns the text of the entire row with number C<$row_number>. Row C<< $term->top_row >>
1522     is the topmost terminal line, row C<< $term->nrow-1 >> is the bottommost
1523     terminal line. Nothing will be returned if a nonexistent line
1524 root 1.24 is requested.
1525 root 1.12
1526 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1527     line, starting at column C<$start_col> (default C<0>), which is useful
1528 root 1.18 to replace only parts of a line. The font index in the rendition will
1529 root 1.13 automatically be updated.
1530 root 1.12
1531 root 1.124 C<$text> is in a special encoding: tabs and wide characters that use more
1532     than one cell when displayed are padded with C<$urxvt::NOCHAR> (chr 65535)
1533 root 1.121 characters. Characters with combining characters and other characters that
1534 ayin 1.162 do not fit into the normal text encoding will be replaced with characters
1535 root 1.121 in the private use area.
1536 root 1.12
1537     You have to obey this encoding when changing text. The advantage is
1538     that C<substr> and similar functions work on screen cells and not on
1539     characters.
1540    
1541     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1542     can be used to convert normal strings into this encoding and vice versa.
1543    
1544 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1545    
1546     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1547     bitsets. Rendition bitsets contain information about colour, font, font
1548     styles and similar information. See also C<< $term->ROW_t >>.
1549    
1550     When setting rendition, the font mask will be ignored.
1551 root 1.12
1552 root 1.18 See the section on RENDITION, above.
1553 root 1.13
1554     =item $length = $term->ROW_l ($row_number[, $new_length])
1555    
1556 root 1.24 Returns the number of screen cells that are in use ("the line
1557     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1558     line is joined with the following one.
1559    
1560     =item $bool = $term->is_longer ($row_number)
1561    
1562     Returns true if the row is part of a multiple-row logical "line" (i.e.
1563     joined with the following row), which means all characters are in use
1564     and it is continued on the next row (and possibly a continuation of the
1565     previous row(s)).
1566    
1567     =item $line = $term->line ($row_number)
1568    
1569     Create and return a new C<urxvt::line> object that stores information
1570     about the logical line that row C<$row_number> is part of. It supports the
1571     following methods:
1572 root 1.12
1573 root 1.24 =over 4
1574    
1575 root 1.35 =item $text = $line->t ([$new_text])
1576 root 1.24
1577 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1578 root 1.24
1579 root 1.35 =item $rend = $line->r ([$new_rend])
1580 root 1.24
1581 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1582 root 1.24
1583     =item $length = $line->l
1584    
1585     Returns the length of the line in cells, similar to C<ROW_l>.
1586    
1587     =item $rownum = $line->beg
1588    
1589     =item $rownum = $line->end
1590    
1591     Return the row number of the first/last row of the line, respectively.
1592    
1593     =item $offset = $line->offset_of ($row, $col)
1594    
1595     Returns the character offset of the given row|col pair within the logical
1596 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1597     offsets outside the string.
1598 root 1.24
1599     =item ($row, $col) = $line->coord_of ($offset)
1600    
1601     Translates a string offset into terminal coordinates again.
1602    
1603     =back
1604    
1605     =cut
1606    
1607 root 1.55 sub line {
1608 root 1.24 my ($self, $row) = @_;
1609    
1610     my $maxrow = $self->nrow - 1;
1611    
1612     my ($beg, $end) = ($row, $row);
1613    
1614     --$beg while $self->ROW_is_longer ($beg - 1);
1615     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1616    
1617     bless {
1618     term => $self,
1619     beg => $beg,
1620     end => $end,
1621 root 1.34 ncol => $self->ncol,
1622 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1623     }, urxvt::line::
1624     }
1625    
1626     sub urxvt::line::t {
1627     my ($self) = @_;
1628    
1629 root 1.34 if (@_ > 1)
1630     {
1631     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1632     for $self->{beg} .. $self->{end};
1633     }
1634    
1635     defined wantarray &&
1636     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1637     0, $self->{len}
1638 root 1.24 }
1639    
1640     sub urxvt::line::r {
1641     my ($self) = @_;
1642    
1643 root 1.34 if (@_ > 1)
1644     {
1645     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1646     for $self->{beg} .. $self->{end};
1647     }
1648    
1649     if (defined wantarray) {
1650     my $rend = [
1651     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1652     ];
1653     $#$rend = $self->{len} - 1;
1654     return $rend;
1655     }
1656    
1657     ()
1658 root 1.24 }
1659    
1660     sub urxvt::line::beg { $_[0]{beg} }
1661     sub urxvt::line::end { $_[0]{end} }
1662     sub urxvt::line::l { $_[0]{len} }
1663    
1664     sub urxvt::line::offset_of {
1665     my ($self, $row, $col) = @_;
1666    
1667 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1668 root 1.24 }
1669    
1670     sub urxvt::line::coord_of {
1671     my ($self, $offset) = @_;
1672    
1673     use integer;
1674    
1675     (
1676 root 1.34 $offset / $self->{ncol} + $self->{beg},
1677     $offset % $self->{ncol}
1678 root 1.24 )
1679     }
1680    
1681 root 1.12 =item $text = $term->special_encode $string
1682    
1683     Converts a perl string into the special encoding used by rxvt-unicode,
1684     where one character corresponds to one screen cell. See
1685     C<< $term->ROW_t >> for details.
1686    
1687     =item $string = $term->special_decode $text
1688    
1689 root 1.144 Converts rxvt-unicodes text representation into a perl string. See
1690 root 1.12 C<< $term->ROW_t >> for details.
1691 root 1.6
1692 root 1.131 =item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
1693    
1694     =item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])
1695 root 1.61
1696 root 1.131 Register/unregister a synchronous button grab. See the XGrabButton
1697     manpage.
1698 root 1.61
1699     =item $success = $term->grab ($eventtime[, $sync])
1700    
1701     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1702 root 1.144 synchronous (C<$sync> is true). Also remembers the grab timestamp.
1703 root 1.61
1704     =item $term->allow_events_async
1705    
1706     Calls XAllowEvents with AsyncBoth for the most recent grab.
1707    
1708     =item $term->allow_events_sync
1709    
1710     Calls XAllowEvents with SyncBoth for the most recent grab.
1711    
1712     =item $term->allow_events_replay
1713    
1714     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1715     recent grab.
1716    
1717     =item $term->ungrab
1718    
1719 sf-exg 1.182 Calls XUngrabPointer and XUngrabKeyboard for the most recent grab. Is called automatically on
1720 root 1.61 evaluation errors, as it is better to lose the grab in the error case as
1721     the session.
1722    
1723 root 1.119 =item $atom = $term->XInternAtom ($atom_name[, $only_if_exists])
1724    
1725     =item $atom_name = $term->XGetAtomName ($atom)
1726    
1727     =item @atoms = $term->XListProperties ($window)
1728    
1729     =item ($type,$format,$octets) = $term->XGetWindowProperty ($window, $property)
1730    
1731 root 1.168 =item $term->XChangeProperty ($window, $property, $type, $format, $octets)
1732 root 1.119
1733     =item $term->XDeleteProperty ($window, $property)
1734    
1735     =item $window = $term->DefaultRootWindow
1736    
1737     =item $term->XReparentWindow ($window, $parent, [$x, $y])
1738    
1739     =item $term->XMapWindow ($window)
1740    
1741     =item $term->XUnmapWindow ($window)
1742    
1743     =item $term->XMoveResizeWindow ($window, $x, $y, $width, $height)
1744    
1745     =item ($x, $y, $child_window) = $term->XTranslateCoordinates ($src, $dst, $x, $y)
1746    
1747     =item $term->XChangeInput ($window, $add_events[, $del_events])
1748    
1749 sf-exg 1.202 =item $keysym = $term->XStringToKeysym ($string)
1750    
1751     =item $string = $term->XKeysymToString ($keysym)
1752    
1753 root 1.119 Various X or X-related functions. The C<$term> object only serves as
1754     the source of the display, otherwise those functions map more-or-less
1755 sf-exg 1.182 directly onto the X functions of the same name.
1756 root 1.119
1757 root 1.1 =back
1758    
1759 root 1.55 =cut
1760    
1761     package urxvt::popup;
1762    
1763 root 1.45 =head2 The C<urxvt::popup> Class
1764    
1765     =over 4
1766    
1767     =cut
1768    
1769     sub add_item {
1770     my ($self, $item) = @_;
1771    
1772 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1773     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1774     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1775    
1776     $item->{render} ||= sub { $_[0]{text} };
1777    
1778 root 1.45 push @{ $self->{item} }, $item;
1779     }
1780    
1781 root 1.76 =item $popup->add_title ($title)
1782    
1783     Adds a non-clickable title to the popup.
1784    
1785     =cut
1786    
1787     sub add_title {
1788     my ($self, $title) = @_;
1789    
1790     $self->add_item ({
1791     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1792     text => $title,
1793     activate => sub { },
1794     });
1795     }
1796    
1797     =item $popup->add_separator ([$sepchr])
1798    
1799     Creates a separator, optionally using the character given as C<$sepchr>.
1800    
1801     =cut
1802    
1803 root 1.53 sub add_separator {
1804     my ($self, $sep) = @_;
1805    
1806 root 1.67 $sep ||= "=";
1807 root 1.53
1808     $self->add_item ({
1809     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1810     text => "",
1811 root 1.65 render => sub { $sep x $self->{term}->ncol },
1812 root 1.53 activate => sub { },
1813     });
1814     }
1815    
1816 root 1.76 =item $popup->add_button ($text, $cb)
1817    
1818     Adds a clickable button to the popup. C<$cb> is called whenever it is
1819     selected.
1820 root 1.53
1821 root 1.76 =cut
1822 root 1.53
1823 root 1.45 sub add_button {
1824     my ($self, $text, $cb) = @_;
1825    
1826 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1827 root 1.48 }
1828    
1829 root 1.133 =item $popup->add_toggle ($text, $initial_value, $cb)
1830 root 1.76
1831 root 1.133 Adds a toggle/checkbox item to the popup. The callback gets called
1832     whenever it gets toggled, with a boolean indicating its new value as its
1833     first argument.
1834 root 1.76
1835     =cut
1836    
1837 root 1.48 sub add_toggle {
1838 root 1.133 my ($self, $text, $value, $cb) = @_;
1839 root 1.48
1840 root 1.49 my $item; $item = {
1841     type => "button",
1842     text => " $text",
1843     value => $value,
1844 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1845 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
1846 root 1.49 };
1847    
1848     $self->add_item ($item);
1849 root 1.45 }
1850    
1851 root 1.76 =item $popup->show
1852    
1853     Displays the popup (which is initially hidden).
1854    
1855     =cut
1856    
1857 root 1.45 sub show {
1858     my ($self) = @_;
1859    
1860     local $urxvt::popup::self = $self;
1861    
1862 root 1.77 my $env = $self->{term}->env;
1863     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
1864     delete $env->{LC_ALL};
1865     $env->{LC_CTYPE} = $self->{term}->locale;
1866    
1867 root 1.164 my $term = urxvt::term->new (
1868     $env, "popup",
1869     "--perl-lib" => "", "--perl-ext-common" => "",
1870     "-pty-fd" => -1, "-sl" => 0,
1871     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1872     "--transient-for" => $self->{term}->parent,
1873     "-display" => $self->{term}->display_id,
1874     "-pe" => "urxvt-popup",
1875     ) or die "unable to create popup window\n";
1876    
1877     unless (delete $term->{urxvt_popup_init_done}) {
1878     $term->ungrab;
1879     $term->destroy;
1880     die "unable to initialise popup window\n";
1881     }
1882 root 1.45 }
1883    
1884     sub DESTROY {
1885     my ($self) = @_;
1886    
1887 root 1.58 delete $self->{term}{_destroy}{$self};
1888 root 1.45 $self->{term}->ungrab;
1889     }
1890    
1891 root 1.78 =back
1892    
1893 root 1.113 =cut
1894    
1895     package urxvt::watcher;
1896    
1897 root 1.1 =head2 The C<urxvt::timer> Class
1898    
1899     This class implements timer watchers/events. Time is represented as a
1900     fractional number of seconds since the epoch. Example:
1901    
1902 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1903 root 1.1 $term->{timer} = urxvt::timer
1904     ->new
1905 root 1.20 ->interval (1)
1906 root 1.1 ->cb (sub {
1907 root 1.20 $term->{overlay}->set (0, 0,
1908     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1909 ayin 1.157 });
1910 root 1.1
1911     =over 4
1912    
1913     =item $timer = new urxvt::timer
1914    
1915 root 1.20 Create a new timer object in started state. It is scheduled to fire
1916     immediately.
1917 root 1.1
1918     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1919    
1920     Set the callback to be called when the timer triggers.
1921    
1922 root 1.179 =item $timer = $timer->set ($tstamp[, $interval])
1923 root 1.1
1924 root 1.179 Set the time the event is generated to $tstamp (and optionally specifies a
1925     new $interval).
1926 root 1.1
1927 root 1.20 =item $timer = $timer->interval ($interval)
1928    
1929 root 1.179 By default (and when C<$interval> is C<0>), the timer will automatically
1930 root 1.20 stop after it has fired once. If C<$interval> is non-zero, then the timer
1931     is automatically rescheduled at the given intervals.
1932    
1933 root 1.1 =item $timer = $timer->start
1934    
1935     Start the timer.
1936    
1937 root 1.179 =item $timer = $timer->start ($tstamp[, $interval])
1938 root 1.1
1939 root 1.179 Set the event trigger time to C<$tstamp> and start the timer. Optionally
1940     also replaces the interval.
1941 root 1.1
1942 root 1.179 =item $timer = $timer->after ($delay[, $interval])
1943 root 1.103
1944     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
1945    
1946 root 1.1 =item $timer = $timer->stop
1947    
1948     Stop the timer.
1949    
1950     =back
1951    
1952     =head2 The C<urxvt::iow> Class
1953    
1954     This class implements io watchers/events. Example:
1955    
1956     $term->{socket} = ...
1957     $term->{iow} = urxvt::iow
1958     ->new
1959     ->fd (fileno $term->{socket})
1960 root 1.159 ->events (urxvt::EV_READ)
1961 root 1.1 ->start
1962     ->cb (sub {
1963     my ($iow, $revents) = @_;
1964     # $revents must be 1 here, no need to check
1965     sysread $term->{socket}, my $buf, 8192
1966     or end-of-file;
1967     });
1968    
1969    
1970     =over 4
1971    
1972     =item $iow = new urxvt::iow
1973    
1974     Create a new io watcher object in stopped state.
1975    
1976     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1977    
1978     Set the callback to be called when io events are triggered. C<$reventmask>
1979     is a bitset as described in the C<events> method.
1980    
1981     =item $iow = $iow->fd ($fd)
1982    
1983 root 1.144 Set the file descriptor (not handle) to watch.
1984 root 1.1
1985     =item $iow = $iow->events ($eventmask)
1986    
1987 root 1.69 Set the event mask to watch. The only allowed values are
1988 root 1.159 C<urxvt::EV_READ> and C<urxvt::EV_WRITE>, which might be ORed
1989     together, or C<urxvt::EV_NONE>.
1990 root 1.1
1991     =item $iow = $iow->start
1992    
1993     Start watching for requested events on the given handle.
1994    
1995     =item $iow = $iow->stop
1996    
1997 root 1.144 Stop watching for events on the given file handle.
1998 root 1.1
1999     =back
2000    
2001 root 1.114 =head2 The C<urxvt::iw> Class
2002    
2003     This class implements idle watchers, that get called automatically when
2004     the process is idle. They should return as fast as possible, after doing
2005     some useful work.
2006    
2007     =over 4
2008    
2009     =item $iw = new urxvt::iw
2010    
2011     Create a new idle watcher object in stopped state.
2012    
2013     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
2014    
2015     Set the callback to be called when the watcher triggers.
2016    
2017     =item $timer = $timer->start
2018    
2019     Start the watcher.
2020    
2021     =item $timer = $timer->stop
2022    
2023     Stop the watcher.
2024    
2025     =back
2026    
2027     =head2 The C<urxvt::pw> Class
2028    
2029     This class implements process watchers. They create an event whenever a
2030     process exits, after which they stop automatically.
2031    
2032     my $pid = fork;
2033     ...
2034     $term->{pw} = urxvt::pw
2035     ->new
2036     ->start ($pid)
2037     ->cb (sub {
2038     my ($pw, $exit_status) = @_;
2039     ...
2040 ayin 1.157 });
2041 root 1.114
2042     =over 4
2043    
2044     =item $pw = new urxvt::pw
2045    
2046     Create a new process watcher in stopped state.
2047    
2048     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
2049    
2050     Set the callback to be called when the timer triggers.
2051    
2052     =item $pw = $timer->start ($pid)
2053    
2054 root 1.144 Tells the watcher to start watching for process C<$pid>.
2055 root 1.114
2056     =item $pw = $pw->stop
2057    
2058     Stop the watcher.
2059    
2060     =back
2061    
2062 root 1.4 =head1 ENVIRONMENT
2063    
2064     =head2 URXVT_PERL_VERBOSITY
2065    
2066     This variable controls the verbosity level of the perl extension. Higher
2067     numbers indicate more verbose output.
2068    
2069     =over 4
2070    
2071 root 1.58 =item == 0 - fatal messages
2072 root 1.4
2073 root 1.58 =item >= 3 - script loading and management
2074 root 1.4
2075 root 1.85 =item >=10 - all called hooks
2076    
2077 root 1.144 =item >=11 - hook return values
2078 root 1.4
2079     =back
2080    
2081 root 1.1 =head1 AUTHOR
2082    
2083 root 1.192 Marc Lehmann <schmorp@schmorp.de>
2084 root 1.1 http://software.schmorp.de/pkg/rxvt-unicode
2085    
2086     =cut
2087    
2088     1
2089 tpope 1.152
2090     # vim: sw=3: