ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.268
Committed: Sat Jul 24 13:07:56 2021 UTC (2 years, 9 months ago) by root
Branch: MAIN
Changes since 1.267: +2 -2 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.226 urxvtperl - rxvt-unicode's embedded perl interpreter
6 root 1.1
7     =head1 SYNOPSIS
8    
9 root 1.264 # create a file grab_test in some directory:
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.264 # start a urxvt instance using it:
17 root 1.10
18 root 1.264 urxvt --perl-lib path/to/somedirectory -pe grab_test
19 root 1.1
20     =head1 DESCRIPTION
21    
22 root 1.144 Every time a terminal object gets created, extension scripts specified via
23 root 1.44 the C<perl> resource are loaded and associated with it.
24 root 1.10
25 root 1.266 Scripts are compiled in a 'use strict qw(vars subs)' and 'use utf8'
26     environment, and thus must be encoded as UTF-8.
27 root 1.6
28 root 1.226 Each script will only ever be loaded once, even in urxvtd, where
29 root 1.16 scripts will be shared (but not enabled) for all terminals.
30 root 1.6
31 root 1.154 You can disable the embedded perl interpreter by setting both "perl-ext"
32     and "perl-ext-common" resources to the empty string.
33    
34 root 1.75 =head1 PREPACKAGED EXTENSIONS
35 root 1.15
36 root 1.218 A number of extensions are delivered with this release. You can find them
37 root 1.226 in F<< <libdir>/urxvt/perl/ >>, and the documentation can be viewed using
38     F<< man urxvt-<EXTENSIONNAME> >>.
39 root 1.15
40     You can activate them like this:
41    
42 root 1.226 urxvt -pe <extensionname>
43 root 1.15
44 root 1.111 Or by adding them to the resource for extensions loaded by default:
45    
46 ayin 1.160 URxvt.perl-ext-common: default,selection-autotransform
47 root 1.111
48 sf-exg 1.244 Extensions may add additional resources and C<actions>, i.e., methods
49     which can be bound to a key and invoked by the user. An extension can
50 sf-exg 1.250 define the resources it support using so called META comments,
51     described below. Similarly to builtin resources, extension resources
52     can also be specified on the command line as long options (with C<.>
53     replaced by C<->), in which case the corresponding extension is loaded
54 sf-exg 1.244 automatically. For this to work the extension B<must> define META
55     comments for its resources.
56 root 1.15
57 root 1.75 =head1 API DOCUMENTATION
58    
59 root 1.6 =head2 General API Considerations
60    
61     All objects (such as terminals, time watchers etc.) are typical
62     reference-to-hash objects. The hash can be used to store anything you
63 root 1.7 like. All members starting with an underscore (such as C<_ptr> or
64 root 1.23 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
65 root 1.7 modified).
66 root 1.6
67     When objects are destroyed on the C++ side, the perl object hashes are
68     emptied, so its best to store related objects such as time watchers and
69     the like inside the terminal object so they get destroyed as soon as the
70     terminal is destroyed.
71    
72 root 1.33 Argument names also often indicate the type of a parameter. Here are some
73     hints on what they mean:
74    
75 root 1.265 =over
76 root 1.33
77     =item $text
78    
79 sf-exg 1.182 Rxvt-unicode's special way of encoding text, where one "unicode" character
80 root 1.78 always represents one screen cell. See L<ROW_t> for a discussion of this format.
81 root 1.33
82     =item $string
83    
84     A perl text string, with an emphasis on I<text>. It can store all unicode
85     characters and is to be distinguished with text encoded in a specific
86     encoding (often locale-specific) and binary data.
87    
88     =item $octets
89    
90     Either binary data or - more common - a text string encoded in a
91     locale-specific way.
92    
93 sf-exg 1.202 =item $keysym
94    
95     an integer that is a valid X11 keysym code. You can convert a string
96     into a keysym and viceversa by using C<XStringToKeysym> and
97     C<XKeysymToString>.
98    
99 root 1.33 =back
100    
101 root 1.69 =head2 Extension Objects
102    
103 root 1.139 Every perl extension is a perl class. A separate perl object is created
104 sf-exg 1.193 for each terminal, and each terminal has its own set of extension objects,
105 root 1.145 which are passed as the first parameter to hooks. So extensions can use
106     their C<$self> object without having to think about clashes with other
107     extensions or other terminals, with the exception of methods and members
108     that begin with an underscore character C<_>: these are reserved for
109     internal use.
110 root 1.69
111     Although it isn't a C<urxvt::term> object, you can call all methods of the
112     C<urxvt::term> class on this object.
113    
114 root 1.222 Additional methods only supported for extension objects are described in
115     the C<urxvt::extension> section below.
116 root 1.69
117 sf-exg 1.244 =head2 META comments
118    
119 root 1.247 Rxvt-unicode recognizes special meta comments in extensions that define
120 root 1.258 different types of metadata. These comments are scanned whenever a
121     terminal is created and are typically used to autoload extensions when
122     their resources or command line parameters are used.
123 root 1.247
124 root 1.266 Currently, it recognises these comments below. Individual components are
125 sf-exg 1.267 separated by colons (C<:>), and should not contain colons themselves -
126 root 1.266 there is also currently no escaping mechanism provided for this.
127 sf-exg 1.244
128 root 1.265 =over
129 sf-exg 1.244
130     =item #:META:RESOURCE:name:type:desc
131    
132     The RESOURCE comment defines a resource used by the extension, where
133     C<name> is the resource name, C<type> is the resource type, C<boolean>
134     or C<string>, and C<desc> is the resource description.
135    
136 root 1.258 The extension will be autoloaded when this resource is specified or used
137     as a command line parameter.
138    
139 sf-exg 1.267 Example: matcher provides the C<matcher.launcher> resource by having this
140 root 1.266 comment:
141    
142     #:META:RESOURCE:%.launcher:string:default launcher command
143    
144     Example: load this extension when the C<-tr> command line option or
145     resource name is used.
146    
147     #:META:RESOURCE:tr:boolean:set root pixmap as background
148    
149     =item #:META:OSC:number:desc
150    
151     The OSC comment specifies an OSC sequence, where C<number> is the
152     numerical OSC code and C<desc> is a short description that is currently
153     unused.
154    
155     This will cause the extension to be autoloaded when the OSC sequence is
156     used for the first time.
157    
158     Note that autoloading carries some extra responsibilities with it:
159 sf-exg 1.267 although the terminal cannot really protect itself against malicious
160 root 1.266 sources of command sequences, therefore relying on the programs running
161     I<inside> to sanitize data that they output, it is very common for
162     programs to emit command sequences from untrusted sources.
163    
164     While this means that extensions should, as a defense-in-depth mechanism,
165     always consider whether OSC sequences are safe, autoloading automatically
166     exposes any autoloaded extension in all terminal windows, so extra care
167     should be taken.
168    
169     Example: the background extension registers OSC C<20> like this:
170    
171     #:META:OSC:20:change/query background image
172    
173     =item #:META:OSC_PERL:prefix:desc
174    
175     The same as the OSC comment, but for the Perl OSC sequence (C<777>). The
176     C<prefix> should be unique among extensions, of course, which is most
177     easily arranged by using the extension name, although this is not
178     required.
179    
180     Example: the overlay-osc extension registers its Perl OSC like this:
181    
182     #:META:OSC_PERL:overlay:man overlay-osc
183    
184 sf-exg 1.244 =back
185    
186 root 1.1 =head2 Hooks
187    
188 root 1.43 The following subroutines can be declared in extension files, and will be
189 root 1.23 called whenever the relevant event happens.
190    
191 root 1.144 The first argument passed to them is an extension object as described in
192 root 1.69 the in the C<Extension Objects> section.
193    
194 root 1.112 B<All> of these hooks must return a boolean value. If any of the called
195     hooks returns true, then the event counts as being I<consumed>, and the
196     relevant action might not be carried out by the C++ code.
197 root 1.1
198 root 1.69 I<< When in doubt, return a false value (preferably C<()>). >>
199 root 1.1
200 root 1.265 =over
201 root 1.1
202     =item on_init $term
203    
204     Called after a new terminal object has been initialized, but before
205 root 1.36 windows are created or the command gets run. Most methods are unsafe to
206     call or deliver senseless data, as terminal size and other characteristics
207 root 1.112 have not yet been determined. You can safely query and change resources
208     and options, though. For many purposes the C<on_start> hook is a better
209     place.
210    
211     =item on_start $term
212    
213     Called at the very end of initialisation of a new terminal, just before
214 root 1.144 trying to map (display) the toplevel and returning to the main loop.
215 root 1.113
216     =item on_destroy $term
217    
218 root 1.127 Called whenever something tries to destroy terminal, when the terminal is
219     still fully functional (not for long, though).
220 root 1.1
221     =item on_reset $term
222    
223     Called after the screen is "reset" for any reason, such as resizing or
224     control sequences. Here is where you can react on changes to size-related
225     variables.
226    
227 root 1.108 =item on_child_start $term, $pid
228    
229     Called just after the child process has been C<fork>ed.
230    
231     =item on_child_exit $term, $status
232    
233     Called just after the child process has exited. C<$status> is the status
234     from C<waitpid>.
235    
236 root 1.1 =item on_sel_make $term, $eventtime
237    
238     Called whenever a selection has been made by the user, but before the
239     selection text is copied, so changes to the beginning, end or type of the
240     selection will be honored.
241    
242     Returning a true value aborts selection making by urxvt, in which case you
243     have to make a selection yourself by calling C<< $term->selection_grab >>.
244    
245     =item on_sel_grab $term, $eventtime
246    
247     Called whenever a selection has been copied, but before the selection is
248     requested from the server. The selection text can be queried and changed
249     by calling C<< $term->selection >>.
250    
251 root 1.144 Returning a true value aborts selection grabbing. It will still be highlighted.
252 root 1.1
253 root 1.22 =item on_sel_extend $term
254    
255     Called whenever the user tries to extend the selection (e.g. with a double
256     click) and is either supposed to return false (normal operation), or
257 root 1.144 should extend the selection itself and return true to suppress the built-in
258 root 1.85 processing. This can happen multiple times, as long as the callback
259     returns true, it will be called on every further click by the user and is
260     supposed to enlarge the selection more and more, if possible.
261 root 1.22
262     See the F<selection> example extension.
263    
264 root 1.1 =item on_view_change $term, $offset
265    
266 root 1.144 Called whenever the view offset changes, i.e. the user or program
267 root 1.1 scrolls. Offset C<0> means display the normal terminal, positive values
268     show this many lines of scrollback.
269    
270     =item on_scroll_back $term, $lines, $saved
271    
272     Called whenever lines scroll out of the terminal area into the scrollback
273     buffer. C<$lines> is the number of lines scrolled out and may be larger
274     than the scroll back buffer or the terminal.
275    
276     It is called before lines are scrolled out (so rows 0 .. min ($lines - 1,
277     $nrow - 1) represent the lines to be scrolled out). C<$saved> is the total
278     number of lines that will be in the scrollback buffer.
279    
280 root 1.171 =item on_osc_seq $term, $op, $args, $resp
281 root 1.137
282     Called on every OSC sequence and can be used to suppress it or modify its
283 root 1.171 behaviour. The default should be to return an empty list. A true value
284 root 1.137 suppresses execution of the request completely. Make sure you don't get
285 root 1.171 confused by recursive invocations when you output an OSC sequence within
286 root 1.137 this callback.
287    
288     C<on_osc_seq_perl> should be used for new behaviour.
289    
290 root 1.171 =item on_osc_seq_perl $term, $args, $resp
291 root 1.28
292 root 1.266 Called whenever the B<ESC ] 777 ; prefix ; string ST> command sequence
293     (OSC = operating system command) is processed. Cursor position and other
294     state information is up-to-date when this happens. For interoperability,
295     the argument should start with the extension name (sans -osc) or some
296     other suitable prefix, and a semicolon, to distinguish it from commands
297     for other extensions.
298 root 1.171
299     For example, C<overlay-osc> uses this:
300    
301     sub on_osc_seq_perl {
302     my ($self, $osc, $resp) = @_;
303    
304     return unless $osc =~ s/^overlay;//;
305    
306     ... process remaining $osc string
307     }
308 root 1.29
309     Be careful not ever to trust (in a security sense) the data you receive,
310 root 1.144 as its source can not easily be controlled (e-mail content, messages from
311 root 1.29 other users on the same system etc.).
312 root 1.28
313 root 1.171 For responses, C<$resp> contains the end-of-args separator used by the
314     sender.
315    
316 root 1.33 =item on_add_lines $term, $string
317    
318     Called whenever text is about to be output, with the text as argument. You
319     can filter/change and output the text yourself by returning a true value
320     and calling C<< $term->scr_add_lines >> yourself. Please note that this
321     might be very slow, however, as your hook is called for B<all> text being
322     output.
323    
324 root 1.72 =item on_tt_write $term, $octets
325    
326     Called whenever some data is written to the tty/pty and can be used to
327     suppress or filter tty input.
328    
329 sf-exg 1.187 =item on_tt_paste $term, $octets
330    
331     Called whenever text is about to be pasted, with the text as argument. You
332     can filter/change and paste the text yourself by returning a true value
333     and calling C<< $term->tt_paste >> yourself. C<$octets> is
334     locale-encoded.
335    
336 root 1.35 =item on_line_update $term, $row
337    
338     Called whenever a line was updated or changed. Can be used to filter
339     screen output (e.g. underline urls or other useless stuff). Only lines
340     that are being shown will be filtered, and, due to performance reasons,
341     not always immediately.
342    
343     The row number is always the topmost row of the line if the line spans
344     multiple rows.
345    
346     Please note that, if you change the line, then the hook might get called
347     later with the already-modified line (e.g. if unrelated parts change), so
348     you cannot just toggle rendition bits, but only set them.
349    
350 root 1.1 =item on_refresh_begin $term
351    
352 root 1.171 Called just before the screen gets redrawn. Can be used for overlay or
353     similar effects by modifying the terminal contents in refresh_begin, and
354 root 1.1 restoring them in refresh_end. The built-in overlay and selection display
355     code is run after this hook, and takes precedence.
356    
357     =item on_refresh_end $term
358    
359     Called just after the screen gets redrawn. See C<on_refresh_begin>.
360    
361 sf-exg 1.244 =item on_action $term, $string
362    
363     Called whenever an action is invoked for the corresponding extension
364     (e.g. via a C<extension:string> builtin action bound to a key, see
365     description of the B<keysym> resource in the urxvt(1) manpage). The
366     event is simply the action string. Note that an action event is always
367     associated to a single extension.
368    
369 root 1.229 =item on_user_command $term, $string *DEPRECATED*
370 root 1.11
371 root 1.144 Called whenever a user-configured event is being activated (e.g. via
372 root 1.130 a C<perl:string> action bound to a key, see description of the B<keysym>
373 root 1.226 resource in the urxvt(1) manpage).
374 root 1.11
375 root 1.229 The event is simply the action string. This interface is going away in
376 sf-exg 1.235 preference to the C<on_action> hook.
377 root 1.130
378 sf-exg 1.186 =item on_resize_all_windows $term, $new_width, $new_height
379 root 1.134
380 root 1.144 Called just after the new window size has been calculated, but before
381 root 1.134 windows are actually being resized or hints are being set. If this hook
382 root 1.229 returns a true value, setting of the window hints is being skipped.
383 root 1.134
384 root 1.92 =item on_x_event $term, $event
385    
386     Called on every X event received on the vt window (and possibly other
387     windows). Should only be used as a last resort. Most event structure
388     members are not passed.
389    
390 root 1.143 =item on_root_event $term, $event
391    
392     Like C<on_x_event>, but is called for events on the root window.
393    
394 root 1.45 =item on_focus_in $term
395    
396     Called whenever the window gets the keyboard focus, before rxvt-unicode
397     does focus in processing.
398    
399     =item on_focus_out $term
400    
401 root 1.144 Called whenever the window loses keyboard focus, before rxvt-unicode does
402 root 1.45 focus out processing.
403    
404 root 1.102 =item on_configure_notify $term, $event
405    
406 root 1.118 =item on_property_notify $term, $event
407    
408 root 1.69 =item on_key_press $term, $event, $keysym, $octets
409 root 1.37
410 root 1.69 =item on_key_release $term, $event, $keysym
411 root 1.37
412     =item on_button_press $term, $event
413    
414     =item on_button_release $term, $event
415    
416     =item on_motion_notify $term, $event
417    
418 root 1.45 =item on_map_notify $term, $event
419    
420     =item on_unmap_notify $term, $event
421    
422 sf-exg 1.182 Called whenever the corresponding X event is received for the terminal. If
423     the hook returns true, then the event will be ignored by rxvt-unicode.
424 root 1.39
425     The event is a hash with most values as named by Xlib (see the XEvent
426 root 1.120 manpage), with the additional members C<row> and C<col>, which are the
427     (real, not screen-based) row and column under the mouse cursor.
428 root 1.38
429     C<on_key_press> additionally receives the string rxvt-unicode would
430     output, if any, in locale-specific encoding.
431 root 1.37
432 root 1.114 =item on_client_message $term, $event
433    
434     =item on_wm_protocols $term, $event
435    
436     =item on_wm_delete_window $term, $event
437    
438     Called when various types of ClientMessage events are received (all with
439     format=32, WM_PROTOCOLS or WM_PROTOCOLS:WM_DELETE_WINDOW).
440    
441 sf-exg 1.181 =item on_bell $term
442    
443     Called on receipt of a bell character.
444    
445 root 1.1 =back
446    
447 root 1.77 =cut
448    
449     package urxvt;
450    
451     use utf8;
452 root 1.266 use strict qw(vars subs);
453 root 1.77 use Carp ();
454     use Scalar::Util ();
455     use List::Util ();
456    
457     our $VERSION = 1;
458     our $TERM;
459 root 1.211 our @TERM_INIT; # should go, prevents async I/O etc.
460     our @TERM_EXT; # should go, prevents async I/O etc.
461 root 1.77 our @HOOKNAME;
462     our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
463     our %OPTION;
464    
465     our $LIBDIR;
466     our $RESNAME;
467     our $RESCLASS;
468     our $RXVTNAME;
469    
470 root 1.124 our $NOCHAR = chr 0xffff;
471 root 1.121
472 root 1.23 =head2 Variables in the C<urxvt> Package
473    
474 root 1.265 =over
475 root 1.23
476 root 1.75 =item $urxvt::LIBDIR
477    
478     The rxvt-unicode library directory, where, among other things, the perl
479     modules and scripts are stored.
480    
481     =item $urxvt::RESCLASS, $urxvt::RESCLASS
482    
483     The resource class and name rxvt-unicode uses to look up X resources.
484    
485     =item $urxvt::RXVTNAME
486    
487     The basename of the installed binaries, usually C<urxvt>.
488    
489 root 1.23 =item $urxvt::TERM
490    
491 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
492     object, whenever a callback/hook is executing.
493 root 1.23
494 root 1.113 =item @urxvt::TERM_INIT
495    
496 root 1.144 All code references in this array will be called as methods of the next newly
497 root 1.113 created C<urxvt::term> object (during the C<on_init> phase). The array
498 root 1.144 gets cleared before the code references that were in it are being executed,
499     so references can push themselves onto it again if they so desire.
500 root 1.113
501 root 1.144 This complements to the perl-eval command line option, but gets executed
502 root 1.113 first.
503    
504     =item @urxvt::TERM_EXT
505    
506     Works similar to C<@TERM_INIT>, but contains perl package/class names, which
507     get registered as normal extensions after calling the hooks in C<@TERM_INIT>
508     but before other extensions. Gets cleared just like C<@TERM_INIT>.
509    
510 root 1.23 =back
511    
512 root 1.1 =head2 Functions in the C<urxvt> Package
513    
514 root 1.265 =over
515 root 1.1
516     =item urxvt::fatal $errormessage
517    
518 root 1.190 Fatally aborts execution with the given error message (which should
519     include a trailing newline). Avoid at all costs! The only time this
520     is acceptable (and useful) is in the init hook, where it prevents the
521 sf-exg 1.191 terminal from starting up.
522 root 1.1
523     =item urxvt::warn $string
524    
525 root 1.190 Calls C<rxvt_warn> with the given string which should include a trailing
526 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
527     that calls this function.
528    
529     Using this function has the advantage that its output ends up in the
530     correct place, e.g. on stderr of the connecting urxvtc client.
531    
532 root 1.77 Messages have a size limit of 1023 bytes currently.
533    
534 root 1.131 =item @terms = urxvt::termlist
535    
536     Returns all urxvt::term objects that exist in this process, regardless of
537 root 1.144 whether they are started, being destroyed etc., so be careful. Only term
538 root 1.131 objects that have perl extensions attached will be returned (because there
539 sf-exg 1.193 is no urxvt::term object associated with others).
540 root 1.131
541 root 1.1 =item $time = urxvt::NOW
542    
543     Returns the "current time" (as per the event loop).
544    
545 root 1.47 =item urxvt::CurrentTime
546    
547     =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
548     Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
549     Button4Mask, Button5Mask, AnyModifier
550    
551 root 1.92 =item urxvt::NoEventMask, KeyPressMask, KeyReleaseMask,
552     ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask,
553     PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask,
554     Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask,
555     KeymapStateMask, ExposureMask, VisibilityChangeMask, StructureNotifyMask,
556     ResizeRedirectMask, SubstructureNotifyMask, SubstructureRedirectMask,
557     FocusChangeMask, PropertyChangeMask, ColormapChangeMask, OwnerGrabButtonMask
558    
559     =item urxvt::KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify,
560     EnterNotify, LeaveNotify, FocusIn, FocusOut, KeymapNotify, Expose,
561     GraphicsExpose, NoExpose, VisibilityNotify, CreateNotify, DestroyNotify,
562     UnmapNotify, MapNotify, MapRequest, ReparentNotify, ConfigureNotify,
563     ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify,
564     CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest,
565     SelectionNotify, ColormapNotify, ClientMessage, MappingNotify
566    
567 root 1.55 Various constants for use in X calls and event processing.
568 root 1.47
569 root 1.257 =item urxvt::PrivMode_132, PrivMode_132OK, PrivMode_rVideo, PrivMode_relOrigin,
570     PrivMode_Screen, PrivMode_Autowrap, PrivMode_aplCUR, PrivMode_aplKP,
571     PrivMode_HaveBackSpace, PrivMode_BackSpace, PrivMode_ShiftKeys,
572     PrivMode_VisibleCursor, PrivMode_MouseX10, PrivMode_MouseX11,
573     PrivMode_scrollBar, PrivMode_TtyOutputInh, PrivMode_Keypress,
574     PrivMode_smoothScroll, PrivMode_vt52, PrivMode_LFNL, PrivMode_MouseBtnEvent,
575 sf-exg 1.259 PrivMode_MouseAnyEvent, PrivMode_BracketPaste, PrivMode_ExtMouseUTF8,
576     PrivMode_ExtMouseUrxvt, PrivMode_BlinkingCursor, PrivMode_mouse_report,
577 root 1.257 PrivMode_Default
578    
579     Constants for checking DEC private modes.
580    
581 root 1.21 =back
582    
583 root 1.18 =head2 RENDITION
584    
585     Rendition bitsets contain information about colour, font, font styles and
586     similar information for each screen cell.
587    
588     The following "macros" deal with changes in rendition sets. You should
589     never just create a bitset, you should always modify an existing one,
590     as they contain important information required for correct operation of
591     rxvt-unicode.
592    
593 root 1.265 =over
594 root 1.18
595     =item $rend = urxvt::DEFAULT_RSTYLE
596    
597     Returns the default rendition, as used when the terminal is starting up or
598     being reset. Useful as a base to start when creating renditions.
599    
600     =item $rend = urxvt::OVERLAY_RSTYLE
601    
602     Return the rendition mask used for overlays by default.
603    
604 root 1.189 =item $rendbit = urxvt::RS_Bold, urxvt::RS_Italic, urxvt::RS_Blink,
605     urxvt::RS_RVid, urxvt::RS_Uline
606 root 1.18
607     Return the bit that enabled bold, italic, blink, reverse-video and
608 root 1.19 underline, respectively. To enable such a style, just logically OR it into
609     the bitset.
610 root 1.18
611     =item $foreground = urxvt::GET_BASEFG $rend
612    
613     =item $background = urxvt::GET_BASEBG $rend
614    
615     Return the foreground/background colour index, respectively.
616    
617 root 1.75 =item $rend = urxvt::SET_FGCOLOR $rend, $new_colour
618 root 1.18
619 root 1.75 =item $rend = urxvt::SET_BGCOLOR $rend, $new_colour
620 root 1.18
621 root 1.132 =item $rend = urxvt::SET_COLOR $rend, $new_fg, $new_bg
622    
623 root 1.18 Replace the foreground/background colour in the rendition mask with the
624     specified one.
625    
626 root 1.75 =item $value = urxvt::GET_CUSTOM $rend
627 root 1.19
628     Return the "custom" value: Every rendition has 5 bits for use by
629     extensions. They can be set and changed as you like and are initially
630     zero.
631    
632 root 1.75 =item $rend = urxvt::SET_CUSTOM $rend, $new_value
633 root 1.19
634     Change the custom value.
635    
636 root 1.18 =back
637    
638 root 1.1 =cut
639    
640     BEGIN {
641     # overwrite perl's warn
642     *CORE::GLOBAL::warn = sub {
643     my $msg = join "", @_;
644     $msg .= "\n"
645     unless $msg =~ /\n$/;
646     urxvt::warn ($msg);
647     };
648     }
649    
650 root 1.124 no warnings 'utf8';
651    
652 root 1.210 sub parse_resource {
653     my ($term, $name, $isarg, $longopt, $flag, $value) = @_;
654 root 1.206
655 root 1.234 $term->scan_extensions;
656 root 1.207
657 root 1.258 # iterating over all resources has quadratic time overhead
658     # overall, maybe this could be optimised?
659 root 1.210 my $r = $term->{meta}{resource};
660 sf-exg 1.228 keys %$r; # reset iterator
661 sf-exg 1.241 while (my ($k, $v) = each %$r) {
662     my $pattern = $k;
663     $pattern =~ y/./-/ if $isarg;
664     my $prefix = $name;
665     my $suffix;
666     if ($pattern =~ /\-$/) {
667     $prefix = substr $name, 0, length $pattern;
668     $suffix = substr $name, length $pattern;
669     }
670     if ($pattern eq $prefix) {
671     $name = "$urxvt::RESCLASS.$k$suffix";
672 root 1.211
673 root 1.215 push @{ $term->{perl_ext_3} }, $v->[0];
674 root 1.211
675 sf-exg 1.256 return 1 unless $isarg;
676    
677 root 1.210 if ($v->[1] eq "boolean") {
678     $term->put_option_db ($name, $flag ? "true" : "false");
679     return 1;
680     } else {
681     $term->put_option_db ($name, $value);
682     return 1 + 2;
683     }
684     }
685     }
686    
687 root 1.206 0
688     }
689    
690 root 1.208 sub usage {
691     my ($term, $usage_type) = @_;
692    
693 root 1.234 $term->scan_extensions;
694 root 1.208
695     my $r = $term->{meta}{resource};
696    
697 root 1.210 for my $pattern (sort keys %$r) {
698     my ($ext, $type, $desc) = @{ $r->{$pattern} };
699 root 1.208
700     $desc .= " (-pe $ext)";
701    
702     if ($usage_type == 1) {
703 root 1.210 $pattern =~ y/./-/;
704 root 1.212 $pattern =~ s/-$/-.../g;
705 root 1.210
706 root 1.208 if ($type eq "boolean") {
707 root 1.210 urxvt::log sprintf " -%-30s %s\n", "/+$pattern", $desc;
708 root 1.208 } else {
709 root 1.210 urxvt::log sprintf " -%-30s %s\n", "$pattern $type", $desc;
710 root 1.208 }
711     } else {
712 root 1.213 $pattern =~ s/\.$/.*/g;
713 root 1.210 urxvt::log sprintf " %-31s %s\n", "$pattern:", $type;
714 root 1.208 }
715     }
716     }
717    
718 root 1.266 my $verbosity = $ENV{URXVT_PERL_VERBOSITY} // 2;
719 root 1.1
720     sub verbose {
721     my ($level, $msg) = @_;
722 root 1.8 warn "$msg\n" if $level <= $verbosity;
723 root 1.1 }
724    
725 root 1.44 my %extension_pkg;
726 root 1.1
727     # load a single script into its own package, once only
728 root 1.44 sub extension_package($) {
729 root 1.1 my ($path) = @_;
730    
731 root 1.44 $extension_pkg{$path} ||= do {
732 root 1.100 $path =~ /([^\/\\]+)$/;
733     my $pkg = $1;
734     $pkg =~ s/[^[:word:]]/_/g;
735     $pkg = "urxvt::ext::$pkg";
736 root 1.8
737 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
738 root 1.1
739 root 1.217 (${"$pkg\::_NAME"} = $path) =~ s/^.*[\\\/]//; # hackish
740    
741 root 1.1 open my $fh, "<:raw", $path
742     or die "$path: $!";
743    
744 root 1.96 my $source =
745 root 1.266 "package $pkg; use strict qw(vars subs); use utf8; no warnings 'utf8';\n"
746 root 1.69 . "#line 1 \"$path\"\n{\n"
747     . (do { local $/; <$fh> })
748     . "\n};\n1";
749 root 1.8
750 root 1.69 eval $source
751     or die "$path: $@";
752 root 1.1
753     $pkg
754 root 1.7 }
755 root 1.1 }
756    
757 root 1.31 our $retval; # return value for urxvt
758    
759 root 1.8 # called by the rxvt core
760     sub invoke {
761 root 1.23 local $TERM = shift;
762 root 1.8 my $htype = shift;
763 root 1.6
764 root 1.230 if ($htype == HOOK_INIT) {
765 root 1.234 $TERM->scan_extensions;
766    
767 root 1.68 my %ext_arg;
768 root 1.6
769 root 1.113 {
770     my @init = @TERM_INIT;
771     @TERM_INIT = ();
772     $_->($TERM) for @init;
773     my @pkg = @TERM_EXT;
774     @TERM_EXT = ();
775     $TERM->register_package ($_) for @pkg;
776     }
777    
778 root 1.215 for (
779 root 1.260 @{ delete $TERM->{perl_ext_3} },
780 sf-exg 1.243 (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2),
781 root 1.215 ) {
782 root 1.50 if ($_ eq "default") {
783 root 1.236
784 root 1.237 $ext_arg{$_} = []
785 root 1.261 for qw(selection option-popup selection-popup readline searchable-scrollback confirm-paste);
786 root 1.236
787 root 1.237 for ($TERM->_keysym_resources) {
788     next if /^(?:string|command|builtin|builtin-string|perl)/;
789     next unless /^([A-Za-z0-9_\-]+):/;
790    
791     my $ext = $1;
792    
793     $ext_arg{$ext} = [];
794     }
795    
796 root 1.266 } elsif (/^-(.*)$/) { # remove from set
797 root 1.68 delete $ext_arg{$1};
798 root 1.236
799 root 1.266 } elsif (/^\/(.*)$/) { # prohibit loading
800     undef $TERM->{ext_prohibit}{$1};
801    
802     } elsif (/^([^<]+)(?:<(.*)>)?$/) { # add to set, clear prohibit status
803     delete $TERM->{ext_prohibit}{$1};
804     push @{ $ext_arg{$1} }, defined $2 ? $2 : ();
805 root 1.236
806 root 1.49 } else {
807 root 1.266 verbose 2, "cannot parse extension specification '$_', ignoring.";
808 root 1.50 }
809     }
810 root 1.6
811 root 1.266 $TERM->set_should_invoke (HOOK_OSC_SEQ , +1) if $TERM->{meta}{autoload_osc};
812     $TERM->set_should_invoke (HOOK_OSC_SEQ_PERL, +1) if $TERM->{meta}{autoload_osc_perl};
813    
814 root 1.133 for my $ext (sort keys %ext_arg) {
815 root 1.266 my $path = $TERM->extension_path ($ext);
816 root 1.50
817 root 1.266 if (defined $path) {
818     $TERM->autoload_extension ($ext, $ext_arg{$ext});
819 root 1.50 } else {
820 root 1.266 verbose 2, "perl extension '$ext' not found in perl library search path";
821 root 1.8 }
822     }
823 root 1.55
824     eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
825     warn $@ if $@;
826 root 1.31 }
827    
828 root 1.266 if ($htype == HOOK_OSC_SEQ) {
829     if (my $exts = delete $TERM->{meta}{autoload_osc}{$_[0]}) {
830     $TERM->autoload_extension ($_->[0]) for @$exts;
831     }
832     } elsif ($htype == HOOK_OSC_SEQ_PERL) {
833     if ($_[0] =~ /^([^;]+)/ and (my $exts = delete $TERM->{meta}{autoload_osc_perl}{$1})) {
834     $TERM->autoload_extension ($_->[0]) for @$exts;
835     }
836     }
837    
838 root 1.268 $retval = undef;
839    
840 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
841     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
842     if $verbosity >= 10;
843    
844 root 1.234 if ($htype == HOOK_ACTION) {
845 root 1.230 # this hook is only sent to the extension with the name
846     # matching the first arg
847 root 1.234 my $pkg = shift;
848     $pkg =~ y/-/_/;
849     $pkg = "urxvt::ext::$pkg";
850    
851     $cb = $cb->{$pkg}
852     or return undef; #TODO: maybe warn user?
853    
854     $cb = { $pkg => $cb };
855     }
856    
857     for my $pkg (keys %$cb) {
858 root 1.220 my $retval_ = eval { $cb->{$pkg}->($TERM->{_pkg}{$pkg} || $TERM, @_) };
859 root 1.113 $retval ||= $retval_;
860 root 1.68
861 root 1.58 if ($@) {
862     $TERM->ungrab; # better to lose the grab than the session
863     warn $@;
864     }
865 root 1.31 }
866 root 1.85
867     verbose 11, "$HOOKNAME[$htype] returning <$retval>"
868     if $verbosity >= 11;
869 root 1.31 }
870    
871 root 1.230 if ($htype == HOOK_DESTROY) {
872 root 1.31 # clear package objects
873     %$_ = () for values %{ $TERM->{_pkg} };
874 root 1.25
875 root 1.31 # clear package
876     %$TERM = ();
877 root 1.7 }
878    
879 root 1.31 $retval
880 root 1.7 }
881 root 1.1
882 root 1.132 sub SET_COLOR($$$) {
883     SET_BGCOLOR (SET_FGCOLOR ($_[0], $_[1]), $_[2])
884     }
885    
886 tpope 1.152 sub rend2mask {
887     no strict 'refs';
888     my ($str, $mask) = (@_, 0);
889     my %color = ( fg => undef, bg => undef );
890     my @failed;
891     for my $spec ( split /\s+/, $str ) {
892     if ( $spec =~ /^([fb]g)[_:-]?(\d+)/i ) {
893     $color{lc($1)} = $2;
894     } else {
895     my $neg = $spec =~ s/^[-^]//;
896     unless ( exists &{"RS_$spec"} ) {
897     push @failed, $spec;
898     next;
899     }
900     my $cur = &{"RS_$spec"};
901     if ( $neg ) {
902     $mask &= ~$cur;
903     } else {
904     $mask |= $cur;
905     }
906     }
907     }
908     ($mask, @color{qw(fg bg)}, \@failed)
909     }
910    
911 root 1.71 package urxvt::term::extension;
912 root 1.69
913 root 1.222 =head2 The C<urxvt::term::extension> class
914    
915     Each extension attached to a terminal object is represented by
916     a C<urxvt::term::extension> object.
917    
918     You can use these objects, which are passed to all callbacks to store any
919     state related to the terminal and extension instance.
920    
921     The methods (And data members) documented below can be called on extension
922     objects, in addition to call methods documented for the <urxvt::term>
923     class.
924    
925 root 1.265 =over
926 root 1.222
927     =item $urxvt_term = $self->{term}
928    
929     Returns the C<urxvt::term> object associated with this instance of the
930     extension. This member I<must not> be changed in any way.
931    
932     =cut
933    
934     our $AUTOLOAD;
935    
936     sub AUTOLOAD {
937     $AUTOLOAD =~ /:([^:]+)$/
938     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
939    
940     eval qq{
941     sub $AUTOLOAD {
942     my \$proxy = shift;
943     \$proxy->{term}->$1 (\@_)
944     }
945     1
946     } or die "FATAL: unable to compile method forwarder: $@";
947    
948     goto &$AUTOLOAD;
949     }
950    
951     sub DESTROY {
952     # nop
953     }
954    
955     # urxvt::destroy_hook (basically a cheap Guard:: implementation)
956    
957     sub urxvt::destroy_hook::DESTROY {
958     ${$_[0]}->();
959     }
960    
961     sub urxvt::destroy_hook(&) {
962     bless \shift, urxvt::destroy_hook::
963     }
964    
965     =item $self->enable ($hook_name => $cb[, $hook_name => $cb..])
966    
967     Dynamically enable the given hooks (named without the C<on_> prefix) for
968 root 1.229 this extension, replacing any hook previously installed via C<enable> in
969     this extension.
970    
971     This is useful when you want to overwrite time-critical hooks only
972     temporarily.
973 root 1.222
974     To install additional callbacks for the same hook, you can use the C<on>
975     method of the C<urxvt::term> class.
976    
977     =item $self->disable ($hook_name[, $hook_name..])
978    
979     Dynamically disable the given hooks.
980    
981     =cut
982    
983 root 1.69 sub enable {
984     my ($self, %hook) = @_;
985     my $pkg = $self->{_pkg};
986    
987     while (my ($name, $cb) = each %hook) {
988     my $htype = $HOOKTYPE{uc $name};
989     defined $htype
990     or Carp::croak "unsupported hook type '$name'";
991    
992 root 1.206 $self->set_should_invoke ($htype, +1)
993 root 1.92 unless exists $self->{term}{_hook}[$htype]{$pkg};
994 root 1.69
995     $self->{term}{_hook}[$htype]{$pkg} = $cb;
996     }
997     }
998    
999     sub disable {
1000     my ($self, @hook) = @_;
1001     my $pkg = $self->{_pkg};
1002    
1003     for my $name (@hook) {
1004     my $htype = $HOOKTYPE{uc $name};
1005     defined $htype
1006     or Carp::croak "unsupported hook type '$name'";
1007    
1008 root 1.206 $self->set_should_invoke ($htype, -1)
1009 root 1.92 if delete $self->{term}{_hook}[$htype]{$pkg};
1010 root 1.69 }
1011     }
1012    
1013 root 1.222 =item $guard = $self->on ($hook_name => $cb[, $hook_name => $cb..])
1014    
1015     Similar to the C<enable> enable, but installs additional callbacks for
1016     the given hook(s) (that is, it doesn't replace existing callbacks), and
1017     returns a guard object. When the guard object is destroyed the callbacks
1018     are disabled again.
1019    
1020     =cut
1021 root 1.69
1022 root 1.222 sub urxvt::extension::on_disable::DESTROY {
1023     my $disable = shift;
1024 root 1.23
1025 root 1.223 my $term = delete $disable->{""};
1026 root 1.23
1027 root 1.222 while (my ($htype, $id) = each %$disable) {
1028 root 1.223 delete $term->{_hook}[$htype]{$id};
1029     $term->set_should_invoke ($htype, -1);
1030 root 1.222 }
1031 root 1.23 }
1032    
1033 root 1.222 sub on {
1034     my ($self, %hook) = @_;
1035    
1036 root 1.223 my $term = $self->{term};
1037    
1038     my %disable = ( "" => $term );
1039 root 1.222
1040     while (my ($name, $cb) = each %hook) {
1041     my $htype = $HOOKTYPE{uc $name};
1042     defined $htype
1043     or Carp::croak "unsupported hook type '$name'";
1044    
1045 root 1.223 $term->set_should_invoke ($htype, +1);
1046     $term->{_hook}[$htype]{ $disable{$htype} = $cb+0 }
1047     = sub { shift; $cb->($self, @_) }; # very ugly indeed
1048 root 1.222 }
1049    
1050     bless \%disable, "urxvt::extension::on_disable"
1051 root 1.58 }
1052    
1053 root 1.247 =item $self->bind_action ($hotkey, $action)
1054    
1055 root 1.222 =item $self->x_resource ($pattern)
1056    
1057     =item $self->x_resource_boolean ($pattern)
1058 root 1.55
1059 root 1.247 These methods support an additional C<%> prefix for C<$action> or
1060     C<$pattern> when called on an extension object, compared to the
1061     C<urxvt::term> methods of the same name - see the description of these
1062     methods in the C<urxvt::term> class for details.
1063 root 1.45
1064 root 1.222 =cut
1065 root 1.45
1066 root 1.247 sub bind_action {
1067     my ($self, $hotkey, $action) = @_;
1068     $action =~ s/^%:/$_[0]{_name}:/;
1069     $self->{term}->bind_action ($hotkey, $action)
1070     }
1071    
1072 root 1.217 sub x_resource {
1073     my ($self, $name) = @_;
1074     $name =~ s/^%(\.|$)/$_[0]{_name}$1/;
1075     $self->{term}->x_resource ($name)
1076     }
1077    
1078     sub x_resource_boolean {
1079     my ($self, $name) = @_;
1080     $name =~ s/^%(\.|$)/$_[0]{_name}$1/;
1081     $self->{term}->x_resource_boolean ($name)
1082     }
1083    
1084 root 1.222 =back
1085    
1086     =cut
1087    
1088 root 1.56 package urxvt::anyevent;
1089    
1090     =head2 The C<urxvt::anyevent> Class
1091    
1092     The sole purpose of this class is to deliver an interface to the
1093     C<AnyEvent> module - any module using it will work inside urxvt without
1094 root 1.75 further programming. The only exception is that you cannot wait on
1095 root 1.209 condition variables, but non-blocking condvar use is ok.
1096    
1097     In practical terms this means is that you cannot use blocking APIs, but
1098     the non-blocking variant should work.
1099 root 1.55
1100 root 1.56 =cut
1101 root 1.55
1102 root 1.178 our $VERSION = '5.23';
1103 root 1.55
1104     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
1105     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
1106    
1107     sub timer {
1108     my ($class, %arg) = @_;
1109    
1110     my $cb = $arg{cb};
1111    
1112     urxvt::timer
1113     ->new
1114 root 1.179 ->after ($arg{after}, $arg{interval})
1115     ->cb ($arg{interval} ? $cb : sub {
1116 root 1.55 $_[0]->stop; # need to cancel manually
1117     $cb->();
1118     })
1119     }
1120    
1121     sub io {
1122     my ($class, %arg) = @_;
1123    
1124     my $cb = $arg{cb};
1125 root 1.176 my $fd = fileno $arg{fh};
1126     defined $fd or $fd = $arg{fh};
1127 root 1.55
1128     bless [$arg{fh}, urxvt::iow
1129     ->new
1130 root 1.177 ->fd ($fd)
1131 root 1.55 ->events (($arg{poll} =~ /r/ ? 1 : 0)
1132     | ($arg{poll} =~ /w/ ? 2 : 0))
1133     ->start
1134 root 1.176 ->cb ($cb)
1135     ], urxvt::anyevent::
1136     }
1137    
1138     sub idle {
1139     my ($class, %arg) = @_;
1140    
1141     my $cb = $arg{cb};
1142    
1143     urxvt::iw
1144     ->new
1145     ->start
1146 root 1.178 ->cb ($cb)
1147 root 1.176 }
1148    
1149     sub child {
1150     my ($class, %arg) = @_;
1151    
1152     my $cb = $arg{cb};
1153    
1154     urxvt::pw
1155     ->new
1156     ->start ($arg{pid})
1157     ->cb (sub {
1158     $_[0]->stop; # need to cancel manually
1159     $cb->($_[0]->rpid, $_[0]->rstatus);
1160     })
1161 root 1.55 }
1162    
1163     sub DESTROY {
1164     $_[0][1]->stop;
1165     }
1166    
1167 root 1.198 # only needed for AnyEvent < 6 compatibility
1168 root 1.150 sub one_event {
1169 root 1.149 Carp::croak "AnyEvent->one_event blocking wait unsupported in urxvt, use a non-blocking API";
1170     }
1171    
1172 root 1.55 package urxvt::term;
1173    
1174 root 1.1 =head2 The C<urxvt::term> Class
1175    
1176 root 1.265 =over
1177 root 1.1
1178 root 1.68 =cut
1179    
1180     # find on_xxx subs in the package and register them
1181     # as hooks
1182     sub register_package {
1183     my ($self, $pkg, $argv) = @_;
1184    
1185 root 1.113 no strict 'refs';
1186    
1187     urxvt::verbose 6, "register package $pkg to $self";
1188    
1189     @{"$pkg\::ISA"} = urxvt::term::extension::;
1190    
1191 root 1.69 my $proxy = bless {
1192 root 1.217 _pkg => $pkg,
1193     _name => ${"$pkg\::_NAME"}, # hackish
1194     argv => $argv,
1195 root 1.69 }, $pkg;
1196     Scalar::Util::weaken ($proxy->{term} = $self);
1197 root 1.68
1198     $self->{_pkg}{$pkg} = $proxy;
1199    
1200 root 1.69 for my $name (@HOOKNAME) {
1201     if (my $ref = $pkg->can ("on_" . lc $name)) {
1202     $proxy->enable ($name => $ref);
1203     }
1204 root 1.68 }
1205     }
1206    
1207 sf-exg 1.267 # map extension name to filesystem path
1208 root 1.266 sub extension_path {
1209     (grep -f $_, map "$_/$_[1]", $_[0]->perl_libdirs)[0]
1210     }
1211    
1212     # load an extension by name
1213     sub load_extension_file {
1214     my ($self, $path, $argv) = @_;
1215    
1216     $self->register_package (urxvt::extension_package $path, $argv);
1217     }
1218    
1219     # autoload an extension unless loading it is prohibited
1220     sub autoload_extension {
1221     my ($self, $name, $argv) = @_;
1222    
1223     return if exists $self->{ext_prohibit}{$name};
1224    
1225     my $path = $self->extension_path ($name)
1226     // return urxvt::verbose 2, "perl extension '$name' not found in perl library search path (during autoload)";
1227    
1228     $self->load_extension_file ($path, $argv);
1229     }
1230    
1231 root 1.208 sub perl_libdirs {
1232     map { split /:/ }
1233     $_[0]->resource ("perl_lib"),
1234     $ENV{URXVT_PERL_LIB},
1235     "$ENV{HOME}/.urxvt/ext",
1236     "$LIBDIR/perl"
1237     }
1238    
1239 root 1.234 # scan for available extensions and collect their metadata
1240     sub scan_extensions {
1241 root 1.208 my ($self) = @_;
1242 root 1.234
1243     return if exists $self->{meta};
1244    
1245 root 1.249 my @urxvtdirs = perl_libdirs $self;
1246 root 1.252 # my @cpandirs = grep -d, map "$_/URxvt/Ext", @INC;
1247 root 1.208
1248 root 1.266 $self->{meta} = \my %allmeta;
1249 root 1.234
1250     # first gather extensions
1251 root 1.249
1252     my $gather = sub {
1253     my ($dir, $core) = @_;
1254    
1255 root 1.208 opendir my $fh, $dir
1256 root 1.249 or return;
1257    
1258 root 1.208 for my $ext (readdir $fh) {
1259 root 1.225 $ext !~ /^\./
1260 root 1.249 or next;
1261    
1262     open my $fh, "<", "$dir/$ext"
1263     or next;
1264    
1265     -f $fh
1266     or next;
1267    
1268     $ext =~ s/\.uext$// or $core
1269 root 1.208 or next;
1270    
1271 root 1.266 my %meta = (dir => $dir);
1272 root 1.234
1273 root 1.208 while (<$fh>) {
1274 root 1.234 if (/^#:META:(?:X_)?RESOURCE:(.*)/) {
1275 root 1.210 my ($pattern, $type, $desc) = split /:/, $1;
1276 root 1.214 $pattern =~ s/^%(\.|$)/$ext$1/g; # % in pattern == extension name
1277 root 1.213 if ($pattern =~ /[^a-zA-Z0-9\-\.]/) {
1278 root 1.210 warn "$dir/$ext: meta resource '$pattern' contains illegal characters (not alphanumeric nor . nor *)\n";
1279     } else {
1280 root 1.266 $meta{resource}{$pattern} = [$ext, $type, $desc];
1281 root 1.210 }
1282 root 1.266
1283     } elsif (/^#:META:OSC:([0-9]+):(.*)/) {
1284     push @{$allmeta{autoload_osc}{$1}}, [$ext, $2];
1285    
1286     } elsif (/^#:META:OSC_PERL:([^:]+):(.*)/) {
1287     push @{$allmeta{autoload_osc_perl}{$1}}, [$ext, $2];
1288    
1289 root 1.208 } elsif (/^\s*(?:#|$)/) {
1290     # skip other comments and empty lines
1291 root 1.266
1292 root 1.208 } else {
1293     last; # stop parsing on first non-empty non-comment line
1294     }
1295     }
1296 root 1.234
1297 root 1.266 $allmeta{ext}{$ext} = \%meta;
1298 root 1.208 }
1299 root 1.249 };
1300    
1301 root 1.252 # $gather->($_, 0) for @cpandirs;
1302 root 1.249 $gather->($_, 1) for @urxvtdirs;
1303 root 1.234
1304 root 1.248 # and now merge resources
1305 root 1.251
1306 root 1.266 $allmeta{resource} = \my %resource;
1307 root 1.251
1308 root 1.266 while (my ($k, $v) = each %{ $allmeta{ext} }) {
1309 root 1.234 #TODO: should check for extensions overriding each other
1310 root 1.251 %resource = (%resource, %{ $v->{resource} });
1311 root 1.234 }
1312 root 1.208 }
1313    
1314 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
1315    
1316     Creates a new terminal, very similar as if you had started it with system
1317 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
1318     hash which defines the environment of the new terminal.
1319 root 1.77
1320     Croaks (and probably outputs an error message) if the new instance
1321     couldn't be created. Returns C<undef> if the new instance didn't
1322     initialise perl, and the terminal object otherwise. The C<init> and
1323 root 1.131 C<start> hooks will be called before this call returns, and are free to
1324     refer to global data (which is race free).
1325 root 1.77
1326     =cut
1327    
1328     sub new {
1329     my ($class, $env, @args) = @_;
1330    
1331 root 1.131 $env or Carp::croak "environment hash missing in call to urxvt::term->new";
1332     @args or Carp::croak "name argument missing in call to urxvt::term->new";
1333    
1334     _new ([ map "$_=$env->{$_}", keys %$env ], \@args);
1335 root 1.77 }
1336    
1337 root 1.36 =item $term->destroy
1338    
1339 root 1.75 Destroy the terminal object (close the window, free resources
1340 root 1.226 etc.). Please note that urxvt will not exit as long as any event
1341 root 1.75 watchers (timers, io watchers) are still active.
1342 root 1.36
1343 root 1.108 =item $term->exec_async ($cmd[, @args])
1344    
1345     Works like the combination of the C<fork>/C<exec> builtins, which executes
1346     ("starts") programs in the background. This function takes care of setting
1347     the user environment before exec'ing the command (e.g. C<PATH>) and should
1348     be preferred over explicit calls to C<exec> or C<system>.
1349    
1350     Returns the pid of the subprocess or C<undef> on error.
1351    
1352     =cut
1353    
1354     sub exec_async {
1355     my $self = shift;
1356    
1357     my $pid = fork;
1358    
1359     return $pid
1360     if !defined $pid or $pid;
1361    
1362     %ENV = %{ $self->env };
1363    
1364     exec @_;
1365     urxvt::_exit 255;
1366     }
1367    
1368 root 1.49 =item $isset = $term->option ($optval[, $set])
1369    
1370     Returns true if the option specified by C<$optval> is enabled, and
1371     optionally change it. All option values are stored by name in the hash
1372     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
1373    
1374 root 1.144 Here is a likely non-exhaustive list of option names, please see the
1375 root 1.49 source file F</src/optinc.h> to see the actual list:
1376    
1377 sf-exg 1.195 borderLess buffered console cursorBlink cursorUnderline hold iconic
1378     insecure intensityStyles iso14755 iso14755_52 jumpScroll loginShell
1379 sf-exg 1.196 mapAlert meta8 mouseWheelScrollPage override_redirect pastableTabs
1380 sf-exg 1.195 pointerBlank reverseVideo scrollBar scrollBar_floating scrollBar_right
1381     scrollTtyKeypress scrollTtyOutput scrollWithBuffer secondaryScreen
1382     secondaryScroll skipBuiltinGlyphs skipScroll transparent tripleclickwords
1383 root 1.262 urgentOnBell utmpInhibit visualBell disablePasteBrackets
1384 root 1.49
1385 root 1.4 =item $value = $term->resource ($name[, $newval])
1386    
1387     Returns the current resource value associated with a given name and
1388     optionally sets a new value. Setting values is most useful in the C<init>
1389     hook. Unset resources are returned and accepted as C<undef>.
1390    
1391     The new value must be properly encoded to a suitable character encoding
1392     before passing it to this method. Similarly, the returned value may need
1393     to be converted from the used encoding to text.
1394    
1395     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
1396     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
1397     likely change).
1398    
1399     Please note that resource strings will currently only be freed when the
1400     terminal is destroyed, so changing options frequently will eat memory.
1401    
1402 root 1.144 Here is a likely non-exhaustive list of resource names, not all of which
1403 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1404     to see the actual list:
1405 root 1.5
1406 sf-exg 1.219 answerbackstring backgroundPixmap backspace_key blurradius
1407 sf-exg 1.194 boldFont boldItalicFont borderLess buffered chdir color cursorBlink
1408     cursorUnderline cutchars delete_key depth display_name embed ext_bwidth
1409     fade font geometry hold iconName iconfile imFont imLocale inputMethod
1410     insecure int_bwidth intensityStyles iso14755 iso14755_52 italicFont
1411     jumpScroll letterSpace lineSpace loginShell mapAlert meta8 modifier
1412     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1413     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1414 root 1.105 preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1415     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1416     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1417 sf-exg 1.194 secondaryScreen secondaryScroll shade skipBuiltinGlyphs skipScroll
1418     term_name title transient_for transparent tripleclickwords urgentOnBell
1419 root 1.262 utmpInhibit visualBell rewrapMode disablePasteBrackets
1420 root 1.5
1421 root 1.4 =cut
1422    
1423 root 1.55 sub resource($$;$) {
1424 root 1.4 my ($self, $name) = (shift, shift);
1425     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1426 root 1.169 goto &urxvt::term::_resource
1427 root 1.4 }
1428    
1429 root 1.79 =item $value = $term->x_resource ($pattern)
1430    
1431     Returns the X-Resource for the given pattern, excluding the program or
1432     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1433     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1434     resource with that pattern exists.
1435    
1436 sf-exg 1.242 Extensions that define extra resources also need to call this method
1437     to access their values.
1438 root 1.217
1439     If the method is called on an extension object (basically, from an
1440     extension), then the special prefix C<%.> will be replaced by the name of
1441 sf-exg 1.219 the extension and a dot, and the lone string C<%> will be replaced by the
1442 root 1.217 extension name itself. This makes it possible to code extensions so you
1443 sf-exg 1.244 can rename them and get a new set of resources without having to change
1444     the actual code.
1445 root 1.217
1446 root 1.79 This method should only be called during the C<on_start> hook, as there is
1447     only one resource database per display, and later invocations might return
1448     the wrong resources.
1449    
1450 root 1.211 =item $value = $term->x_resource_boolean ($pattern)
1451    
1452     Like C<x_resource>, above, but interprets the string value as a boolean
1453     and returns C<1> for true values, C<0> for false values and C<undef> if
1454     the resource or option isn't specified.
1455    
1456     You should always use this method to parse boolean resources.
1457    
1458     =cut
1459    
1460     sub x_resource_boolean {
1461     my $res = &x_resource;
1462    
1463     $res =~ /^\s*(?:true|yes|on|1)\s*$/i ? 1 : defined $res && 0
1464     }
1465    
1466 sf-exg 1.254 =item $action = $term->lookup_keysym ($keysym, $state)
1467    
1468     Returns the action bound to key combination C<($keysym, $state)>,
1469     if a binding for it exists, and C<undef> otherwise.
1470    
1471 root 1.247 =item $success = $term->bind_action ($key, $action)
1472 root 1.69
1473 root 1.234 Adds a key binding exactly as specified via a C<keysym> resource. See the
1474 root 1.226 C<keysym> resource in the urxvt(1) manpage.
1475 root 1.69
1476 sf-exg 1.250 To add default bindings for actions, an extension should call C<<
1477     ->bind_action >> in its C<init> hook for every such binding. Doing it
1478     in the C<init> hook allows users to override or remove the binding
1479 root 1.247 again.
1480    
1481     Example: the C<searchable-scrollback> by default binds itself
1482     on C<Meta-s>, using C<< $self->bind_action >>, which calls C<<
1483     $term->bind_action >>.
1484    
1485     sub init {
1486     my ($self) = @_;
1487    
1488     $self->bind_action ("M-s" => "%:start");
1489     }
1490    
1491 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1492 root 1.32
1493 root 1.33 Return and optionally change the current rendition. Text that is output by
1494     the terminal application will use this style.
1495 root 1.32
1496     =item ($row, $col) = $term->screen_cur ([$row, $col])
1497    
1498     Return the current coordinates of the text cursor position and optionally
1499     set it (which is usually bad as applications don't expect that).
1500    
1501 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1502    
1503     =item ($row, $col) = $term->selection_beg ([$row, $col])
1504    
1505     =item ($row, $col) = $term->selection_end ([$row, $col])
1506    
1507 root 1.180 Return the current values of the selection mark, begin or end positions.
1508    
1509     When arguments are given, then the selection coordinates are set to
1510     C<$row> and C<$col>, and the selection screen is set to the current
1511     screen.
1512    
1513     =item $screen = $term->selection_screen ([$screen])
1514    
1515     Returns the current selection screen, and then optionally sets it.
1516 root 1.1
1517 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1518    
1519     Tries to make a selection as set by C<selection_beg> and
1520     C<selection_end>. If C<$rectangular> is true (default: false), a
1521 sf-exg 1.185 rectangular selection will be made. This is the preferred function to make
1522 root 1.86 a selection.
1523    
1524 sf-exg 1.184 =item $success = $term->selection_grab ($eventtime[, $clipboard])
1525 root 1.1
1526 sf-exg 1.184 Try to acquire ownership of the primary (clipboard if C<$clipboard> is
1527     true) selection from the server. The corresponding text can be set
1528     with the next method. No visual feedback will be given. This function
1529 root 1.86 is mostly useful from within C<on_sel_grab> hooks.
1530 root 1.1
1531 sf-exg 1.184 =item $oldtext = $term->selection ([$newtext, $clipboard])
1532 root 1.1
1533 sf-exg 1.184 Return the current selection (clipboard if C<$clipboard> is true) text
1534     and optionally replace it by C<$newtext>.
1535    
1536     =item $term->selection_clear ([$clipboard])
1537    
1538     Revoke ownership of the primary (clipboard if C<$clipboard> is true) selection.
1539 root 1.1
1540 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1541    
1542     Create a simple multi-line overlay box. See the next method for details.
1543    
1544     =cut
1545    
1546     sub overlay_simple {
1547     my ($self, $x, $y, $text) = @_;
1548    
1549     my @lines = split /\n/, $text;
1550    
1551     my $w = List::Util::max map $self->strwidth ($_), @lines;
1552    
1553     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1554     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1555    
1556     $overlay
1557     }
1558 root 1.1
1559 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1560 root 1.1
1561     Create a new (empty) overlay at the given position with the given
1562 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1563     (default: C<OVERLAY_RSTYLE>).
1564 root 1.1
1565 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1566     around the box.
1567 root 1.1
1568 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1569     right/bottom side, respectively.
1570 root 1.1
1571 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1572     as long as the perl object is referenced.
1573 root 1.1
1574 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1575    
1576 root 1.265 =over
1577 root 1.1
1578 root 1.172 =item $overlay->set ($x, $y, $text[, $rend])
1579 root 1.1
1580 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1581     text in rxvt-unicode's special encoding and an array of rendition values
1582     at a specific position inside the overlay.
1583 root 1.1
1584 root 1.172 If C<$rend> is missing, then the rendition will not be changed.
1585    
1586 root 1.22 =item $overlay->hide
1587    
1588     If visible, hide the overlay, but do not destroy it.
1589    
1590     =item $overlay->show
1591    
1592     If hidden, display the overlay again.
1593    
1594     =back
1595    
1596 root 1.45 =item $popup = $term->popup ($event)
1597    
1598     Creates a new C<urxvt::popup> object that implements a popup menu. The
1599     C<$event> I<must> be the event causing the menu to pop up (a button event,
1600     currently).
1601    
1602     =cut
1603    
1604 root 1.55 sub popup {
1605 root 1.45 my ($self, $event) = @_;
1606    
1607     $self->grab ($event->{time}, 1)
1608     or return;
1609    
1610     my $popup = bless {
1611     term => $self,
1612     event => $event,
1613     }, urxvt::popup::;
1614    
1615     Scalar::Util::weaken $popup->{term};
1616    
1617     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1618     Scalar::Util::weaken $self->{_destroy}{$popup};
1619    
1620     $popup
1621     }
1622    
1623 root 1.40 =item $cellwidth = $term->strwidth ($string)
1624 root 1.6
1625     Returns the number of screen-cells this string would need. Correctly
1626     accounts for wide and combining characters.
1627    
1628 root 1.40 =item $octets = $term->locale_encode ($string)
1629 root 1.6
1630     Convert the given text string into the corresponding locale encoding.
1631    
1632 root 1.40 =item $string = $term->locale_decode ($octets)
1633 root 1.6
1634     Convert the given locale-encoded octets into a perl string.
1635    
1636 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1637    
1638     XORs the rendition values in the given span with the provided value
1639 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1640     refresh hooks to provide effects similar to the selection.
1641 root 1.70
1642     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1643    
1644     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1645     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1646     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1647 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1648 root 1.70
1649 root 1.69 =item $term->scr_bell
1650    
1651     Ring the bell!
1652    
1653 root 1.33 =item $term->scr_add_lines ($string)
1654    
1655     Write the given text string to the screen, as if output by the application
1656     running inside the terminal. It may not contain command sequences (escape
1657 root 1.245 codes - see C<cmd_parse> for that), but is free to use line feeds,
1658     carriage returns and tabs. The string is a normal text string, not in
1659     locale-dependent encoding.
1660 root 1.33
1661     Normally its not a good idea to use this function, as programs might be
1662     confused by changes in cursor position or scrolling. Its useful inside a
1663     C<on_add_lines> hook, though.
1664    
1665 root 1.121 =item $term->scr_change_screen ($screen)
1666    
1667     Switch to given screen - 0 primary, 1 secondary.
1668    
1669 root 1.36 =item $term->cmd_parse ($octets)
1670    
1671     Similar to C<scr_add_lines>, but the argument must be in the
1672     locale-specific encoding of the terminal and can contain command sequences
1673     (escape codes) that will be interpreted.
1674    
1675 root 1.6 =item $term->tt_write ($octets)
1676    
1677 root 1.245 Write the octets given in C<$octets> to the tty (i.e. as user input
1678     to the program, see C<cmd_parse> for the opposite direction). To pass
1679     characters instead of octets, you should convert your strings first to the
1680     locale-specific encoding using C<< $term->locale_encode >>.
1681 root 1.12
1682 root 1.234 =item $term->tt_write_user_input ($octets)
1683    
1684     Like C<tt_write>, but should be used when writing strings in response to
1685 sf-exg 1.239 the user pressing a key, to invoke the additional actions requested by
1686 root 1.234 the user for that case (C<tt_write> doesn't do that).
1687    
1688     The typical use case would be inside C<on_action> hooks.
1689    
1690 sf-exg 1.187 =item $term->tt_paste ($octets)
1691    
1692     Write the octets given in C<$octets> to the tty as a paste, converting NL to
1693     CR and bracketing the data with control sequences if bracketed paste mode
1694     is set.
1695    
1696 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1697    
1698     Replaces the event mask of the pty watcher by the given event mask. Can
1699     be used to suppress input and output handling to the pty/tty. See the
1700     description of C<< urxvt::timer->events >>. Make sure to always restore
1701     the previous value.
1702    
1703 root 1.125 =item $fd = $term->pty_fd
1704    
1705     Returns the master file descriptor for the pty in use, or C<-1> if no pty
1706     is used.
1707    
1708 root 1.40 =item $windowid = $term->parent
1709    
1710     Return the window id of the toplevel window.
1711    
1712     =item $windowid = $term->vt
1713    
1714     Return the window id of the terminal window.
1715    
1716 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1717    
1718     Adds the specified events to the vt event mask. Useful e.g. when you want
1719     to receive pointer events all the times:
1720    
1721     $term->vt_emask_add (urxvt::PointerMotionMask);
1722    
1723 sf-exg 1.204 =item $term->set_urgency ($set)
1724    
1725     Enable/disable the urgency hint on the toplevel window.
1726    
1727 root 1.132 =item $term->focus_in
1728    
1729     =item $term->focus_out
1730    
1731     =item $term->key_press ($state, $keycode[, $time])
1732    
1733     =item $term->key_release ($state, $keycode[, $time])
1734    
1735     Deliver various fake events to to terminal.
1736    
1737 root 1.255 =item $window_width = $term->width ([$new_value])
1738 root 1.32
1739 root 1.255 =item $window_height = $term->height ([$new_value])
1740 root 1.32
1741 root 1.255 =item $font_width = $term->fwidth ([$new_value])
1742 root 1.32
1743 root 1.255 =item $font_height = $term->fheight ([$new_value])
1744 root 1.32
1745 root 1.255 =item $font_ascent = $term->fbase ([$new_value])
1746 root 1.32
1747 root 1.255 =item $terminal_rows = $term->nrow ([$new_value])
1748 root 1.32
1749 root 1.255 =item $terminal_columns = $term->ncol ([$new_value])
1750 root 1.32
1751 root 1.255 =item $has_focus = $term->focus ([$new_value])
1752 root 1.32
1753 root 1.255 =item $is_mapped = $term->mapped ([$new_value])
1754 root 1.13
1755 root 1.255 =item $max_scrollback = $term->saveLines ([$new_value])
1756 root 1.13
1757 root 1.255 =item $nrow_plus_saveLines = $term->total_rows ([$new_value])
1758 root 1.13
1759 root 1.255 =item $topmost_scrollback_row = $term->top_row ([$new_value])
1760 root 1.12
1761 root 1.255 Return various integers describing terminal characteristics. If an
1762     argument is given, changes the value and returns the previous one.
1763 root 1.12
1764 root 1.77 =item $x_display = $term->display_id
1765    
1766     Return the DISPLAY used by rxvt-unicode.
1767    
1768 root 1.66 =item $lc_ctype = $term->locale
1769    
1770     Returns the LC_CTYPE category string used by this rxvt-unicode.
1771    
1772 root 1.77 =item $env = $term->env
1773    
1774     Returns a copy of the environment in effect for the terminal as a hashref
1775     similar to C<\%ENV>.
1776    
1777 root 1.136 =item @envv = $term->envv
1778    
1779     Returns the environment as array of strings of the form C<VAR=VALUE>.
1780    
1781     =item @argv = $term->argv
1782    
1783     Return the argument vector as this terminal, similar to @ARGV, but
1784     includes the program name as first element.
1785    
1786 root 1.77 =cut
1787 root 1.66
1788 root 1.77 sub env {
1789 root 1.136 +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), $_[0]->envv }
1790 root 1.77 }
1791 root 1.66
1792 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1793    
1794     =item $modifiermask = $term->ModMetaMask
1795    
1796     =item $modifiermask = $term->ModNumLockMask
1797    
1798     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1799     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1800    
1801 root 1.121 =item $screen = $term->current_screen
1802    
1803     Returns the currently displayed screen (0 primary, 1 secondary).
1804    
1805 root 1.122 =item $cursor_is_hidden = $term->hidden_cursor
1806    
1807 root 1.144 Returns whether the cursor is currently hidden or not.
1808 root 1.122
1809 root 1.257 =item $priv_modes = $term->priv_modes
1810    
1811     Returns a bitset with the state of DEC private modes.
1812    
1813     Example:
1814    
1815     if ($term->priv_modes & urxvt::PrivMode_mouse_report) {
1816     # mouse reporting is turned on
1817     }
1818    
1819 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1820    
1821 sf-exg 1.263 Returns the row number of the topmost displayed line and changes it,
1822     if an argument is given. Values greater than or equal to C<0> display
1823     the terminal contents. Lower values scroll this many lines into the
1824     scrollback buffer.
1825 root 1.12
1826 root 1.14 =item $term->want_refresh
1827    
1828     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1829     compare the on-screen display with its stored representation. If they
1830     differ, it redraws the differences.
1831    
1832     Used after changing terminal contents to display them.
1833    
1834 sf-exg 1.253 =item $term->refresh_check
1835    
1836     Checks if a refresh has been requested and, if so, schedules one.
1837    
1838 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1839 root 1.12
1840 root 1.166 Returns the text of the entire row with number C<$row_number>. Row C<< $term->top_row >>
1841     is the topmost terminal line, row C<< $term->nrow-1 >> is the bottommost
1842     terminal line. Nothing will be returned if a nonexistent line
1843 root 1.24 is requested.
1844 root 1.12
1845 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1846     line, starting at column C<$start_col> (default C<0>), which is useful
1847 root 1.18 to replace only parts of a line. The font index in the rendition will
1848 root 1.13 automatically be updated.
1849 root 1.12
1850 root 1.124 C<$text> is in a special encoding: tabs and wide characters that use more
1851     than one cell when displayed are padded with C<$urxvt::NOCHAR> (chr 65535)
1852 root 1.121 characters. Characters with combining characters and other characters that
1853 ayin 1.162 do not fit into the normal text encoding will be replaced with characters
1854 root 1.121 in the private use area.
1855 root 1.12
1856     You have to obey this encoding when changing text. The advantage is
1857     that C<substr> and similar functions work on screen cells and not on
1858     characters.
1859    
1860     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1861     can be used to convert normal strings into this encoding and vice versa.
1862    
1863 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1864    
1865     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1866     bitsets. Rendition bitsets contain information about colour, font, font
1867     styles and similar information. See also C<< $term->ROW_t >>.
1868    
1869     When setting rendition, the font mask will be ignored.
1870 root 1.12
1871 root 1.18 See the section on RENDITION, above.
1872 root 1.13
1873     =item $length = $term->ROW_l ($row_number[, $new_length])
1874    
1875 root 1.24 Returns the number of screen cells that are in use ("the line
1876     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1877     line is joined with the following one.
1878    
1879     =item $bool = $term->is_longer ($row_number)
1880    
1881     Returns true if the row is part of a multiple-row logical "line" (i.e.
1882     joined with the following row), which means all characters are in use
1883     and it is continued on the next row (and possibly a continuation of the
1884     previous row(s)).
1885    
1886     =item $line = $term->line ($row_number)
1887    
1888     Create and return a new C<urxvt::line> object that stores information
1889     about the logical line that row C<$row_number> is part of. It supports the
1890     following methods:
1891 root 1.12
1892 root 1.265 =over
1893 root 1.24
1894 root 1.35 =item $text = $line->t ([$new_text])
1895 root 1.24
1896 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1897 root 1.24
1898 root 1.35 =item $rend = $line->r ([$new_rend])
1899 root 1.24
1900 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1901 root 1.24
1902     =item $length = $line->l
1903    
1904     Returns the length of the line in cells, similar to C<ROW_l>.
1905    
1906     =item $rownum = $line->beg
1907    
1908     =item $rownum = $line->end
1909    
1910     Return the row number of the first/last row of the line, respectively.
1911    
1912     =item $offset = $line->offset_of ($row, $col)
1913    
1914     Returns the character offset of the given row|col pair within the logical
1915 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1916     offsets outside the string.
1917 root 1.24
1918     =item ($row, $col) = $line->coord_of ($offset)
1919    
1920     Translates a string offset into terminal coordinates again.
1921    
1922     =back
1923    
1924     =cut
1925    
1926 root 1.55 sub line {
1927 root 1.24 my ($self, $row) = @_;
1928    
1929     my $maxrow = $self->nrow - 1;
1930    
1931     my ($beg, $end) = ($row, $row);
1932    
1933     --$beg while $self->ROW_is_longer ($beg - 1);
1934     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1935    
1936     bless {
1937     term => $self,
1938     beg => $beg,
1939     end => $end,
1940 root 1.34 ncol => $self->ncol,
1941 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1942     }, urxvt::line::
1943     }
1944    
1945     sub urxvt::line::t {
1946     my ($self) = @_;
1947    
1948 root 1.227 if (@_ > 1) {
1949     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1950     for $self->{beg} .. $self->{end};
1951     }
1952 root 1.34
1953     defined wantarray &&
1954     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1955     0, $self->{len}
1956 root 1.24 }
1957    
1958     sub urxvt::line::r {
1959     my ($self) = @_;
1960    
1961 root 1.227 if (@_ > 1) {
1962     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1963     for $self->{beg} .. $self->{end};
1964     }
1965 root 1.34
1966     if (defined wantarray) {
1967     my $rend = [
1968     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1969     ];
1970     $#$rend = $self->{len} - 1;
1971     return $rend;
1972     }
1973    
1974     ()
1975 root 1.24 }
1976    
1977     sub urxvt::line::beg { $_[0]{beg} }
1978     sub urxvt::line::end { $_[0]{end} }
1979     sub urxvt::line::l { $_[0]{len} }
1980    
1981     sub urxvt::line::offset_of {
1982     my ($self, $row, $col) = @_;
1983    
1984 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1985 root 1.24 }
1986    
1987     sub urxvt::line::coord_of {
1988     my ($self, $offset) = @_;
1989    
1990     use integer;
1991    
1992     (
1993 root 1.34 $offset / $self->{ncol} + $self->{beg},
1994     $offset % $self->{ncol}
1995 root 1.24 )
1996     }
1997    
1998 root 1.12 =item $text = $term->special_encode $string
1999    
2000     Converts a perl string into the special encoding used by rxvt-unicode,
2001     where one character corresponds to one screen cell. See
2002     C<< $term->ROW_t >> for details.
2003    
2004     =item $string = $term->special_decode $text
2005    
2006 sf-exg 1.267 Converts rxvt-unicode's text representation into a perl string. See
2007 root 1.12 C<< $term->ROW_t >> for details.
2008 root 1.6
2009 root 1.131 =item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
2010    
2011     =item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])
2012 root 1.61
2013 root 1.131 Register/unregister a synchronous button grab. See the XGrabButton
2014     manpage.
2015 root 1.61
2016     =item $success = $term->grab ($eventtime[, $sync])
2017    
2018     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
2019 root 1.144 synchronous (C<$sync> is true). Also remembers the grab timestamp.
2020 root 1.61
2021     =item $term->allow_events_async
2022    
2023     Calls XAllowEvents with AsyncBoth for the most recent grab.
2024    
2025     =item $term->allow_events_sync
2026    
2027     Calls XAllowEvents with SyncBoth for the most recent grab.
2028    
2029     =item $term->allow_events_replay
2030    
2031     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
2032     recent grab.
2033    
2034     =item $term->ungrab
2035    
2036 sf-exg 1.182 Calls XUngrabPointer and XUngrabKeyboard for the most recent grab. Is called automatically on
2037 root 1.61 evaluation errors, as it is better to lose the grab in the error case as
2038     the session.
2039    
2040 root 1.119 =item $atom = $term->XInternAtom ($atom_name[, $only_if_exists])
2041    
2042     =item $atom_name = $term->XGetAtomName ($atom)
2043    
2044     =item @atoms = $term->XListProperties ($window)
2045    
2046     =item ($type,$format,$octets) = $term->XGetWindowProperty ($window, $property)
2047    
2048 root 1.168 =item $term->XChangeProperty ($window, $property, $type, $format, $octets)
2049 root 1.119
2050     =item $term->XDeleteProperty ($window, $property)
2051    
2052     =item $window = $term->DefaultRootWindow
2053    
2054     =item $term->XReparentWindow ($window, $parent, [$x, $y])
2055    
2056     =item $term->XMapWindow ($window)
2057    
2058     =item $term->XUnmapWindow ($window)
2059    
2060     =item $term->XMoveResizeWindow ($window, $x, $y, $width, $height)
2061    
2062     =item ($x, $y, $child_window) = $term->XTranslateCoordinates ($src, $dst, $x, $y)
2063    
2064     =item $term->XChangeInput ($window, $add_events[, $del_events])
2065    
2066 sf-exg 1.202 =item $keysym = $term->XStringToKeysym ($string)
2067    
2068     =item $string = $term->XKeysymToString ($keysym)
2069    
2070 root 1.119 Various X or X-related functions. The C<$term> object only serves as
2071     the source of the display, otherwise those functions map more-or-less
2072 sf-exg 1.182 directly onto the X functions of the same name.
2073 root 1.119
2074 root 1.1 =back
2075    
2076 root 1.55 =cut
2077    
2078     package urxvt::popup;
2079    
2080 root 1.45 =head2 The C<urxvt::popup> Class
2081    
2082 root 1.265 =over
2083 root 1.45
2084     =cut
2085    
2086     sub add_item {
2087     my ($self, $item) = @_;
2088    
2089 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
2090     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
2091     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
2092    
2093     $item->{render} ||= sub { $_[0]{text} };
2094    
2095 root 1.45 push @{ $self->{item} }, $item;
2096     }
2097    
2098 root 1.76 =item $popup->add_title ($title)
2099    
2100     Adds a non-clickable title to the popup.
2101    
2102     =cut
2103    
2104     sub add_title {
2105     my ($self, $title) = @_;
2106    
2107     $self->add_item ({
2108     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
2109     text => $title,
2110     activate => sub { },
2111     });
2112     }
2113    
2114     =item $popup->add_separator ([$sepchr])
2115    
2116     Creates a separator, optionally using the character given as C<$sepchr>.
2117    
2118     =cut
2119    
2120 root 1.53 sub add_separator {
2121     my ($self, $sep) = @_;
2122    
2123 root 1.67 $sep ||= "=";
2124 root 1.53
2125     $self->add_item ({
2126     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
2127     text => "",
2128 root 1.65 render => sub { $sep x $self->{term}->ncol },
2129 root 1.53 activate => sub { },
2130     });
2131     }
2132    
2133 root 1.76 =item $popup->add_button ($text, $cb)
2134    
2135     Adds a clickable button to the popup. C<$cb> is called whenever it is
2136     selected.
2137 root 1.53
2138 root 1.76 =cut
2139 root 1.53
2140 root 1.45 sub add_button {
2141     my ($self, $text, $cb) = @_;
2142    
2143 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
2144 root 1.48 }
2145    
2146 root 1.133 =item $popup->add_toggle ($text, $initial_value, $cb)
2147 root 1.76
2148 root 1.133 Adds a toggle/checkbox item to the popup. The callback gets called
2149     whenever it gets toggled, with a boolean indicating its new value as its
2150     first argument.
2151 root 1.76
2152     =cut
2153    
2154 root 1.48 sub add_toggle {
2155 root 1.133 my ($self, $text, $value, $cb) = @_;
2156 root 1.48
2157 root 1.49 my $item; $item = {
2158     type => "button",
2159     text => " $text",
2160     value => $value,
2161 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
2162 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
2163 root 1.49 };
2164    
2165     $self->add_item ($item);
2166 root 1.45 }
2167    
2168 root 1.76 =item $popup->show
2169    
2170     Displays the popup (which is initially hidden).
2171    
2172     =cut
2173    
2174 root 1.45 sub show {
2175     my ($self) = @_;
2176    
2177     local $urxvt::popup::self = $self;
2178    
2179 root 1.77 my $env = $self->{term}->env;
2180     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
2181     delete $env->{LC_ALL};
2182     $env->{LC_CTYPE} = $self->{term}->locale;
2183    
2184 root 1.164 my $term = urxvt::term->new (
2185     $env, "popup",
2186     "--perl-lib" => "", "--perl-ext-common" => "",
2187     "-pty-fd" => -1, "-sl" => 0,
2188     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
2189     "--transient-for" => $self->{term}->parent,
2190     "-display" => $self->{term}->display_id,
2191     "-pe" => "urxvt-popup",
2192     ) or die "unable to create popup window\n";
2193    
2194     unless (delete $term->{urxvt_popup_init_done}) {
2195     $term->ungrab;
2196     $term->destroy;
2197     die "unable to initialise popup window\n";
2198     }
2199 root 1.45 }
2200    
2201     sub DESTROY {
2202     my ($self) = @_;
2203    
2204 root 1.58 delete $self->{term}{_destroy}{$self};
2205 root 1.45 $self->{term}->ungrab;
2206     }
2207    
2208 root 1.78 =back
2209    
2210 root 1.113 =cut
2211    
2212     package urxvt::watcher;
2213    
2214 root 1.1 =head2 The C<urxvt::timer> Class
2215    
2216     This class implements timer watchers/events. Time is represented as a
2217     fractional number of seconds since the epoch. Example:
2218    
2219 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
2220 root 1.1 $term->{timer} = urxvt::timer
2221     ->new
2222 root 1.20 ->interval (1)
2223 root 1.1 ->cb (sub {
2224 root 1.20 $term->{overlay}->set (0, 0,
2225     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
2226 ayin 1.157 });
2227 root 1.1
2228 root 1.265 =over
2229 root 1.1
2230     =item $timer = new urxvt::timer
2231    
2232 root 1.20 Create a new timer object in started state. It is scheduled to fire
2233     immediately.
2234 root 1.1
2235     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
2236    
2237     Set the callback to be called when the timer triggers.
2238    
2239 root 1.179 =item $timer = $timer->set ($tstamp[, $interval])
2240 root 1.1
2241 root 1.179 Set the time the event is generated to $tstamp (and optionally specifies a
2242     new $interval).
2243 root 1.1
2244 root 1.20 =item $timer = $timer->interval ($interval)
2245    
2246 root 1.179 By default (and when C<$interval> is C<0>), the timer will automatically
2247 root 1.20 stop after it has fired once. If C<$interval> is non-zero, then the timer
2248     is automatically rescheduled at the given intervals.
2249    
2250 root 1.1 =item $timer = $timer->start
2251    
2252     Start the timer.
2253    
2254 root 1.179 =item $timer = $timer->start ($tstamp[, $interval])
2255 root 1.1
2256 root 1.179 Set the event trigger time to C<$tstamp> and start the timer. Optionally
2257     also replaces the interval.
2258 root 1.1
2259 root 1.179 =item $timer = $timer->after ($delay[, $interval])
2260 root 1.103
2261     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
2262    
2263 root 1.1 =item $timer = $timer->stop
2264    
2265     Stop the timer.
2266    
2267     =back
2268    
2269     =head2 The C<urxvt::iow> Class
2270    
2271     This class implements io watchers/events. Example:
2272    
2273     $term->{socket} = ...
2274     $term->{iow} = urxvt::iow
2275     ->new
2276     ->fd (fileno $term->{socket})
2277 root 1.159 ->events (urxvt::EV_READ)
2278 root 1.1 ->start
2279     ->cb (sub {
2280     my ($iow, $revents) = @_;
2281     # $revents must be 1 here, no need to check
2282     sysread $term->{socket}, my $buf, 8192
2283     or end-of-file;
2284     });
2285    
2286    
2287 root 1.265 =over
2288 root 1.1
2289     =item $iow = new urxvt::iow
2290    
2291     Create a new io watcher object in stopped state.
2292    
2293     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
2294    
2295     Set the callback to be called when io events are triggered. C<$reventmask>
2296     is a bitset as described in the C<events> method.
2297    
2298     =item $iow = $iow->fd ($fd)
2299    
2300 root 1.144 Set the file descriptor (not handle) to watch.
2301 root 1.1
2302     =item $iow = $iow->events ($eventmask)
2303    
2304 root 1.69 Set the event mask to watch. The only allowed values are
2305 root 1.159 C<urxvt::EV_READ> and C<urxvt::EV_WRITE>, which might be ORed
2306     together, or C<urxvt::EV_NONE>.
2307 root 1.1
2308     =item $iow = $iow->start
2309    
2310     Start watching for requested events on the given handle.
2311    
2312     =item $iow = $iow->stop
2313    
2314 root 1.144 Stop watching for events on the given file handle.
2315 root 1.1
2316     =back
2317    
2318 root 1.114 =head2 The C<urxvt::iw> Class
2319    
2320     This class implements idle watchers, that get called automatically when
2321     the process is idle. They should return as fast as possible, after doing
2322     some useful work.
2323    
2324 root 1.265 =over
2325 root 1.114
2326     =item $iw = new urxvt::iw
2327    
2328     Create a new idle watcher object in stopped state.
2329    
2330     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
2331    
2332     Set the callback to be called when the watcher triggers.
2333    
2334     =item $timer = $timer->start
2335    
2336     Start the watcher.
2337    
2338     =item $timer = $timer->stop
2339    
2340     Stop the watcher.
2341    
2342     =back
2343    
2344     =head2 The C<urxvt::pw> Class
2345    
2346     This class implements process watchers. They create an event whenever a
2347     process exits, after which they stop automatically.
2348    
2349     my $pid = fork;
2350     ...
2351     $term->{pw} = urxvt::pw
2352     ->new
2353     ->start ($pid)
2354     ->cb (sub {
2355     my ($pw, $exit_status) = @_;
2356     ...
2357 ayin 1.157 });
2358 root 1.114
2359 root 1.265 =over
2360 root 1.114
2361     =item $pw = new urxvt::pw
2362    
2363     Create a new process watcher in stopped state.
2364    
2365     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
2366    
2367     Set the callback to be called when the timer triggers.
2368    
2369     =item $pw = $timer->start ($pid)
2370    
2371 root 1.144 Tells the watcher to start watching for process C<$pid>.
2372 root 1.114
2373     =item $pw = $pw->stop
2374    
2375     Stop the watcher.
2376    
2377     =back
2378    
2379 root 1.4 =head1 ENVIRONMENT
2380    
2381     =head2 URXVT_PERL_VERBOSITY
2382    
2383     This variable controls the verbosity level of the perl extension. Higher
2384     numbers indicate more verbose output.
2385    
2386 root 1.265 =over
2387 root 1.4
2388 root 1.266 =item == 0 - fatal messages only
2389    
2390     =item >= 2 - general warnings (default level)
2391 root 1.4
2392 root 1.58 =item >= 3 - script loading and management
2393 root 1.4
2394 root 1.85 =item >=10 - all called hooks
2395    
2396 root 1.144 =item >=11 - hook return values
2397 root 1.4
2398     =back
2399    
2400 root 1.1 =head1 AUTHOR
2401    
2402 root 1.192 Marc Lehmann <schmorp@schmorp.de>
2403 root 1.1 http://software.schmorp.de/pkg/rxvt-unicode
2404    
2405     =cut
2406    
2407     1
2408 tpope 1.152
2409     # vim: sw=3: