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