ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.157
Committed: Wed Oct 31 09:55:24 2007 UTC (16 years, 6 months ago) by ayin
Branch: MAIN
Changes since 1.156: +3 -3 lines
Log Message:
Remove trailing whitespace.

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     URxvt.perl-ext-common: default,automove-background,selection-autotransform
46    
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     It's sole argument is the popup menu, which can be modified. It should
107     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     It's 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 root 1.101 /a/ ? ("a to be" => sub { s/a/b/g }
141     : ()
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     cursor-left or cursor-right keypresses as required (the this only works
171     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     OnTheSpot editing in general, but it seems to work at leats for SCIM and
282     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     This is useful if you need a single terminal thats not using any desktop
300     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.104 =item automove-background
309    
310 root 1.140 This is basically a very small extension that dynamically changes the
311     background pixmap offset to the window position, in effect creating the
312     same effect as pseudo transparency with a custom pixmap. No scaling is
313 root 1.144 supported in this mode. Example:
314 root 1.104
315     @@RXVT_NAME@@ -pixmap background.xpm -pe automove-background
316    
317 root 1.153 L<http://wiki.archlinux.org/index.php/Perl_Background_Rotation/Extensions>
318     shows how this extension can be used to implement an automatically blurred
319     transparent background.
320    
321 root 1.42 =item block-graphics-to-ascii
322    
323 root 1.141 A not very useful example of filtering all text output to the terminal
324 root 1.42 by replacing all line-drawing characters (U+2500 .. U+259F) by a
325     similar-looking ascii character.
326 root 1.35
327 root 1.88 =item digital-clock
328    
329     Displays a digital clock using the built-in overlay.
330    
331 root 1.130 =item remote-clipboard
332 root 1.129
333     Somewhat of a misnomer, this extension adds two menu entries to the
334     selection popup that allows one ti run external commands to store the
335     selection somewhere and fetch it again.
336    
337     We use it to implement a "distributed selection mechanism", which just
338     means that one command uploads the file to a remote server, and another
339     reads it.
340    
341     The commands can be set using the C<URxvt.remote-selection.store> and
342     C<URxvt.remote-selection.fetch> resources. The first should read the
343     selection to store from STDIN (always in UTF-8), the second should provide
344     the selection data on STDOUT (also in UTF-8).
345    
346     The defaults (which are likely useless to you) use rsh and cat:
347 root 1.20
348 root 1.129 URxvt.remote-selection.store: rsh ruth 'cat >/tmp/distributed-selection'
349     URxvt.remote-selection.fetch: rsh ruth 'cat /tmp/distributed-selection'
350 root 1.15
351 elmex 1.97 =item selection-pastebin
352    
353 root 1.98 This is a little rarely useful extension that Uploads the selection as
354 root 1.99 textfile to a remote site (or does other things). (The implementation is
355     not currently secure for use in a multiuser environment as it writes to
356     F</tmp> directly.).
357 root 1.98
358     It listens to the C<selection-pastebin:remote-pastebin> keyboard command,
359     i.e.
360 elmex 1.97
361     URxvt.keysym.C-M-e: perl:selection-pastebin:remote-pastebin
362    
363 root 1.98 Pressing this combination runs a command with C<%> replaced by the name of
364     the textfile. This command can be set via a resource:
365    
366     URxvt.selection-pastebin.cmd: rsync -apP % ruth:/var/www/www.ta-sa.org/files/txt/.
367    
368     And the default is likely not useful to anybody but the few people around
369     here :)
370 elmex 1.97
371 root 1.98 The name of the textfile is the hex encoded md5 sum of the selection, so
372     the same content should lead to the same filename.
373 elmex 1.97
374 root 1.98 After a successful upload the selection will be replaced by the text given
375     in the C<selection-pastebin-url> resource (again, the % is the placeholder
376     for the filename):
377 elmex 1.97
378 root 1.98 URxvt.selection-pastebin.url: http://www.ta-sa.org/files/txt/%
379 elmex 1.97
380 root 1.146 I<Note to xrdb users:> xrdb uses the C preprocessor, which might interpret
381     the double C</> characters as comment start. Use C<\057\057> instead,
382     which works regardless of wether xrdb is used to parse the resource file
383     or not.
384    
385 root 1.129 =item example-refresh-hooks
386    
387     Displays a very simple digital clock in the upper right corner of the
388     window. Illustrates overwriting the refresh callbacks to create your own
389     overlays or changes.
390    
391 root 1.15 =back
392    
393 root 1.75 =head1 API DOCUMENTATION
394    
395 root 1.6 =head2 General API Considerations
396    
397     All objects (such as terminals, time watchers etc.) are typical
398     reference-to-hash objects. The hash can be used to store anything you
399 root 1.7 like. All members starting with an underscore (such as C<_ptr> or
400 root 1.23 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
401 root 1.7 modified).
402 root 1.6
403     When objects are destroyed on the C++ side, the perl object hashes are
404     emptied, so its best to store related objects such as time watchers and
405     the like inside the terminal object so they get destroyed as soon as the
406     terminal is destroyed.
407    
408 root 1.33 Argument names also often indicate the type of a parameter. Here are some
409     hints on what they mean:
410    
411     =over 4
412    
413     =item $text
414    
415     Rxvt-unicodes special way of encoding text, where one "unicode" character
416 root 1.78 always represents one screen cell. See L<ROW_t> for a discussion of this format.
417 root 1.33
418     =item $string
419    
420     A perl text string, with an emphasis on I<text>. It can store all unicode
421     characters and is to be distinguished with text encoded in a specific
422     encoding (often locale-specific) and binary data.
423    
424     =item $octets
425    
426     Either binary data or - more common - a text string encoded in a
427     locale-specific way.
428    
429     =back
430    
431 root 1.69 =head2 Extension Objects
432    
433 root 1.139 Every perl extension is a perl class. A separate perl object is created
434 root 1.145 for each terminal, and each terminal has its own set of extenion objects,
435     which are passed as the first parameter to hooks. So extensions can use
436     their C<$self> object without having to think about clashes with other
437     extensions or other terminals, with the exception of methods and members
438     that begin with an underscore character C<_>: these are reserved for
439     internal use.
440 root 1.69
441     Although it isn't a C<urxvt::term> object, you can call all methods of the
442     C<urxvt::term> class on this object.
443    
444     It has the following methods and data members:
445    
446     =over 4
447    
448     =item $urxvt_term = $self->{term}
449    
450     Returns the C<urxvt::term> object associated with this instance of the
451     extension. This member I<must not> be changed in any way.
452    
453     =item $self->enable ($hook_name => $cb, [$hook_name => $cb..])
454    
455     Dynamically enable the given hooks (named without the C<on_> prefix) for
456     this extension, replacing any previous hook. This is useful when you want
457     to overwrite time-critical hooks only temporarily.
458    
459     =item $self->disable ($hook_name[, $hook_name..])
460    
461     Dynamically disable the given hooks.
462    
463     =back
464    
465 root 1.1 =head2 Hooks
466    
467 root 1.43 The following subroutines can be declared in extension files, and will be
468 root 1.23 called whenever the relevant event happens.
469    
470 root 1.144 The first argument passed to them is an extension object as described in
471 root 1.69 the in the C<Extension Objects> section.
472    
473 root 1.112 B<All> of these hooks must return a boolean value. If any of the called
474     hooks returns true, then the event counts as being I<consumed>, and the
475     relevant action might not be carried out by the C++ code.
476 root 1.1
477 root 1.69 I<< When in doubt, return a false value (preferably C<()>). >>
478 root 1.1
479     =over 4
480    
481     =item on_init $term
482    
483     Called after a new terminal object has been initialized, but before
484 root 1.36 windows are created or the command gets run. Most methods are unsafe to
485     call or deliver senseless data, as terminal size and other characteristics
486 root 1.112 have not yet been determined. You can safely query and change resources
487     and options, though. For many purposes the C<on_start> hook is a better
488     place.
489    
490     =item on_start $term
491    
492     Called at the very end of initialisation of a new terminal, just before
493 root 1.144 trying to map (display) the toplevel and returning to the main loop.
494 root 1.113
495     =item on_destroy $term
496    
497 root 1.127 Called whenever something tries to destroy terminal, when the terminal is
498     still fully functional (not for long, though).
499 root 1.1
500     =item on_reset $term
501    
502     Called after the screen is "reset" for any reason, such as resizing or
503     control sequences. Here is where you can react on changes to size-related
504     variables.
505    
506 root 1.108 =item on_child_start $term, $pid
507    
508     Called just after the child process has been C<fork>ed.
509    
510     =item on_child_exit $term, $status
511    
512     Called just after the child process has exited. C<$status> is the status
513     from C<waitpid>.
514    
515 root 1.1 =item on_sel_make $term, $eventtime
516    
517     Called whenever a selection has been made by the user, but before the
518     selection text is copied, so changes to the beginning, end or type of the
519     selection will be honored.
520    
521     Returning a true value aborts selection making by urxvt, in which case you
522     have to make a selection yourself by calling C<< $term->selection_grab >>.
523    
524     =item on_sel_grab $term, $eventtime
525    
526     Called whenever a selection has been copied, but before the selection is
527     requested from the server. The selection text can be queried and changed
528     by calling C<< $term->selection >>.
529    
530 root 1.144 Returning a true value aborts selection grabbing. It will still be highlighted.
531 root 1.1
532 root 1.22 =item on_sel_extend $term
533    
534     Called whenever the user tries to extend the selection (e.g. with a double
535     click) and is either supposed to return false (normal operation), or
536 root 1.144 should extend the selection itself and return true to suppress the built-in
537 root 1.85 processing. This can happen multiple times, as long as the callback
538     returns true, it will be called on every further click by the user and is
539     supposed to enlarge the selection more and more, if possible.
540 root 1.22
541     See the F<selection> example extension.
542    
543 root 1.1 =item on_view_change $term, $offset
544    
545 root 1.144 Called whenever the view offset changes, i.e. the user or program
546 root 1.1 scrolls. Offset C<0> means display the normal terminal, positive values
547     show this many lines of scrollback.
548    
549     =item on_scroll_back $term, $lines, $saved
550    
551     Called whenever lines scroll out of the terminal area into the scrollback
552     buffer. C<$lines> is the number of lines scrolled out and may be larger
553     than the scroll back buffer or the terminal.
554    
555     It is called before lines are scrolled out (so rows 0 .. min ($lines - 1,
556     $nrow - 1) represent the lines to be scrolled out). C<$saved> is the total
557     number of lines that will be in the scrollback buffer.
558    
559 root 1.137 =item on_osc_seq $term, $op, $args
560    
561     Called on every OSC sequence and can be used to suppress it or modify its
562     behaviour. The default should be to return an empty list. A true value
563     suppresses execution of the request completely. Make sure you don't get
564     confused by recursive invocations when you output an osc sequence within
565     this callback.
566    
567     C<on_osc_seq_perl> should be used for new behaviour.
568    
569     =item on_osc_seq_perl $term, $string
570 root 1.28
571 root 1.29 Called whenever the B<ESC ] 777 ; string ST> command sequence (OSC =
572     operating system command) is processed. Cursor position and other state
573     information is up-to-date when this happens. For interoperability, the
574     string should start with the extension name and a colon, to distinguish
575     it from commands for other extensions, and this might be enforced in the
576     future.
577    
578     Be careful not ever to trust (in a security sense) the data you receive,
579 root 1.144 as its source can not easily be controlled (e-mail content, messages from
580 root 1.29 other users on the same system etc.).
581 root 1.28
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     Called just before the screen gets redrawn. Can be used for overlay
612     or similar effects by modify terminal contents in refresh_begin, and
613     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     our $VERSION = 1;
1110    
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     sub condvar {
1151 root 1.150 bless \my $flag, urxvt::anyevent::
1152 root 1.55 }
1153    
1154 root 1.150 sub broadcast {
1155 root 1.55 ${$_[0]}++;
1156     }
1157    
1158 root 1.150 sub wait {
1159 root 1.55 unless (${$_[0]}) {
1160 root 1.69 Carp::croak "AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API";
1161 root 1.55 }
1162     }
1163    
1164 root 1.150 sub one_event {
1165 root 1.149 Carp::croak "AnyEvent->one_event blocking wait unsupported in urxvt, use a non-blocking API";
1166     }
1167    
1168 root 1.55 package urxvt::term;
1169    
1170 root 1.1 =head2 The C<urxvt::term> Class
1171    
1172     =over 4
1173    
1174 root 1.68 =cut
1175    
1176     # find on_xxx subs in the package and register them
1177     # as hooks
1178     sub register_package {
1179     my ($self, $pkg, $argv) = @_;
1180    
1181 root 1.113 no strict 'refs';
1182    
1183     urxvt::verbose 6, "register package $pkg to $self";
1184    
1185     @{"$pkg\::ISA"} = urxvt::term::extension::;
1186    
1187 root 1.69 my $proxy = bless {
1188     _pkg => $pkg,
1189     argv => $argv,
1190     }, $pkg;
1191     Scalar::Util::weaken ($proxy->{term} = $self);
1192 root 1.68
1193     $self->{_pkg}{$pkg} = $proxy;
1194    
1195 root 1.69 for my $name (@HOOKNAME) {
1196     if (my $ref = $pkg->can ("on_" . lc $name)) {
1197     $proxy->enable ($name => $ref);
1198     }
1199 root 1.68 }
1200     }
1201    
1202 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
1203    
1204     Creates a new terminal, very similar as if you had started it with system
1205 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
1206     hash which defines the environment of the new terminal.
1207 root 1.77
1208     Croaks (and probably outputs an error message) if the new instance
1209     couldn't be created. Returns C<undef> if the new instance didn't
1210     initialise perl, and the terminal object otherwise. The C<init> and
1211 root 1.131 C<start> hooks will be called before this call returns, and are free to
1212     refer to global data (which is race free).
1213 root 1.77
1214     =cut
1215    
1216     sub new {
1217     my ($class, $env, @args) = @_;
1218    
1219 root 1.131 $env or Carp::croak "environment hash missing in call to urxvt::term->new";
1220     @args or Carp::croak "name argument missing in call to urxvt::term->new";
1221    
1222     _new ([ map "$_=$env->{$_}", keys %$env ], \@args);
1223 root 1.77 }
1224    
1225 root 1.36 =item $term->destroy
1226    
1227 root 1.75 Destroy the terminal object (close the window, free resources
1228     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
1229     watchers (timers, io watchers) are still active.
1230 root 1.36
1231 root 1.108 =item $term->exec_async ($cmd[, @args])
1232    
1233     Works like the combination of the C<fork>/C<exec> builtins, which executes
1234     ("starts") programs in the background. This function takes care of setting
1235     the user environment before exec'ing the command (e.g. C<PATH>) and should
1236     be preferred over explicit calls to C<exec> or C<system>.
1237    
1238     Returns the pid of the subprocess or C<undef> on error.
1239    
1240     =cut
1241    
1242     sub exec_async {
1243     my $self = shift;
1244    
1245     my $pid = fork;
1246    
1247     return $pid
1248     if !defined $pid or $pid;
1249    
1250     %ENV = %{ $self->env };
1251    
1252     exec @_;
1253     urxvt::_exit 255;
1254     }
1255    
1256 root 1.49 =item $isset = $term->option ($optval[, $set])
1257    
1258     Returns true if the option specified by C<$optval> is enabled, and
1259     optionally change it. All option values are stored by name in the hash
1260     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1261    
1262 root 1.144 Here is a likely non-exhaustive list of option names, please see the
1263 root 1.49 source file F</src/optinc.h> to see the actual list:
1264    
1265     borderLess console cursorBlink cursorUnderline hold iconic insecure
1266     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
1267 root 1.105 override-redirect pastableTabs pointerBlank reverseVideo scrollBar
1268     scrollBar_floating scrollBar_right scrollTtyKeypress scrollTtyOutput
1269     scrollWithBuffer secondaryScreen secondaryScroll skipBuiltinGlyphs
1270     transparent tripleclickwords utmpInhibit visualBell
1271 root 1.49
1272 root 1.4 =item $value = $term->resource ($name[, $newval])
1273    
1274     Returns the current resource value associated with a given name and
1275     optionally sets a new value. Setting values is most useful in the C<init>
1276     hook. Unset resources are returned and accepted as C<undef>.
1277    
1278     The new value must be properly encoded to a suitable character encoding
1279     before passing it to this method. Similarly, the returned value may need
1280     to be converted from the used encoding to text.
1281    
1282     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1283     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1284     likely change).
1285    
1286     Please note that resource strings will currently only be freed when the
1287     terminal is destroyed, so changing options frequently will eat memory.
1288    
1289 root 1.144 Here is a likely non-exhaustive list of resource names, not all of which
1290 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1291     to see the actual list:
1292 root 1.5
1293     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
1294     borderLess color cursorBlink cursorUnderline cutchars delete_key
1295     display_name embed ext_bwidth fade font geometry hold iconName
1296     imFont imLocale inputMethod insecure int_bwidth intensityStyles
1297 root 1.105 italicFont jumpScroll lineSpace loginShell mapAlert meta8 modifier
1298     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1299     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1300     preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1301     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1302     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1303     secondaryScreen secondaryScroll selectstyle shade term_name title
1304     transient_for transparent transparent_all tripleclickwords utmpInhibit
1305     visualBell
1306 root 1.5
1307 root 1.4 =cut
1308    
1309 root 1.55 sub resource($$;$) {
1310 root 1.4 my ($self, $name) = (shift, shift);
1311     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1312 root 1.45 &urxvt::term::_resource
1313 root 1.4 }
1314    
1315 root 1.79 =item $value = $term->x_resource ($pattern)
1316    
1317     Returns the X-Resource for the given pattern, excluding the program or
1318     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1319     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1320     resource with that pattern exists.
1321    
1322     This method should only be called during the C<on_start> hook, as there is
1323     only one resource database per display, and later invocations might return
1324     the wrong resources.
1325    
1326 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
1327    
1328     Adds a keymap translation exactly as specified via a resource. See the
1329     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1330    
1331 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1332 root 1.32
1333 root 1.33 Return and optionally change the current rendition. Text that is output by
1334     the terminal application will use this style.
1335 root 1.32
1336     =item ($row, $col) = $term->screen_cur ([$row, $col])
1337    
1338     Return the current coordinates of the text cursor position and optionally
1339     set it (which is usually bad as applications don't expect that).
1340    
1341 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1342    
1343     =item ($row, $col) = $term->selection_beg ([$row, $col])
1344    
1345     =item ($row, $col) = $term->selection_end ([$row, $col])
1346    
1347     Return the current values of the selection mark, begin or end positions,
1348     and optionally set them to new values.
1349    
1350 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1351    
1352     Tries to make a selection as set by C<selection_beg> and
1353     C<selection_end>. If C<$rectangular> is true (default: false), a
1354     rectangular selection will be made. This is the prefered function to make
1355     a selection.
1356    
1357 root 1.1 =item $success = $term->selection_grab ($eventtime)
1358    
1359 root 1.86 Try to request the primary selection text from the server (for example, as
1360     set by the next method). No visual feedback will be given. This function
1361     is mostly useful from within C<on_sel_grab> hooks.
1362 root 1.1
1363     =item $oldtext = $term->selection ([$newtext])
1364    
1365     Return the current selection text and optionally replace it by C<$newtext>.
1366    
1367 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1368    
1369     Create a simple multi-line overlay box. See the next method for details.
1370    
1371     =cut
1372    
1373     sub overlay_simple {
1374     my ($self, $x, $y, $text) = @_;
1375    
1376     my @lines = split /\n/, $text;
1377    
1378     my $w = List::Util::max map $self->strwidth ($_), @lines;
1379    
1380     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1381     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1382    
1383     $overlay
1384     }
1385 root 1.1
1386 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1387 root 1.1
1388     Create a new (empty) overlay at the given position with the given
1389 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1390     (default: C<OVERLAY_RSTYLE>).
1391 root 1.1
1392 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1393     around the box.
1394 root 1.1
1395 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1396     right/bottom side, respectively.
1397 root 1.1
1398 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1399     as long as the perl object is referenced.
1400 root 1.1
1401 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1402    
1403     =over 4
1404 root 1.1
1405 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
1406 root 1.1
1407 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1408     text in rxvt-unicode's special encoding and an array of rendition values
1409     at a specific position inside the overlay.
1410 root 1.1
1411 root 1.22 =item $overlay->hide
1412    
1413     If visible, hide the overlay, but do not destroy it.
1414    
1415     =item $overlay->show
1416    
1417     If hidden, display the overlay again.
1418    
1419     =back
1420    
1421 root 1.45 =item $popup = $term->popup ($event)
1422    
1423     Creates a new C<urxvt::popup> object that implements a popup menu. The
1424     C<$event> I<must> be the event causing the menu to pop up (a button event,
1425     currently).
1426    
1427     =cut
1428    
1429 root 1.55 sub popup {
1430 root 1.45 my ($self, $event) = @_;
1431    
1432     $self->grab ($event->{time}, 1)
1433     or return;
1434    
1435     my $popup = bless {
1436     term => $self,
1437     event => $event,
1438     }, urxvt::popup::;
1439    
1440     Scalar::Util::weaken $popup->{term};
1441    
1442     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1443     Scalar::Util::weaken $self->{_destroy}{$popup};
1444    
1445     $popup
1446     }
1447    
1448 root 1.40 =item $cellwidth = $term->strwidth ($string)
1449 root 1.6
1450     Returns the number of screen-cells this string would need. Correctly
1451     accounts for wide and combining characters.
1452    
1453 root 1.40 =item $octets = $term->locale_encode ($string)
1454 root 1.6
1455     Convert the given text string into the corresponding locale encoding.
1456    
1457 root 1.40 =item $string = $term->locale_decode ($octets)
1458 root 1.6
1459     Convert the given locale-encoded octets into a perl string.
1460    
1461 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1462    
1463     XORs the rendition values in the given span with the provided value
1464 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1465     refresh hooks to provide effects similar to the selection.
1466 root 1.70
1467     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1468    
1469     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1470     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1471     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1472 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1473 root 1.70
1474 root 1.69 =item $term->scr_bell
1475    
1476     Ring the bell!
1477    
1478 root 1.33 =item $term->scr_add_lines ($string)
1479    
1480     Write the given text string to the screen, as if output by the application
1481     running inside the terminal. It may not contain command sequences (escape
1482     codes), but is free to use line feeds, carriage returns and tabs. The
1483     string is a normal text string, not in locale-dependent encoding.
1484    
1485     Normally its not a good idea to use this function, as programs might be
1486     confused by changes in cursor position or scrolling. Its useful inside a
1487     C<on_add_lines> hook, though.
1488    
1489 root 1.121 =item $term->scr_change_screen ($screen)
1490    
1491     Switch to given screen - 0 primary, 1 secondary.
1492    
1493 root 1.36 =item $term->cmd_parse ($octets)
1494    
1495     Similar to C<scr_add_lines>, but the argument must be in the
1496     locale-specific encoding of the terminal and can contain command sequences
1497     (escape codes) that will be interpreted.
1498    
1499 root 1.6 =item $term->tt_write ($octets)
1500    
1501     Write the octets given in C<$data> to the tty (i.e. as program input). To
1502 root 1.12 pass characters instead of octets, you should convert your strings first
1503     to the locale-specific encoding using C<< $term->locale_encode >>.
1504    
1505 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1506    
1507     Replaces the event mask of the pty watcher by the given event mask. Can
1508     be used to suppress input and output handling to the pty/tty. See the
1509     description of C<< urxvt::timer->events >>. Make sure to always restore
1510     the previous value.
1511    
1512 root 1.125 =item $fd = $term->pty_fd
1513    
1514     Returns the master file descriptor for the pty in use, or C<-1> if no pty
1515     is used.
1516    
1517 root 1.40 =item $windowid = $term->parent
1518    
1519     Return the window id of the toplevel window.
1520    
1521     =item $windowid = $term->vt
1522    
1523     Return the window id of the terminal window.
1524    
1525 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1526    
1527     Adds the specified events to the vt event mask. Useful e.g. when you want
1528     to receive pointer events all the times:
1529    
1530     $term->vt_emask_add (urxvt::PointerMotionMask);
1531    
1532 root 1.132 =item $term->focus_in
1533    
1534     =item $term->focus_out
1535    
1536     =item $term->key_press ($state, $keycode[, $time])
1537    
1538     =item $term->key_release ($state, $keycode[, $time])
1539    
1540     Deliver various fake events to to terminal.
1541    
1542 root 1.32 =item $window_width = $term->width
1543    
1544     =item $window_height = $term->height
1545    
1546     =item $font_width = $term->fwidth
1547    
1548     =item $font_height = $term->fheight
1549    
1550     =item $font_ascent = $term->fbase
1551    
1552     =item $terminal_rows = $term->nrow
1553    
1554     =item $terminal_columns = $term->ncol
1555    
1556     =item $has_focus = $term->focus
1557    
1558     =item $is_mapped = $term->mapped
1559 root 1.13
1560 root 1.32 =item $max_scrollback = $term->saveLines
1561 root 1.13
1562 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1563 root 1.13
1564 root 1.94 =item $topmost_scrollback_row = $term->top_row
1565 root 1.12
1566 root 1.32 Return various integers describing terminal characteristics.
1567 root 1.12
1568 root 1.77 =item $x_display = $term->display_id
1569    
1570     Return the DISPLAY used by rxvt-unicode.
1571    
1572 root 1.66 =item $lc_ctype = $term->locale
1573    
1574     Returns the LC_CTYPE category string used by this rxvt-unicode.
1575    
1576 root 1.77 =item $env = $term->env
1577    
1578     Returns a copy of the environment in effect for the terminal as a hashref
1579     similar to C<\%ENV>.
1580    
1581 root 1.136 =item @envv = $term->envv
1582    
1583     Returns the environment as array of strings of the form C<VAR=VALUE>.
1584    
1585     =item @argv = $term->argv
1586    
1587     Return the argument vector as this terminal, similar to @ARGV, but
1588     includes the program name as first element.
1589    
1590 root 1.77 =cut
1591 root 1.66
1592 root 1.77 sub env {
1593 root 1.136 +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), $_[0]->envv }
1594 root 1.77 }
1595 root 1.66
1596 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1597    
1598     =item $modifiermask = $term->ModMetaMask
1599    
1600     =item $modifiermask = $term->ModNumLockMask
1601    
1602     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1603     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1604    
1605 root 1.121 =item $screen = $term->current_screen
1606    
1607     Returns the currently displayed screen (0 primary, 1 secondary).
1608    
1609 root 1.122 =item $cursor_is_hidden = $term->hidden_cursor
1610    
1611 root 1.144 Returns whether the cursor is currently hidden or not.
1612 root 1.122
1613 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1614    
1615 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1616     C<0>, which displays the normal terminal contents. Lower values scroll
1617 root 1.12 this many lines into the scrollback buffer.
1618    
1619 root 1.14 =item $term->want_refresh
1620    
1621     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1622     compare the on-screen display with its stored representation. If they
1623     differ, it redraws the differences.
1624    
1625     Used after changing terminal contents to display them.
1626    
1627 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1628 root 1.12
1629     Returns the text of the entire row with number C<$row_number>. Row C<0>
1630     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1631     terminal line. The scrollback buffer starts at line C<-1> and extends to
1632 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1633     is requested.
1634 root 1.12
1635 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1636     line, starting at column C<$start_col> (default C<0>), which is useful
1637 root 1.18 to replace only parts of a line. The font index in the rendition will
1638 root 1.13 automatically be updated.
1639 root 1.12
1640 root 1.124 C<$text> is in a special encoding: tabs and wide characters that use more
1641     than one cell when displayed are padded with C<$urxvt::NOCHAR> (chr 65535)
1642 root 1.121 characters. Characters with combining characters and other characters that
1643     do not fit into the normal tetx encoding will be replaced with characters
1644     in the private use area.
1645 root 1.12
1646     You have to obey this encoding when changing text. The advantage is
1647     that C<substr> and similar functions work on screen cells and not on
1648     characters.
1649    
1650     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1651     can be used to convert normal strings into this encoding and vice versa.
1652    
1653 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1654    
1655     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1656     bitsets. Rendition bitsets contain information about colour, font, font
1657     styles and similar information. See also C<< $term->ROW_t >>.
1658    
1659     When setting rendition, the font mask will be ignored.
1660 root 1.12
1661 root 1.18 See the section on RENDITION, above.
1662 root 1.13
1663     =item $length = $term->ROW_l ($row_number[, $new_length])
1664    
1665 root 1.24 Returns the number of screen cells that are in use ("the line
1666     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1667     line is joined with the following one.
1668    
1669     =item $bool = $term->is_longer ($row_number)
1670    
1671     Returns true if the row is part of a multiple-row logical "line" (i.e.
1672     joined with the following row), which means all characters are in use
1673     and it is continued on the next row (and possibly a continuation of the
1674     previous row(s)).
1675    
1676     =item $line = $term->line ($row_number)
1677    
1678     Create and return a new C<urxvt::line> object that stores information
1679     about the logical line that row C<$row_number> is part of. It supports the
1680     following methods:
1681 root 1.12
1682 root 1.24 =over 4
1683    
1684 root 1.35 =item $text = $line->t ([$new_text])
1685 root 1.24
1686 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1687 root 1.24
1688 root 1.35 =item $rend = $line->r ([$new_rend])
1689 root 1.24
1690 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1691 root 1.24
1692     =item $length = $line->l
1693    
1694     Returns the length of the line in cells, similar to C<ROW_l>.
1695    
1696     =item $rownum = $line->beg
1697    
1698     =item $rownum = $line->end
1699    
1700     Return the row number of the first/last row of the line, respectively.
1701    
1702     =item $offset = $line->offset_of ($row, $col)
1703    
1704     Returns the character offset of the given row|col pair within the logical
1705 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1706     offsets outside the string.
1707 root 1.24
1708     =item ($row, $col) = $line->coord_of ($offset)
1709    
1710     Translates a string offset into terminal coordinates again.
1711    
1712     =back
1713    
1714     =cut
1715    
1716 root 1.55 sub line {
1717 root 1.24 my ($self, $row) = @_;
1718    
1719     my $maxrow = $self->nrow - 1;
1720    
1721     my ($beg, $end) = ($row, $row);
1722    
1723     --$beg while $self->ROW_is_longer ($beg - 1);
1724     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1725    
1726     bless {
1727     term => $self,
1728     beg => $beg,
1729     end => $end,
1730 root 1.34 ncol => $self->ncol,
1731 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1732     }, urxvt::line::
1733     }
1734    
1735     sub urxvt::line::t {
1736     my ($self) = @_;
1737    
1738 root 1.34 if (@_ > 1)
1739     {
1740     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1741     for $self->{beg} .. $self->{end};
1742     }
1743    
1744     defined wantarray &&
1745     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1746     0, $self->{len}
1747 root 1.24 }
1748    
1749     sub urxvt::line::r {
1750     my ($self) = @_;
1751    
1752 root 1.34 if (@_ > 1)
1753     {
1754     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1755     for $self->{beg} .. $self->{end};
1756     }
1757    
1758     if (defined wantarray) {
1759     my $rend = [
1760     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1761     ];
1762     $#$rend = $self->{len} - 1;
1763     return $rend;
1764     }
1765    
1766     ()
1767 root 1.24 }
1768    
1769     sub urxvt::line::beg { $_[0]{beg} }
1770     sub urxvt::line::end { $_[0]{end} }
1771     sub urxvt::line::l { $_[0]{len} }
1772    
1773     sub urxvt::line::offset_of {
1774     my ($self, $row, $col) = @_;
1775    
1776 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1777 root 1.24 }
1778    
1779     sub urxvt::line::coord_of {
1780     my ($self, $offset) = @_;
1781    
1782     use integer;
1783    
1784     (
1785 root 1.34 $offset / $self->{ncol} + $self->{beg},
1786     $offset % $self->{ncol}
1787 root 1.24 )
1788     }
1789    
1790 root 1.12 =item $text = $term->special_encode $string
1791    
1792     Converts a perl string into the special encoding used by rxvt-unicode,
1793     where one character corresponds to one screen cell. See
1794     C<< $term->ROW_t >> for details.
1795    
1796     =item $string = $term->special_decode $text
1797    
1798 root 1.144 Converts rxvt-unicodes text representation into a perl string. See
1799 root 1.12 C<< $term->ROW_t >> for details.
1800 root 1.6
1801 root 1.131 =item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
1802    
1803     =item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])
1804 root 1.61
1805 root 1.131 Register/unregister a synchronous button grab. See the XGrabButton
1806     manpage.
1807 root 1.61
1808     =item $success = $term->grab ($eventtime[, $sync])
1809    
1810     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1811 root 1.144 synchronous (C<$sync> is true). Also remembers the grab timestamp.
1812 root 1.61
1813     =item $term->allow_events_async
1814    
1815     Calls XAllowEvents with AsyncBoth for the most recent grab.
1816    
1817     =item $term->allow_events_sync
1818    
1819     Calls XAllowEvents with SyncBoth for the most recent grab.
1820    
1821     =item $term->allow_events_replay
1822    
1823     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1824     recent grab.
1825    
1826     =item $term->ungrab
1827    
1828     Calls XUngrab for the most recent grab. Is called automatically on
1829     evaluation errors, as it is better to lose the grab in the error case as
1830     the session.
1831    
1832 root 1.119 =item $atom = $term->XInternAtom ($atom_name[, $only_if_exists])
1833    
1834     =item $atom_name = $term->XGetAtomName ($atom)
1835    
1836     =item @atoms = $term->XListProperties ($window)
1837    
1838     =item ($type,$format,$octets) = $term->XGetWindowProperty ($window, $property)
1839    
1840     =item $term->XChangeWindowProperty ($window, $property, $type, $format, $octets)
1841    
1842     =item $term->XDeleteProperty ($window, $property)
1843    
1844     =item $window = $term->DefaultRootWindow
1845    
1846     =item $term->XReparentWindow ($window, $parent, [$x, $y])
1847    
1848     =item $term->XMapWindow ($window)
1849    
1850     =item $term->XUnmapWindow ($window)
1851    
1852     =item $term->XMoveResizeWindow ($window, $x, $y, $width, $height)
1853    
1854     =item ($x, $y, $child_window) = $term->XTranslateCoordinates ($src, $dst, $x, $y)
1855    
1856     =item $term->XChangeInput ($window, $add_events[, $del_events])
1857    
1858     Various X or X-related functions. The C<$term> object only serves as
1859     the source of the display, otherwise those functions map more-or-less
1860     directory onto the X functions of the same name.
1861    
1862 root 1.1 =back
1863    
1864 root 1.55 =cut
1865    
1866     package urxvt::popup;
1867    
1868 root 1.45 =head2 The C<urxvt::popup> Class
1869    
1870     =over 4
1871    
1872     =cut
1873    
1874     sub add_item {
1875     my ($self, $item) = @_;
1876    
1877 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1878     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1879     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1880    
1881     $item->{render} ||= sub { $_[0]{text} };
1882    
1883 root 1.45 push @{ $self->{item} }, $item;
1884     }
1885    
1886 root 1.76 =item $popup->add_title ($title)
1887    
1888     Adds a non-clickable title to the popup.
1889    
1890     =cut
1891    
1892     sub add_title {
1893     my ($self, $title) = @_;
1894    
1895     $self->add_item ({
1896     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1897     text => $title,
1898     activate => sub { },
1899     });
1900     }
1901    
1902     =item $popup->add_separator ([$sepchr])
1903    
1904     Creates a separator, optionally using the character given as C<$sepchr>.
1905    
1906     =cut
1907    
1908 root 1.53 sub add_separator {
1909     my ($self, $sep) = @_;
1910    
1911 root 1.67 $sep ||= "=";
1912 root 1.53
1913     $self->add_item ({
1914     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1915     text => "",
1916 root 1.65 render => sub { $sep x $self->{term}->ncol },
1917 root 1.53 activate => sub { },
1918     });
1919     }
1920    
1921 root 1.76 =item $popup->add_button ($text, $cb)
1922    
1923     Adds a clickable button to the popup. C<$cb> is called whenever it is
1924     selected.
1925 root 1.53
1926 root 1.76 =cut
1927 root 1.53
1928 root 1.45 sub add_button {
1929     my ($self, $text, $cb) = @_;
1930    
1931 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1932 root 1.48 }
1933    
1934 root 1.133 =item $popup->add_toggle ($text, $initial_value, $cb)
1935 root 1.76
1936 root 1.133 Adds a toggle/checkbox item to the popup. The callback gets called
1937     whenever it gets toggled, with a boolean indicating its new value as its
1938     first argument.
1939 root 1.76
1940     =cut
1941    
1942 root 1.48 sub add_toggle {
1943 root 1.133 my ($self, $text, $value, $cb) = @_;
1944 root 1.48
1945 root 1.49 my $item; $item = {
1946     type => "button",
1947     text => " $text",
1948     value => $value,
1949 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1950 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
1951 root 1.49 };
1952    
1953     $self->add_item ($item);
1954 root 1.45 }
1955    
1956 root 1.76 =item $popup->show
1957    
1958     Displays the popup (which is initially hidden).
1959    
1960     =cut
1961    
1962 root 1.45 sub show {
1963     my ($self) = @_;
1964    
1965     local $urxvt::popup::self = $self;
1966    
1967 root 1.77 my $env = $self->{term}->env;
1968     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
1969     delete $env->{LC_ALL};
1970     $env->{LC_CTYPE} = $self->{term}->locale;
1971    
1972 root 1.103 urxvt::term->new ($env, "popup",
1973 root 1.105 "--perl-lib" => "", "--perl-ext-common" => "",
1974 root 1.106 "-pty-fd" => -1, "-sl" => 0,
1975     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1976 root 1.77 "--transient-for" => $self->{term}->parent,
1977     "-display" => $self->{term}->display_id,
1978     "-pe" => "urxvt-popup")
1979 root 1.45 or die "unable to create popup window\n";
1980     }
1981    
1982     sub DESTROY {
1983     my ($self) = @_;
1984    
1985 root 1.58 delete $self->{term}{_destroy}{$self};
1986 root 1.45 $self->{term}->ungrab;
1987     }
1988    
1989 root 1.78 =back
1990    
1991 root 1.113 =cut
1992    
1993     package urxvt::watcher;
1994    
1995 root 1.1 =head2 The C<urxvt::timer> Class
1996    
1997     This class implements timer watchers/events. Time is represented as a
1998     fractional number of seconds since the epoch. Example:
1999    
2000 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
2001 root 1.1 $term->{timer} = urxvt::timer
2002     ->new
2003 root 1.20 ->interval (1)
2004 root 1.1 ->cb (sub {
2005 root 1.20 $term->{overlay}->set (0, 0,
2006     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
2007 ayin 1.157 });
2008 root 1.1
2009     =over 4
2010    
2011     =item $timer = new urxvt::timer
2012    
2013 root 1.20 Create a new timer object in started state. It is scheduled to fire
2014     immediately.
2015 root 1.1
2016     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
2017    
2018     Set the callback to be called when the timer triggers.
2019    
2020     =item $tstamp = $timer->at
2021    
2022     Return the time this watcher will fire next.
2023    
2024     =item $timer = $timer->set ($tstamp)
2025    
2026     Set the time the event is generated to $tstamp.
2027    
2028 root 1.20 =item $timer = $timer->interval ($interval)
2029    
2030     Normally (and when C<$interval> is C<0>), the timer will automatically
2031     stop after it has fired once. If C<$interval> is non-zero, then the timer
2032     is automatically rescheduled at the given intervals.
2033    
2034 root 1.1 =item $timer = $timer->start
2035    
2036     Start the timer.
2037    
2038     =item $timer = $timer->start ($tstamp)
2039    
2040     Set the event trigger time to C<$tstamp> and start the timer.
2041    
2042 root 1.103 =item $timer = $timer->after ($delay)
2043    
2044     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
2045    
2046 root 1.1 =item $timer = $timer->stop
2047    
2048     Stop the timer.
2049    
2050     =back
2051    
2052     =head2 The C<urxvt::iow> Class
2053    
2054     This class implements io watchers/events. Example:
2055    
2056     $term->{socket} = ...
2057     $term->{iow} = urxvt::iow
2058     ->new
2059     ->fd (fileno $term->{socket})
2060 root 1.69 ->events (urxvt::EVENT_READ)
2061 root 1.1 ->start
2062     ->cb (sub {
2063     my ($iow, $revents) = @_;
2064     # $revents must be 1 here, no need to check
2065     sysread $term->{socket}, my $buf, 8192
2066     or end-of-file;
2067     });
2068    
2069    
2070     =over 4
2071    
2072     =item $iow = new urxvt::iow
2073    
2074     Create a new io watcher object in stopped state.
2075    
2076     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
2077    
2078     Set the callback to be called when io events are triggered. C<$reventmask>
2079     is a bitset as described in the C<events> method.
2080    
2081     =item $iow = $iow->fd ($fd)
2082    
2083 root 1.144 Set the file descriptor (not handle) to watch.
2084 root 1.1
2085     =item $iow = $iow->events ($eventmask)
2086    
2087 root 1.69 Set the event mask to watch. The only allowed values are
2088     C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
2089     together, or C<urxvt::EVENT_NONE>.
2090 root 1.1
2091     =item $iow = $iow->start
2092    
2093     Start watching for requested events on the given handle.
2094    
2095     =item $iow = $iow->stop
2096    
2097 root 1.144 Stop watching for events on the given file handle.
2098 root 1.1
2099     =back
2100    
2101 root 1.114 =head2 The C<urxvt::iw> Class
2102    
2103     This class implements idle watchers, that get called automatically when
2104     the process is idle. They should return as fast as possible, after doing
2105     some useful work.
2106    
2107     =over 4
2108    
2109     =item $iw = new urxvt::iw
2110    
2111     Create a new idle watcher object in stopped state.
2112    
2113     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
2114    
2115     Set the callback to be called when the watcher triggers.
2116    
2117     =item $timer = $timer->start
2118    
2119     Start the watcher.
2120    
2121     =item $timer = $timer->stop
2122    
2123     Stop the watcher.
2124    
2125     =back
2126    
2127     =head2 The C<urxvt::pw> Class
2128    
2129     This class implements process watchers. They create an event whenever a
2130     process exits, after which they stop automatically.
2131    
2132     my $pid = fork;
2133     ...
2134     $term->{pw} = urxvt::pw
2135     ->new
2136     ->start ($pid)
2137     ->cb (sub {
2138     my ($pw, $exit_status) = @_;
2139     ...
2140 ayin 1.157 });
2141 root 1.114
2142     =over 4
2143    
2144     =item $pw = new urxvt::pw
2145    
2146     Create a new process watcher in stopped state.
2147    
2148     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
2149    
2150     Set the callback to be called when the timer triggers.
2151    
2152     =item $pw = $timer->start ($pid)
2153    
2154 root 1.144 Tells the watcher to start watching for process C<$pid>.
2155 root 1.114
2156     =item $pw = $pw->stop
2157    
2158     Stop the watcher.
2159    
2160     =back
2161    
2162 root 1.4 =head1 ENVIRONMENT
2163    
2164     =head2 URXVT_PERL_VERBOSITY
2165    
2166     This variable controls the verbosity level of the perl extension. Higher
2167     numbers indicate more verbose output.
2168    
2169     =over 4
2170    
2171 root 1.58 =item == 0 - fatal messages
2172 root 1.4
2173 root 1.58 =item >= 3 - script loading and management
2174 root 1.4
2175 root 1.85 =item >=10 - all called hooks
2176    
2177 root 1.144 =item >=11 - hook return values
2178 root 1.4
2179     =back
2180    
2181 root 1.1 =head1 AUTHOR
2182    
2183     Marc Lehmann <pcg@goof.com>
2184     http://software.schmorp.de/pkg/rxvt-unicode
2185    
2186     =cut
2187    
2188     1
2189 tpope 1.152
2190     # vim: sw=3: