ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.139
Committed: Sat Jul 1 19:04:43 2006 UTC (17 years, 10 months ago) by root
Branch: MAIN
Changes since 1.138: +1 -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 root 1.139 Every perl extension is a perl class. A separate perl object is created
374 root 1.69 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 root 1.138 for my $pkg (keys %$cb) {
913     my $retval_ = eval { $cb->{$pkg}->($TERM->{_pkg}{$pkg}, @_) };
914 root 1.113 $retval ||= $retval_;
915 root 1.68
916 root 1.58 if ($@) {
917     $TERM->ungrab; # better to lose the grab than the session
918     warn $@;
919     }
920 root 1.31 }
921 root 1.85
922     verbose 11, "$HOOKNAME[$htype] returning <$retval>"
923     if $verbosity >= 11;
924 root 1.31 }
925    
926     if ($htype == 1) { # DESTROY
927     # clear package objects
928     %$_ = () for values %{ $TERM->{_pkg} };
929 root 1.25
930 root 1.31 # clear package
931     %$TERM = ();
932 root 1.7 }
933    
934 root 1.31 $retval
935 root 1.7 }
936 root 1.1
937 root 1.132 sub SET_COLOR($$$) {
938     SET_BGCOLOR (SET_FGCOLOR ($_[0], $_[1]), $_[2])
939     }
940    
941 root 1.71 # urxvt::term::extension
942 root 1.55
943 root 1.71 package urxvt::term::extension;
944 root 1.69
945     sub enable {
946     my ($self, %hook) = @_;
947     my $pkg = $self->{_pkg};
948    
949     while (my ($name, $cb) = each %hook) {
950     my $htype = $HOOKTYPE{uc $name};
951     defined $htype
952     or Carp::croak "unsupported hook type '$name'";
953    
954 root 1.92 $self->set_should_invoke ($htype, +1)
955     unless exists $self->{term}{_hook}[$htype]{$pkg};
956 root 1.69
957     $self->{term}{_hook}[$htype]{$pkg} = $cb;
958     }
959     }
960    
961     sub disable {
962     my ($self, @hook) = @_;
963     my $pkg = $self->{_pkg};
964    
965     for my $name (@hook) {
966     my $htype = $HOOKTYPE{uc $name};
967     defined $htype
968     or Carp::croak "unsupported hook type '$name'";
969    
970 root 1.92 $self->set_should_invoke ($htype, -1)
971     if delete $self->{term}{_hook}[$htype]{$pkg};
972 root 1.69 }
973     }
974    
975     our $AUTOLOAD;
976    
977     sub AUTOLOAD {
978     $AUTOLOAD =~ /:([^:]+)$/
979     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
980 root 1.23
981     eval qq{
982 root 1.69 sub $AUTOLOAD {
983 root 1.24 my \$proxy = shift;
984     \$proxy->{term}->$1 (\@_)
985 root 1.23 }
986     1
987     } or die "FATAL: unable to compile method forwarder: $@";
988    
989 root 1.69 goto &$AUTOLOAD;
990 root 1.23 }
991    
992 root 1.69 sub DESTROY {
993 root 1.58 # nop
994     }
995    
996 root 1.55 # urxvt::destroy_hook
997    
998 root 1.45 sub urxvt::destroy_hook::DESTROY {
999     ${$_[0]}->();
1000     }
1001    
1002     sub urxvt::destroy_hook(&) {
1003     bless \shift, urxvt::destroy_hook::
1004     }
1005    
1006 root 1.56 package urxvt::anyevent;
1007    
1008     =head2 The C<urxvt::anyevent> Class
1009    
1010     The sole purpose of this class is to deliver an interface to the
1011     C<AnyEvent> module - any module using it will work inside urxvt without
1012 root 1.75 further programming. The only exception is that you cannot wait on
1013     condition variables, but non-blocking condvar use is ok. What this means
1014     is that you cannot use blocking APIs, but the non-blocking variant should
1015     work.
1016 root 1.55
1017 root 1.56 =cut
1018 root 1.55
1019     our $VERSION = 1;
1020    
1021     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
1022     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
1023    
1024     sub timer {
1025     my ($class, %arg) = @_;
1026    
1027     my $cb = $arg{cb};
1028    
1029     urxvt::timer
1030     ->new
1031     ->start (urxvt::NOW + $arg{after})
1032     ->cb (sub {
1033     $_[0]->stop; # need to cancel manually
1034     $cb->();
1035     })
1036     }
1037    
1038     sub io {
1039     my ($class, %arg) = @_;
1040    
1041     my $cb = $arg{cb};
1042    
1043     bless [$arg{fh}, urxvt::iow
1044     ->new
1045     ->fd (fileno $arg{fh})
1046     ->events (($arg{poll} =~ /r/ ? 1 : 0)
1047     | ($arg{poll} =~ /w/ ? 2 : 0))
1048     ->start
1049     ->cb (sub {
1050     $cb->(($_[1] & 1 ? 'r' : '')
1051     . ($_[1] & 2 ? 'w' : ''));
1052     })],
1053     urxvt::anyevent::
1054     }
1055    
1056     sub DESTROY {
1057     $_[0][1]->stop;
1058     }
1059    
1060     sub condvar {
1061     bless \my $flag, urxvt::anyevent::condvar::
1062     }
1063    
1064     sub urxvt::anyevent::condvar::broadcast {
1065     ${$_[0]}++;
1066     }
1067    
1068     sub urxvt::anyevent::condvar::wait {
1069     unless (${$_[0]}) {
1070 root 1.69 Carp::croak "AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API";
1071 root 1.55 }
1072     }
1073    
1074     package urxvt::term;
1075    
1076 root 1.1 =head2 The C<urxvt::term> Class
1077    
1078     =over 4
1079    
1080 root 1.68 =cut
1081    
1082     # find on_xxx subs in the package and register them
1083     # as hooks
1084     sub register_package {
1085     my ($self, $pkg, $argv) = @_;
1086    
1087 root 1.113 no strict 'refs';
1088    
1089     urxvt::verbose 6, "register package $pkg to $self";
1090    
1091     @{"$pkg\::ISA"} = urxvt::term::extension::;
1092    
1093 root 1.69 my $proxy = bless {
1094     _pkg => $pkg,
1095     argv => $argv,
1096     }, $pkg;
1097     Scalar::Util::weaken ($proxy->{term} = $self);
1098 root 1.68
1099     $self->{_pkg}{$pkg} = $proxy;
1100    
1101 root 1.69 for my $name (@HOOKNAME) {
1102     if (my $ref = $pkg->can ("on_" . lc $name)) {
1103     $proxy->enable ($name => $ref);
1104     }
1105 root 1.68 }
1106     }
1107    
1108 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
1109    
1110     Creates a new terminal, very similar as if you had started it with system
1111 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
1112     hash which defines the environment of the new terminal.
1113 root 1.77
1114     Croaks (and probably outputs an error message) if the new instance
1115     couldn't be created. Returns C<undef> if the new instance didn't
1116     initialise perl, and the terminal object otherwise. The C<init> and
1117 root 1.131 C<start> hooks will be called before this call returns, and are free to
1118     refer to global data (which is race free).
1119 root 1.77
1120     =cut
1121    
1122     sub new {
1123     my ($class, $env, @args) = @_;
1124    
1125 root 1.131 $env or Carp::croak "environment hash missing in call to urxvt::term->new";
1126     @args or Carp::croak "name argument missing in call to urxvt::term->new";
1127    
1128     _new ([ map "$_=$env->{$_}", keys %$env ], \@args);
1129 root 1.77 }
1130    
1131 root 1.36 =item $term->destroy
1132    
1133 root 1.75 Destroy the terminal object (close the window, free resources
1134     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
1135     watchers (timers, io watchers) are still active.
1136 root 1.36
1137 root 1.108 =item $term->exec_async ($cmd[, @args])
1138    
1139     Works like the combination of the C<fork>/C<exec> builtins, which executes
1140     ("starts") programs in the background. This function takes care of setting
1141     the user environment before exec'ing the command (e.g. C<PATH>) and should
1142     be preferred over explicit calls to C<exec> or C<system>.
1143    
1144     Returns the pid of the subprocess or C<undef> on error.
1145    
1146     =cut
1147    
1148     sub exec_async {
1149     my $self = shift;
1150    
1151     my $pid = fork;
1152    
1153     return $pid
1154     if !defined $pid or $pid;
1155    
1156     %ENV = %{ $self->env };
1157    
1158     exec @_;
1159     urxvt::_exit 255;
1160     }
1161    
1162 root 1.49 =item $isset = $term->option ($optval[, $set])
1163    
1164     Returns true if the option specified by C<$optval> is enabled, and
1165     optionally change it. All option values are stored by name in the hash
1166     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1167    
1168     Here is a a likely non-exhaustive list of option names, please see the
1169     source file F</src/optinc.h> to see the actual list:
1170    
1171     borderLess console cursorBlink cursorUnderline hold iconic insecure
1172     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
1173 root 1.105 override-redirect pastableTabs pointerBlank reverseVideo scrollBar
1174     scrollBar_floating scrollBar_right scrollTtyKeypress scrollTtyOutput
1175     scrollWithBuffer secondaryScreen secondaryScroll skipBuiltinGlyphs
1176     transparent tripleclickwords utmpInhibit visualBell
1177 root 1.49
1178 root 1.4 =item $value = $term->resource ($name[, $newval])
1179    
1180     Returns the current resource value associated with a given name and
1181     optionally sets a new value. Setting values is most useful in the C<init>
1182     hook. Unset resources are returned and accepted as C<undef>.
1183    
1184     The new value must be properly encoded to a suitable character encoding
1185     before passing it to this method. Similarly, the returned value may need
1186     to be converted from the used encoding to text.
1187    
1188     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1189     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1190     likely change).
1191    
1192     Please note that resource strings will currently only be freed when the
1193     terminal is destroyed, so changing options frequently will eat memory.
1194    
1195 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
1196 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1197     to see the actual list:
1198 root 1.5
1199     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
1200     borderLess color cursorBlink cursorUnderline cutchars delete_key
1201     display_name embed ext_bwidth fade font geometry hold iconName
1202     imFont imLocale inputMethod insecure int_bwidth intensityStyles
1203 root 1.105 italicFont jumpScroll lineSpace loginShell mapAlert meta8 modifier
1204     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1205     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1206     preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1207     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1208     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1209     secondaryScreen secondaryScroll selectstyle shade term_name title
1210     transient_for transparent transparent_all tripleclickwords utmpInhibit
1211     visualBell
1212 root 1.5
1213 root 1.4 =cut
1214    
1215 root 1.55 sub resource($$;$) {
1216 root 1.4 my ($self, $name) = (shift, shift);
1217     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1218 root 1.45 &urxvt::term::_resource
1219 root 1.4 }
1220    
1221 root 1.79 =item $value = $term->x_resource ($pattern)
1222    
1223     Returns the X-Resource for the given pattern, excluding the program or
1224     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1225     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1226     resource with that pattern exists.
1227    
1228     This method should only be called during the C<on_start> hook, as there is
1229     only one resource database per display, and later invocations might return
1230     the wrong resources.
1231    
1232 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
1233    
1234     Adds a keymap translation exactly as specified via a resource. See the
1235     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1236    
1237 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1238 root 1.32
1239 root 1.33 Return and optionally change the current rendition. Text that is output by
1240     the terminal application will use this style.
1241 root 1.32
1242     =item ($row, $col) = $term->screen_cur ([$row, $col])
1243    
1244     Return the current coordinates of the text cursor position and optionally
1245     set it (which is usually bad as applications don't expect that).
1246    
1247 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1248    
1249     =item ($row, $col) = $term->selection_beg ([$row, $col])
1250    
1251     =item ($row, $col) = $term->selection_end ([$row, $col])
1252    
1253     Return the current values of the selection mark, begin or end positions,
1254     and optionally set them to new values.
1255    
1256 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1257    
1258     Tries to make a selection as set by C<selection_beg> and
1259     C<selection_end>. If C<$rectangular> is true (default: false), a
1260     rectangular selection will be made. This is the prefered function to make
1261     a selection.
1262    
1263 root 1.1 =item $success = $term->selection_grab ($eventtime)
1264    
1265 root 1.86 Try to request the primary selection text from the server (for example, as
1266     set by the next method). No visual feedback will be given. This function
1267     is mostly useful from within C<on_sel_grab> hooks.
1268 root 1.1
1269     =item $oldtext = $term->selection ([$newtext])
1270    
1271     Return the current selection text and optionally replace it by C<$newtext>.
1272    
1273 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1274    
1275     Create a simple multi-line overlay box. See the next method for details.
1276    
1277     =cut
1278    
1279     sub overlay_simple {
1280     my ($self, $x, $y, $text) = @_;
1281    
1282     my @lines = split /\n/, $text;
1283    
1284     my $w = List::Util::max map $self->strwidth ($_), @lines;
1285    
1286     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1287     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1288    
1289     $overlay
1290     }
1291 root 1.1
1292 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1293 root 1.1
1294     Create a new (empty) overlay at the given position with the given
1295 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1296     (default: C<OVERLAY_RSTYLE>).
1297 root 1.1
1298 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1299     around the box.
1300 root 1.1
1301 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1302     right/bottom side, respectively.
1303 root 1.1
1304 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1305     as long as the perl object is referenced.
1306 root 1.1
1307 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1308    
1309     =over 4
1310 root 1.1
1311 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
1312 root 1.1
1313 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1314     text in rxvt-unicode's special encoding and an array of rendition values
1315     at a specific position inside the overlay.
1316 root 1.1
1317 root 1.22 =item $overlay->hide
1318    
1319     If visible, hide the overlay, but do not destroy it.
1320    
1321     =item $overlay->show
1322    
1323     If hidden, display the overlay again.
1324    
1325     =back
1326    
1327 root 1.45 =item $popup = $term->popup ($event)
1328    
1329     Creates a new C<urxvt::popup> object that implements a popup menu. The
1330     C<$event> I<must> be the event causing the menu to pop up (a button event,
1331     currently).
1332    
1333     =cut
1334    
1335 root 1.55 sub popup {
1336 root 1.45 my ($self, $event) = @_;
1337    
1338     $self->grab ($event->{time}, 1)
1339     or return;
1340    
1341     my $popup = bless {
1342     term => $self,
1343     event => $event,
1344     }, urxvt::popup::;
1345    
1346     Scalar::Util::weaken $popup->{term};
1347    
1348     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1349     Scalar::Util::weaken $self->{_destroy}{$popup};
1350    
1351     $popup
1352     }
1353    
1354 root 1.40 =item $cellwidth = $term->strwidth ($string)
1355 root 1.6
1356     Returns the number of screen-cells this string would need. Correctly
1357     accounts for wide and combining characters.
1358    
1359 root 1.40 =item $octets = $term->locale_encode ($string)
1360 root 1.6
1361     Convert the given text string into the corresponding locale encoding.
1362    
1363 root 1.40 =item $string = $term->locale_decode ($octets)
1364 root 1.6
1365     Convert the given locale-encoded octets into a perl string.
1366    
1367 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1368    
1369     XORs the rendition values in the given span with the provided value
1370 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1371     refresh hooks to provide effects similar to the selection.
1372 root 1.70
1373     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1374    
1375     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1376     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1377     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1378 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1379 root 1.70
1380 root 1.69 =item $term->scr_bell
1381    
1382     Ring the bell!
1383    
1384 root 1.33 =item $term->scr_add_lines ($string)
1385    
1386     Write the given text string to the screen, as if output by the application
1387     running inside the terminal. It may not contain command sequences (escape
1388     codes), but is free to use line feeds, carriage returns and tabs. The
1389     string is a normal text string, not in locale-dependent encoding.
1390    
1391     Normally its not a good idea to use this function, as programs might be
1392     confused by changes in cursor position or scrolling. Its useful inside a
1393     C<on_add_lines> hook, though.
1394    
1395 root 1.121 =item $term->scr_change_screen ($screen)
1396    
1397     Switch to given screen - 0 primary, 1 secondary.
1398    
1399 root 1.36 =item $term->cmd_parse ($octets)
1400    
1401     Similar to C<scr_add_lines>, but the argument must be in the
1402     locale-specific encoding of the terminal and can contain command sequences
1403     (escape codes) that will be interpreted.
1404    
1405 root 1.6 =item $term->tt_write ($octets)
1406    
1407     Write the octets given in C<$data> to the tty (i.e. as program input). To
1408 root 1.12 pass characters instead of octets, you should convert your strings first
1409     to the locale-specific encoding using C<< $term->locale_encode >>.
1410    
1411 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1412    
1413     Replaces the event mask of the pty watcher by the given event mask. Can
1414     be used to suppress input and output handling to the pty/tty. See the
1415     description of C<< urxvt::timer->events >>. Make sure to always restore
1416     the previous value.
1417    
1418 root 1.125 =item $fd = $term->pty_fd
1419    
1420     Returns the master file descriptor for the pty in use, or C<-1> if no pty
1421     is used.
1422    
1423 root 1.40 =item $windowid = $term->parent
1424    
1425     Return the window id of the toplevel window.
1426    
1427     =item $windowid = $term->vt
1428    
1429     Return the window id of the terminal window.
1430    
1431 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1432    
1433     Adds the specified events to the vt event mask. Useful e.g. when you want
1434     to receive pointer events all the times:
1435    
1436     $term->vt_emask_add (urxvt::PointerMotionMask);
1437    
1438 root 1.132 =item $term->focus_in
1439    
1440     =item $term->focus_out
1441    
1442     =item $term->key_press ($state, $keycode[, $time])
1443    
1444     =item $term->key_release ($state, $keycode[, $time])
1445    
1446     Deliver various fake events to to terminal.
1447    
1448 root 1.32 =item $window_width = $term->width
1449    
1450     =item $window_height = $term->height
1451    
1452     =item $font_width = $term->fwidth
1453    
1454     =item $font_height = $term->fheight
1455    
1456     =item $font_ascent = $term->fbase
1457    
1458     =item $terminal_rows = $term->nrow
1459    
1460     =item $terminal_columns = $term->ncol
1461    
1462     =item $has_focus = $term->focus
1463    
1464     =item $is_mapped = $term->mapped
1465 root 1.13
1466 root 1.32 =item $max_scrollback = $term->saveLines
1467 root 1.13
1468 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1469 root 1.13
1470 root 1.94 =item $topmost_scrollback_row = $term->top_row
1471 root 1.12
1472 root 1.32 Return various integers describing terminal characteristics.
1473 root 1.12
1474 root 1.77 =item $x_display = $term->display_id
1475    
1476     Return the DISPLAY used by rxvt-unicode.
1477    
1478 root 1.66 =item $lc_ctype = $term->locale
1479    
1480     Returns the LC_CTYPE category string used by this rxvt-unicode.
1481    
1482 root 1.77 =item $env = $term->env
1483    
1484     Returns a copy of the environment in effect for the terminal as a hashref
1485     similar to C<\%ENV>.
1486    
1487 root 1.136 =item @envv = $term->envv
1488    
1489     Returns the environment as array of strings of the form C<VAR=VALUE>.
1490    
1491     =item @argv = $term->argv
1492    
1493     Return the argument vector as this terminal, similar to @ARGV, but
1494     includes the program name as first element.
1495    
1496 root 1.77 =cut
1497 root 1.66
1498 root 1.77 sub env {
1499 root 1.136 +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), $_[0]->envv }
1500 root 1.77 }
1501 root 1.66
1502 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1503    
1504     =item $modifiermask = $term->ModMetaMask
1505    
1506     =item $modifiermask = $term->ModNumLockMask
1507    
1508     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1509     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1510    
1511 root 1.121 =item $screen = $term->current_screen
1512    
1513     Returns the currently displayed screen (0 primary, 1 secondary).
1514    
1515 root 1.122 =item $cursor_is_hidden = $term->hidden_cursor
1516    
1517     Returns wether the cursor is currently hidden or not.
1518    
1519 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1520    
1521 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1522     C<0>, which displays the normal terminal contents. Lower values scroll
1523 root 1.12 this many lines into the scrollback buffer.
1524    
1525 root 1.14 =item $term->want_refresh
1526    
1527     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1528     compare the on-screen display with its stored representation. If they
1529     differ, it redraws the differences.
1530    
1531     Used after changing terminal contents to display them.
1532    
1533 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1534 root 1.12
1535     Returns the text of the entire row with number C<$row_number>. Row C<0>
1536     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1537     terminal line. The scrollback buffer starts at line C<-1> and extends to
1538 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1539     is requested.
1540 root 1.12
1541 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1542     line, starting at column C<$start_col> (default C<0>), which is useful
1543 root 1.18 to replace only parts of a line. The font index in the rendition will
1544 root 1.13 automatically be updated.
1545 root 1.12
1546 root 1.124 C<$text> is in a special encoding: tabs and wide characters that use more
1547     than one cell when displayed are padded with C<$urxvt::NOCHAR> (chr 65535)
1548 root 1.121 characters. Characters with combining characters and other characters that
1549     do not fit into the normal tetx encoding will be replaced with characters
1550     in the private use area.
1551 root 1.12
1552     You have to obey this encoding when changing text. The advantage is
1553     that C<substr> and similar functions work on screen cells and not on
1554     characters.
1555    
1556     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1557     can be used to convert normal strings into this encoding and vice versa.
1558    
1559 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1560    
1561     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1562     bitsets. Rendition bitsets contain information about colour, font, font
1563     styles and similar information. See also C<< $term->ROW_t >>.
1564    
1565     When setting rendition, the font mask will be ignored.
1566 root 1.12
1567 root 1.18 See the section on RENDITION, above.
1568 root 1.13
1569     =item $length = $term->ROW_l ($row_number[, $new_length])
1570    
1571 root 1.24 Returns the number of screen cells that are in use ("the line
1572     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1573     line is joined with the following one.
1574    
1575     =item $bool = $term->is_longer ($row_number)
1576    
1577     Returns true if the row is part of a multiple-row logical "line" (i.e.
1578     joined with the following row), which means all characters are in use
1579     and it is continued on the next row (and possibly a continuation of the
1580     previous row(s)).
1581    
1582     =item $line = $term->line ($row_number)
1583    
1584     Create and return a new C<urxvt::line> object that stores information
1585     about the logical line that row C<$row_number> is part of. It supports the
1586     following methods:
1587 root 1.12
1588 root 1.24 =over 4
1589    
1590 root 1.35 =item $text = $line->t ([$new_text])
1591 root 1.24
1592 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1593 root 1.24
1594 root 1.35 =item $rend = $line->r ([$new_rend])
1595 root 1.24
1596 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1597 root 1.24
1598     =item $length = $line->l
1599    
1600     Returns the length of the line in cells, similar to C<ROW_l>.
1601    
1602     =item $rownum = $line->beg
1603    
1604     =item $rownum = $line->end
1605    
1606     Return the row number of the first/last row of the line, respectively.
1607    
1608     =item $offset = $line->offset_of ($row, $col)
1609    
1610     Returns the character offset of the given row|col pair within the logical
1611 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1612     offsets outside the string.
1613 root 1.24
1614     =item ($row, $col) = $line->coord_of ($offset)
1615    
1616     Translates a string offset into terminal coordinates again.
1617    
1618     =back
1619    
1620     =cut
1621    
1622 root 1.55 sub line {
1623 root 1.24 my ($self, $row) = @_;
1624    
1625     my $maxrow = $self->nrow - 1;
1626    
1627     my ($beg, $end) = ($row, $row);
1628    
1629     --$beg while $self->ROW_is_longer ($beg - 1);
1630     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1631    
1632     bless {
1633     term => $self,
1634     beg => $beg,
1635     end => $end,
1636 root 1.34 ncol => $self->ncol,
1637 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1638     }, urxvt::line::
1639     }
1640    
1641     sub urxvt::line::t {
1642     my ($self) = @_;
1643    
1644 root 1.34 if (@_ > 1)
1645     {
1646     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1647     for $self->{beg} .. $self->{end};
1648     }
1649    
1650     defined wantarray &&
1651     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1652     0, $self->{len}
1653 root 1.24 }
1654    
1655     sub urxvt::line::r {
1656     my ($self) = @_;
1657    
1658 root 1.34 if (@_ > 1)
1659     {
1660     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1661     for $self->{beg} .. $self->{end};
1662     }
1663    
1664     if (defined wantarray) {
1665     my $rend = [
1666     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1667     ];
1668     $#$rend = $self->{len} - 1;
1669     return $rend;
1670     }
1671    
1672     ()
1673 root 1.24 }
1674    
1675     sub urxvt::line::beg { $_[0]{beg} }
1676     sub urxvt::line::end { $_[0]{end} }
1677     sub urxvt::line::l { $_[0]{len} }
1678    
1679     sub urxvt::line::offset_of {
1680     my ($self, $row, $col) = @_;
1681    
1682 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1683 root 1.24 }
1684    
1685     sub urxvt::line::coord_of {
1686     my ($self, $offset) = @_;
1687    
1688     use integer;
1689    
1690     (
1691 root 1.34 $offset / $self->{ncol} + $self->{beg},
1692     $offset % $self->{ncol}
1693 root 1.24 )
1694     }
1695    
1696 root 1.12 =item $text = $term->special_encode $string
1697    
1698     Converts a perl string into the special encoding used by rxvt-unicode,
1699     where one character corresponds to one screen cell. See
1700     C<< $term->ROW_t >> for details.
1701    
1702     =item $string = $term->special_decode $text
1703    
1704     Converts rxvt-unicodes text reprsentation into a perl string. See
1705     C<< $term->ROW_t >> for details.
1706 root 1.6
1707 root 1.131 =item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
1708    
1709     =item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])
1710 root 1.61
1711 root 1.131 Register/unregister a synchronous button grab. See the XGrabButton
1712     manpage.
1713 root 1.61
1714     =item $success = $term->grab ($eventtime[, $sync])
1715    
1716     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1717     synchronous (C<$sync> is true). Also remembers the grab timestampe.
1718    
1719     =item $term->allow_events_async
1720    
1721     Calls XAllowEvents with AsyncBoth for the most recent grab.
1722    
1723     =item $term->allow_events_sync
1724    
1725     Calls XAllowEvents with SyncBoth for the most recent grab.
1726    
1727     =item $term->allow_events_replay
1728    
1729     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1730     recent grab.
1731    
1732     =item $term->ungrab
1733    
1734     Calls XUngrab for the most recent grab. Is called automatically on
1735     evaluation errors, as it is better to lose the grab in the error case as
1736     the session.
1737    
1738 root 1.119 =item $atom = $term->XInternAtom ($atom_name[, $only_if_exists])
1739    
1740     =item $atom_name = $term->XGetAtomName ($atom)
1741    
1742     =item @atoms = $term->XListProperties ($window)
1743    
1744     =item ($type,$format,$octets) = $term->XGetWindowProperty ($window, $property)
1745    
1746     =item $term->XChangeWindowProperty ($window, $property, $type, $format, $octets)
1747    
1748     =item $term->XDeleteProperty ($window, $property)
1749    
1750     =item $window = $term->DefaultRootWindow
1751    
1752     =item $term->XReparentWindow ($window, $parent, [$x, $y])
1753    
1754     =item $term->XMapWindow ($window)
1755    
1756     =item $term->XUnmapWindow ($window)
1757    
1758     =item $term->XMoveResizeWindow ($window, $x, $y, $width, $height)
1759    
1760     =item ($x, $y, $child_window) = $term->XTranslateCoordinates ($src, $dst, $x, $y)
1761    
1762     =item $term->XChangeInput ($window, $add_events[, $del_events])
1763    
1764     Various X or X-related functions. The C<$term> object only serves as
1765     the source of the display, otherwise those functions map more-or-less
1766     directory onto the X functions of the same name.
1767    
1768 root 1.1 =back
1769    
1770 root 1.55 =cut
1771    
1772     package urxvt::popup;
1773    
1774 root 1.45 =head2 The C<urxvt::popup> Class
1775    
1776     =over 4
1777    
1778     =cut
1779    
1780     sub add_item {
1781     my ($self, $item) = @_;
1782    
1783 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1784     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1785     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1786    
1787     $item->{render} ||= sub { $_[0]{text} };
1788    
1789 root 1.45 push @{ $self->{item} }, $item;
1790     }
1791    
1792 root 1.76 =item $popup->add_title ($title)
1793    
1794     Adds a non-clickable title to the popup.
1795    
1796     =cut
1797    
1798     sub add_title {
1799     my ($self, $title) = @_;
1800    
1801     $self->add_item ({
1802     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1803     text => $title,
1804     activate => sub { },
1805     });
1806     }
1807    
1808     =item $popup->add_separator ([$sepchr])
1809    
1810     Creates a separator, optionally using the character given as C<$sepchr>.
1811    
1812     =cut
1813    
1814 root 1.53 sub add_separator {
1815     my ($self, $sep) = @_;
1816    
1817 root 1.67 $sep ||= "=";
1818 root 1.53
1819     $self->add_item ({
1820     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1821     text => "",
1822 root 1.65 render => sub { $sep x $self->{term}->ncol },
1823 root 1.53 activate => sub { },
1824     });
1825     }
1826    
1827 root 1.76 =item $popup->add_button ($text, $cb)
1828    
1829     Adds a clickable button to the popup. C<$cb> is called whenever it is
1830     selected.
1831 root 1.53
1832 root 1.76 =cut
1833 root 1.53
1834 root 1.45 sub add_button {
1835     my ($self, $text, $cb) = @_;
1836    
1837 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1838 root 1.48 }
1839    
1840 root 1.133 =item $popup->add_toggle ($text, $initial_value, $cb)
1841 root 1.76
1842 root 1.133 Adds a toggle/checkbox item to the popup. The callback gets called
1843     whenever it gets toggled, with a boolean indicating its new value as its
1844     first argument.
1845 root 1.76
1846     =cut
1847    
1848 root 1.48 sub add_toggle {
1849 root 1.133 my ($self, $text, $value, $cb) = @_;
1850 root 1.48
1851 root 1.49 my $item; $item = {
1852     type => "button",
1853     text => " $text",
1854     value => $value,
1855 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1856 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
1857 root 1.49 };
1858    
1859     $self->add_item ($item);
1860 root 1.45 }
1861    
1862 root 1.76 =item $popup->show
1863    
1864     Displays the popup (which is initially hidden).
1865    
1866     =cut
1867    
1868 root 1.45 sub show {
1869     my ($self) = @_;
1870    
1871     local $urxvt::popup::self = $self;
1872    
1873 root 1.77 my $env = $self->{term}->env;
1874     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
1875     delete $env->{LC_ALL};
1876     $env->{LC_CTYPE} = $self->{term}->locale;
1877    
1878 root 1.103 urxvt::term->new ($env, "popup",
1879 root 1.105 "--perl-lib" => "", "--perl-ext-common" => "",
1880 root 1.106 "-pty-fd" => -1, "-sl" => 0,
1881     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1882 root 1.77 "--transient-for" => $self->{term}->parent,
1883     "-display" => $self->{term}->display_id,
1884     "-pe" => "urxvt-popup")
1885 root 1.45 or die "unable to create popup window\n";
1886     }
1887    
1888     sub DESTROY {
1889     my ($self) = @_;
1890    
1891 root 1.58 delete $self->{term}{_destroy}{$self};
1892 root 1.45 $self->{term}->ungrab;
1893     }
1894    
1895 root 1.78 =back
1896    
1897 root 1.113 =cut
1898    
1899     package urxvt::watcher;
1900    
1901     @urxvt::timer::ISA = __PACKAGE__;
1902     @urxvt::iow::ISA = __PACKAGE__;
1903     @urxvt::pw::ISA = __PACKAGE__;
1904     @urxvt::iw::ISA = __PACKAGE__;
1905    
1906 root 1.1 =head2 The C<urxvt::timer> Class
1907    
1908     This class implements timer watchers/events. Time is represented as a
1909     fractional number of seconds since the epoch. Example:
1910    
1911 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1912 root 1.1 $term->{timer} = urxvt::timer
1913     ->new
1914 root 1.20 ->interval (1)
1915 root 1.1 ->cb (sub {
1916 root 1.20 $term->{overlay}->set (0, 0,
1917     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1918     });
1919 root 1.1
1920     =over 4
1921    
1922     =item $timer = new urxvt::timer
1923    
1924 root 1.20 Create a new timer object in started state. It is scheduled to fire
1925     immediately.
1926 root 1.1
1927     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1928    
1929     Set the callback to be called when the timer triggers.
1930    
1931     =item $tstamp = $timer->at
1932    
1933     Return the time this watcher will fire next.
1934    
1935     =item $timer = $timer->set ($tstamp)
1936    
1937     Set the time the event is generated to $tstamp.
1938    
1939 root 1.20 =item $timer = $timer->interval ($interval)
1940    
1941     Normally (and when C<$interval> is C<0>), the timer will automatically
1942     stop after it has fired once. If C<$interval> is non-zero, then the timer
1943     is automatically rescheduled at the given intervals.
1944    
1945 root 1.1 =item $timer = $timer->start
1946    
1947     Start the timer.
1948    
1949     =item $timer = $timer->start ($tstamp)
1950    
1951     Set the event trigger time to C<$tstamp> and start the timer.
1952    
1953 root 1.103 =item $timer = $timer->after ($delay)
1954    
1955     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
1956    
1957 root 1.1 =item $timer = $timer->stop
1958    
1959     Stop the timer.
1960    
1961     =back
1962    
1963     =head2 The C<urxvt::iow> Class
1964    
1965     This class implements io watchers/events. Example:
1966    
1967     $term->{socket} = ...
1968     $term->{iow} = urxvt::iow
1969     ->new
1970     ->fd (fileno $term->{socket})
1971 root 1.69 ->events (urxvt::EVENT_READ)
1972 root 1.1 ->start
1973     ->cb (sub {
1974     my ($iow, $revents) = @_;
1975     # $revents must be 1 here, no need to check
1976     sysread $term->{socket}, my $buf, 8192
1977     or end-of-file;
1978     });
1979    
1980    
1981     =over 4
1982    
1983     =item $iow = new urxvt::iow
1984    
1985     Create a new io watcher object in stopped state.
1986    
1987     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1988    
1989     Set the callback to be called when io events are triggered. C<$reventmask>
1990     is a bitset as described in the C<events> method.
1991    
1992     =item $iow = $iow->fd ($fd)
1993    
1994     Set the filedescriptor (not handle) to watch.
1995    
1996     =item $iow = $iow->events ($eventmask)
1997    
1998 root 1.69 Set the event mask to watch. The only allowed values are
1999     C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
2000     together, or C<urxvt::EVENT_NONE>.
2001 root 1.1
2002     =item $iow = $iow->start
2003    
2004     Start watching for requested events on the given handle.
2005    
2006     =item $iow = $iow->stop
2007    
2008     Stop watching for events on the given filehandle.
2009    
2010     =back
2011    
2012 root 1.114 =head2 The C<urxvt::iw> Class
2013    
2014     This class implements idle watchers, that get called automatically when
2015     the process is idle. They should return as fast as possible, after doing
2016     some useful work.
2017    
2018     =over 4
2019    
2020     =item $iw = new urxvt::iw
2021    
2022     Create a new idle watcher object in stopped state.
2023    
2024     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
2025    
2026     Set the callback to be called when the watcher triggers.
2027    
2028     =item $timer = $timer->start
2029    
2030     Start the watcher.
2031    
2032     =item $timer = $timer->stop
2033    
2034     Stop the watcher.
2035    
2036     =back
2037    
2038     =head2 The C<urxvt::pw> Class
2039    
2040     This class implements process watchers. They create an event whenever a
2041     process exits, after which they stop automatically.
2042    
2043     my $pid = fork;
2044     ...
2045     $term->{pw} = urxvt::pw
2046     ->new
2047     ->start ($pid)
2048     ->cb (sub {
2049     my ($pw, $exit_status) = @_;
2050     ...
2051     });
2052    
2053     =over 4
2054    
2055     =item $pw = new urxvt::pw
2056    
2057     Create a new process watcher in stopped state.
2058    
2059     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
2060    
2061     Set the callback to be called when the timer triggers.
2062    
2063     =item $pw = $timer->start ($pid)
2064    
2065     Tells the wqtcher to start watching for process C<$pid>.
2066    
2067     =item $pw = $pw->stop
2068    
2069     Stop the watcher.
2070    
2071     =back
2072    
2073 root 1.4 =head1 ENVIRONMENT
2074    
2075     =head2 URXVT_PERL_VERBOSITY
2076    
2077     This variable controls the verbosity level of the perl extension. Higher
2078     numbers indicate more verbose output.
2079    
2080     =over 4
2081    
2082 root 1.58 =item == 0 - fatal messages
2083 root 1.4
2084 root 1.58 =item >= 3 - script loading and management
2085 root 1.4
2086 root 1.85 =item >=10 - all called hooks
2087    
2088     =item >=11 - hook reutrn values
2089 root 1.4
2090     =back
2091    
2092 root 1.1 =head1 AUTHOR
2093    
2094     Marc Lehmann <pcg@goof.com>
2095     http://software.schmorp.de/pkg/rxvt-unicode
2096    
2097     =cut
2098    
2099     1