ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.141
Committed: Mon Jul 3 19:11:41 2006 UTC (17 years, 10 months ago) by root
Branch: MAIN
Changes since 1.140: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

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