ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.172
Committed: Fri Oct 10 00:21:15 2008 UTC (15 years, 7 months ago) by root
Branch: MAIN
Changes since 1.171: +3 -1 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.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 root 1.170 C<< $self->{myoption} >>:
114 root 1.133
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.171 =item on_osc_seq $term, $op, $args, $resp
547 root 1.137
548     Called on every OSC sequence and can be used to suppress it or modify its
549 root 1.171 behaviour. The default should be to return an empty list. A true value
550 root 1.137 suppresses execution of the request completely. Make sure you don't get
551 root 1.171 confused by recursive invocations when you output an OSC sequence within
552 root 1.137 this callback.
553    
554     C<on_osc_seq_perl> should be used for new behaviour.
555    
556 root 1.171 =item on_osc_seq_perl $term, $args, $resp
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 root 1.171 string should start with the extension name (sans -osc) and a semicolon,
562     to distinguish it from commands for other extensions, and this might be
563     enforced in the future.
564    
565     For example, C<overlay-osc> uses this:
566    
567     sub on_osc_seq_perl {
568     my ($self, $osc, $resp) = @_;
569    
570     return unless $osc =~ s/^overlay;//;
571    
572     ... process remaining $osc string
573     }
574 root 1.29
575     Be careful not ever to trust (in a security sense) the data you receive,
576 root 1.144 as its source can not easily be controlled (e-mail content, messages from
577 root 1.29 other users on the same system etc.).
578 root 1.28
579 root 1.171 For responses, C<$resp> contains the end-of-args separator used by the
580     sender.
581    
582 root 1.33 =item on_add_lines $term, $string
583    
584     Called whenever text is about to be output, with the text as argument. You
585     can filter/change and output the text yourself by returning a true value
586     and calling C<< $term->scr_add_lines >> yourself. Please note that this
587     might be very slow, however, as your hook is called for B<all> text being
588     output.
589    
590 root 1.72 =item on_tt_write $term, $octets
591    
592     Called whenever some data is written to the tty/pty and can be used to
593     suppress or filter tty input.
594    
595 root 1.35 =item on_line_update $term, $row
596    
597     Called whenever a line was updated or changed. Can be used to filter
598     screen output (e.g. underline urls or other useless stuff). Only lines
599     that are being shown will be filtered, and, due to performance reasons,
600     not always immediately.
601    
602     The row number is always the topmost row of the line if the line spans
603     multiple rows.
604    
605     Please note that, if you change the line, then the hook might get called
606     later with the already-modified line (e.g. if unrelated parts change), so
607     you cannot just toggle rendition bits, but only set them.
608    
609 root 1.1 =item on_refresh_begin $term
610    
611 root 1.171 Called just before the screen gets redrawn. Can be used for overlay or
612     similar effects by modifying the terminal contents in refresh_begin, and
613 root 1.1 restoring them in refresh_end. The built-in overlay and selection display
614     code is run after this hook, and takes precedence.
615    
616     =item on_refresh_end $term
617    
618     Called just after the screen gets redrawn. See C<on_refresh_begin>.
619    
620 root 1.130 =item on_user_command $term, $string
621 root 1.11
622 root 1.144 Called whenever a user-configured event is being activated (e.g. via
623 root 1.130 a C<perl:string> action bound to a key, see description of the B<keysym>
624 root 1.11 resource in the @@RXVT_NAME@@(1) manpage).
625    
626 root 1.130 The event is simply the action string. This interface is assumed to change
627     slightly in the future.
628    
629 root 1.134 =item on_resize_all_windows $tern, $new_width, $new_height
630    
631 root 1.144 Called just after the new window size has been calculated, but before
632 root 1.134 windows are actually being resized or hints are being set. If this hook
633     returns TRUE, setting of the window hints is being skipped.
634    
635 root 1.92 =item on_x_event $term, $event
636    
637     Called on every X event received on the vt window (and possibly other
638     windows). Should only be used as a last resort. Most event structure
639     members are not passed.
640    
641 root 1.143 =item on_root_event $term, $event
642    
643     Like C<on_x_event>, but is called for events on the root window.
644    
645 root 1.45 =item on_focus_in $term
646    
647     Called whenever the window gets the keyboard focus, before rxvt-unicode
648     does focus in processing.
649    
650     =item on_focus_out $term
651    
652 root 1.144 Called whenever the window loses keyboard focus, before rxvt-unicode does
653 root 1.45 focus out processing.
654    
655 root 1.102 =item on_configure_notify $term, $event
656    
657 root 1.118 =item on_property_notify $term, $event
658    
659 root 1.69 =item on_key_press $term, $event, $keysym, $octets
660 root 1.37
661 root 1.69 =item on_key_release $term, $event, $keysym
662 root 1.37
663     =item on_button_press $term, $event
664    
665     =item on_button_release $term, $event
666    
667     =item on_motion_notify $term, $event
668    
669 root 1.45 =item on_map_notify $term, $event
670    
671     =item on_unmap_notify $term, $event
672    
673 root 1.39 Called whenever the corresponding X event is received for the terminal If
674     the hook returns true, then the even will be ignored by rxvt-unicode.
675    
676     The event is a hash with most values as named by Xlib (see the XEvent
677 root 1.120 manpage), with the additional members C<row> and C<col>, which are the
678     (real, not screen-based) row and column under the mouse cursor.
679 root 1.38
680     C<on_key_press> additionally receives the string rxvt-unicode would
681     output, if any, in locale-specific encoding.
682 root 1.37
683     subwindow.
684    
685 root 1.114 =item on_client_message $term, $event
686    
687     =item on_wm_protocols $term, $event
688    
689     =item on_wm_delete_window $term, $event
690    
691     Called when various types of ClientMessage events are received (all with
692     format=32, WM_PROTOCOLS or WM_PROTOCOLS:WM_DELETE_WINDOW).
693    
694 root 1.1 =back
695    
696 root 1.77 =cut
697    
698     package urxvt;
699    
700     use utf8;
701     use strict;
702     use Carp ();
703     use Scalar::Util ();
704     use List::Util ();
705    
706     our $VERSION = 1;
707     our $TERM;
708 root 1.113 our @TERM_INIT;
709     our @TERM_EXT;
710 root 1.77 our @HOOKNAME;
711     our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
712     our %OPTION;
713    
714     our $LIBDIR;
715     our $RESNAME;
716     our $RESCLASS;
717     our $RXVTNAME;
718    
719 root 1.124 our $NOCHAR = chr 0xffff;
720 root 1.121
721 root 1.23 =head2 Variables in the C<urxvt> Package
722    
723     =over 4
724    
725 root 1.75 =item $urxvt::LIBDIR
726    
727     The rxvt-unicode library directory, where, among other things, the perl
728     modules and scripts are stored.
729    
730     =item $urxvt::RESCLASS, $urxvt::RESCLASS
731    
732     The resource class and name rxvt-unicode uses to look up X resources.
733    
734     =item $urxvt::RXVTNAME
735    
736     The basename of the installed binaries, usually C<urxvt>.
737    
738 root 1.23 =item $urxvt::TERM
739    
740 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
741     object, whenever a callback/hook is executing.
742 root 1.23
743 root 1.113 =item @urxvt::TERM_INIT
744    
745 root 1.144 All code references in this array will be called as methods of the next newly
746 root 1.113 created C<urxvt::term> object (during the C<on_init> phase). The array
747 root 1.144 gets cleared before the code references that were in it are being executed,
748     so references can push themselves onto it again if they so desire.
749 root 1.113
750 root 1.144 This complements to the perl-eval command line option, but gets executed
751 root 1.113 first.
752    
753     =item @urxvt::TERM_EXT
754    
755     Works similar to C<@TERM_INIT>, but contains perl package/class names, which
756     get registered as normal extensions after calling the hooks in C<@TERM_INIT>
757     but before other extensions. Gets cleared just like C<@TERM_INIT>.
758    
759 root 1.23 =back
760    
761 root 1.1 =head2 Functions in the C<urxvt> Package
762    
763     =over 4
764    
765     =item urxvt::fatal $errormessage
766    
767     Fatally aborts execution with the given error message. Avoid at all
768     costs! The only time this is acceptable is when the terminal process
769     starts up.
770    
771     =item urxvt::warn $string
772    
773 root 1.6 Calls C<rxvt_warn> with the given string which should not include a
774 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
775     that calls this function.
776    
777     Using this function has the advantage that its output ends up in the
778     correct place, e.g. on stderr of the connecting urxvtc client.
779    
780 root 1.77 Messages have a size limit of 1023 bytes currently.
781    
782 root 1.131 =item @terms = urxvt::termlist
783    
784     Returns all urxvt::term objects that exist in this process, regardless of
785 root 1.144 whether they are started, being destroyed etc., so be careful. Only term
786 root 1.131 objects that have perl extensions attached will be returned (because there
787     is no urxvt::term objet associated with others).
788    
789 root 1.1 =item $time = urxvt::NOW
790    
791     Returns the "current time" (as per the event loop).
792    
793 root 1.47 =item urxvt::CurrentTime
794    
795     =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
796     Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
797     Button4Mask, Button5Mask, AnyModifier
798    
799 root 1.92 =item urxvt::NoEventMask, KeyPressMask, KeyReleaseMask,
800     ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask,
801     PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask,
802     Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask,
803     KeymapStateMask, ExposureMask, VisibilityChangeMask, StructureNotifyMask,
804     ResizeRedirectMask, SubstructureNotifyMask, SubstructureRedirectMask,
805     FocusChangeMask, PropertyChangeMask, ColormapChangeMask, OwnerGrabButtonMask
806    
807     =item urxvt::KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify,
808     EnterNotify, LeaveNotify, FocusIn, FocusOut, KeymapNotify, Expose,
809     GraphicsExpose, NoExpose, VisibilityNotify, CreateNotify, DestroyNotify,
810     UnmapNotify, MapNotify, MapRequest, ReparentNotify, ConfigureNotify,
811     ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify,
812     CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest,
813     SelectionNotify, ColormapNotify, ClientMessage, MappingNotify
814    
815 root 1.55 Various constants for use in X calls and event processing.
816 root 1.47
817 root 1.21 =back
818    
819 root 1.18 =head2 RENDITION
820    
821     Rendition bitsets contain information about colour, font, font styles and
822     similar information for each screen cell.
823    
824     The following "macros" deal with changes in rendition sets. You should
825     never just create a bitset, you should always modify an existing one,
826     as they contain important information required for correct operation of
827     rxvt-unicode.
828    
829     =over 4
830    
831     =item $rend = urxvt::DEFAULT_RSTYLE
832    
833     Returns the default rendition, as used when the terminal is starting up or
834     being reset. Useful as a base to start when creating renditions.
835    
836     =item $rend = urxvt::OVERLAY_RSTYLE
837    
838     Return the rendition mask used for overlays by default.
839    
840     =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
841    
842     Return the bit that enabled bold, italic, blink, reverse-video and
843 root 1.19 underline, respectively. To enable such a style, just logically OR it into
844     the bitset.
845 root 1.18
846     =item $foreground = urxvt::GET_BASEFG $rend
847    
848     =item $background = urxvt::GET_BASEBG $rend
849    
850     Return the foreground/background colour index, respectively.
851    
852 root 1.75 =item $rend = urxvt::SET_FGCOLOR $rend, $new_colour
853 root 1.18
854 root 1.75 =item $rend = urxvt::SET_BGCOLOR $rend, $new_colour
855 root 1.18
856 root 1.132 =item $rend = urxvt::SET_COLOR $rend, $new_fg, $new_bg
857    
858 root 1.18 Replace the foreground/background colour in the rendition mask with the
859     specified one.
860    
861 root 1.75 =item $value = urxvt::GET_CUSTOM $rend
862 root 1.19
863     Return the "custom" value: Every rendition has 5 bits for use by
864     extensions. They can be set and changed as you like and are initially
865     zero.
866    
867 root 1.75 =item $rend = urxvt::SET_CUSTOM $rend, $new_value
868 root 1.19
869     Change the custom value.
870    
871 root 1.18 =back
872    
873 root 1.1 =cut
874    
875     BEGIN {
876     # overwrite perl's warn
877     *CORE::GLOBAL::warn = sub {
878     my $msg = join "", @_;
879     $msg .= "\n"
880     unless $msg =~ /\n$/;
881     urxvt::warn ($msg);
882     };
883     }
884    
885 root 1.124 no warnings 'utf8';
886    
887 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
888 root 1.1
889     sub verbose {
890     my ($level, $msg) = @_;
891 root 1.8 warn "$msg\n" if $level <= $verbosity;
892 root 1.1 }
893    
894 root 1.44 my %extension_pkg;
895 root 1.1
896     # load a single script into its own package, once only
897 root 1.44 sub extension_package($) {
898 root 1.1 my ($path) = @_;
899    
900 root 1.44 $extension_pkg{$path} ||= do {
901 root 1.100 $path =~ /([^\/\\]+)$/;
902     my $pkg = $1;
903     $pkg =~ s/[^[:word:]]/_/g;
904     $pkg = "urxvt::ext::$pkg";
905 root 1.8
906 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
907 root 1.1
908     open my $fh, "<:raw", $path
909     or die "$path: $!";
910    
911 root 1.96 my $source =
912 root 1.124 "package $pkg; use strict; use utf8; no warnings 'utf8';\n"
913 root 1.69 . "#line 1 \"$path\"\n{\n"
914     . (do { local $/; <$fh> })
915     . "\n};\n1";
916 root 1.8
917 root 1.69 eval $source
918     or die "$path: $@";
919 root 1.1
920     $pkg
921 root 1.7 }
922 root 1.1 }
923    
924 root 1.31 our $retval; # return value for urxvt
925    
926 root 1.8 # called by the rxvt core
927     sub invoke {
928 root 1.23 local $TERM = shift;
929 root 1.8 my $htype = shift;
930 root 1.6
931 root 1.8 if ($htype == 0) { # INIT
932 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
933 ayin 1.157
934 root 1.68 my %ext_arg;
935 root 1.6
936 root 1.113 {
937     my @init = @TERM_INIT;
938     @TERM_INIT = ();
939     $_->($TERM) for @init;
940     my @pkg = @TERM_EXT;
941     @TERM_EXT = ();
942     $TERM->register_package ($_) for @pkg;
943     }
944    
945     for (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
946 root 1.50 if ($_ eq "default") {
947 root 1.123 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback readline);
948 root 1.51 } elsif (/^-(.*)$/) {
949 root 1.68 delete $ext_arg{$1};
950     } elsif (/^([^<]+)<(.*)>$/) {
951     push @{ $ext_arg{$1} }, $2;
952 root 1.49 } else {
953 root 1.68 $ext_arg{$_} ||= [];
954 root 1.50 }
955     }
956 root 1.6
957 root 1.133 for my $ext (sort keys %ext_arg) {
958 root 1.50 my @files = grep -f $_, map "$_/$ext", @dirs;
959    
960     if (@files) {
961 root 1.133 $TERM->register_package (extension_package $files[0], $ext_arg{$ext});
962 root 1.50 } else {
963     warn "perl extension '$ext' not found in perl library search path\n";
964 root 1.8 }
965     }
966 root 1.55
967     eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
968     warn $@ if $@;
969 root 1.31 }
970    
971     $retval = undef;
972 root 1.6
973 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
974     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
975     if $verbosity >= 10;
976    
977 root 1.138 for my $pkg (keys %$cb) {
978     my $retval_ = eval { $cb->{$pkg}->($TERM->{_pkg}{$pkg}, @_) };
979 root 1.113 $retval ||= $retval_;
980 root 1.68
981 root 1.58 if ($@) {
982     $TERM->ungrab; # better to lose the grab than the session
983     warn $@;
984     }
985 root 1.31 }
986 root 1.85
987     verbose 11, "$HOOKNAME[$htype] returning <$retval>"
988     if $verbosity >= 11;
989 root 1.31 }
990    
991     if ($htype == 1) { # DESTROY
992     # clear package objects
993     %$_ = () for values %{ $TERM->{_pkg} };
994 root 1.25
995 root 1.31 # clear package
996     %$TERM = ();
997 root 1.7 }
998    
999 root 1.31 $retval
1000 root 1.7 }
1001 root 1.1
1002 root 1.132 sub SET_COLOR($$$) {
1003     SET_BGCOLOR (SET_FGCOLOR ($_[0], $_[1]), $_[2])
1004     }
1005    
1006 tpope 1.152 sub rend2mask {
1007     no strict 'refs';
1008     my ($str, $mask) = (@_, 0);
1009     my %color = ( fg => undef, bg => undef );
1010     my @failed;
1011     for my $spec ( split /\s+/, $str ) {
1012     if ( $spec =~ /^([fb]g)[_:-]?(\d+)/i ) {
1013     $color{lc($1)} = $2;
1014     } else {
1015     my $neg = $spec =~ s/^[-^]//;
1016     unless ( exists &{"RS_$spec"} ) {
1017     push @failed, $spec;
1018     next;
1019     }
1020     my $cur = &{"RS_$spec"};
1021     if ( $neg ) {
1022     $mask &= ~$cur;
1023     } else {
1024     $mask |= $cur;
1025     }
1026     }
1027     }
1028     ($mask, @color{qw(fg bg)}, \@failed)
1029     }
1030    
1031 root 1.71 # urxvt::term::extension
1032 root 1.55
1033 root 1.71 package urxvt::term::extension;
1034 root 1.69
1035     sub enable {
1036     my ($self, %hook) = @_;
1037     my $pkg = $self->{_pkg};
1038    
1039     while (my ($name, $cb) = each %hook) {
1040     my $htype = $HOOKTYPE{uc $name};
1041     defined $htype
1042     or Carp::croak "unsupported hook type '$name'";
1043    
1044 root 1.92 $self->set_should_invoke ($htype, +1)
1045     unless exists $self->{term}{_hook}[$htype]{$pkg};
1046 root 1.69
1047     $self->{term}{_hook}[$htype]{$pkg} = $cb;
1048     }
1049     }
1050    
1051     sub disable {
1052     my ($self, @hook) = @_;
1053     my $pkg = $self->{_pkg};
1054    
1055     for my $name (@hook) {
1056     my $htype = $HOOKTYPE{uc $name};
1057     defined $htype
1058     or Carp::croak "unsupported hook type '$name'";
1059    
1060 root 1.92 $self->set_should_invoke ($htype, -1)
1061     if delete $self->{term}{_hook}[$htype]{$pkg};
1062 root 1.69 }
1063     }
1064    
1065     our $AUTOLOAD;
1066    
1067     sub AUTOLOAD {
1068     $AUTOLOAD =~ /:([^:]+)$/
1069     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
1070 root 1.23
1071     eval qq{
1072 root 1.69 sub $AUTOLOAD {
1073 root 1.24 my \$proxy = shift;
1074     \$proxy->{term}->$1 (\@_)
1075 root 1.23 }
1076     1
1077     } or die "FATAL: unable to compile method forwarder: $@";
1078    
1079 root 1.69 goto &$AUTOLOAD;
1080 root 1.23 }
1081    
1082 root 1.69 sub DESTROY {
1083 root 1.58 # nop
1084     }
1085    
1086 root 1.55 # urxvt::destroy_hook
1087    
1088 root 1.45 sub urxvt::destroy_hook::DESTROY {
1089     ${$_[0]}->();
1090     }
1091    
1092     sub urxvt::destroy_hook(&) {
1093     bless \shift, urxvt::destroy_hook::
1094     }
1095    
1096 root 1.56 package urxvt::anyevent;
1097    
1098     =head2 The C<urxvt::anyevent> Class
1099    
1100     The sole purpose of this class is to deliver an interface to the
1101     C<AnyEvent> module - any module using it will work inside urxvt without
1102 root 1.75 further programming. The only exception is that you cannot wait on
1103     condition variables, but non-blocking condvar use is ok. What this means
1104     is that you cannot use blocking APIs, but the non-blocking variant should
1105     work.
1106 root 1.55
1107 root 1.56 =cut
1108 root 1.55
1109 root 1.165 our $VERSION = '3.4';
1110 root 1.55
1111     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
1112     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
1113    
1114     sub timer {
1115     my ($class, %arg) = @_;
1116    
1117     my $cb = $arg{cb};
1118    
1119     urxvt::timer
1120     ->new
1121     ->start (urxvt::NOW + $arg{after})
1122     ->cb (sub {
1123     $_[0]->stop; # need to cancel manually
1124     $cb->();
1125     })
1126     }
1127    
1128     sub io {
1129     my ($class, %arg) = @_;
1130    
1131     my $cb = $arg{cb};
1132    
1133     bless [$arg{fh}, urxvt::iow
1134     ->new
1135     ->fd (fileno $arg{fh})
1136     ->events (($arg{poll} =~ /r/ ? 1 : 0)
1137     | ($arg{poll} =~ /w/ ? 2 : 0))
1138     ->start
1139     ->cb (sub {
1140     $cb->(($_[1] & 1 ? 'r' : '')
1141     . ($_[1] & 2 ? 'w' : ''));
1142     })],
1143     urxvt::anyevent::
1144     }
1145    
1146     sub DESTROY {
1147     $_[0][1]->stop;
1148     }
1149    
1150 root 1.150 sub one_event {
1151 root 1.149 Carp::croak "AnyEvent->one_event blocking wait unsupported in urxvt, use a non-blocking API";
1152     }
1153    
1154 root 1.55 package urxvt::term;
1155    
1156 root 1.1 =head2 The C<urxvt::term> Class
1157    
1158     =over 4
1159    
1160 root 1.68 =cut
1161    
1162     # find on_xxx subs in the package and register them
1163     # as hooks
1164     sub register_package {
1165     my ($self, $pkg, $argv) = @_;
1166    
1167 root 1.113 no strict 'refs';
1168    
1169     urxvt::verbose 6, "register package $pkg to $self";
1170    
1171     @{"$pkg\::ISA"} = urxvt::term::extension::;
1172    
1173 root 1.69 my $proxy = bless {
1174     _pkg => $pkg,
1175     argv => $argv,
1176     }, $pkg;
1177     Scalar::Util::weaken ($proxy->{term} = $self);
1178 root 1.68
1179     $self->{_pkg}{$pkg} = $proxy;
1180    
1181 root 1.69 for my $name (@HOOKNAME) {
1182     if (my $ref = $pkg->can ("on_" . lc $name)) {
1183     $proxy->enable ($name => $ref);
1184     }
1185 root 1.68 }
1186     }
1187    
1188 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
1189    
1190     Creates a new terminal, very similar as if you had started it with system
1191 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
1192     hash which defines the environment of the new terminal.
1193 root 1.77
1194     Croaks (and probably outputs an error message) if the new instance
1195     couldn't be created. Returns C<undef> if the new instance didn't
1196     initialise perl, and the terminal object otherwise. The C<init> and
1197 root 1.131 C<start> hooks will be called before this call returns, and are free to
1198     refer to global data (which is race free).
1199 root 1.77
1200     =cut
1201    
1202     sub new {
1203     my ($class, $env, @args) = @_;
1204    
1205 root 1.131 $env or Carp::croak "environment hash missing in call to urxvt::term->new";
1206     @args or Carp::croak "name argument missing in call to urxvt::term->new";
1207    
1208     _new ([ map "$_=$env->{$_}", keys %$env ], \@args);
1209 root 1.77 }
1210    
1211 root 1.36 =item $term->destroy
1212    
1213 root 1.75 Destroy the terminal object (close the window, free resources
1214     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
1215     watchers (timers, io watchers) are still active.
1216 root 1.36
1217 root 1.108 =item $term->exec_async ($cmd[, @args])
1218    
1219     Works like the combination of the C<fork>/C<exec> builtins, which executes
1220     ("starts") programs in the background. This function takes care of setting
1221     the user environment before exec'ing the command (e.g. C<PATH>) and should
1222     be preferred over explicit calls to C<exec> or C<system>.
1223    
1224     Returns the pid of the subprocess or C<undef> on error.
1225    
1226     =cut
1227    
1228     sub exec_async {
1229     my $self = shift;
1230    
1231     my $pid = fork;
1232    
1233     return $pid
1234     if !defined $pid or $pid;
1235    
1236     %ENV = %{ $self->env };
1237    
1238     exec @_;
1239     urxvt::_exit 255;
1240     }
1241    
1242 root 1.49 =item $isset = $term->option ($optval[, $set])
1243    
1244     Returns true if the option specified by C<$optval> is enabled, and
1245     optionally change it. All option values are stored by name in the hash
1246     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1247    
1248 root 1.144 Here is a likely non-exhaustive list of option names, please see the
1249 root 1.49 source file F</src/optinc.h> to see the actual list:
1250    
1251     borderLess console cursorBlink cursorUnderline hold iconic insecure
1252     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
1253 root 1.105 override-redirect pastableTabs pointerBlank reverseVideo scrollBar
1254     scrollBar_floating scrollBar_right scrollTtyKeypress scrollTtyOutput
1255     scrollWithBuffer secondaryScreen secondaryScroll skipBuiltinGlyphs
1256     transparent tripleclickwords utmpInhibit visualBell
1257 root 1.49
1258 root 1.4 =item $value = $term->resource ($name[, $newval])
1259    
1260     Returns the current resource value associated with a given name and
1261     optionally sets a new value. Setting values is most useful in the C<init>
1262     hook. Unset resources are returned and accepted as C<undef>.
1263    
1264     The new value must be properly encoded to a suitable character encoding
1265     before passing it to this method. Similarly, the returned value may need
1266     to be converted from the used encoding to text.
1267    
1268     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1269     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1270     likely change).
1271    
1272     Please note that resource strings will currently only be freed when the
1273     terminal is destroyed, so changing options frequently will eat memory.
1274    
1275 root 1.144 Here is a likely non-exhaustive list of resource names, not all of which
1276 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1277     to see the actual list:
1278 root 1.5
1279     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
1280 root 1.167 borderLess chdir color cursorBlink cursorUnderline cutchars delete_key
1281 root 1.5 display_name embed ext_bwidth fade font geometry hold iconName
1282     imFont imLocale inputMethod insecure int_bwidth intensityStyles
1283 root 1.105 italicFont jumpScroll lineSpace loginShell mapAlert meta8 modifier
1284     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1285     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1286     preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1287     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1288     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1289 ayin 1.163 secondaryScreen secondaryScroll shade term_name title
1290 root 1.105 transient_for transparent transparent_all tripleclickwords utmpInhibit
1291     visualBell
1292 root 1.5
1293 root 1.4 =cut
1294    
1295 root 1.55 sub resource($$;$) {
1296 root 1.4 my ($self, $name) = (shift, shift);
1297     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1298 root 1.169 goto &urxvt::term::_resource
1299 root 1.4 }
1300    
1301 root 1.79 =item $value = $term->x_resource ($pattern)
1302    
1303     Returns the X-Resource for the given pattern, excluding the program or
1304     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1305     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1306     resource with that pattern exists.
1307    
1308     This method should only be called during the C<on_start> hook, as there is
1309     only one resource database per display, and later invocations might return
1310     the wrong resources.
1311    
1312 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
1313    
1314     Adds a keymap translation exactly as specified via a resource. See the
1315     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1316    
1317 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1318 root 1.32
1319 root 1.33 Return and optionally change the current rendition. Text that is output by
1320     the terminal application will use this style.
1321 root 1.32
1322     =item ($row, $col) = $term->screen_cur ([$row, $col])
1323    
1324     Return the current coordinates of the text cursor position and optionally
1325     set it (which is usually bad as applications don't expect that).
1326    
1327 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1328    
1329     =item ($row, $col) = $term->selection_beg ([$row, $col])
1330    
1331     =item ($row, $col) = $term->selection_end ([$row, $col])
1332    
1333     Return the current values of the selection mark, begin or end positions,
1334     and optionally set them to new values.
1335    
1336 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1337    
1338     Tries to make a selection as set by C<selection_beg> and
1339     C<selection_end>. If C<$rectangular> is true (default: false), a
1340     rectangular selection will be made. This is the prefered function to make
1341     a selection.
1342    
1343 root 1.1 =item $success = $term->selection_grab ($eventtime)
1344    
1345 root 1.86 Try to request the primary selection text from the server (for example, as
1346     set by the next method). No visual feedback will be given. This function
1347     is mostly useful from within C<on_sel_grab> hooks.
1348 root 1.1
1349     =item $oldtext = $term->selection ([$newtext])
1350    
1351     Return the current selection text and optionally replace it by C<$newtext>.
1352    
1353 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1354    
1355     Create a simple multi-line overlay box. See the next method for details.
1356    
1357     =cut
1358    
1359     sub overlay_simple {
1360     my ($self, $x, $y, $text) = @_;
1361    
1362     my @lines = split /\n/, $text;
1363    
1364     my $w = List::Util::max map $self->strwidth ($_), @lines;
1365    
1366     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1367     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1368    
1369     $overlay
1370     }
1371 root 1.1
1372 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1373 root 1.1
1374     Create a new (empty) overlay at the given position with the given
1375 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1376     (default: C<OVERLAY_RSTYLE>).
1377 root 1.1
1378 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1379     around the box.
1380 root 1.1
1381 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1382     right/bottom side, respectively.
1383 root 1.1
1384 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1385     as long as the perl object is referenced.
1386 root 1.1
1387 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1388    
1389     =over 4
1390 root 1.1
1391 root 1.172 =item $overlay->set ($x, $y, $text[, $rend])
1392 root 1.1
1393 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1394     text in rxvt-unicode's special encoding and an array of rendition values
1395     at a specific position inside the overlay.
1396 root 1.1
1397 root 1.172 If C<$rend> is missing, then the rendition will not be changed.
1398    
1399 root 1.22 =item $overlay->hide
1400    
1401     If visible, hide the overlay, but do not destroy it.
1402    
1403     =item $overlay->show
1404    
1405     If hidden, display the overlay again.
1406    
1407     =back
1408    
1409 root 1.45 =item $popup = $term->popup ($event)
1410    
1411     Creates a new C<urxvt::popup> object that implements a popup menu. The
1412     C<$event> I<must> be the event causing the menu to pop up (a button event,
1413     currently).
1414    
1415     =cut
1416    
1417 root 1.55 sub popup {
1418 root 1.45 my ($self, $event) = @_;
1419    
1420     $self->grab ($event->{time}, 1)
1421     or return;
1422    
1423     my $popup = bless {
1424     term => $self,
1425     event => $event,
1426     }, urxvt::popup::;
1427    
1428     Scalar::Util::weaken $popup->{term};
1429    
1430     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1431     Scalar::Util::weaken $self->{_destroy}{$popup};
1432    
1433     $popup
1434     }
1435    
1436 root 1.40 =item $cellwidth = $term->strwidth ($string)
1437 root 1.6
1438     Returns the number of screen-cells this string would need. Correctly
1439     accounts for wide and combining characters.
1440    
1441 root 1.40 =item $octets = $term->locale_encode ($string)
1442 root 1.6
1443     Convert the given text string into the corresponding locale encoding.
1444    
1445 root 1.40 =item $string = $term->locale_decode ($octets)
1446 root 1.6
1447     Convert the given locale-encoded octets into a perl string.
1448    
1449 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1450    
1451     XORs the rendition values in the given span with the provided value
1452 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1453     refresh hooks to provide effects similar to the selection.
1454 root 1.70
1455     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1456    
1457     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1458     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1459     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1460 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1461 root 1.70
1462 root 1.69 =item $term->scr_bell
1463    
1464     Ring the bell!
1465    
1466 root 1.33 =item $term->scr_add_lines ($string)
1467    
1468     Write the given text string to the screen, as if output by the application
1469     running inside the terminal. It may not contain command sequences (escape
1470     codes), but is free to use line feeds, carriage returns and tabs. The
1471     string is a normal text string, not in locale-dependent encoding.
1472    
1473     Normally its not a good idea to use this function, as programs might be
1474     confused by changes in cursor position or scrolling. Its useful inside a
1475     C<on_add_lines> hook, though.
1476    
1477 root 1.121 =item $term->scr_change_screen ($screen)
1478    
1479     Switch to given screen - 0 primary, 1 secondary.
1480    
1481 root 1.36 =item $term->cmd_parse ($octets)
1482    
1483     Similar to C<scr_add_lines>, but the argument must be in the
1484     locale-specific encoding of the terminal and can contain command sequences
1485     (escape codes) that will be interpreted.
1486    
1487 root 1.6 =item $term->tt_write ($octets)
1488    
1489     Write the octets given in C<$data> to the tty (i.e. as program input). To
1490 root 1.12 pass characters instead of octets, you should convert your strings first
1491     to the locale-specific encoding using C<< $term->locale_encode >>.
1492    
1493 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1494    
1495     Replaces the event mask of the pty watcher by the given event mask. Can
1496     be used to suppress input and output handling to the pty/tty. See the
1497     description of C<< urxvt::timer->events >>. Make sure to always restore
1498     the previous value.
1499    
1500 root 1.125 =item $fd = $term->pty_fd
1501    
1502     Returns the master file descriptor for the pty in use, or C<-1> if no pty
1503     is used.
1504    
1505 root 1.40 =item $windowid = $term->parent
1506    
1507     Return the window id of the toplevel window.
1508    
1509     =item $windowid = $term->vt
1510    
1511     Return the window id of the terminal window.
1512    
1513 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1514    
1515     Adds the specified events to the vt event mask. Useful e.g. when you want
1516     to receive pointer events all the times:
1517    
1518     $term->vt_emask_add (urxvt::PointerMotionMask);
1519    
1520 root 1.132 =item $term->focus_in
1521    
1522     =item $term->focus_out
1523    
1524     =item $term->key_press ($state, $keycode[, $time])
1525    
1526     =item $term->key_release ($state, $keycode[, $time])
1527    
1528     Deliver various fake events to to terminal.
1529    
1530 root 1.32 =item $window_width = $term->width
1531    
1532     =item $window_height = $term->height
1533    
1534     =item $font_width = $term->fwidth
1535    
1536     =item $font_height = $term->fheight
1537    
1538     =item $font_ascent = $term->fbase
1539    
1540     =item $terminal_rows = $term->nrow
1541    
1542     =item $terminal_columns = $term->ncol
1543    
1544     =item $has_focus = $term->focus
1545    
1546     =item $is_mapped = $term->mapped
1547 root 1.13
1548 root 1.32 =item $max_scrollback = $term->saveLines
1549 root 1.13
1550 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1551 root 1.13
1552 root 1.94 =item $topmost_scrollback_row = $term->top_row
1553 root 1.12
1554 root 1.32 Return various integers describing terminal characteristics.
1555 root 1.12
1556 root 1.77 =item $x_display = $term->display_id
1557    
1558     Return the DISPLAY used by rxvt-unicode.
1559    
1560 root 1.66 =item $lc_ctype = $term->locale
1561    
1562     Returns the LC_CTYPE category string used by this rxvt-unicode.
1563    
1564 root 1.77 =item $env = $term->env
1565    
1566     Returns a copy of the environment in effect for the terminal as a hashref
1567     similar to C<\%ENV>.
1568    
1569 root 1.136 =item @envv = $term->envv
1570    
1571     Returns the environment as array of strings of the form C<VAR=VALUE>.
1572    
1573     =item @argv = $term->argv
1574    
1575     Return the argument vector as this terminal, similar to @ARGV, but
1576     includes the program name as first element.
1577    
1578 root 1.77 =cut
1579 root 1.66
1580 root 1.77 sub env {
1581 root 1.136 +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), $_[0]->envv }
1582 root 1.77 }
1583 root 1.66
1584 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1585    
1586     =item $modifiermask = $term->ModMetaMask
1587    
1588     =item $modifiermask = $term->ModNumLockMask
1589    
1590     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1591     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1592    
1593 root 1.121 =item $screen = $term->current_screen
1594    
1595     Returns the currently displayed screen (0 primary, 1 secondary).
1596    
1597 root 1.122 =item $cursor_is_hidden = $term->hidden_cursor
1598    
1599 root 1.144 Returns whether the cursor is currently hidden or not.
1600 root 1.122
1601 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1602    
1603 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1604     C<0>, which displays the normal terminal contents. Lower values scroll
1605 root 1.12 this many lines into the scrollback buffer.
1606    
1607 root 1.14 =item $term->want_refresh
1608    
1609     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1610     compare the on-screen display with its stored representation. If they
1611     differ, it redraws the differences.
1612    
1613     Used after changing terminal contents to display them.
1614    
1615 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1616 root 1.12
1617 root 1.166 Returns the text of the entire row with number C<$row_number>. Row C<< $term->top_row >>
1618     is the topmost terminal line, row C<< $term->nrow-1 >> is the bottommost
1619     terminal line. Nothing will be returned if a nonexistent line
1620 root 1.24 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 root 1.168 =item $term->XChangeProperty ($window, $property, $type, $format, $octets)
1828 root 1.119
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.164 my $term = urxvt::term->new (
1960     $env, "popup",
1961     "--perl-lib" => "", "--perl-ext-common" => "",
1962     "-pty-fd" => -1, "-sl" => 0,
1963     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1964     "--transient-for" => $self->{term}->parent,
1965     "-display" => $self->{term}->display_id,
1966     "-pe" => "urxvt-popup",
1967     ) or die "unable to create popup window\n";
1968    
1969     unless (delete $term->{urxvt_popup_init_done}) {
1970     $term->ungrab;
1971     $term->destroy;
1972     die "unable to initialise popup window\n";
1973     }
1974 root 1.45 }
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 ayin 1.157 });
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.159 ->events (urxvt::EV_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 root 1.159 C<urxvt::EV_READ> and C<urxvt::EV_WRITE>, which might be ORed
2083     together, or C<urxvt::EV_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 ayin 1.157 });
2135 root 1.114
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: