ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.134
Committed: Sat Feb 11 02:31:13 2006 UTC (18 years, 3 months ago) by root
Branch: MAIN
Changes since 1.133: +6 -0 lines
Log Message:
*** empty log message ***

File Contents

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