ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.153
Committed: Sat Jun 2 05:23:11 2007 UTC (16 years, 11 months ago) by root
Branch: MAIN
Changes since 1.152: +4 -0 lines
Log Message:
*** empty log message ***

File Contents

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