ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.113
Committed: Fri Jan 20 10:27:08 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.112: +52 -7 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.1 =back
497    
498 root 1.77 =cut
499    
500     package urxvt;
501    
502     use utf8;
503     use strict;
504     use Carp ();
505     use Scalar::Util ();
506     use List::Util ();
507    
508     our $VERSION = 1;
509     our $TERM;
510 root 1.113 our @TERM_INIT;
511     our @TERM_EXT;
512 root 1.77 our @HOOKNAME;
513     our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
514     our %OPTION;
515    
516     our $LIBDIR;
517     our $RESNAME;
518     our $RESCLASS;
519     our $RXVTNAME;
520    
521 root 1.23 =head2 Variables in the C<urxvt> Package
522    
523     =over 4
524    
525 root 1.75 =item $urxvt::LIBDIR
526    
527     The rxvt-unicode library directory, where, among other things, the perl
528     modules and scripts are stored.
529    
530     =item $urxvt::RESCLASS, $urxvt::RESCLASS
531    
532     The resource class and name rxvt-unicode uses to look up X resources.
533    
534     =item $urxvt::RXVTNAME
535    
536     The basename of the installed binaries, usually C<urxvt>.
537    
538 root 1.23 =item $urxvt::TERM
539    
540 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
541     object, whenever a callback/hook is executing.
542 root 1.23
543 root 1.113 =item @urxvt::TERM_INIT
544    
545     All coderefs in this array will be called as methods of the next newly
546     created C<urxvt::term> object (during the C<on_init> phase). The array
547     gets cleared before the codereferences that were in it are being executed,
548     so coderefs can push themselves onto it again if they so desire.
549    
550     This complements to the perl-eval commandline option, but gets executed
551     first.
552    
553     =item @urxvt::TERM_EXT
554    
555     Works similar to C<@TERM_INIT>, but contains perl package/class names, which
556     get registered as normal extensions after calling the hooks in C<@TERM_INIT>
557     but before other extensions. Gets cleared just like C<@TERM_INIT>.
558    
559 root 1.23 =back
560    
561 root 1.1 =head2 Functions in the C<urxvt> Package
562    
563     =over 4
564    
565     =item urxvt::fatal $errormessage
566    
567     Fatally aborts execution with the given error message. Avoid at all
568     costs! The only time this is acceptable is when the terminal process
569     starts up.
570    
571     =item urxvt::warn $string
572    
573 root 1.6 Calls C<rxvt_warn> with the given string which should not include a
574 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
575     that calls this function.
576    
577     Using this function has the advantage that its output ends up in the
578     correct place, e.g. on stderr of the connecting urxvtc client.
579    
580 root 1.77 Messages have a size limit of 1023 bytes currently.
581    
582 root 1.1 =item $time = urxvt::NOW
583    
584     Returns the "current time" (as per the event loop).
585    
586 root 1.47 =item urxvt::CurrentTime
587    
588     =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
589     Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
590     Button4Mask, Button5Mask, AnyModifier
591    
592 root 1.92 =item urxvt::NoEventMask, KeyPressMask, KeyReleaseMask,
593     ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask,
594     PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask,
595     Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask,
596     KeymapStateMask, ExposureMask, VisibilityChangeMask, StructureNotifyMask,
597     ResizeRedirectMask, SubstructureNotifyMask, SubstructureRedirectMask,
598     FocusChangeMask, PropertyChangeMask, ColormapChangeMask, OwnerGrabButtonMask
599    
600     =item urxvt::KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify,
601     EnterNotify, LeaveNotify, FocusIn, FocusOut, KeymapNotify, Expose,
602     GraphicsExpose, NoExpose, VisibilityNotify, CreateNotify, DestroyNotify,
603     UnmapNotify, MapNotify, MapRequest, ReparentNotify, ConfigureNotify,
604     ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify,
605     CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest,
606     SelectionNotify, ColormapNotify, ClientMessage, MappingNotify
607    
608 root 1.55 Various constants for use in X calls and event processing.
609 root 1.47
610 root 1.21 =back
611    
612 root 1.18 =head2 RENDITION
613    
614     Rendition bitsets contain information about colour, font, font styles and
615     similar information for each screen cell.
616    
617     The following "macros" deal with changes in rendition sets. You should
618     never just create a bitset, you should always modify an existing one,
619     as they contain important information required for correct operation of
620     rxvt-unicode.
621    
622     =over 4
623    
624     =item $rend = urxvt::DEFAULT_RSTYLE
625    
626     Returns the default rendition, as used when the terminal is starting up or
627     being reset. Useful as a base to start when creating renditions.
628    
629     =item $rend = urxvt::OVERLAY_RSTYLE
630    
631     Return the rendition mask used for overlays by default.
632    
633     =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
634    
635     Return the bit that enabled bold, italic, blink, reverse-video and
636 root 1.19 underline, respectively. To enable such a style, just logically OR it into
637     the bitset.
638 root 1.18
639     =item $foreground = urxvt::GET_BASEFG $rend
640    
641     =item $background = urxvt::GET_BASEBG $rend
642    
643     Return the foreground/background colour index, respectively.
644    
645 root 1.75 =item $rend = urxvt::SET_FGCOLOR $rend, $new_colour
646 root 1.18
647 root 1.75 =item $rend = urxvt::SET_BGCOLOR $rend, $new_colour
648 root 1.18
649     Replace the foreground/background colour in the rendition mask with the
650     specified one.
651    
652 root 1.75 =item $value = urxvt::GET_CUSTOM $rend
653 root 1.19
654     Return the "custom" value: Every rendition has 5 bits for use by
655     extensions. They can be set and changed as you like and are initially
656     zero.
657    
658 root 1.75 =item $rend = urxvt::SET_CUSTOM $rend, $new_value
659 root 1.19
660     Change the custom value.
661    
662 root 1.18 =back
663    
664 root 1.1 =cut
665    
666     BEGIN {
667     # overwrite perl's warn
668     *CORE::GLOBAL::warn = sub {
669     my $msg = join "", @_;
670     $msg .= "\n"
671     unless $msg =~ /\n$/;
672     urxvt::warn ($msg);
673     };
674     }
675    
676 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
677 root 1.1
678     sub verbose {
679     my ($level, $msg) = @_;
680 root 1.8 warn "$msg\n" if $level <= $verbosity;
681 root 1.1 }
682    
683 root 1.44 my %extension_pkg;
684 root 1.1
685     # load a single script into its own package, once only
686 root 1.44 sub extension_package($) {
687 root 1.1 my ($path) = @_;
688    
689 root 1.44 $extension_pkg{$path} ||= do {
690 root 1.100 $path =~ /([^\/\\]+)$/;
691     my $pkg = $1;
692     $pkg =~ s/[^[:word:]]/_/g;
693     $pkg = "urxvt::ext::$pkg";
694 root 1.8
695 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
696 root 1.1
697     open my $fh, "<:raw", $path
698     or die "$path: $!";
699    
700 root 1.96 my $source =
701 root 1.69 "package $pkg; use strict; use utf8;\n"
702     . "#line 1 \"$path\"\n{\n"
703     . (do { local $/; <$fh> })
704     . "\n};\n1";
705 root 1.8
706 root 1.69 eval $source
707     or die "$path: $@";
708 root 1.1
709     $pkg
710 root 1.7 }
711 root 1.1 }
712    
713 root 1.31 our $retval; # return value for urxvt
714    
715 root 1.8 # called by the rxvt core
716     sub invoke {
717 root 1.23 local $TERM = shift;
718 root 1.8 my $htype = shift;
719 root 1.6
720 root 1.8 if ($htype == 0) { # INIT
721 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
722 root 1.49
723 root 1.68 my %ext_arg;
724 root 1.6
725 root 1.113 {
726     my @init = @TERM_INIT;
727     @TERM_INIT = ();
728     $_->($TERM) for @init;
729     my @pkg = @TERM_EXT;
730     @TERM_EXT = ();
731     $TERM->register_package ($_) for @pkg;
732     }
733    
734     for (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
735 root 1.50 if ($_ eq "default") {
736 root 1.69 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback);
737 root 1.51 } elsif (/^-(.*)$/) {
738 root 1.68 delete $ext_arg{$1};
739     } elsif (/^([^<]+)<(.*)>$/) {
740     push @{ $ext_arg{$1} }, $2;
741 root 1.49 } else {
742 root 1.68 $ext_arg{$_} ||= [];
743 root 1.50 }
744     }
745 root 1.6
746 root 1.68 while (my ($ext, $argv) = each %ext_arg) {
747 root 1.50 my @files = grep -f $_, map "$_/$ext", @dirs;
748    
749     if (@files) {
750 root 1.68 $TERM->register_package (extension_package $files[0], $argv);
751 root 1.50 } else {
752     warn "perl extension '$ext' not found in perl library search path\n";
753 root 1.8 }
754     }
755 root 1.55
756     eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
757     warn $@ if $@;
758 root 1.31 }
759    
760     $retval = undef;
761 root 1.6
762 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
763     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
764     if $verbosity >= 10;
765    
766     keys %$cb;
767    
768     while (my ($pkg, $cb) = each %$cb) {
769 root 1.113 my $retval_ = eval { $cb->($TERM->{_pkg}{$pkg}, @_) };
770     $retval ||= $retval_;
771 root 1.68
772 root 1.58 if ($@) {
773     $TERM->ungrab; # better to lose the grab than the session
774     warn $@;
775     }
776 root 1.31 }
777 root 1.85
778     verbose 11, "$HOOKNAME[$htype] returning <$retval>"
779     if $verbosity >= 11;
780 root 1.31 }
781    
782     if ($htype == 1) { # DESTROY
783     # clear package objects
784     %$_ = () for values %{ $TERM->{_pkg} };
785 root 1.25
786 root 1.31 # clear package
787     %$TERM = ();
788 root 1.7 }
789    
790 root 1.31 $retval
791 root 1.7 }
792 root 1.1
793 root 1.71 # urxvt::term::extension
794 root 1.55
795 root 1.71 package urxvt::term::extension;
796 root 1.69
797     sub enable {
798     my ($self, %hook) = @_;
799     my $pkg = $self->{_pkg};
800    
801     while (my ($name, $cb) = each %hook) {
802     my $htype = $HOOKTYPE{uc $name};
803     defined $htype
804     or Carp::croak "unsupported hook type '$name'";
805    
806 root 1.92 $self->set_should_invoke ($htype, +1)
807     unless exists $self->{term}{_hook}[$htype]{$pkg};
808 root 1.69
809     $self->{term}{_hook}[$htype]{$pkg} = $cb;
810     }
811     }
812    
813     sub disable {
814     my ($self, @hook) = @_;
815     my $pkg = $self->{_pkg};
816    
817     for my $name (@hook) {
818     my $htype = $HOOKTYPE{uc $name};
819     defined $htype
820     or Carp::croak "unsupported hook type '$name'";
821    
822 root 1.92 $self->set_should_invoke ($htype, -1)
823     if delete $self->{term}{_hook}[$htype]{$pkg};
824 root 1.69 }
825     }
826    
827     our $AUTOLOAD;
828    
829     sub AUTOLOAD {
830     $AUTOLOAD =~ /:([^:]+)$/
831     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
832 root 1.23
833     eval qq{
834 root 1.69 sub $AUTOLOAD {
835 root 1.24 my \$proxy = shift;
836     \$proxy->{term}->$1 (\@_)
837 root 1.23 }
838     1
839     } or die "FATAL: unable to compile method forwarder: $@";
840    
841 root 1.69 goto &$AUTOLOAD;
842 root 1.23 }
843    
844 root 1.69 sub DESTROY {
845 root 1.58 # nop
846     }
847    
848 root 1.55 # urxvt::destroy_hook
849    
850 root 1.45 sub urxvt::destroy_hook::DESTROY {
851     ${$_[0]}->();
852     }
853    
854     sub urxvt::destroy_hook(&) {
855     bless \shift, urxvt::destroy_hook::
856     }
857    
858 root 1.56 package urxvt::anyevent;
859    
860     =head2 The C<urxvt::anyevent> Class
861    
862     The sole purpose of this class is to deliver an interface to the
863     C<AnyEvent> module - any module using it will work inside urxvt without
864 root 1.75 further programming. The only exception is that you cannot wait on
865     condition variables, but non-blocking condvar use is ok. What this means
866     is that you cannot use blocking APIs, but the non-blocking variant should
867     work.
868 root 1.55
869 root 1.56 =cut
870 root 1.55
871     our $VERSION = 1;
872    
873     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
874     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
875    
876     sub timer {
877     my ($class, %arg) = @_;
878    
879     my $cb = $arg{cb};
880    
881     urxvt::timer
882     ->new
883     ->start (urxvt::NOW + $arg{after})
884     ->cb (sub {
885     $_[0]->stop; # need to cancel manually
886     $cb->();
887     })
888     }
889    
890     sub io {
891     my ($class, %arg) = @_;
892    
893     my $cb = $arg{cb};
894    
895     bless [$arg{fh}, urxvt::iow
896     ->new
897     ->fd (fileno $arg{fh})
898     ->events (($arg{poll} =~ /r/ ? 1 : 0)
899     | ($arg{poll} =~ /w/ ? 2 : 0))
900     ->start
901     ->cb (sub {
902     $cb->(($_[1] & 1 ? 'r' : '')
903     . ($_[1] & 2 ? 'w' : ''));
904     })],
905     urxvt::anyevent::
906     }
907    
908     sub DESTROY {
909     $_[0][1]->stop;
910     }
911    
912     sub condvar {
913     bless \my $flag, urxvt::anyevent::condvar::
914     }
915    
916     sub urxvt::anyevent::condvar::broadcast {
917     ${$_[0]}++;
918     }
919    
920     sub urxvt::anyevent::condvar::wait {
921     unless (${$_[0]}) {
922 root 1.69 Carp::croak "AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API";
923 root 1.55 }
924     }
925    
926     package urxvt::term;
927    
928 root 1.1 =head2 The C<urxvt::term> Class
929    
930     =over 4
931    
932 root 1.68 =cut
933    
934     # find on_xxx subs in the package and register them
935     # as hooks
936     sub register_package {
937     my ($self, $pkg, $argv) = @_;
938    
939 root 1.113 no strict 'refs';
940    
941     urxvt::verbose 6, "register package $pkg to $self";
942    
943     @{"$pkg\::ISA"} = urxvt::term::extension::;
944    
945 root 1.69 my $proxy = bless {
946     _pkg => $pkg,
947     argv => $argv,
948     }, $pkg;
949     Scalar::Util::weaken ($proxy->{term} = $self);
950 root 1.68
951     $self->{_pkg}{$pkg} = $proxy;
952    
953 root 1.69 for my $name (@HOOKNAME) {
954     if (my $ref = $pkg->can ("on_" . lc $name)) {
955     $proxy->enable ($name => $ref);
956     }
957 root 1.68 }
958     }
959    
960 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
961    
962     Creates a new terminal, very similar as if you had started it with system
963 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
964     hash which defines the environment of the new terminal.
965 root 1.77
966     Croaks (and probably outputs an error message) if the new instance
967     couldn't be created. Returns C<undef> if the new instance didn't
968     initialise perl, and the terminal object otherwise. The C<init> and
969     C<start> hooks will be called during this call.
970    
971     =cut
972    
973     sub new {
974     my ($class, $env, @args) = @_;
975    
976     _new ([ map "$_=$env->{$_}", keys %$env ], @args);
977     }
978    
979 root 1.36 =item $term->destroy
980    
981 root 1.75 Destroy the terminal object (close the window, free resources
982     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
983     watchers (timers, io watchers) are still active.
984 root 1.36
985 root 1.108 =item $term->exec_async ($cmd[, @args])
986    
987     Works like the combination of the C<fork>/C<exec> builtins, which executes
988     ("starts") programs in the background. This function takes care of setting
989     the user environment before exec'ing the command (e.g. C<PATH>) and should
990     be preferred over explicit calls to C<exec> or C<system>.
991    
992     Returns the pid of the subprocess or C<undef> on error.
993    
994     =cut
995    
996     sub exec_async {
997     my $self = shift;
998    
999     my $pid = fork;
1000    
1001     return $pid
1002     if !defined $pid or $pid;
1003    
1004     %ENV = %{ $self->env };
1005    
1006     exec @_;
1007     urxvt::_exit 255;
1008     }
1009    
1010 root 1.49 =item $isset = $term->option ($optval[, $set])
1011    
1012     Returns true if the option specified by C<$optval> is enabled, and
1013     optionally change it. All option values are stored by name in the hash
1014     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1015    
1016     Here is a a likely non-exhaustive list of option names, please see the
1017     source file F</src/optinc.h> to see the actual list:
1018    
1019     borderLess console cursorBlink cursorUnderline hold iconic insecure
1020     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
1021 root 1.105 override-redirect pastableTabs pointerBlank reverseVideo scrollBar
1022     scrollBar_floating scrollBar_right scrollTtyKeypress scrollTtyOutput
1023     scrollWithBuffer secondaryScreen secondaryScroll skipBuiltinGlyphs
1024     transparent tripleclickwords utmpInhibit visualBell
1025 root 1.49
1026 root 1.4 =item $value = $term->resource ($name[, $newval])
1027    
1028     Returns the current resource value associated with a given name and
1029     optionally sets a new value. Setting values is most useful in the C<init>
1030     hook. Unset resources are returned and accepted as C<undef>.
1031    
1032     The new value must be properly encoded to a suitable character encoding
1033     before passing it to this method. Similarly, the returned value may need
1034     to be converted from the used encoding to text.
1035    
1036     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1037     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1038     likely change).
1039    
1040     Please note that resource strings will currently only be freed when the
1041     terminal is destroyed, so changing options frequently will eat memory.
1042    
1043 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
1044 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1045     to see the actual list:
1046 root 1.5
1047     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
1048     borderLess color cursorBlink cursorUnderline cutchars delete_key
1049     display_name embed ext_bwidth fade font geometry hold iconName
1050     imFont imLocale inputMethod insecure int_bwidth intensityStyles
1051 root 1.105 italicFont jumpScroll lineSpace loginShell mapAlert meta8 modifier
1052     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1053     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1054     preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1055     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1056     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1057     secondaryScreen secondaryScroll selectstyle shade term_name title
1058     transient_for transparent transparent_all tripleclickwords utmpInhibit
1059     visualBell
1060 root 1.5
1061 root 1.4 =cut
1062    
1063 root 1.55 sub resource($$;$) {
1064 root 1.4 my ($self, $name) = (shift, shift);
1065     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1066 root 1.45 &urxvt::term::_resource
1067 root 1.4 }
1068    
1069 root 1.79 =item $value = $term->x_resource ($pattern)
1070    
1071     Returns the X-Resource for the given pattern, excluding the program or
1072     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1073     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1074     resource with that pattern exists.
1075    
1076     This method should only be called during the C<on_start> hook, as there is
1077     only one resource database per display, and later invocations might return
1078     the wrong resources.
1079    
1080 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
1081    
1082     Adds a keymap translation exactly as specified via a resource. See the
1083     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1084    
1085 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1086 root 1.32
1087 root 1.33 Return and optionally change the current rendition. Text that is output by
1088     the terminal application will use this style.
1089 root 1.32
1090     =item ($row, $col) = $term->screen_cur ([$row, $col])
1091    
1092     Return the current coordinates of the text cursor position and optionally
1093     set it (which is usually bad as applications don't expect that).
1094    
1095 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1096    
1097     =item ($row, $col) = $term->selection_beg ([$row, $col])
1098    
1099     =item ($row, $col) = $term->selection_end ([$row, $col])
1100    
1101     Return the current values of the selection mark, begin or end positions,
1102     and optionally set them to new values.
1103    
1104 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1105    
1106     Tries to make a selection as set by C<selection_beg> and
1107     C<selection_end>. If C<$rectangular> is true (default: false), a
1108     rectangular selection will be made. This is the prefered function to make
1109     a selection.
1110    
1111 root 1.1 =item $success = $term->selection_grab ($eventtime)
1112    
1113 root 1.86 Try to request the primary selection text from the server (for example, as
1114     set by the next method). No visual feedback will be given. This function
1115     is mostly useful from within C<on_sel_grab> hooks.
1116 root 1.1
1117     =item $oldtext = $term->selection ([$newtext])
1118    
1119     Return the current selection text and optionally replace it by C<$newtext>.
1120    
1121 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1122    
1123     Create a simple multi-line overlay box. See the next method for details.
1124    
1125     =cut
1126    
1127     sub overlay_simple {
1128     my ($self, $x, $y, $text) = @_;
1129    
1130     my @lines = split /\n/, $text;
1131    
1132     my $w = List::Util::max map $self->strwidth ($_), @lines;
1133    
1134     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1135     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1136    
1137     $overlay
1138     }
1139 root 1.1
1140 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1141 root 1.1
1142     Create a new (empty) overlay at the given position with the given
1143 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1144     (default: C<OVERLAY_RSTYLE>).
1145 root 1.1
1146 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1147     around the box.
1148 root 1.1
1149 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1150     right/bottom side, respectively.
1151 root 1.1
1152 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1153     as long as the perl object is referenced.
1154 root 1.1
1155 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1156    
1157     =over 4
1158 root 1.1
1159 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
1160 root 1.1
1161 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1162     text in rxvt-unicode's special encoding and an array of rendition values
1163     at a specific position inside the overlay.
1164 root 1.1
1165 root 1.22 =item $overlay->hide
1166    
1167     If visible, hide the overlay, but do not destroy it.
1168    
1169     =item $overlay->show
1170    
1171     If hidden, display the overlay again.
1172    
1173     =back
1174    
1175 root 1.45 =item $popup = $term->popup ($event)
1176    
1177     Creates a new C<urxvt::popup> object that implements a popup menu. The
1178     C<$event> I<must> be the event causing the menu to pop up (a button event,
1179     currently).
1180    
1181     =cut
1182    
1183 root 1.55 sub popup {
1184 root 1.45 my ($self, $event) = @_;
1185    
1186     $self->grab ($event->{time}, 1)
1187     or return;
1188    
1189     my $popup = bless {
1190     term => $self,
1191     event => $event,
1192     }, urxvt::popup::;
1193    
1194     Scalar::Util::weaken $popup->{term};
1195    
1196     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1197     Scalar::Util::weaken $self->{_destroy}{$popup};
1198    
1199     $popup
1200     }
1201    
1202 root 1.40 =item $cellwidth = $term->strwidth ($string)
1203 root 1.6
1204     Returns the number of screen-cells this string would need. Correctly
1205     accounts for wide and combining characters.
1206    
1207 root 1.40 =item $octets = $term->locale_encode ($string)
1208 root 1.6
1209     Convert the given text string into the corresponding locale encoding.
1210    
1211 root 1.40 =item $string = $term->locale_decode ($octets)
1212 root 1.6
1213     Convert the given locale-encoded octets into a perl string.
1214    
1215 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1216    
1217     XORs the rendition values in the given span with the provided value
1218 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1219     refresh hooks to provide effects similar to the selection.
1220 root 1.70
1221     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1222    
1223     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1224     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1225     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1226 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1227 root 1.70
1228 root 1.69 =item $term->scr_bell
1229    
1230     Ring the bell!
1231    
1232 root 1.33 =item $term->scr_add_lines ($string)
1233    
1234     Write the given text string to the screen, as if output by the application
1235     running inside the terminal. It may not contain command sequences (escape
1236     codes), but is free to use line feeds, carriage returns and tabs. The
1237     string is a normal text string, not in locale-dependent encoding.
1238    
1239     Normally its not a good idea to use this function, as programs might be
1240     confused by changes in cursor position or scrolling. Its useful inside a
1241     C<on_add_lines> hook, though.
1242    
1243 root 1.36 =item $term->cmd_parse ($octets)
1244    
1245     Similar to C<scr_add_lines>, but the argument must be in the
1246     locale-specific encoding of the terminal and can contain command sequences
1247     (escape codes) that will be interpreted.
1248    
1249 root 1.6 =item $term->tt_write ($octets)
1250    
1251     Write the octets given in C<$data> to the tty (i.e. as program input). To
1252 root 1.12 pass characters instead of octets, you should convert your strings first
1253     to the locale-specific encoding using C<< $term->locale_encode >>.
1254    
1255 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1256    
1257     Replaces the event mask of the pty watcher by the given event mask. Can
1258     be used to suppress input and output handling to the pty/tty. See the
1259     description of C<< urxvt::timer->events >>. Make sure to always restore
1260     the previous value.
1261    
1262 root 1.40 =item $windowid = $term->parent
1263    
1264     Return the window id of the toplevel window.
1265    
1266     =item $windowid = $term->vt
1267    
1268     Return the window id of the terminal window.
1269    
1270 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1271    
1272     Adds the specified events to the vt event mask. Useful e.g. when you want
1273     to receive pointer events all the times:
1274    
1275     $term->vt_emask_add (urxvt::PointerMotionMask);
1276    
1277 root 1.32 =item $window_width = $term->width
1278    
1279     =item $window_height = $term->height
1280    
1281     =item $font_width = $term->fwidth
1282    
1283     =item $font_height = $term->fheight
1284    
1285     =item $font_ascent = $term->fbase
1286    
1287     =item $terminal_rows = $term->nrow
1288    
1289     =item $terminal_columns = $term->ncol
1290    
1291     =item $has_focus = $term->focus
1292    
1293     =item $is_mapped = $term->mapped
1294 root 1.13
1295 root 1.32 =item $max_scrollback = $term->saveLines
1296 root 1.13
1297 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1298 root 1.13
1299 root 1.94 =item $topmost_scrollback_row = $term->top_row
1300 root 1.12
1301 root 1.32 Return various integers describing terminal characteristics.
1302 root 1.12
1303 root 1.77 =item $x_display = $term->display_id
1304    
1305     Return the DISPLAY used by rxvt-unicode.
1306    
1307 root 1.66 =item $lc_ctype = $term->locale
1308    
1309     Returns the LC_CTYPE category string used by this rxvt-unicode.
1310    
1311 root 1.77 =item $env = $term->env
1312    
1313     Returns a copy of the environment in effect for the terminal as a hashref
1314     similar to C<\%ENV>.
1315    
1316     =cut
1317 root 1.66
1318 root 1.77 sub env {
1319     if (my $env = $_[0]->_env) {
1320     +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), @$env }
1321     } else {
1322     +{ %ENV }
1323     }
1324     }
1325 root 1.66
1326 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1327    
1328     =item $modifiermask = $term->ModMetaMask
1329    
1330     =item $modifiermask = $term->ModNumLockMask
1331    
1332     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1333     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1334    
1335 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1336    
1337 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1338     C<0>, which displays the normal terminal contents. Lower values scroll
1339 root 1.12 this many lines into the scrollback buffer.
1340    
1341 root 1.14 =item $term->want_refresh
1342    
1343     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1344     compare the on-screen display with its stored representation. If they
1345     differ, it redraws the differences.
1346    
1347     Used after changing terminal contents to display them.
1348    
1349 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1350 root 1.12
1351     Returns the text of the entire row with number C<$row_number>. Row C<0>
1352     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1353     terminal line. The scrollback buffer starts at line C<-1> and extends to
1354 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1355     is requested.
1356 root 1.12
1357 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1358     line, starting at column C<$start_col> (default C<0>), which is useful
1359 root 1.18 to replace only parts of a line. The font index in the rendition will
1360 root 1.13 automatically be updated.
1361 root 1.12
1362     C<$text> is in a special encoding: tabs and wide characters that use more
1363     than one cell when displayed are padded with urxvt::NOCHAR characters
1364     (C<chr 65535>). Characters with combining characters and other characters
1365     that do not fit into the normal tetx encoding will be replaced with
1366     characters in the private use area.
1367    
1368     You have to obey this encoding when changing text. The advantage is
1369     that C<substr> and similar functions work on screen cells and not on
1370     characters.
1371    
1372     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1373     can be used to convert normal strings into this encoding and vice versa.
1374    
1375 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1376    
1377     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1378     bitsets. Rendition bitsets contain information about colour, font, font
1379     styles and similar information. See also C<< $term->ROW_t >>.
1380    
1381     When setting rendition, the font mask will be ignored.
1382 root 1.12
1383 root 1.18 See the section on RENDITION, above.
1384 root 1.13
1385     =item $length = $term->ROW_l ($row_number[, $new_length])
1386    
1387 root 1.24 Returns the number of screen cells that are in use ("the line
1388     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1389     line is joined with the following one.
1390    
1391     =item $bool = $term->is_longer ($row_number)
1392    
1393     Returns true if the row is part of a multiple-row logical "line" (i.e.
1394     joined with the following row), which means all characters are in use
1395     and it is continued on the next row (and possibly a continuation of the
1396     previous row(s)).
1397    
1398     =item $line = $term->line ($row_number)
1399    
1400     Create and return a new C<urxvt::line> object that stores information
1401     about the logical line that row C<$row_number> is part of. It supports the
1402     following methods:
1403 root 1.12
1404 root 1.24 =over 4
1405    
1406 root 1.35 =item $text = $line->t ([$new_text])
1407 root 1.24
1408 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1409 root 1.24
1410 root 1.35 =item $rend = $line->r ([$new_rend])
1411 root 1.24
1412 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1413 root 1.24
1414     =item $length = $line->l
1415    
1416     Returns the length of the line in cells, similar to C<ROW_l>.
1417    
1418     =item $rownum = $line->beg
1419    
1420     =item $rownum = $line->end
1421    
1422     Return the row number of the first/last row of the line, respectively.
1423    
1424     =item $offset = $line->offset_of ($row, $col)
1425    
1426     Returns the character offset of the given row|col pair within the logical
1427 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1428     offsets outside the string.
1429 root 1.24
1430     =item ($row, $col) = $line->coord_of ($offset)
1431    
1432     Translates a string offset into terminal coordinates again.
1433    
1434     =back
1435    
1436     =cut
1437    
1438 root 1.55 sub line {
1439 root 1.24 my ($self, $row) = @_;
1440    
1441     my $maxrow = $self->nrow - 1;
1442    
1443     my ($beg, $end) = ($row, $row);
1444    
1445     --$beg while $self->ROW_is_longer ($beg - 1);
1446     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1447    
1448     bless {
1449     term => $self,
1450     beg => $beg,
1451     end => $end,
1452 root 1.34 ncol => $self->ncol,
1453 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1454     }, urxvt::line::
1455     }
1456    
1457     sub urxvt::line::t {
1458     my ($self) = @_;
1459    
1460 root 1.34 if (@_ > 1)
1461     {
1462     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1463     for $self->{beg} .. $self->{end};
1464     }
1465    
1466     defined wantarray &&
1467     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1468     0, $self->{len}
1469 root 1.24 }
1470    
1471     sub urxvt::line::r {
1472     my ($self) = @_;
1473    
1474 root 1.34 if (@_ > 1)
1475     {
1476     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1477     for $self->{beg} .. $self->{end};
1478     }
1479    
1480     if (defined wantarray) {
1481     my $rend = [
1482     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1483     ];
1484     $#$rend = $self->{len} - 1;
1485     return $rend;
1486     }
1487    
1488     ()
1489 root 1.24 }
1490    
1491     sub urxvt::line::beg { $_[0]{beg} }
1492     sub urxvt::line::end { $_[0]{end} }
1493     sub urxvt::line::l { $_[0]{len} }
1494    
1495     sub urxvt::line::offset_of {
1496     my ($self, $row, $col) = @_;
1497    
1498 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1499 root 1.24 }
1500    
1501     sub urxvt::line::coord_of {
1502     my ($self, $offset) = @_;
1503    
1504     use integer;
1505    
1506     (
1507 root 1.34 $offset / $self->{ncol} + $self->{beg},
1508     $offset % $self->{ncol}
1509 root 1.24 )
1510     }
1511    
1512 root 1.12 =item $text = $term->special_encode $string
1513    
1514     Converts a perl string into the special encoding used by rxvt-unicode,
1515     where one character corresponds to one screen cell. See
1516     C<< $term->ROW_t >> for details.
1517    
1518     =item $string = $term->special_decode $text
1519    
1520     Converts rxvt-unicodes text reprsentation into a perl string. See
1521     C<< $term->ROW_t >> for details.
1522 root 1.6
1523 root 1.61 =item $success = $term->grab_button ($button, $modifiermask)
1524    
1525 root 1.64 Registers a synchronous button grab. See the XGrabButton manpage.
1526 root 1.61
1527     =item $success = $term->grab ($eventtime[, $sync])
1528    
1529     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1530     synchronous (C<$sync> is true). Also remembers the grab timestampe.
1531    
1532     =item $term->allow_events_async
1533    
1534     Calls XAllowEvents with AsyncBoth for the most recent grab.
1535    
1536     =item $term->allow_events_sync
1537    
1538     Calls XAllowEvents with SyncBoth for the most recent grab.
1539    
1540     =item $term->allow_events_replay
1541    
1542     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1543     recent grab.
1544    
1545     =item $term->ungrab
1546    
1547     Calls XUngrab for the most recent grab. Is called automatically on
1548     evaluation errors, as it is better to lose the grab in the error case as
1549     the session.
1550    
1551 root 1.1 =back
1552    
1553 root 1.55 =cut
1554    
1555     package urxvt::popup;
1556    
1557 root 1.45 =head2 The C<urxvt::popup> Class
1558    
1559     =over 4
1560    
1561     =cut
1562    
1563     sub add_item {
1564     my ($self, $item) = @_;
1565    
1566 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1567     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1568     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1569    
1570     $item->{render} ||= sub { $_[0]{text} };
1571    
1572 root 1.45 push @{ $self->{item} }, $item;
1573     }
1574    
1575 root 1.76 =item $popup->add_title ($title)
1576    
1577     Adds a non-clickable title to the popup.
1578    
1579     =cut
1580    
1581     sub add_title {
1582     my ($self, $title) = @_;
1583    
1584     $self->add_item ({
1585     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1586     text => $title,
1587     activate => sub { },
1588     });
1589     }
1590    
1591     =item $popup->add_separator ([$sepchr])
1592    
1593     Creates a separator, optionally using the character given as C<$sepchr>.
1594    
1595     =cut
1596    
1597 root 1.53 sub add_separator {
1598     my ($self, $sep) = @_;
1599    
1600 root 1.67 $sep ||= "=";
1601 root 1.53
1602     $self->add_item ({
1603     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1604     text => "",
1605 root 1.65 render => sub { $sep x $self->{term}->ncol },
1606 root 1.53 activate => sub { },
1607     });
1608     }
1609    
1610 root 1.76 =item $popup->add_button ($text, $cb)
1611    
1612     Adds a clickable button to the popup. C<$cb> is called whenever it is
1613     selected.
1614 root 1.53
1615 root 1.76 =cut
1616 root 1.53
1617 root 1.45 sub add_button {
1618     my ($self, $text, $cb) = @_;
1619    
1620 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1621 root 1.48 }
1622    
1623 root 1.76 =item $popup->add_toggle ($text, $cb, $initial_value)
1624    
1625     Adds a toggle/checkbox item to the popup. Teh callback gets called
1626     whenever it gets toggled, with a boolean indicating its value as its first
1627     argument.
1628    
1629     =cut
1630    
1631 root 1.48 sub add_toggle {
1632     my ($self, $text, $cb, $value) = @_;
1633    
1634 root 1.49 my $item; $item = {
1635     type => "button",
1636     text => " $text",
1637     value => $value,
1638 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1639 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
1640 root 1.49 };
1641    
1642     $self->add_item ($item);
1643 root 1.45 }
1644    
1645 root 1.76 =item $popup->show
1646    
1647     Displays the popup (which is initially hidden).
1648    
1649     =cut
1650    
1651 root 1.45 sub show {
1652     my ($self) = @_;
1653    
1654     local $urxvt::popup::self = $self;
1655    
1656 root 1.77 my $env = $self->{term}->env;
1657     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
1658     delete $env->{LC_ALL};
1659     $env->{LC_CTYPE} = $self->{term}->locale;
1660    
1661 root 1.103 urxvt::term->new ($env, "popup",
1662 root 1.105 "--perl-lib" => "", "--perl-ext-common" => "",
1663 root 1.106 "-pty-fd" => -1, "-sl" => 0,
1664     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1665 root 1.77 "--transient-for" => $self->{term}->parent,
1666     "-display" => $self->{term}->display_id,
1667     "-pe" => "urxvt-popup")
1668 root 1.45 or die "unable to create popup window\n";
1669     }
1670    
1671     sub DESTROY {
1672     my ($self) = @_;
1673    
1674 root 1.58 delete $self->{term}{_destroy}{$self};
1675 root 1.45 $self->{term}->ungrab;
1676     }
1677    
1678 root 1.78 =back
1679    
1680 root 1.113 =cut
1681    
1682     package urxvt::watcher;
1683    
1684     @urxvt::timer::ISA = __PACKAGE__;
1685     @urxvt::iow::ISA = __PACKAGE__;
1686     @urxvt::pw::ISA = __PACKAGE__;
1687     @urxvt::iw::ISA = __PACKAGE__;
1688    
1689 root 1.1 =head2 The C<urxvt::timer> Class
1690    
1691     This class implements timer watchers/events. Time is represented as a
1692     fractional number of seconds since the epoch. Example:
1693    
1694 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1695 root 1.1 $term->{timer} = urxvt::timer
1696     ->new
1697 root 1.20 ->interval (1)
1698 root 1.1 ->cb (sub {
1699 root 1.20 $term->{overlay}->set (0, 0,
1700     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1701     });
1702 root 1.1
1703     =over 4
1704    
1705     =item $timer = new urxvt::timer
1706    
1707 root 1.20 Create a new timer object in started state. It is scheduled to fire
1708     immediately.
1709 root 1.1
1710     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1711    
1712     Set the callback to be called when the timer triggers.
1713    
1714     =item $tstamp = $timer->at
1715    
1716     Return the time this watcher will fire next.
1717    
1718     =item $timer = $timer->set ($tstamp)
1719    
1720     Set the time the event is generated to $tstamp.
1721    
1722 root 1.20 =item $timer = $timer->interval ($interval)
1723    
1724     Normally (and when C<$interval> is C<0>), the timer will automatically
1725     stop after it has fired once. If C<$interval> is non-zero, then the timer
1726     is automatically rescheduled at the given intervals.
1727    
1728 root 1.1 =item $timer = $timer->start
1729    
1730     Start the timer.
1731    
1732     =item $timer = $timer->start ($tstamp)
1733    
1734     Set the event trigger time to C<$tstamp> and start the timer.
1735    
1736 root 1.103 =item $timer = $timer->after ($delay)
1737    
1738     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
1739    
1740 root 1.1 =item $timer = $timer->stop
1741    
1742     Stop the timer.
1743    
1744     =back
1745    
1746     =head2 The C<urxvt::iow> Class
1747    
1748     This class implements io watchers/events. Example:
1749    
1750     $term->{socket} = ...
1751     $term->{iow} = urxvt::iow
1752     ->new
1753     ->fd (fileno $term->{socket})
1754 root 1.69 ->events (urxvt::EVENT_READ)
1755 root 1.1 ->start
1756     ->cb (sub {
1757     my ($iow, $revents) = @_;
1758     # $revents must be 1 here, no need to check
1759     sysread $term->{socket}, my $buf, 8192
1760     or end-of-file;
1761     });
1762    
1763    
1764     =over 4
1765    
1766     =item $iow = new urxvt::iow
1767    
1768     Create a new io watcher object in stopped state.
1769    
1770     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1771    
1772     Set the callback to be called when io events are triggered. C<$reventmask>
1773     is a bitset as described in the C<events> method.
1774    
1775     =item $iow = $iow->fd ($fd)
1776    
1777     Set the filedescriptor (not handle) to watch.
1778    
1779     =item $iow = $iow->events ($eventmask)
1780    
1781 root 1.69 Set the event mask to watch. The only allowed values are
1782     C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
1783     together, or C<urxvt::EVENT_NONE>.
1784 root 1.1
1785     =item $iow = $iow->start
1786    
1787     Start watching for requested events on the given handle.
1788    
1789     =item $iow = $iow->stop
1790    
1791     Stop watching for events on the given filehandle.
1792    
1793     =back
1794    
1795 root 1.4 =head1 ENVIRONMENT
1796    
1797     =head2 URXVT_PERL_VERBOSITY
1798    
1799     This variable controls the verbosity level of the perl extension. Higher
1800     numbers indicate more verbose output.
1801    
1802     =over 4
1803    
1804 root 1.58 =item == 0 - fatal messages
1805 root 1.4
1806 root 1.58 =item >= 3 - script loading and management
1807 root 1.4
1808 root 1.85 =item >=10 - all called hooks
1809    
1810     =item >=11 - hook reutrn values
1811 root 1.4
1812     =back
1813    
1814 root 1.1 =head1 AUTHOR
1815    
1816     Marc Lehmann <pcg@goof.com>
1817     http://software.schmorp.de/pkg/rxvt-unicode
1818    
1819     =cut
1820    
1821     1