ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.162
Committed: Mon Dec 17 16:57:57 2007 UTC (16 years, 5 months ago) by ayin
Branch: MAIN
Changes since 1.161: +1 -1 lines
Log Message:
Fix typo.

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