ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.147
Committed: Tue Oct 3 11:32:20 2006 UTC (17 years, 7 months ago) by root
Branch: MAIN
Changes since 1.146: +23 -5 lines
Log Message:
matcher

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