ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.114
Committed: Fri Jan 20 12:16:28 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.113: +70 -0 lines
Log Message:
*** empty log message ***

File Contents

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