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