ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.143
Committed: Thu Jul 6 23:48:11 2006 UTC (17 years, 10 months ago) by root
Branch: MAIN
CVS Tags: rel-7_8
Changes since 1.142: +23 -0 lines
Log Message:
*** empty log message ***

File Contents

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