ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.133
Committed: Mon Feb 6 06:14:08 2006 UTC (18 years, 3 months ago) by root
Branch: MAIN
CVS Tags: rel-7_6
Changes since 1.132: +26 -9 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     A support package that tries to make editing with readline easier. At the
159     moment, it reacts to clicking with the left mouse button by trying to
160     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.28 =item on_osc_seq $term, $string
499    
500 root 1.29 Called whenever the B<ESC ] 777 ; string ST> command sequence (OSC =
501     operating system command) is processed. Cursor position and other state
502     information is up-to-date when this happens. For interoperability, the
503     string should start with the extension name and a colon, to distinguish
504     it from commands for other extensions, and this might be enforced in the
505     future.
506    
507     Be careful not ever to trust (in a security sense) the data you receive,
508     as its source can not easily be controleld (e-mail content, messages from
509     other users on the same system etc.).
510 root 1.28
511 root 1.33 =item on_add_lines $term, $string
512    
513     Called whenever text is about to be output, with the text as argument. You
514     can filter/change and output the text yourself by returning a true value
515     and calling C<< $term->scr_add_lines >> yourself. Please note that this
516     might be very slow, however, as your hook is called for B<all> text being
517     output.
518    
519 root 1.72 =item on_tt_write $term, $octets
520    
521     Called whenever some data is written to the tty/pty and can be used to
522     suppress or filter tty input.
523    
524 root 1.35 =item on_line_update $term, $row
525    
526     Called whenever a line was updated or changed. Can be used to filter
527     screen output (e.g. underline urls or other useless stuff). Only lines
528     that are being shown will be filtered, and, due to performance reasons,
529     not always immediately.
530    
531     The row number is always the topmost row of the line if the line spans
532     multiple rows.
533    
534     Please note that, if you change the line, then the hook might get called
535     later with the already-modified line (e.g. if unrelated parts change), so
536     you cannot just toggle rendition bits, but only set them.
537    
538 root 1.1 =item on_refresh_begin $term
539    
540     Called just before the screen gets redrawn. Can be used for overlay
541     or similar effects by modify terminal contents in refresh_begin, and
542     restoring them in refresh_end. The built-in overlay and selection display
543     code is run after this hook, and takes precedence.
544    
545     =item on_refresh_end $term
546    
547     Called just after the screen gets redrawn. See C<on_refresh_begin>.
548    
549 root 1.130 =item on_user_command $term, $string
550 root 1.11
551 root 1.130 Called whenever the a user-configured event is being activated (e.g. via
552     a C<perl:string> action bound to a key, see description of the B<keysym>
553 root 1.11 resource in the @@RXVT_NAME@@(1) manpage).
554    
555 root 1.130 The event is simply the action string. This interface is assumed to change
556     slightly in the future.
557    
558 root 1.92 =item on_x_event $term, $event
559    
560     Called on every X event received on the vt window (and possibly other
561     windows). Should only be used as a last resort. Most event structure
562     members are not passed.
563    
564 root 1.45 =item on_focus_in $term
565    
566     Called whenever the window gets the keyboard focus, before rxvt-unicode
567     does focus in processing.
568    
569     =item on_focus_out $term
570    
571     Called wheneever the window loses keyboard focus, before rxvt-unicode does
572     focus out processing.
573    
574 root 1.102 =item on_configure_notify $term, $event
575    
576 root 1.118 =item on_property_notify $term, $event
577    
578 root 1.69 =item on_key_press $term, $event, $keysym, $octets
579 root 1.37
580 root 1.69 =item on_key_release $term, $event, $keysym
581 root 1.37
582     =item on_button_press $term, $event
583    
584     =item on_button_release $term, $event
585    
586     =item on_motion_notify $term, $event
587    
588 root 1.45 =item on_map_notify $term, $event
589    
590     =item on_unmap_notify $term, $event
591    
592 root 1.39 Called whenever the corresponding X event is received for the terminal If
593     the hook returns true, then the even will be ignored by rxvt-unicode.
594    
595     The event is a hash with most values as named by Xlib (see the XEvent
596 root 1.120 manpage), with the additional members C<row> and C<col>, which are the
597     (real, not screen-based) row and column under the mouse cursor.
598 root 1.38
599     C<on_key_press> additionally receives the string rxvt-unicode would
600     output, if any, in locale-specific encoding.
601 root 1.37
602     subwindow.
603    
604 root 1.114 =item on_client_message $term, $event
605    
606     =item on_wm_protocols $term, $event
607    
608     =item on_wm_delete_window $term, $event
609    
610     Called when various types of ClientMessage events are received (all with
611     format=32, WM_PROTOCOLS or WM_PROTOCOLS:WM_DELETE_WINDOW).
612    
613 root 1.1 =back
614    
615 root 1.77 =cut
616    
617     package urxvt;
618    
619     use utf8;
620     use strict;
621     use Carp ();
622     use Scalar::Util ();
623     use List::Util ();
624    
625     our $VERSION = 1;
626     our $TERM;
627 root 1.113 our @TERM_INIT;
628     our @TERM_EXT;
629 root 1.77 our @HOOKNAME;
630     our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
631     our %OPTION;
632    
633     our $LIBDIR;
634     our $RESNAME;
635     our $RESCLASS;
636     our $RXVTNAME;
637    
638 root 1.124 our $NOCHAR = chr 0xffff;
639 root 1.121
640 root 1.23 =head2 Variables in the C<urxvt> Package
641    
642     =over 4
643    
644 root 1.75 =item $urxvt::LIBDIR
645    
646     The rxvt-unicode library directory, where, among other things, the perl
647     modules and scripts are stored.
648    
649     =item $urxvt::RESCLASS, $urxvt::RESCLASS
650    
651     The resource class and name rxvt-unicode uses to look up X resources.
652    
653     =item $urxvt::RXVTNAME
654    
655     The basename of the installed binaries, usually C<urxvt>.
656    
657 root 1.23 =item $urxvt::TERM
658    
659 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
660     object, whenever a callback/hook is executing.
661 root 1.23
662 root 1.113 =item @urxvt::TERM_INIT
663    
664     All coderefs in this array will be called as methods of the next newly
665     created C<urxvt::term> object (during the C<on_init> phase). The array
666     gets cleared before the codereferences that were in it are being executed,
667     so coderefs can push themselves onto it again if they so desire.
668    
669     This complements to the perl-eval commandline option, but gets executed
670     first.
671    
672     =item @urxvt::TERM_EXT
673    
674     Works similar to C<@TERM_INIT>, but contains perl package/class names, which
675     get registered as normal extensions after calling the hooks in C<@TERM_INIT>
676     but before other extensions. Gets cleared just like C<@TERM_INIT>.
677    
678 root 1.23 =back
679    
680 root 1.1 =head2 Functions in the C<urxvt> Package
681    
682     =over 4
683    
684     =item urxvt::fatal $errormessage
685    
686     Fatally aborts execution with the given error message. Avoid at all
687     costs! The only time this is acceptable is when the terminal process
688     starts up.
689    
690     =item urxvt::warn $string
691    
692 root 1.6 Calls C<rxvt_warn> with the given string which should not include a
693 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
694     that calls this function.
695    
696     Using this function has the advantage that its output ends up in the
697     correct place, e.g. on stderr of the connecting urxvtc client.
698    
699 root 1.77 Messages have a size limit of 1023 bytes currently.
700    
701 root 1.131 =item @terms = urxvt::termlist
702    
703     Returns all urxvt::term objects that exist in this process, regardless of
704     wether they are started, being destroyed etc., so be careful. Only term
705     objects that have perl extensions attached will be returned (because there
706     is no urxvt::term objet associated with others).
707    
708 root 1.1 =item $time = urxvt::NOW
709    
710     Returns the "current time" (as per the event loop).
711    
712 root 1.47 =item urxvt::CurrentTime
713    
714     =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
715     Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
716     Button4Mask, Button5Mask, AnyModifier
717    
718 root 1.92 =item urxvt::NoEventMask, KeyPressMask, KeyReleaseMask,
719     ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask,
720     PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask,
721     Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask,
722     KeymapStateMask, ExposureMask, VisibilityChangeMask, StructureNotifyMask,
723     ResizeRedirectMask, SubstructureNotifyMask, SubstructureRedirectMask,
724     FocusChangeMask, PropertyChangeMask, ColormapChangeMask, OwnerGrabButtonMask
725    
726     =item urxvt::KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify,
727     EnterNotify, LeaveNotify, FocusIn, FocusOut, KeymapNotify, Expose,
728     GraphicsExpose, NoExpose, VisibilityNotify, CreateNotify, DestroyNotify,
729     UnmapNotify, MapNotify, MapRequest, ReparentNotify, ConfigureNotify,
730     ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify,
731     CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest,
732     SelectionNotify, ColormapNotify, ClientMessage, MappingNotify
733    
734 root 1.55 Various constants for use in X calls and event processing.
735 root 1.47
736 root 1.21 =back
737    
738 root 1.18 =head2 RENDITION
739    
740     Rendition bitsets contain information about colour, font, font styles and
741     similar information for each screen cell.
742    
743     The following "macros" deal with changes in rendition sets. You should
744     never just create a bitset, you should always modify an existing one,
745     as they contain important information required for correct operation of
746     rxvt-unicode.
747    
748     =over 4
749    
750     =item $rend = urxvt::DEFAULT_RSTYLE
751    
752     Returns the default rendition, as used when the terminal is starting up or
753     being reset. Useful as a base to start when creating renditions.
754    
755     =item $rend = urxvt::OVERLAY_RSTYLE
756    
757     Return the rendition mask used for overlays by default.
758    
759     =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
760    
761     Return the bit that enabled bold, italic, blink, reverse-video and
762 root 1.19 underline, respectively. To enable such a style, just logically OR it into
763     the bitset.
764 root 1.18
765     =item $foreground = urxvt::GET_BASEFG $rend
766    
767     =item $background = urxvt::GET_BASEBG $rend
768    
769     Return the foreground/background colour index, respectively.
770    
771 root 1.75 =item $rend = urxvt::SET_FGCOLOR $rend, $new_colour
772 root 1.18
773 root 1.75 =item $rend = urxvt::SET_BGCOLOR $rend, $new_colour
774 root 1.18
775 root 1.132 =item $rend = urxvt::SET_COLOR $rend, $new_fg, $new_bg
776    
777 root 1.18 Replace the foreground/background colour in the rendition mask with the
778     specified one.
779    
780 root 1.75 =item $value = urxvt::GET_CUSTOM $rend
781 root 1.19
782     Return the "custom" value: Every rendition has 5 bits for use by
783     extensions. They can be set and changed as you like and are initially
784     zero.
785    
786 root 1.75 =item $rend = urxvt::SET_CUSTOM $rend, $new_value
787 root 1.19
788     Change the custom value.
789    
790 root 1.18 =back
791    
792 root 1.1 =cut
793    
794     BEGIN {
795     # overwrite perl's warn
796     *CORE::GLOBAL::warn = sub {
797     my $msg = join "", @_;
798     $msg .= "\n"
799     unless $msg =~ /\n$/;
800     urxvt::warn ($msg);
801     };
802     }
803    
804 root 1.124 no warnings 'utf8';
805    
806 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
807 root 1.1
808     sub verbose {
809     my ($level, $msg) = @_;
810 root 1.8 warn "$msg\n" if $level <= $verbosity;
811 root 1.1 }
812    
813 root 1.44 my %extension_pkg;
814 root 1.1
815     # load a single script into its own package, once only
816 root 1.44 sub extension_package($) {
817 root 1.1 my ($path) = @_;
818    
819 root 1.44 $extension_pkg{$path} ||= do {
820 root 1.100 $path =~ /([^\/\\]+)$/;
821     my $pkg = $1;
822     $pkg =~ s/[^[:word:]]/_/g;
823     $pkg = "urxvt::ext::$pkg";
824 root 1.8
825 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
826 root 1.1
827     open my $fh, "<:raw", $path
828     or die "$path: $!";
829    
830 root 1.96 my $source =
831 root 1.124 "package $pkg; use strict; use utf8; no warnings 'utf8';\n"
832 root 1.69 . "#line 1 \"$path\"\n{\n"
833     . (do { local $/; <$fh> })
834     . "\n};\n1";
835 root 1.8
836 root 1.69 eval $source
837     or die "$path: $@";
838 root 1.1
839     $pkg
840 root 1.7 }
841 root 1.1 }
842    
843 root 1.31 our $retval; # return value for urxvt
844    
845 root 1.8 # called by the rxvt core
846     sub invoke {
847 root 1.23 local $TERM = shift;
848 root 1.8 my $htype = shift;
849 root 1.6
850 root 1.8 if ($htype == 0) { # INIT
851 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
852 root 1.49
853 root 1.68 my %ext_arg;
854 root 1.6
855 root 1.113 {
856     my @init = @TERM_INIT;
857     @TERM_INIT = ();
858     $_->($TERM) for @init;
859     my @pkg = @TERM_EXT;
860     @TERM_EXT = ();
861     $TERM->register_package ($_) for @pkg;
862     }
863    
864     for (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
865 root 1.50 if ($_ eq "default") {
866 root 1.123 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback readline);
867 root 1.51 } elsif (/^-(.*)$/) {
868 root 1.68 delete $ext_arg{$1};
869     } elsif (/^([^<]+)<(.*)>$/) {
870     push @{ $ext_arg{$1} }, $2;
871 root 1.49 } else {
872 root 1.68 $ext_arg{$_} ||= [];
873 root 1.50 }
874     }
875 root 1.6
876 root 1.133 for my $ext (sort keys %ext_arg) {
877 root 1.50 my @files = grep -f $_, map "$_/$ext", @dirs;
878    
879     if (@files) {
880 root 1.133 $TERM->register_package (extension_package $files[0], $ext_arg{$ext});
881 root 1.50 } else {
882     warn "perl extension '$ext' not found in perl library search path\n";
883 root 1.8 }
884     }
885 root 1.55
886     eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
887     warn $@ if $@;
888 root 1.31 }
889    
890     $retval = undef;
891 root 1.6
892 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
893     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
894     if $verbosity >= 10;
895    
896     keys %$cb;
897    
898     while (my ($pkg, $cb) = each %$cb) {
899 root 1.113 my $retval_ = eval { $cb->($TERM->{_pkg}{$pkg}, @_) };
900     $retval ||= $retval_;
901 root 1.68
902 root 1.58 if ($@) {
903     $TERM->ungrab; # better to lose the grab than the session
904     warn $@;
905     }
906 root 1.31 }
907 root 1.85
908     verbose 11, "$HOOKNAME[$htype] returning <$retval>"
909     if $verbosity >= 11;
910 root 1.31 }
911    
912     if ($htype == 1) { # DESTROY
913     # clear package objects
914     %$_ = () for values %{ $TERM->{_pkg} };
915 root 1.25
916 root 1.31 # clear package
917     %$TERM = ();
918 root 1.7 }
919    
920 root 1.31 $retval
921 root 1.7 }
922 root 1.1
923 root 1.132 sub SET_COLOR($$$) {
924     SET_BGCOLOR (SET_FGCOLOR ($_[0], $_[1]), $_[2])
925     }
926    
927 root 1.71 # urxvt::term::extension
928 root 1.55
929 root 1.71 package urxvt::term::extension;
930 root 1.69
931     sub enable {
932     my ($self, %hook) = @_;
933     my $pkg = $self->{_pkg};
934    
935     while (my ($name, $cb) = each %hook) {
936     my $htype = $HOOKTYPE{uc $name};
937     defined $htype
938     or Carp::croak "unsupported hook type '$name'";
939    
940 root 1.92 $self->set_should_invoke ($htype, +1)
941     unless exists $self->{term}{_hook}[$htype]{$pkg};
942 root 1.69
943     $self->{term}{_hook}[$htype]{$pkg} = $cb;
944     }
945     }
946    
947     sub disable {
948     my ($self, @hook) = @_;
949     my $pkg = $self->{_pkg};
950    
951     for my $name (@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     if delete $self->{term}{_hook}[$htype]{$pkg};
958 root 1.69 }
959     }
960    
961     our $AUTOLOAD;
962    
963     sub AUTOLOAD {
964     $AUTOLOAD =~ /:([^:]+)$/
965     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
966 root 1.23
967     eval qq{
968 root 1.69 sub $AUTOLOAD {
969 root 1.24 my \$proxy = shift;
970     \$proxy->{term}->$1 (\@_)
971 root 1.23 }
972     1
973     } or die "FATAL: unable to compile method forwarder: $@";
974    
975 root 1.69 goto &$AUTOLOAD;
976 root 1.23 }
977    
978 root 1.69 sub DESTROY {
979 root 1.58 # nop
980     }
981    
982 root 1.55 # urxvt::destroy_hook
983    
984 root 1.45 sub urxvt::destroy_hook::DESTROY {
985     ${$_[0]}->();
986     }
987    
988     sub urxvt::destroy_hook(&) {
989     bless \shift, urxvt::destroy_hook::
990     }
991    
992 root 1.56 package urxvt::anyevent;
993    
994     =head2 The C<urxvt::anyevent> Class
995    
996     The sole purpose of this class is to deliver an interface to the
997     C<AnyEvent> module - any module using it will work inside urxvt without
998 root 1.75 further programming. The only exception is that you cannot wait on
999     condition variables, but non-blocking condvar use is ok. What this means
1000     is that you cannot use blocking APIs, but the non-blocking variant should
1001     work.
1002 root 1.55
1003 root 1.56 =cut
1004 root 1.55
1005     our $VERSION = 1;
1006    
1007     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
1008     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
1009    
1010     sub timer {
1011     my ($class, %arg) = @_;
1012    
1013     my $cb = $arg{cb};
1014    
1015     urxvt::timer
1016     ->new
1017     ->start (urxvt::NOW + $arg{after})
1018     ->cb (sub {
1019     $_[0]->stop; # need to cancel manually
1020     $cb->();
1021     })
1022     }
1023    
1024     sub io {
1025     my ($class, %arg) = @_;
1026    
1027     my $cb = $arg{cb};
1028    
1029     bless [$arg{fh}, urxvt::iow
1030     ->new
1031     ->fd (fileno $arg{fh})
1032     ->events (($arg{poll} =~ /r/ ? 1 : 0)
1033     | ($arg{poll} =~ /w/ ? 2 : 0))
1034     ->start
1035     ->cb (sub {
1036     $cb->(($_[1] & 1 ? 'r' : '')
1037     . ($_[1] & 2 ? 'w' : ''));
1038     })],
1039     urxvt::anyevent::
1040     }
1041    
1042     sub DESTROY {
1043     $_[0][1]->stop;
1044     }
1045    
1046     sub condvar {
1047     bless \my $flag, urxvt::anyevent::condvar::
1048     }
1049    
1050     sub urxvt::anyevent::condvar::broadcast {
1051     ${$_[0]}++;
1052     }
1053    
1054     sub urxvt::anyevent::condvar::wait {
1055     unless (${$_[0]}) {
1056 root 1.69 Carp::croak "AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API";
1057 root 1.55 }
1058     }
1059    
1060     package urxvt::term;
1061    
1062 root 1.1 =head2 The C<urxvt::term> Class
1063    
1064     =over 4
1065    
1066 root 1.68 =cut
1067    
1068     # find on_xxx subs in the package and register them
1069     # as hooks
1070     sub register_package {
1071     my ($self, $pkg, $argv) = @_;
1072    
1073 root 1.113 no strict 'refs';
1074    
1075     urxvt::verbose 6, "register package $pkg to $self";
1076    
1077     @{"$pkg\::ISA"} = urxvt::term::extension::;
1078    
1079 root 1.69 my $proxy = bless {
1080     _pkg => $pkg,
1081     argv => $argv,
1082     }, $pkg;
1083     Scalar::Util::weaken ($proxy->{term} = $self);
1084 root 1.68
1085     $self->{_pkg}{$pkg} = $proxy;
1086    
1087 root 1.69 for my $name (@HOOKNAME) {
1088     if (my $ref = $pkg->can ("on_" . lc $name)) {
1089     $proxy->enable ($name => $ref);
1090     }
1091 root 1.68 }
1092     }
1093    
1094 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
1095    
1096     Creates a new terminal, very similar as if you had started it with system
1097 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
1098     hash which defines the environment of the new terminal.
1099 root 1.77
1100     Croaks (and probably outputs an error message) if the new instance
1101     couldn't be created. Returns C<undef> if the new instance didn't
1102     initialise perl, and the terminal object otherwise. The C<init> and
1103 root 1.131 C<start> hooks will be called before this call returns, and are free to
1104     refer to global data (which is race free).
1105 root 1.77
1106     =cut
1107    
1108     sub new {
1109     my ($class, $env, @args) = @_;
1110    
1111 root 1.131 $env or Carp::croak "environment hash missing in call to urxvt::term->new";
1112     @args or Carp::croak "name argument missing in call to urxvt::term->new";
1113    
1114     _new ([ map "$_=$env->{$_}", keys %$env ], \@args);
1115 root 1.77 }
1116    
1117 root 1.36 =item $term->destroy
1118    
1119 root 1.75 Destroy the terminal object (close the window, free resources
1120     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
1121     watchers (timers, io watchers) are still active.
1122 root 1.36
1123 root 1.108 =item $term->exec_async ($cmd[, @args])
1124    
1125     Works like the combination of the C<fork>/C<exec> builtins, which executes
1126     ("starts") programs in the background. This function takes care of setting
1127     the user environment before exec'ing the command (e.g. C<PATH>) and should
1128     be preferred over explicit calls to C<exec> or C<system>.
1129    
1130     Returns the pid of the subprocess or C<undef> on error.
1131    
1132     =cut
1133    
1134     sub exec_async {
1135     my $self = shift;
1136    
1137     my $pid = fork;
1138    
1139     return $pid
1140     if !defined $pid or $pid;
1141    
1142     %ENV = %{ $self->env };
1143    
1144     exec @_;
1145     urxvt::_exit 255;
1146     }
1147    
1148 root 1.49 =item $isset = $term->option ($optval[, $set])
1149    
1150     Returns true if the option specified by C<$optval> is enabled, and
1151     optionally change it. All option values are stored by name in the hash
1152     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1153    
1154     Here is a a likely non-exhaustive list of option names, please see the
1155     source file F</src/optinc.h> to see the actual list:
1156    
1157     borderLess console cursorBlink cursorUnderline hold iconic insecure
1158     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
1159 root 1.105 override-redirect pastableTabs pointerBlank reverseVideo scrollBar
1160     scrollBar_floating scrollBar_right scrollTtyKeypress scrollTtyOutput
1161     scrollWithBuffer secondaryScreen secondaryScroll skipBuiltinGlyphs
1162     transparent tripleclickwords utmpInhibit visualBell
1163 root 1.49
1164 root 1.4 =item $value = $term->resource ($name[, $newval])
1165    
1166     Returns the current resource value associated with a given name and
1167     optionally sets a new value. Setting values is most useful in the C<init>
1168     hook. Unset resources are returned and accepted as C<undef>.
1169    
1170     The new value must be properly encoded to a suitable character encoding
1171     before passing it to this method. Similarly, the returned value may need
1172     to be converted from the used encoding to text.
1173    
1174     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1175     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1176     likely change).
1177    
1178     Please note that resource strings will currently only be freed when the
1179     terminal is destroyed, so changing options frequently will eat memory.
1180    
1181 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
1182 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1183     to see the actual list:
1184 root 1.5
1185     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
1186     borderLess color cursorBlink cursorUnderline cutchars delete_key
1187     display_name embed ext_bwidth fade font geometry hold iconName
1188     imFont imLocale inputMethod insecure int_bwidth intensityStyles
1189 root 1.105 italicFont jumpScroll lineSpace loginShell mapAlert meta8 modifier
1190     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1191     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1192     preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1193     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1194     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1195     secondaryScreen secondaryScroll selectstyle shade term_name title
1196     transient_for transparent transparent_all tripleclickwords utmpInhibit
1197     visualBell
1198 root 1.5
1199 root 1.4 =cut
1200    
1201 root 1.55 sub resource($$;$) {
1202 root 1.4 my ($self, $name) = (shift, shift);
1203     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1204 root 1.45 &urxvt::term::_resource
1205 root 1.4 }
1206    
1207 root 1.79 =item $value = $term->x_resource ($pattern)
1208    
1209     Returns the X-Resource for the given pattern, excluding the program or
1210     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1211     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1212     resource with that pattern exists.
1213    
1214     This method should only be called during the C<on_start> hook, as there is
1215     only one resource database per display, and later invocations might return
1216     the wrong resources.
1217    
1218 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
1219    
1220     Adds a keymap translation exactly as specified via a resource. See the
1221     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1222    
1223 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1224 root 1.32
1225 root 1.33 Return and optionally change the current rendition. Text that is output by
1226     the terminal application will use this style.
1227 root 1.32
1228     =item ($row, $col) = $term->screen_cur ([$row, $col])
1229    
1230     Return the current coordinates of the text cursor position and optionally
1231     set it (which is usually bad as applications don't expect that).
1232    
1233 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1234    
1235     =item ($row, $col) = $term->selection_beg ([$row, $col])
1236    
1237     =item ($row, $col) = $term->selection_end ([$row, $col])
1238    
1239     Return the current values of the selection mark, begin or end positions,
1240     and optionally set them to new values.
1241    
1242 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1243    
1244     Tries to make a selection as set by C<selection_beg> and
1245     C<selection_end>. If C<$rectangular> is true (default: false), a
1246     rectangular selection will be made. This is the prefered function to make
1247     a selection.
1248    
1249 root 1.1 =item $success = $term->selection_grab ($eventtime)
1250    
1251 root 1.86 Try to request the primary selection text from the server (for example, as
1252     set by the next method). No visual feedback will be given. This function
1253     is mostly useful from within C<on_sel_grab> hooks.
1254 root 1.1
1255     =item $oldtext = $term->selection ([$newtext])
1256    
1257     Return the current selection text and optionally replace it by C<$newtext>.
1258    
1259 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1260    
1261     Create a simple multi-line overlay box. See the next method for details.
1262    
1263     =cut
1264    
1265     sub overlay_simple {
1266     my ($self, $x, $y, $text) = @_;
1267    
1268     my @lines = split /\n/, $text;
1269    
1270     my $w = List::Util::max map $self->strwidth ($_), @lines;
1271    
1272     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1273     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1274    
1275     $overlay
1276     }
1277 root 1.1
1278 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1279 root 1.1
1280     Create a new (empty) overlay at the given position with the given
1281 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1282     (default: C<OVERLAY_RSTYLE>).
1283 root 1.1
1284 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1285     around the box.
1286 root 1.1
1287 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1288     right/bottom side, respectively.
1289 root 1.1
1290 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1291     as long as the perl object is referenced.
1292 root 1.1
1293 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1294    
1295     =over 4
1296 root 1.1
1297 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
1298 root 1.1
1299 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1300     text in rxvt-unicode's special encoding and an array of rendition values
1301     at a specific position inside the overlay.
1302 root 1.1
1303 root 1.22 =item $overlay->hide
1304    
1305     If visible, hide the overlay, but do not destroy it.
1306    
1307     =item $overlay->show
1308    
1309     If hidden, display the overlay again.
1310    
1311     =back
1312    
1313 root 1.45 =item $popup = $term->popup ($event)
1314    
1315     Creates a new C<urxvt::popup> object that implements a popup menu. The
1316     C<$event> I<must> be the event causing the menu to pop up (a button event,
1317     currently).
1318    
1319     =cut
1320    
1321 root 1.55 sub popup {
1322 root 1.45 my ($self, $event) = @_;
1323    
1324     $self->grab ($event->{time}, 1)
1325     or return;
1326    
1327     my $popup = bless {
1328     term => $self,
1329     event => $event,
1330     }, urxvt::popup::;
1331    
1332     Scalar::Util::weaken $popup->{term};
1333    
1334     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1335     Scalar::Util::weaken $self->{_destroy}{$popup};
1336    
1337     $popup
1338     }
1339    
1340 root 1.40 =item $cellwidth = $term->strwidth ($string)
1341 root 1.6
1342     Returns the number of screen-cells this string would need. Correctly
1343     accounts for wide and combining characters.
1344    
1345 root 1.40 =item $octets = $term->locale_encode ($string)
1346 root 1.6
1347     Convert the given text string into the corresponding locale encoding.
1348    
1349 root 1.40 =item $string = $term->locale_decode ($octets)
1350 root 1.6
1351     Convert the given locale-encoded octets into a perl string.
1352    
1353 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1354    
1355     XORs the rendition values in the given span with the provided value
1356 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1357     refresh hooks to provide effects similar to the selection.
1358 root 1.70
1359     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1360    
1361     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1362     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1363     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1364 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1365 root 1.70
1366 root 1.69 =item $term->scr_bell
1367    
1368     Ring the bell!
1369    
1370 root 1.33 =item $term->scr_add_lines ($string)
1371    
1372     Write the given text string to the screen, as if output by the application
1373     running inside the terminal. It may not contain command sequences (escape
1374     codes), but is free to use line feeds, carriage returns and tabs. The
1375     string is a normal text string, not in locale-dependent encoding.
1376    
1377     Normally its not a good idea to use this function, as programs might be
1378     confused by changes in cursor position or scrolling. Its useful inside a
1379     C<on_add_lines> hook, though.
1380    
1381 root 1.121 =item $term->scr_change_screen ($screen)
1382    
1383     Switch to given screen - 0 primary, 1 secondary.
1384    
1385 root 1.36 =item $term->cmd_parse ($octets)
1386    
1387     Similar to C<scr_add_lines>, but the argument must be in the
1388     locale-specific encoding of the terminal and can contain command sequences
1389     (escape codes) that will be interpreted.
1390    
1391 root 1.6 =item $term->tt_write ($octets)
1392    
1393     Write the octets given in C<$data> to the tty (i.e. as program input). To
1394 root 1.12 pass characters instead of octets, you should convert your strings first
1395     to the locale-specific encoding using C<< $term->locale_encode >>.
1396    
1397 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1398    
1399     Replaces the event mask of the pty watcher by the given event mask. Can
1400     be used to suppress input and output handling to the pty/tty. See the
1401     description of C<< urxvt::timer->events >>. Make sure to always restore
1402     the previous value.
1403    
1404 root 1.125 =item $fd = $term->pty_fd
1405    
1406     Returns the master file descriptor for the pty in use, or C<-1> if no pty
1407     is used.
1408    
1409 root 1.40 =item $windowid = $term->parent
1410    
1411     Return the window id of the toplevel window.
1412    
1413     =item $windowid = $term->vt
1414    
1415     Return the window id of the terminal window.
1416    
1417 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1418    
1419     Adds the specified events to the vt event mask. Useful e.g. when you want
1420     to receive pointer events all the times:
1421    
1422     $term->vt_emask_add (urxvt::PointerMotionMask);
1423    
1424 root 1.132 =item $term->focus_in
1425    
1426     =item $term->focus_out
1427    
1428     =item $term->key_press ($state, $keycode[, $time])
1429    
1430     =item $term->key_release ($state, $keycode[, $time])
1431    
1432     Deliver various fake events to to terminal.
1433    
1434 root 1.32 =item $window_width = $term->width
1435    
1436     =item $window_height = $term->height
1437    
1438     =item $font_width = $term->fwidth
1439    
1440     =item $font_height = $term->fheight
1441    
1442     =item $font_ascent = $term->fbase
1443    
1444     =item $terminal_rows = $term->nrow
1445    
1446     =item $terminal_columns = $term->ncol
1447    
1448     =item $has_focus = $term->focus
1449    
1450     =item $is_mapped = $term->mapped
1451 root 1.13
1452 root 1.32 =item $max_scrollback = $term->saveLines
1453 root 1.13
1454 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1455 root 1.13
1456 root 1.94 =item $topmost_scrollback_row = $term->top_row
1457 root 1.12
1458 root 1.32 Return various integers describing terminal characteristics.
1459 root 1.12
1460 root 1.77 =item $x_display = $term->display_id
1461    
1462     Return the DISPLAY used by rxvt-unicode.
1463    
1464 root 1.66 =item $lc_ctype = $term->locale
1465    
1466     Returns the LC_CTYPE category string used by this rxvt-unicode.
1467    
1468 root 1.77 =item $env = $term->env
1469    
1470     Returns a copy of the environment in effect for the terminal as a hashref
1471     similar to C<\%ENV>.
1472    
1473     =cut
1474 root 1.66
1475 root 1.77 sub env {
1476     if (my $env = $_[0]->_env) {
1477     +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), @$env }
1478     } else {
1479     +{ %ENV }
1480     }
1481     }
1482 root 1.66
1483 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1484    
1485     =item $modifiermask = $term->ModMetaMask
1486    
1487     =item $modifiermask = $term->ModNumLockMask
1488    
1489     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1490     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1491    
1492 root 1.121 =item $screen = $term->current_screen
1493    
1494     Returns the currently displayed screen (0 primary, 1 secondary).
1495    
1496 root 1.122 =item $cursor_is_hidden = $term->hidden_cursor
1497    
1498     Returns wether the cursor is currently hidden or not.
1499    
1500 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1501    
1502 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1503     C<0>, which displays the normal terminal contents. Lower values scroll
1504 root 1.12 this many lines into the scrollback buffer.
1505    
1506 root 1.14 =item $term->want_refresh
1507    
1508     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1509     compare the on-screen display with its stored representation. If they
1510     differ, it redraws the differences.
1511    
1512     Used after changing terminal contents to display them.
1513    
1514 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1515 root 1.12
1516     Returns the text of the entire row with number C<$row_number>. Row C<0>
1517     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1518     terminal line. The scrollback buffer starts at line C<-1> and extends to
1519 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1520     is requested.
1521 root 1.12
1522 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1523     line, starting at column C<$start_col> (default C<0>), which is useful
1524 root 1.18 to replace only parts of a line. The font index in the rendition will
1525 root 1.13 automatically be updated.
1526 root 1.12
1527 root 1.124 C<$text> is in a special encoding: tabs and wide characters that use more
1528     than one cell when displayed are padded with C<$urxvt::NOCHAR> (chr 65535)
1529 root 1.121 characters. Characters with combining characters and other characters that
1530     do not fit into the normal tetx encoding will be replaced with characters
1531     in the private use area.
1532 root 1.12
1533     You have to obey this encoding when changing text. The advantage is
1534     that C<substr> and similar functions work on screen cells and not on
1535     characters.
1536    
1537     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1538     can be used to convert normal strings into this encoding and vice versa.
1539    
1540 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1541    
1542     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1543     bitsets. Rendition bitsets contain information about colour, font, font
1544     styles and similar information. See also C<< $term->ROW_t >>.
1545    
1546     When setting rendition, the font mask will be ignored.
1547 root 1.12
1548 root 1.18 See the section on RENDITION, above.
1549 root 1.13
1550     =item $length = $term->ROW_l ($row_number[, $new_length])
1551    
1552 root 1.24 Returns the number of screen cells that are in use ("the line
1553     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1554     line is joined with the following one.
1555    
1556     =item $bool = $term->is_longer ($row_number)
1557    
1558     Returns true if the row is part of a multiple-row logical "line" (i.e.
1559     joined with the following row), which means all characters are in use
1560     and it is continued on the next row (and possibly a continuation of the
1561     previous row(s)).
1562    
1563     =item $line = $term->line ($row_number)
1564    
1565     Create and return a new C<urxvt::line> object that stores information
1566     about the logical line that row C<$row_number> is part of. It supports the
1567     following methods:
1568 root 1.12
1569 root 1.24 =over 4
1570    
1571 root 1.35 =item $text = $line->t ([$new_text])
1572 root 1.24
1573 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1574 root 1.24
1575 root 1.35 =item $rend = $line->r ([$new_rend])
1576 root 1.24
1577 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1578 root 1.24
1579     =item $length = $line->l
1580    
1581     Returns the length of the line in cells, similar to C<ROW_l>.
1582    
1583     =item $rownum = $line->beg
1584    
1585     =item $rownum = $line->end
1586    
1587     Return the row number of the first/last row of the line, respectively.
1588    
1589     =item $offset = $line->offset_of ($row, $col)
1590    
1591     Returns the character offset of the given row|col pair within the logical
1592 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1593     offsets outside the string.
1594 root 1.24
1595     =item ($row, $col) = $line->coord_of ($offset)
1596    
1597     Translates a string offset into terminal coordinates again.
1598    
1599     =back
1600    
1601     =cut
1602    
1603 root 1.55 sub line {
1604 root 1.24 my ($self, $row) = @_;
1605    
1606     my $maxrow = $self->nrow - 1;
1607    
1608     my ($beg, $end) = ($row, $row);
1609    
1610     --$beg while $self->ROW_is_longer ($beg - 1);
1611     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1612    
1613     bless {
1614     term => $self,
1615     beg => $beg,
1616     end => $end,
1617 root 1.34 ncol => $self->ncol,
1618 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1619     }, urxvt::line::
1620     }
1621    
1622     sub urxvt::line::t {
1623     my ($self) = @_;
1624    
1625 root 1.34 if (@_ > 1)
1626     {
1627     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1628     for $self->{beg} .. $self->{end};
1629     }
1630    
1631     defined wantarray &&
1632     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1633     0, $self->{len}
1634 root 1.24 }
1635    
1636     sub urxvt::line::r {
1637     my ($self) = @_;
1638    
1639 root 1.34 if (@_ > 1)
1640     {
1641     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1642     for $self->{beg} .. $self->{end};
1643     }
1644    
1645     if (defined wantarray) {
1646     my $rend = [
1647     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1648     ];
1649     $#$rend = $self->{len} - 1;
1650     return $rend;
1651     }
1652    
1653     ()
1654 root 1.24 }
1655    
1656     sub urxvt::line::beg { $_[0]{beg} }
1657     sub urxvt::line::end { $_[0]{end} }
1658     sub urxvt::line::l { $_[0]{len} }
1659    
1660     sub urxvt::line::offset_of {
1661     my ($self, $row, $col) = @_;
1662    
1663 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1664 root 1.24 }
1665    
1666     sub urxvt::line::coord_of {
1667     my ($self, $offset) = @_;
1668    
1669     use integer;
1670    
1671     (
1672 root 1.34 $offset / $self->{ncol} + $self->{beg},
1673     $offset % $self->{ncol}
1674 root 1.24 )
1675     }
1676    
1677 root 1.12 =item $text = $term->special_encode $string
1678    
1679     Converts a perl string into the special encoding used by rxvt-unicode,
1680     where one character corresponds to one screen cell. See
1681     C<< $term->ROW_t >> for details.
1682    
1683     =item $string = $term->special_decode $text
1684    
1685     Converts rxvt-unicodes text reprsentation into a perl string. See
1686     C<< $term->ROW_t >> for details.
1687 root 1.6
1688 root 1.131 =item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
1689    
1690     =item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])
1691 root 1.61
1692 root 1.131 Register/unregister a synchronous button grab. See the XGrabButton
1693     manpage.
1694 root 1.61
1695     =item $success = $term->grab ($eventtime[, $sync])
1696    
1697     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1698     synchronous (C<$sync> is true). Also remembers the grab timestampe.
1699    
1700     =item $term->allow_events_async
1701    
1702     Calls XAllowEvents with AsyncBoth for the most recent grab.
1703    
1704     =item $term->allow_events_sync
1705    
1706     Calls XAllowEvents with SyncBoth for the most recent grab.
1707    
1708     =item $term->allow_events_replay
1709    
1710     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1711     recent grab.
1712    
1713     =item $term->ungrab
1714    
1715     Calls XUngrab for the most recent grab. Is called automatically on
1716     evaluation errors, as it is better to lose the grab in the error case as
1717     the session.
1718    
1719 root 1.119 =item $atom = $term->XInternAtom ($atom_name[, $only_if_exists])
1720    
1721     =item $atom_name = $term->XGetAtomName ($atom)
1722    
1723     =item @atoms = $term->XListProperties ($window)
1724    
1725     =item ($type,$format,$octets) = $term->XGetWindowProperty ($window, $property)
1726    
1727     =item $term->XChangeWindowProperty ($window, $property, $type, $format, $octets)
1728    
1729     =item $term->XDeleteProperty ($window, $property)
1730    
1731     =item $window = $term->DefaultRootWindow
1732    
1733     =item $term->XReparentWindow ($window, $parent, [$x, $y])
1734    
1735     =item $term->XMapWindow ($window)
1736    
1737     =item $term->XUnmapWindow ($window)
1738    
1739     =item $term->XMoveResizeWindow ($window, $x, $y, $width, $height)
1740    
1741     =item ($x, $y, $child_window) = $term->XTranslateCoordinates ($src, $dst, $x, $y)
1742    
1743     =item $term->XChangeInput ($window, $add_events[, $del_events])
1744    
1745     Various X or X-related functions. The C<$term> object only serves as
1746     the source of the display, otherwise those functions map more-or-less
1747     directory onto the X functions of the same name.
1748    
1749 root 1.1 =back
1750    
1751 root 1.55 =cut
1752    
1753     package urxvt::popup;
1754    
1755 root 1.45 =head2 The C<urxvt::popup> Class
1756    
1757     =over 4
1758    
1759     =cut
1760    
1761     sub add_item {
1762     my ($self, $item) = @_;
1763    
1764 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1765     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1766     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1767    
1768     $item->{render} ||= sub { $_[0]{text} };
1769    
1770 root 1.45 push @{ $self->{item} }, $item;
1771     }
1772    
1773 root 1.76 =item $popup->add_title ($title)
1774    
1775     Adds a non-clickable title to the popup.
1776    
1777     =cut
1778    
1779     sub add_title {
1780     my ($self, $title) = @_;
1781    
1782     $self->add_item ({
1783     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1784     text => $title,
1785     activate => sub { },
1786     });
1787     }
1788    
1789     =item $popup->add_separator ([$sepchr])
1790    
1791     Creates a separator, optionally using the character given as C<$sepchr>.
1792    
1793     =cut
1794    
1795 root 1.53 sub add_separator {
1796     my ($self, $sep) = @_;
1797    
1798 root 1.67 $sep ||= "=";
1799 root 1.53
1800     $self->add_item ({
1801     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1802     text => "",
1803 root 1.65 render => sub { $sep x $self->{term}->ncol },
1804 root 1.53 activate => sub { },
1805     });
1806     }
1807    
1808 root 1.76 =item $popup->add_button ($text, $cb)
1809    
1810     Adds a clickable button to the popup. C<$cb> is called whenever it is
1811     selected.
1812 root 1.53
1813 root 1.76 =cut
1814 root 1.53
1815 root 1.45 sub add_button {
1816     my ($self, $text, $cb) = @_;
1817    
1818 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1819 root 1.48 }
1820    
1821 root 1.133 =item $popup->add_toggle ($text, $initial_value, $cb)
1822 root 1.76
1823 root 1.133 Adds a toggle/checkbox item to the popup. The callback gets called
1824     whenever it gets toggled, with a boolean indicating its new value as its
1825     first argument.
1826 root 1.76
1827     =cut
1828    
1829 root 1.48 sub add_toggle {
1830 root 1.133 my ($self, $text, $value, $cb) = @_;
1831 root 1.48
1832 root 1.49 my $item; $item = {
1833     type => "button",
1834     text => " $text",
1835     value => $value,
1836 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1837 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
1838 root 1.49 };
1839    
1840     $self->add_item ($item);
1841 root 1.45 }
1842    
1843 root 1.76 =item $popup->show
1844    
1845     Displays the popup (which is initially hidden).
1846    
1847     =cut
1848    
1849 root 1.45 sub show {
1850     my ($self) = @_;
1851    
1852     local $urxvt::popup::self = $self;
1853    
1854 root 1.77 my $env = $self->{term}->env;
1855     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
1856     delete $env->{LC_ALL};
1857     $env->{LC_CTYPE} = $self->{term}->locale;
1858    
1859 root 1.103 urxvt::term->new ($env, "popup",
1860 root 1.105 "--perl-lib" => "", "--perl-ext-common" => "",
1861 root 1.106 "-pty-fd" => -1, "-sl" => 0,
1862     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1863 root 1.77 "--transient-for" => $self->{term}->parent,
1864     "-display" => $self->{term}->display_id,
1865     "-pe" => "urxvt-popup")
1866 root 1.45 or die "unable to create popup window\n";
1867     }
1868    
1869     sub DESTROY {
1870     my ($self) = @_;
1871    
1872 root 1.58 delete $self->{term}{_destroy}{$self};
1873 root 1.45 $self->{term}->ungrab;
1874     }
1875    
1876 root 1.78 =back
1877    
1878 root 1.113 =cut
1879    
1880     package urxvt::watcher;
1881    
1882     @urxvt::timer::ISA = __PACKAGE__;
1883     @urxvt::iow::ISA = __PACKAGE__;
1884     @urxvt::pw::ISA = __PACKAGE__;
1885     @urxvt::iw::ISA = __PACKAGE__;
1886    
1887 root 1.1 =head2 The C<urxvt::timer> Class
1888    
1889     This class implements timer watchers/events. Time is represented as a
1890     fractional number of seconds since the epoch. Example:
1891    
1892 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1893 root 1.1 $term->{timer} = urxvt::timer
1894     ->new
1895 root 1.20 ->interval (1)
1896 root 1.1 ->cb (sub {
1897 root 1.20 $term->{overlay}->set (0, 0,
1898     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1899     });
1900 root 1.1
1901     =over 4
1902    
1903     =item $timer = new urxvt::timer
1904    
1905 root 1.20 Create a new timer object in started state. It is scheduled to fire
1906     immediately.
1907 root 1.1
1908     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1909    
1910     Set the callback to be called when the timer triggers.
1911    
1912     =item $tstamp = $timer->at
1913    
1914     Return the time this watcher will fire next.
1915    
1916     =item $timer = $timer->set ($tstamp)
1917    
1918     Set the time the event is generated to $tstamp.
1919    
1920 root 1.20 =item $timer = $timer->interval ($interval)
1921    
1922     Normally (and when C<$interval> is C<0>), the timer will automatically
1923     stop after it has fired once. If C<$interval> is non-zero, then the timer
1924     is automatically rescheduled at the given intervals.
1925    
1926 root 1.1 =item $timer = $timer->start
1927    
1928     Start the timer.
1929    
1930     =item $timer = $timer->start ($tstamp)
1931    
1932     Set the event trigger time to C<$tstamp> and start the timer.
1933    
1934 root 1.103 =item $timer = $timer->after ($delay)
1935    
1936     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
1937    
1938 root 1.1 =item $timer = $timer->stop
1939    
1940     Stop the timer.
1941    
1942     =back
1943    
1944     =head2 The C<urxvt::iow> Class
1945    
1946     This class implements io watchers/events. Example:
1947    
1948     $term->{socket} = ...
1949     $term->{iow} = urxvt::iow
1950     ->new
1951     ->fd (fileno $term->{socket})
1952 root 1.69 ->events (urxvt::EVENT_READ)
1953 root 1.1 ->start
1954     ->cb (sub {
1955     my ($iow, $revents) = @_;
1956     # $revents must be 1 here, no need to check
1957     sysread $term->{socket}, my $buf, 8192
1958     or end-of-file;
1959     });
1960    
1961    
1962     =over 4
1963    
1964     =item $iow = new urxvt::iow
1965    
1966     Create a new io watcher object in stopped state.
1967    
1968     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1969    
1970     Set the callback to be called when io events are triggered. C<$reventmask>
1971     is a bitset as described in the C<events> method.
1972    
1973     =item $iow = $iow->fd ($fd)
1974    
1975     Set the filedescriptor (not handle) to watch.
1976    
1977     =item $iow = $iow->events ($eventmask)
1978    
1979 root 1.69 Set the event mask to watch. The only allowed values are
1980     C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
1981     together, or C<urxvt::EVENT_NONE>.
1982 root 1.1
1983     =item $iow = $iow->start
1984    
1985     Start watching for requested events on the given handle.
1986    
1987     =item $iow = $iow->stop
1988    
1989     Stop watching for events on the given filehandle.
1990    
1991     =back
1992    
1993 root 1.114 =head2 The C<urxvt::iw> Class
1994    
1995     This class implements idle watchers, that get called automatically when
1996     the process is idle. They should return as fast as possible, after doing
1997     some useful work.
1998    
1999     =over 4
2000    
2001     =item $iw = new urxvt::iw
2002    
2003     Create a new idle watcher object in stopped state.
2004    
2005     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
2006    
2007     Set the callback to be called when the watcher triggers.
2008    
2009     =item $timer = $timer->start
2010    
2011     Start the watcher.
2012    
2013     =item $timer = $timer->stop
2014    
2015     Stop the watcher.
2016    
2017     =back
2018    
2019     =head2 The C<urxvt::pw> Class
2020    
2021     This class implements process watchers. They create an event whenever a
2022     process exits, after which they stop automatically.
2023    
2024     my $pid = fork;
2025     ...
2026     $term->{pw} = urxvt::pw
2027     ->new
2028     ->start ($pid)
2029     ->cb (sub {
2030     my ($pw, $exit_status) = @_;
2031     ...
2032     });
2033    
2034     =over 4
2035    
2036     =item $pw = new urxvt::pw
2037    
2038     Create a new process watcher in stopped state.
2039    
2040     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
2041    
2042     Set the callback to be called when the timer triggers.
2043    
2044     =item $pw = $timer->start ($pid)
2045    
2046     Tells the wqtcher to start watching for process C<$pid>.
2047    
2048     =item $pw = $pw->stop
2049    
2050     Stop the watcher.
2051    
2052     =back
2053    
2054 root 1.4 =head1 ENVIRONMENT
2055    
2056     =head2 URXVT_PERL_VERBOSITY
2057    
2058     This variable controls the verbosity level of the perl extension. Higher
2059     numbers indicate more verbose output.
2060    
2061     =over 4
2062    
2063 root 1.58 =item == 0 - fatal messages
2064 root 1.4
2065 root 1.58 =item >= 3 - script loading and management
2066 root 1.4
2067 root 1.85 =item >=10 - all called hooks
2068    
2069     =item >=11 - hook reutrn values
2070 root 1.4
2071     =back
2072    
2073 root 1.1 =head1 AUTHOR
2074    
2075     Marc Lehmann <pcg@goof.com>
2076     http://software.schmorp.de/pkg/rxvt-unicode
2077    
2078     =cut
2079    
2080     1