ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.221
Committed: Thu Jun 21 06:08:05 2012 UTC (11 years, 11 months ago) by sf-exg
Branch: MAIN
Changes since 1.220: +3 -3 lines
Log Message:
Fix typos.

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