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