ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.150
Committed: Thu Dec 7 03:02:44 2006 UTC (17 years, 5 months ago) by root
Branch: MAIN
CVS Tags: rel-8_1
Changes since 1.149: +4 -4 lines
Log Message:
fix description of [percent]color color format

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 root 1.148 URxvt.matcher.pattern.1: \\bwww\\.[\\w-]+\\.[\\w./?&@#-]*[\\w/-]
267 root 1.147 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 root 1.150 bless \my $flag, urxvt::anyevent::
1116 root 1.55 }
1117    
1118 root 1.150 sub broadcast {
1119 root 1.55 ${$_[0]}++;
1120     }
1121    
1122 root 1.150 sub wait {
1123 root 1.55 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 root 1.150 sub one_event {
1129 root 1.149 Carp::croak "AnyEvent->one_event blocking wait unsupported in urxvt, use a non-blocking API";
1130     }
1131    
1132 root 1.55 package urxvt::term;
1133    
1134 root 1.1 =head2 The C<urxvt::term> Class
1135    
1136     =over 4
1137    
1138 root 1.68 =cut
1139    
1140     # find on_xxx subs in the package and register them
1141     # as hooks
1142     sub register_package {
1143     my ($self, $pkg, $argv) = @_;
1144    
1145 root 1.113 no strict 'refs';
1146    
1147     urxvt::verbose 6, "register package $pkg to $self";
1148    
1149     @{"$pkg\::ISA"} = urxvt::term::extension::;
1150    
1151 root 1.69 my $proxy = bless {
1152     _pkg => $pkg,
1153     argv => $argv,
1154     }, $pkg;
1155     Scalar::Util::weaken ($proxy->{term} = $self);
1156 root 1.68
1157     $self->{_pkg}{$pkg} = $proxy;
1158    
1159 root 1.69 for my $name (@HOOKNAME) {
1160     if (my $ref = $pkg->can ("on_" . lc $name)) {
1161     $proxy->enable ($name => $ref);
1162     }
1163 root 1.68 }
1164     }
1165    
1166 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
1167    
1168     Creates a new terminal, very similar as if you had started it with system
1169 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
1170     hash which defines the environment of the new terminal.
1171 root 1.77
1172     Croaks (and probably outputs an error message) if the new instance
1173     couldn't be created. Returns C<undef> if the new instance didn't
1174     initialise perl, and the terminal object otherwise. The C<init> and
1175 root 1.131 C<start> hooks will be called before this call returns, and are free to
1176     refer to global data (which is race free).
1177 root 1.77
1178     =cut
1179    
1180     sub new {
1181     my ($class, $env, @args) = @_;
1182    
1183 root 1.131 $env or Carp::croak "environment hash missing in call to urxvt::term->new";
1184     @args or Carp::croak "name argument missing in call to urxvt::term->new";
1185    
1186     _new ([ map "$_=$env->{$_}", keys %$env ], \@args);
1187 root 1.77 }
1188    
1189 root 1.36 =item $term->destroy
1190    
1191 root 1.75 Destroy the terminal object (close the window, free resources
1192     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
1193     watchers (timers, io watchers) are still active.
1194 root 1.36
1195 root 1.108 =item $term->exec_async ($cmd[, @args])
1196    
1197     Works like the combination of the C<fork>/C<exec> builtins, which executes
1198     ("starts") programs in the background. This function takes care of setting
1199     the user environment before exec'ing the command (e.g. C<PATH>) and should
1200     be preferred over explicit calls to C<exec> or C<system>.
1201    
1202     Returns the pid of the subprocess or C<undef> on error.
1203    
1204     =cut
1205    
1206     sub exec_async {
1207     my $self = shift;
1208    
1209     my $pid = fork;
1210    
1211     return $pid
1212     if !defined $pid or $pid;
1213    
1214     %ENV = %{ $self->env };
1215    
1216     exec @_;
1217     urxvt::_exit 255;
1218     }
1219    
1220 root 1.49 =item $isset = $term->option ($optval[, $set])
1221    
1222     Returns true if the option specified by C<$optval> is enabled, and
1223     optionally change it. All option values are stored by name in the hash
1224     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1225    
1226 root 1.144 Here is a likely non-exhaustive list of option names, please see the
1227 root 1.49 source file F</src/optinc.h> to see the actual list:
1228    
1229     borderLess console cursorBlink cursorUnderline hold iconic insecure
1230     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
1231 root 1.105 override-redirect pastableTabs pointerBlank reverseVideo scrollBar
1232     scrollBar_floating scrollBar_right scrollTtyKeypress scrollTtyOutput
1233     scrollWithBuffer secondaryScreen secondaryScroll skipBuiltinGlyphs
1234     transparent tripleclickwords utmpInhibit visualBell
1235 root 1.49
1236 root 1.4 =item $value = $term->resource ($name[, $newval])
1237    
1238     Returns the current resource value associated with a given name and
1239     optionally sets a new value. Setting values is most useful in the C<init>
1240     hook. Unset resources are returned and accepted as C<undef>.
1241    
1242     The new value must be properly encoded to a suitable character encoding
1243     before passing it to this method. Similarly, the returned value may need
1244     to be converted from the used encoding to text.
1245    
1246     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1247     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1248     likely change).
1249    
1250     Please note that resource strings will currently only be freed when the
1251     terminal is destroyed, so changing options frequently will eat memory.
1252    
1253 root 1.144 Here is a likely non-exhaustive list of resource names, not all of which
1254 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1255     to see the actual list:
1256 root 1.5
1257     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
1258     borderLess color cursorBlink cursorUnderline cutchars delete_key
1259     display_name embed ext_bwidth fade font geometry hold iconName
1260     imFont imLocale inputMethod insecure int_bwidth intensityStyles
1261 root 1.105 italicFont jumpScroll lineSpace loginShell mapAlert meta8 modifier
1262     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1263     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1264     preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1265     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1266     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1267     secondaryScreen secondaryScroll selectstyle shade term_name title
1268     transient_for transparent transparent_all tripleclickwords utmpInhibit
1269     visualBell
1270 root 1.5
1271 root 1.4 =cut
1272    
1273 root 1.55 sub resource($$;$) {
1274 root 1.4 my ($self, $name) = (shift, shift);
1275     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1276 root 1.45 &urxvt::term::_resource
1277 root 1.4 }
1278    
1279 root 1.79 =item $value = $term->x_resource ($pattern)
1280    
1281     Returns the X-Resource for the given pattern, excluding the program or
1282     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1283     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1284     resource with that pattern exists.
1285    
1286     This method should only be called during the C<on_start> hook, as there is
1287     only one resource database per display, and later invocations might return
1288     the wrong resources.
1289    
1290 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
1291    
1292     Adds a keymap translation exactly as specified via a resource. See the
1293     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1294    
1295 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1296 root 1.32
1297 root 1.33 Return and optionally change the current rendition. Text that is output by
1298     the terminal application will use this style.
1299 root 1.32
1300     =item ($row, $col) = $term->screen_cur ([$row, $col])
1301    
1302     Return the current coordinates of the text cursor position and optionally
1303     set it (which is usually bad as applications don't expect that).
1304    
1305 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1306    
1307     =item ($row, $col) = $term->selection_beg ([$row, $col])
1308    
1309     =item ($row, $col) = $term->selection_end ([$row, $col])
1310    
1311     Return the current values of the selection mark, begin or end positions,
1312     and optionally set them to new values.
1313    
1314 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1315    
1316     Tries to make a selection as set by C<selection_beg> and
1317     C<selection_end>. If C<$rectangular> is true (default: false), a
1318     rectangular selection will be made. This is the prefered function to make
1319     a selection.
1320    
1321 root 1.1 =item $success = $term->selection_grab ($eventtime)
1322    
1323 root 1.86 Try to request the primary selection text from the server (for example, as
1324     set by the next method). No visual feedback will be given. This function
1325     is mostly useful from within C<on_sel_grab> hooks.
1326 root 1.1
1327     =item $oldtext = $term->selection ([$newtext])
1328    
1329     Return the current selection text and optionally replace it by C<$newtext>.
1330    
1331 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1332    
1333     Create a simple multi-line overlay box. See the next method for details.
1334    
1335     =cut
1336    
1337     sub overlay_simple {
1338     my ($self, $x, $y, $text) = @_;
1339    
1340     my @lines = split /\n/, $text;
1341    
1342     my $w = List::Util::max map $self->strwidth ($_), @lines;
1343    
1344     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1345     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1346    
1347     $overlay
1348     }
1349 root 1.1
1350 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1351 root 1.1
1352     Create a new (empty) overlay at the given position with the given
1353 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1354     (default: C<OVERLAY_RSTYLE>).
1355 root 1.1
1356 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1357     around the box.
1358 root 1.1
1359 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1360     right/bottom side, respectively.
1361 root 1.1
1362 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1363     as long as the perl object is referenced.
1364 root 1.1
1365 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1366    
1367     =over 4
1368 root 1.1
1369 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
1370 root 1.1
1371 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1372     text in rxvt-unicode's special encoding and an array of rendition values
1373     at a specific position inside the overlay.
1374 root 1.1
1375 root 1.22 =item $overlay->hide
1376    
1377     If visible, hide the overlay, but do not destroy it.
1378    
1379     =item $overlay->show
1380    
1381     If hidden, display the overlay again.
1382    
1383     =back
1384    
1385 root 1.45 =item $popup = $term->popup ($event)
1386    
1387     Creates a new C<urxvt::popup> object that implements a popup menu. The
1388     C<$event> I<must> be the event causing the menu to pop up (a button event,
1389     currently).
1390    
1391     =cut
1392    
1393 root 1.55 sub popup {
1394 root 1.45 my ($self, $event) = @_;
1395    
1396     $self->grab ($event->{time}, 1)
1397     or return;
1398    
1399     my $popup = bless {
1400     term => $self,
1401     event => $event,
1402     }, urxvt::popup::;
1403    
1404     Scalar::Util::weaken $popup->{term};
1405    
1406     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1407     Scalar::Util::weaken $self->{_destroy}{$popup};
1408    
1409     $popup
1410     }
1411    
1412 root 1.40 =item $cellwidth = $term->strwidth ($string)
1413 root 1.6
1414     Returns the number of screen-cells this string would need. Correctly
1415     accounts for wide and combining characters.
1416    
1417 root 1.40 =item $octets = $term->locale_encode ($string)
1418 root 1.6
1419     Convert the given text string into the corresponding locale encoding.
1420    
1421 root 1.40 =item $string = $term->locale_decode ($octets)
1422 root 1.6
1423     Convert the given locale-encoded octets into a perl string.
1424    
1425 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1426    
1427     XORs the rendition values in the given span with the provided value
1428 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1429     refresh hooks to provide effects similar to the selection.
1430 root 1.70
1431     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1432    
1433     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1434     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1435     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1436 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1437 root 1.70
1438 root 1.69 =item $term->scr_bell
1439    
1440     Ring the bell!
1441    
1442 root 1.33 =item $term->scr_add_lines ($string)
1443    
1444     Write the given text string to the screen, as if output by the application
1445     running inside the terminal. It may not contain command sequences (escape
1446     codes), but is free to use line feeds, carriage returns and tabs. The
1447     string is a normal text string, not in locale-dependent encoding.
1448    
1449     Normally its not a good idea to use this function, as programs might be
1450     confused by changes in cursor position or scrolling. Its useful inside a
1451     C<on_add_lines> hook, though.
1452    
1453 root 1.121 =item $term->scr_change_screen ($screen)
1454    
1455     Switch to given screen - 0 primary, 1 secondary.
1456    
1457 root 1.36 =item $term->cmd_parse ($octets)
1458    
1459     Similar to C<scr_add_lines>, but the argument must be in the
1460     locale-specific encoding of the terminal and can contain command sequences
1461     (escape codes) that will be interpreted.
1462    
1463 root 1.6 =item $term->tt_write ($octets)
1464    
1465     Write the octets given in C<$data> to the tty (i.e. as program input). To
1466 root 1.12 pass characters instead of octets, you should convert your strings first
1467     to the locale-specific encoding using C<< $term->locale_encode >>.
1468    
1469 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1470    
1471     Replaces the event mask of the pty watcher by the given event mask. Can
1472     be used to suppress input and output handling to the pty/tty. See the
1473     description of C<< urxvt::timer->events >>. Make sure to always restore
1474     the previous value.
1475    
1476 root 1.125 =item $fd = $term->pty_fd
1477    
1478     Returns the master file descriptor for the pty in use, or C<-1> if no pty
1479     is used.
1480    
1481 root 1.40 =item $windowid = $term->parent
1482    
1483     Return the window id of the toplevel window.
1484    
1485     =item $windowid = $term->vt
1486    
1487     Return the window id of the terminal window.
1488    
1489 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1490    
1491     Adds the specified events to the vt event mask. Useful e.g. when you want
1492     to receive pointer events all the times:
1493    
1494     $term->vt_emask_add (urxvt::PointerMotionMask);
1495    
1496 root 1.132 =item $term->focus_in
1497    
1498     =item $term->focus_out
1499    
1500     =item $term->key_press ($state, $keycode[, $time])
1501    
1502     =item $term->key_release ($state, $keycode[, $time])
1503    
1504     Deliver various fake events to to terminal.
1505    
1506 root 1.32 =item $window_width = $term->width
1507    
1508     =item $window_height = $term->height
1509    
1510     =item $font_width = $term->fwidth
1511    
1512     =item $font_height = $term->fheight
1513    
1514     =item $font_ascent = $term->fbase
1515    
1516     =item $terminal_rows = $term->nrow
1517    
1518     =item $terminal_columns = $term->ncol
1519    
1520     =item $has_focus = $term->focus
1521    
1522     =item $is_mapped = $term->mapped
1523 root 1.13
1524 root 1.32 =item $max_scrollback = $term->saveLines
1525 root 1.13
1526 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1527 root 1.13
1528 root 1.94 =item $topmost_scrollback_row = $term->top_row
1529 root 1.12
1530 root 1.32 Return various integers describing terminal characteristics.
1531 root 1.12
1532 root 1.77 =item $x_display = $term->display_id
1533    
1534     Return the DISPLAY used by rxvt-unicode.
1535    
1536 root 1.66 =item $lc_ctype = $term->locale
1537    
1538     Returns the LC_CTYPE category string used by this rxvt-unicode.
1539    
1540 root 1.77 =item $env = $term->env
1541    
1542     Returns a copy of the environment in effect for the terminal as a hashref
1543     similar to C<\%ENV>.
1544    
1545 root 1.136 =item @envv = $term->envv
1546    
1547     Returns the environment as array of strings of the form C<VAR=VALUE>.
1548    
1549     =item @argv = $term->argv
1550    
1551     Return the argument vector as this terminal, similar to @ARGV, but
1552     includes the program name as first element.
1553    
1554 root 1.77 =cut
1555 root 1.66
1556 root 1.77 sub env {
1557 root 1.136 +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), $_[0]->envv }
1558 root 1.77 }
1559 root 1.66
1560 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1561    
1562     =item $modifiermask = $term->ModMetaMask
1563    
1564     =item $modifiermask = $term->ModNumLockMask
1565    
1566     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1567     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1568    
1569 root 1.121 =item $screen = $term->current_screen
1570    
1571     Returns the currently displayed screen (0 primary, 1 secondary).
1572    
1573 root 1.122 =item $cursor_is_hidden = $term->hidden_cursor
1574    
1575 root 1.144 Returns whether the cursor is currently hidden or not.
1576 root 1.122
1577 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1578    
1579 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1580     C<0>, which displays the normal terminal contents. Lower values scroll
1581 root 1.12 this many lines into the scrollback buffer.
1582    
1583 root 1.14 =item $term->want_refresh
1584    
1585     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1586     compare the on-screen display with its stored representation. If they
1587     differ, it redraws the differences.
1588    
1589     Used after changing terminal contents to display them.
1590    
1591 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1592 root 1.12
1593     Returns the text of the entire row with number C<$row_number>. Row C<0>
1594     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1595     terminal line. The scrollback buffer starts at line C<-1> and extends to
1596 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1597     is requested.
1598 root 1.12
1599 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1600     line, starting at column C<$start_col> (default C<0>), which is useful
1601 root 1.18 to replace only parts of a line. The font index in the rendition will
1602 root 1.13 automatically be updated.
1603 root 1.12
1604 root 1.124 C<$text> is in a special encoding: tabs and wide characters that use more
1605     than one cell when displayed are padded with C<$urxvt::NOCHAR> (chr 65535)
1606 root 1.121 characters. Characters with combining characters and other characters that
1607     do not fit into the normal tetx encoding will be replaced with characters
1608     in the private use area.
1609 root 1.12
1610     You have to obey this encoding when changing text. The advantage is
1611     that C<substr> and similar functions work on screen cells and not on
1612     characters.
1613    
1614     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1615     can be used to convert normal strings into this encoding and vice versa.
1616    
1617 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1618    
1619     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1620     bitsets. Rendition bitsets contain information about colour, font, font
1621     styles and similar information. See also C<< $term->ROW_t >>.
1622    
1623     When setting rendition, the font mask will be ignored.
1624 root 1.12
1625 root 1.18 See the section on RENDITION, above.
1626 root 1.13
1627     =item $length = $term->ROW_l ($row_number[, $new_length])
1628    
1629 root 1.24 Returns the number of screen cells that are in use ("the line
1630     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1631     line is joined with the following one.
1632    
1633     =item $bool = $term->is_longer ($row_number)
1634    
1635     Returns true if the row is part of a multiple-row logical "line" (i.e.
1636     joined with the following row), which means all characters are in use
1637     and it is continued on the next row (and possibly a continuation of the
1638     previous row(s)).
1639    
1640     =item $line = $term->line ($row_number)
1641    
1642     Create and return a new C<urxvt::line> object that stores information
1643     about the logical line that row C<$row_number> is part of. It supports the
1644     following methods:
1645 root 1.12
1646 root 1.24 =over 4
1647    
1648 root 1.35 =item $text = $line->t ([$new_text])
1649 root 1.24
1650 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1651 root 1.24
1652 root 1.35 =item $rend = $line->r ([$new_rend])
1653 root 1.24
1654 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1655 root 1.24
1656     =item $length = $line->l
1657    
1658     Returns the length of the line in cells, similar to C<ROW_l>.
1659    
1660     =item $rownum = $line->beg
1661    
1662     =item $rownum = $line->end
1663    
1664     Return the row number of the first/last row of the line, respectively.
1665    
1666     =item $offset = $line->offset_of ($row, $col)
1667    
1668     Returns the character offset of the given row|col pair within the logical
1669 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1670     offsets outside the string.
1671 root 1.24
1672     =item ($row, $col) = $line->coord_of ($offset)
1673    
1674     Translates a string offset into terminal coordinates again.
1675    
1676     =back
1677    
1678     =cut
1679    
1680 root 1.55 sub line {
1681 root 1.24 my ($self, $row) = @_;
1682    
1683     my $maxrow = $self->nrow - 1;
1684    
1685     my ($beg, $end) = ($row, $row);
1686    
1687     --$beg while $self->ROW_is_longer ($beg - 1);
1688     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1689    
1690     bless {
1691     term => $self,
1692     beg => $beg,
1693     end => $end,
1694 root 1.34 ncol => $self->ncol,
1695 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1696     }, urxvt::line::
1697     }
1698    
1699     sub urxvt::line::t {
1700     my ($self) = @_;
1701    
1702 root 1.34 if (@_ > 1)
1703     {
1704     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1705     for $self->{beg} .. $self->{end};
1706     }
1707    
1708     defined wantarray &&
1709     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1710     0, $self->{len}
1711 root 1.24 }
1712    
1713     sub urxvt::line::r {
1714     my ($self) = @_;
1715    
1716 root 1.34 if (@_ > 1)
1717     {
1718     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1719     for $self->{beg} .. $self->{end};
1720     }
1721    
1722     if (defined wantarray) {
1723     my $rend = [
1724     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1725     ];
1726     $#$rend = $self->{len} - 1;
1727     return $rend;
1728     }
1729    
1730     ()
1731 root 1.24 }
1732    
1733     sub urxvt::line::beg { $_[0]{beg} }
1734     sub urxvt::line::end { $_[0]{end} }
1735     sub urxvt::line::l { $_[0]{len} }
1736    
1737     sub urxvt::line::offset_of {
1738     my ($self, $row, $col) = @_;
1739    
1740 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1741 root 1.24 }
1742    
1743     sub urxvt::line::coord_of {
1744     my ($self, $offset) = @_;
1745    
1746     use integer;
1747    
1748     (
1749 root 1.34 $offset / $self->{ncol} + $self->{beg},
1750     $offset % $self->{ncol}
1751 root 1.24 )
1752     }
1753    
1754 root 1.12 =item $text = $term->special_encode $string
1755    
1756     Converts a perl string into the special encoding used by rxvt-unicode,
1757     where one character corresponds to one screen cell. See
1758     C<< $term->ROW_t >> for details.
1759    
1760     =item $string = $term->special_decode $text
1761    
1762 root 1.144 Converts rxvt-unicodes text representation into a perl string. See
1763 root 1.12 C<< $term->ROW_t >> for details.
1764 root 1.6
1765 root 1.131 =item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
1766    
1767     =item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])
1768 root 1.61
1769 root 1.131 Register/unregister a synchronous button grab. See the XGrabButton
1770     manpage.
1771 root 1.61
1772     =item $success = $term->grab ($eventtime[, $sync])
1773    
1774     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1775 root 1.144 synchronous (C<$sync> is true). Also remembers the grab timestamp.
1776 root 1.61
1777     =item $term->allow_events_async
1778    
1779     Calls XAllowEvents with AsyncBoth for the most recent grab.
1780    
1781     =item $term->allow_events_sync
1782    
1783     Calls XAllowEvents with SyncBoth for the most recent grab.
1784    
1785     =item $term->allow_events_replay
1786    
1787     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1788     recent grab.
1789    
1790     =item $term->ungrab
1791    
1792     Calls XUngrab for the most recent grab. Is called automatically on
1793     evaluation errors, as it is better to lose the grab in the error case as
1794     the session.
1795    
1796 root 1.119 =item $atom = $term->XInternAtom ($atom_name[, $only_if_exists])
1797    
1798     =item $atom_name = $term->XGetAtomName ($atom)
1799    
1800     =item @atoms = $term->XListProperties ($window)
1801    
1802     =item ($type,$format,$octets) = $term->XGetWindowProperty ($window, $property)
1803    
1804     =item $term->XChangeWindowProperty ($window, $property, $type, $format, $octets)
1805    
1806     =item $term->XDeleteProperty ($window, $property)
1807    
1808     =item $window = $term->DefaultRootWindow
1809    
1810     =item $term->XReparentWindow ($window, $parent, [$x, $y])
1811    
1812     =item $term->XMapWindow ($window)
1813    
1814     =item $term->XUnmapWindow ($window)
1815    
1816     =item $term->XMoveResizeWindow ($window, $x, $y, $width, $height)
1817    
1818     =item ($x, $y, $child_window) = $term->XTranslateCoordinates ($src, $dst, $x, $y)
1819    
1820     =item $term->XChangeInput ($window, $add_events[, $del_events])
1821    
1822     Various X or X-related functions. The C<$term> object only serves as
1823     the source of the display, otherwise those functions map more-or-less
1824     directory onto the X functions of the same name.
1825    
1826 root 1.1 =back
1827    
1828 root 1.55 =cut
1829    
1830     package urxvt::popup;
1831    
1832 root 1.45 =head2 The C<urxvt::popup> Class
1833    
1834     =over 4
1835    
1836     =cut
1837    
1838     sub add_item {
1839     my ($self, $item) = @_;
1840    
1841 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1842     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1843     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1844    
1845     $item->{render} ||= sub { $_[0]{text} };
1846    
1847 root 1.45 push @{ $self->{item} }, $item;
1848     }
1849    
1850 root 1.76 =item $popup->add_title ($title)
1851    
1852     Adds a non-clickable title to the popup.
1853    
1854     =cut
1855    
1856     sub add_title {
1857     my ($self, $title) = @_;
1858    
1859     $self->add_item ({
1860     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1861     text => $title,
1862     activate => sub { },
1863     });
1864     }
1865    
1866     =item $popup->add_separator ([$sepchr])
1867    
1868     Creates a separator, optionally using the character given as C<$sepchr>.
1869    
1870     =cut
1871    
1872 root 1.53 sub add_separator {
1873     my ($self, $sep) = @_;
1874    
1875 root 1.67 $sep ||= "=";
1876 root 1.53
1877     $self->add_item ({
1878     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1879     text => "",
1880 root 1.65 render => sub { $sep x $self->{term}->ncol },
1881 root 1.53 activate => sub { },
1882     });
1883     }
1884    
1885 root 1.76 =item $popup->add_button ($text, $cb)
1886    
1887     Adds a clickable button to the popup. C<$cb> is called whenever it is
1888     selected.
1889 root 1.53
1890 root 1.76 =cut
1891 root 1.53
1892 root 1.45 sub add_button {
1893     my ($self, $text, $cb) = @_;
1894    
1895 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1896 root 1.48 }
1897    
1898 root 1.133 =item $popup->add_toggle ($text, $initial_value, $cb)
1899 root 1.76
1900 root 1.133 Adds a toggle/checkbox item to the popup. The callback gets called
1901     whenever it gets toggled, with a boolean indicating its new value as its
1902     first argument.
1903 root 1.76
1904     =cut
1905    
1906 root 1.48 sub add_toggle {
1907 root 1.133 my ($self, $text, $value, $cb) = @_;
1908 root 1.48
1909 root 1.49 my $item; $item = {
1910     type => "button",
1911     text => " $text",
1912     value => $value,
1913 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1914 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
1915 root 1.49 };
1916    
1917     $self->add_item ($item);
1918 root 1.45 }
1919    
1920 root 1.76 =item $popup->show
1921    
1922     Displays the popup (which is initially hidden).
1923    
1924     =cut
1925    
1926 root 1.45 sub show {
1927     my ($self) = @_;
1928    
1929     local $urxvt::popup::self = $self;
1930    
1931 root 1.77 my $env = $self->{term}->env;
1932     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
1933     delete $env->{LC_ALL};
1934     $env->{LC_CTYPE} = $self->{term}->locale;
1935    
1936 root 1.103 urxvt::term->new ($env, "popup",
1937 root 1.105 "--perl-lib" => "", "--perl-ext-common" => "",
1938 root 1.106 "-pty-fd" => -1, "-sl" => 0,
1939     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1940 root 1.77 "--transient-for" => $self->{term}->parent,
1941     "-display" => $self->{term}->display_id,
1942     "-pe" => "urxvt-popup")
1943 root 1.45 or die "unable to create popup window\n";
1944     }
1945    
1946     sub DESTROY {
1947     my ($self) = @_;
1948    
1949 root 1.58 delete $self->{term}{_destroy}{$self};
1950 root 1.45 $self->{term}->ungrab;
1951     }
1952    
1953 root 1.78 =back
1954    
1955 root 1.113 =cut
1956    
1957     package urxvt::watcher;
1958    
1959     @urxvt::timer::ISA = __PACKAGE__;
1960     @urxvt::iow::ISA = __PACKAGE__;
1961     @urxvt::pw::ISA = __PACKAGE__;
1962     @urxvt::iw::ISA = __PACKAGE__;
1963    
1964 root 1.1 =head2 The C<urxvt::timer> Class
1965    
1966     This class implements timer watchers/events. Time is represented as a
1967     fractional number of seconds since the epoch. Example:
1968    
1969 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1970 root 1.1 $term->{timer} = urxvt::timer
1971     ->new
1972 root 1.20 ->interval (1)
1973 root 1.1 ->cb (sub {
1974 root 1.20 $term->{overlay}->set (0, 0,
1975     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1976     });
1977 root 1.1
1978     =over 4
1979    
1980     =item $timer = new urxvt::timer
1981    
1982 root 1.20 Create a new timer object in started state. It is scheduled to fire
1983     immediately.
1984 root 1.1
1985     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1986    
1987     Set the callback to be called when the timer triggers.
1988    
1989     =item $tstamp = $timer->at
1990    
1991     Return the time this watcher will fire next.
1992    
1993     =item $timer = $timer->set ($tstamp)
1994    
1995     Set the time the event is generated to $tstamp.
1996    
1997 root 1.20 =item $timer = $timer->interval ($interval)
1998    
1999     Normally (and when C<$interval> is C<0>), the timer will automatically
2000     stop after it has fired once. If C<$interval> is non-zero, then the timer
2001     is automatically rescheduled at the given intervals.
2002    
2003 root 1.1 =item $timer = $timer->start
2004    
2005     Start the timer.
2006    
2007     =item $timer = $timer->start ($tstamp)
2008    
2009     Set the event trigger time to C<$tstamp> and start the timer.
2010    
2011 root 1.103 =item $timer = $timer->after ($delay)
2012    
2013     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
2014    
2015 root 1.1 =item $timer = $timer->stop
2016    
2017     Stop the timer.
2018    
2019     =back
2020    
2021     =head2 The C<urxvt::iow> Class
2022    
2023     This class implements io watchers/events. Example:
2024    
2025     $term->{socket} = ...
2026     $term->{iow} = urxvt::iow
2027     ->new
2028     ->fd (fileno $term->{socket})
2029 root 1.69 ->events (urxvt::EVENT_READ)
2030 root 1.1 ->start
2031     ->cb (sub {
2032     my ($iow, $revents) = @_;
2033     # $revents must be 1 here, no need to check
2034     sysread $term->{socket}, my $buf, 8192
2035     or end-of-file;
2036     });
2037    
2038    
2039     =over 4
2040    
2041     =item $iow = new urxvt::iow
2042    
2043     Create a new io watcher object in stopped state.
2044    
2045     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
2046    
2047     Set the callback to be called when io events are triggered. C<$reventmask>
2048     is a bitset as described in the C<events> method.
2049    
2050     =item $iow = $iow->fd ($fd)
2051    
2052 root 1.144 Set the file descriptor (not handle) to watch.
2053 root 1.1
2054     =item $iow = $iow->events ($eventmask)
2055    
2056 root 1.69 Set the event mask to watch. The only allowed values are
2057     C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
2058     together, or C<urxvt::EVENT_NONE>.
2059 root 1.1
2060     =item $iow = $iow->start
2061    
2062     Start watching for requested events on the given handle.
2063    
2064     =item $iow = $iow->stop
2065    
2066 root 1.144 Stop watching for events on the given file handle.
2067 root 1.1
2068     =back
2069    
2070 root 1.114 =head2 The C<urxvt::iw> Class
2071    
2072     This class implements idle watchers, that get called automatically when
2073     the process is idle. They should return as fast as possible, after doing
2074     some useful work.
2075    
2076     =over 4
2077    
2078     =item $iw = new urxvt::iw
2079    
2080     Create a new idle watcher object in stopped state.
2081    
2082     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
2083    
2084     Set the callback to be called when the watcher triggers.
2085    
2086     =item $timer = $timer->start
2087    
2088     Start the watcher.
2089    
2090     =item $timer = $timer->stop
2091    
2092     Stop the watcher.
2093    
2094     =back
2095    
2096     =head2 The C<urxvt::pw> Class
2097    
2098     This class implements process watchers. They create an event whenever a
2099     process exits, after which they stop automatically.
2100    
2101     my $pid = fork;
2102     ...
2103     $term->{pw} = urxvt::pw
2104     ->new
2105     ->start ($pid)
2106     ->cb (sub {
2107     my ($pw, $exit_status) = @_;
2108     ...
2109     });
2110    
2111     =over 4
2112    
2113     =item $pw = new urxvt::pw
2114    
2115     Create a new process watcher in stopped state.
2116    
2117     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
2118    
2119     Set the callback to be called when the timer triggers.
2120    
2121     =item $pw = $timer->start ($pid)
2122    
2123 root 1.144 Tells the watcher to start watching for process C<$pid>.
2124 root 1.114
2125     =item $pw = $pw->stop
2126    
2127     Stop the watcher.
2128    
2129     =back
2130    
2131 root 1.4 =head1 ENVIRONMENT
2132    
2133     =head2 URXVT_PERL_VERBOSITY
2134    
2135     This variable controls the verbosity level of the perl extension. Higher
2136     numbers indicate more verbose output.
2137    
2138     =over 4
2139    
2140 root 1.58 =item == 0 - fatal messages
2141 root 1.4
2142 root 1.58 =item >= 3 - script loading and management
2143 root 1.4
2144 root 1.85 =item >=10 - all called hooks
2145    
2146 root 1.144 =item >=11 - hook return values
2147 root 1.4
2148     =back
2149    
2150 root 1.1 =head1 AUTHOR
2151    
2152     Marc Lehmann <pcg@goof.com>
2153     http://software.schmorp.de/pkg/rxvt-unicode
2154    
2155     =cut
2156    
2157     1