ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.132
Committed: Mon Feb 6 05:40:15 2006 UTC (18 years, 3 months ago) by root
Branch: MAIN
Changes since 1.131: +28 -0 lines
Log Message:
*** empty log message ***

File Contents

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