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