ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.269
Committed: Sun Nov 21 15:15:02 2021 UTC (2 years, 6 months ago) by root
Branch: MAIN
CVS Tags: rxvt-unicode-rel-9_29
Changes since 1.268: +4 -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 root 1.269 Convert the given text string into the corresponding locale
1631     encoding. Returns C<undef> if C<$string> is C<undef>.
1632 root 1.6
1633 root 1.40 =item $string = $term->locale_decode ($octets)
1634 root 1.6
1635 root 1.269 Convert the given locale-encoded octets into a perl string. Returns
1636     C<undef> if C<$octets> is C<undef>.
1637 root 1.6
1638 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1639    
1640     XORs the rendition values in the given span with the provided value
1641 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1642     refresh hooks to provide effects similar to the selection.
1643 root 1.70
1644     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1645    
1646     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1647     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1648     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1649 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1650 root 1.70
1651 root 1.69 =item $term->scr_bell
1652    
1653     Ring the bell!
1654    
1655 root 1.33 =item $term->scr_add_lines ($string)
1656    
1657     Write the given text string to the screen, as if output by the application
1658     running inside the terminal. It may not contain command sequences (escape
1659 root 1.245 codes - see C<cmd_parse> for that), but is free to use line feeds,
1660     carriage returns and tabs. The string is a normal text string, not in
1661     locale-dependent encoding.
1662 root 1.33
1663     Normally its not a good idea to use this function, as programs might be
1664     confused by changes in cursor position or scrolling. Its useful inside a
1665     C<on_add_lines> hook, though.
1666    
1667 root 1.121 =item $term->scr_change_screen ($screen)
1668    
1669     Switch to given screen - 0 primary, 1 secondary.
1670    
1671 root 1.36 =item $term->cmd_parse ($octets)
1672    
1673     Similar to C<scr_add_lines>, but the argument must be in the
1674     locale-specific encoding of the terminal and can contain command sequences
1675     (escape codes) that will be interpreted.
1676    
1677 root 1.6 =item $term->tt_write ($octets)
1678    
1679 root 1.245 Write the octets given in C<$octets> to the tty (i.e. as user input
1680     to the program, see C<cmd_parse> for the opposite direction). To pass
1681     characters instead of octets, you should convert your strings first to the
1682     locale-specific encoding using C<< $term->locale_encode >>.
1683 root 1.12
1684 root 1.234 =item $term->tt_write_user_input ($octets)
1685    
1686     Like C<tt_write>, but should be used when writing strings in response to
1687 sf-exg 1.239 the user pressing a key, to invoke the additional actions requested by
1688 root 1.234 the user for that case (C<tt_write> doesn't do that).
1689    
1690     The typical use case would be inside C<on_action> hooks.
1691    
1692 sf-exg 1.187 =item $term->tt_paste ($octets)
1693    
1694     Write the octets given in C<$octets> to the tty as a paste, converting NL to
1695     CR and bracketing the data with control sequences if bracketed paste mode
1696     is set.
1697    
1698 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1699    
1700     Replaces the event mask of the pty watcher by the given event mask. Can
1701     be used to suppress input and output handling to the pty/tty. See the
1702     description of C<< urxvt::timer->events >>. Make sure to always restore
1703     the previous value.
1704    
1705 root 1.125 =item $fd = $term->pty_fd
1706    
1707     Returns the master file descriptor for the pty in use, or C<-1> if no pty
1708     is used.
1709    
1710 root 1.40 =item $windowid = $term->parent
1711    
1712     Return the window id of the toplevel window.
1713    
1714     =item $windowid = $term->vt
1715    
1716     Return the window id of the terminal window.
1717    
1718 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1719    
1720     Adds the specified events to the vt event mask. Useful e.g. when you want
1721     to receive pointer events all the times:
1722    
1723     $term->vt_emask_add (urxvt::PointerMotionMask);
1724    
1725 sf-exg 1.204 =item $term->set_urgency ($set)
1726    
1727     Enable/disable the urgency hint on the toplevel window.
1728    
1729 root 1.132 =item $term->focus_in
1730    
1731     =item $term->focus_out
1732    
1733     =item $term->key_press ($state, $keycode[, $time])
1734    
1735     =item $term->key_release ($state, $keycode[, $time])
1736    
1737     Deliver various fake events to to terminal.
1738    
1739 root 1.255 =item $window_width = $term->width ([$new_value])
1740 root 1.32
1741 root 1.255 =item $window_height = $term->height ([$new_value])
1742 root 1.32
1743 root 1.255 =item $font_width = $term->fwidth ([$new_value])
1744 root 1.32
1745 root 1.255 =item $font_height = $term->fheight ([$new_value])
1746 root 1.32
1747 root 1.255 =item $font_ascent = $term->fbase ([$new_value])
1748 root 1.32
1749 root 1.255 =item $terminal_rows = $term->nrow ([$new_value])
1750 root 1.32
1751 root 1.255 =item $terminal_columns = $term->ncol ([$new_value])
1752 root 1.32
1753 root 1.255 =item $has_focus = $term->focus ([$new_value])
1754 root 1.32
1755 root 1.255 =item $is_mapped = $term->mapped ([$new_value])
1756 root 1.13
1757 root 1.255 =item $max_scrollback = $term->saveLines ([$new_value])
1758 root 1.13
1759 root 1.255 =item $nrow_plus_saveLines = $term->total_rows ([$new_value])
1760 root 1.13
1761 root 1.255 =item $topmost_scrollback_row = $term->top_row ([$new_value])
1762 root 1.12
1763 root 1.255 Return various integers describing terminal characteristics. If an
1764     argument is given, changes the value and returns the previous one.
1765 root 1.12
1766 root 1.77 =item $x_display = $term->display_id
1767    
1768     Return the DISPLAY used by rxvt-unicode.
1769    
1770 root 1.66 =item $lc_ctype = $term->locale
1771    
1772     Returns the LC_CTYPE category string used by this rxvt-unicode.
1773    
1774 root 1.77 =item $env = $term->env
1775    
1776     Returns a copy of the environment in effect for the terminal as a hashref
1777     similar to C<\%ENV>.
1778    
1779 root 1.136 =item @envv = $term->envv
1780    
1781     Returns the environment as array of strings of the form C<VAR=VALUE>.
1782    
1783     =item @argv = $term->argv
1784    
1785     Return the argument vector as this terminal, similar to @ARGV, but
1786     includes the program name as first element.
1787    
1788 root 1.77 =cut
1789 root 1.66
1790 root 1.77 sub env {
1791 root 1.136 +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), $_[0]->envv }
1792 root 1.77 }
1793 root 1.66
1794 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1795    
1796     =item $modifiermask = $term->ModMetaMask
1797    
1798     =item $modifiermask = $term->ModNumLockMask
1799    
1800     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1801     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1802    
1803 root 1.121 =item $screen = $term->current_screen
1804    
1805     Returns the currently displayed screen (0 primary, 1 secondary).
1806    
1807 root 1.122 =item $cursor_is_hidden = $term->hidden_cursor
1808    
1809 root 1.144 Returns whether the cursor is currently hidden or not.
1810 root 1.122
1811 root 1.257 =item $priv_modes = $term->priv_modes
1812    
1813     Returns a bitset with the state of DEC private modes.
1814    
1815     Example:
1816    
1817     if ($term->priv_modes & urxvt::PrivMode_mouse_report) {
1818     # mouse reporting is turned on
1819     }
1820    
1821 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1822    
1823 sf-exg 1.263 Returns the row number of the topmost displayed line and changes it,
1824     if an argument is given. Values greater than or equal to C<0> display
1825     the terminal contents. Lower values scroll this many lines into the
1826     scrollback buffer.
1827 root 1.12
1828 root 1.14 =item $term->want_refresh
1829    
1830     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1831     compare the on-screen display with its stored representation. If they
1832     differ, it redraws the differences.
1833    
1834     Used after changing terminal contents to display them.
1835    
1836 sf-exg 1.253 =item $term->refresh_check
1837    
1838     Checks if a refresh has been requested and, if so, schedules one.
1839    
1840 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1841 root 1.12
1842 root 1.166 Returns the text of the entire row with number C<$row_number>. Row C<< $term->top_row >>
1843     is the topmost terminal line, row C<< $term->nrow-1 >> is the bottommost
1844     terminal line. Nothing will be returned if a nonexistent line
1845 root 1.24 is requested.
1846 root 1.12
1847 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1848     line, starting at column C<$start_col> (default C<0>), which is useful
1849 root 1.18 to replace only parts of a line. The font index in the rendition will
1850 root 1.13 automatically be updated.
1851 root 1.12
1852 root 1.124 C<$text> is in a special encoding: tabs and wide characters that use more
1853     than one cell when displayed are padded with C<$urxvt::NOCHAR> (chr 65535)
1854 root 1.121 characters. Characters with combining characters and other characters that
1855 ayin 1.162 do not fit into the normal text encoding will be replaced with characters
1856 root 1.121 in the private use area.
1857 root 1.12
1858     You have to obey this encoding when changing text. The advantage is
1859     that C<substr> and similar functions work on screen cells and not on
1860     characters.
1861    
1862     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1863     can be used to convert normal strings into this encoding and vice versa.
1864    
1865 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1866    
1867     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1868     bitsets. Rendition bitsets contain information about colour, font, font
1869     styles and similar information. See also C<< $term->ROW_t >>.
1870    
1871     When setting rendition, the font mask will be ignored.
1872 root 1.12
1873 root 1.18 See the section on RENDITION, above.
1874 root 1.13
1875     =item $length = $term->ROW_l ($row_number[, $new_length])
1876    
1877 root 1.24 Returns the number of screen cells that are in use ("the line
1878     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1879     line is joined with the following one.
1880    
1881     =item $bool = $term->is_longer ($row_number)
1882    
1883     Returns true if the row is part of a multiple-row logical "line" (i.e.
1884     joined with the following row), which means all characters are in use
1885     and it is continued on the next row (and possibly a continuation of the
1886     previous row(s)).
1887    
1888     =item $line = $term->line ($row_number)
1889    
1890     Create and return a new C<urxvt::line> object that stores information
1891     about the logical line that row C<$row_number> is part of. It supports the
1892     following methods:
1893 root 1.12
1894 root 1.265 =over
1895 root 1.24
1896 root 1.35 =item $text = $line->t ([$new_text])
1897 root 1.24
1898 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1899 root 1.24
1900 root 1.35 =item $rend = $line->r ([$new_rend])
1901 root 1.24
1902 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1903 root 1.24
1904     =item $length = $line->l
1905    
1906     Returns the length of the line in cells, similar to C<ROW_l>.
1907    
1908     =item $rownum = $line->beg
1909    
1910     =item $rownum = $line->end
1911    
1912     Return the row number of the first/last row of the line, respectively.
1913    
1914     =item $offset = $line->offset_of ($row, $col)
1915    
1916     Returns the character offset of the given row|col pair within the logical
1917 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1918     offsets outside the string.
1919 root 1.24
1920     =item ($row, $col) = $line->coord_of ($offset)
1921    
1922     Translates a string offset into terminal coordinates again.
1923    
1924     =back
1925    
1926     =cut
1927    
1928 root 1.55 sub line {
1929 root 1.24 my ($self, $row) = @_;
1930    
1931     my $maxrow = $self->nrow - 1;
1932    
1933     my ($beg, $end) = ($row, $row);
1934    
1935     --$beg while $self->ROW_is_longer ($beg - 1);
1936     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1937    
1938     bless {
1939     term => $self,
1940     beg => $beg,
1941     end => $end,
1942 root 1.34 ncol => $self->ncol,
1943 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1944     }, urxvt::line::
1945     }
1946    
1947     sub urxvt::line::t {
1948     my ($self) = @_;
1949    
1950 root 1.227 if (@_ > 1) {
1951     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1952     for $self->{beg} .. $self->{end};
1953     }
1954 root 1.34
1955     defined wantarray &&
1956     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1957     0, $self->{len}
1958 root 1.24 }
1959    
1960     sub urxvt::line::r {
1961     my ($self) = @_;
1962    
1963 root 1.227 if (@_ > 1) {
1964     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1965     for $self->{beg} .. $self->{end};
1966     }
1967 root 1.34
1968     if (defined wantarray) {
1969     my $rend = [
1970     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1971     ];
1972     $#$rend = $self->{len} - 1;
1973     return $rend;
1974     }
1975    
1976     ()
1977 root 1.24 }
1978    
1979     sub urxvt::line::beg { $_[0]{beg} }
1980     sub urxvt::line::end { $_[0]{end} }
1981     sub urxvt::line::l { $_[0]{len} }
1982    
1983     sub urxvt::line::offset_of {
1984     my ($self, $row, $col) = @_;
1985    
1986 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1987 root 1.24 }
1988    
1989     sub urxvt::line::coord_of {
1990     my ($self, $offset) = @_;
1991    
1992     use integer;
1993    
1994     (
1995 root 1.34 $offset / $self->{ncol} + $self->{beg},
1996     $offset % $self->{ncol}
1997 root 1.24 )
1998     }
1999    
2000 root 1.12 =item $text = $term->special_encode $string
2001    
2002     Converts a perl string into the special encoding used by rxvt-unicode,
2003     where one character corresponds to one screen cell. See
2004     C<< $term->ROW_t >> for details.
2005    
2006     =item $string = $term->special_decode $text
2007    
2008 sf-exg 1.267 Converts rxvt-unicode's text representation into a perl string. See
2009 root 1.12 C<< $term->ROW_t >> for details.
2010 root 1.6
2011 root 1.131 =item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
2012    
2013     =item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])
2014 root 1.61
2015 root 1.131 Register/unregister a synchronous button grab. See the XGrabButton
2016     manpage.
2017 root 1.61
2018     =item $success = $term->grab ($eventtime[, $sync])
2019    
2020     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
2021 root 1.144 synchronous (C<$sync> is true). Also remembers the grab timestamp.
2022 root 1.61
2023     =item $term->allow_events_async
2024    
2025     Calls XAllowEvents with AsyncBoth for the most recent grab.
2026    
2027     =item $term->allow_events_sync
2028    
2029     Calls XAllowEvents with SyncBoth for the most recent grab.
2030    
2031     =item $term->allow_events_replay
2032    
2033     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
2034     recent grab.
2035    
2036     =item $term->ungrab
2037    
2038 sf-exg 1.182 Calls XUngrabPointer and XUngrabKeyboard for the most recent grab. Is called automatically on
2039 root 1.61 evaluation errors, as it is better to lose the grab in the error case as
2040     the session.
2041    
2042 root 1.119 =item $atom = $term->XInternAtom ($atom_name[, $only_if_exists])
2043    
2044     =item $atom_name = $term->XGetAtomName ($atom)
2045    
2046     =item @atoms = $term->XListProperties ($window)
2047    
2048     =item ($type,$format,$octets) = $term->XGetWindowProperty ($window, $property)
2049    
2050 root 1.168 =item $term->XChangeProperty ($window, $property, $type, $format, $octets)
2051 root 1.119
2052     =item $term->XDeleteProperty ($window, $property)
2053    
2054     =item $window = $term->DefaultRootWindow
2055    
2056     =item $term->XReparentWindow ($window, $parent, [$x, $y])
2057    
2058     =item $term->XMapWindow ($window)
2059    
2060     =item $term->XUnmapWindow ($window)
2061    
2062     =item $term->XMoveResizeWindow ($window, $x, $y, $width, $height)
2063    
2064     =item ($x, $y, $child_window) = $term->XTranslateCoordinates ($src, $dst, $x, $y)
2065    
2066     =item $term->XChangeInput ($window, $add_events[, $del_events])
2067    
2068 sf-exg 1.202 =item $keysym = $term->XStringToKeysym ($string)
2069    
2070     =item $string = $term->XKeysymToString ($keysym)
2071    
2072 root 1.119 Various X or X-related functions. The C<$term> object only serves as
2073     the source of the display, otherwise those functions map more-or-less
2074 sf-exg 1.182 directly onto the X functions of the same name.
2075 root 1.119
2076 root 1.1 =back
2077    
2078 root 1.55 =cut
2079    
2080     package urxvt::popup;
2081    
2082 root 1.45 =head2 The C<urxvt::popup> Class
2083    
2084 root 1.265 =over
2085 root 1.45
2086     =cut
2087    
2088     sub add_item {
2089     my ($self, $item) = @_;
2090    
2091 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
2092     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
2093     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
2094    
2095     $item->{render} ||= sub { $_[0]{text} };
2096    
2097 root 1.45 push @{ $self->{item} }, $item;
2098     }
2099    
2100 root 1.76 =item $popup->add_title ($title)
2101    
2102     Adds a non-clickable title to the popup.
2103    
2104     =cut
2105    
2106     sub add_title {
2107     my ($self, $title) = @_;
2108    
2109     $self->add_item ({
2110     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
2111     text => $title,
2112     activate => sub { },
2113     });
2114     }
2115    
2116     =item $popup->add_separator ([$sepchr])
2117    
2118     Creates a separator, optionally using the character given as C<$sepchr>.
2119    
2120     =cut
2121    
2122 root 1.53 sub add_separator {
2123     my ($self, $sep) = @_;
2124    
2125 root 1.67 $sep ||= "=";
2126 root 1.53
2127     $self->add_item ({
2128     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
2129     text => "",
2130 root 1.65 render => sub { $sep x $self->{term}->ncol },
2131 root 1.53 activate => sub { },
2132     });
2133     }
2134    
2135 root 1.76 =item $popup->add_button ($text, $cb)
2136    
2137     Adds a clickable button to the popup. C<$cb> is called whenever it is
2138     selected.
2139 root 1.53
2140 root 1.76 =cut
2141 root 1.53
2142 root 1.45 sub add_button {
2143     my ($self, $text, $cb) = @_;
2144    
2145 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
2146 root 1.48 }
2147    
2148 root 1.133 =item $popup->add_toggle ($text, $initial_value, $cb)
2149 root 1.76
2150 root 1.133 Adds a toggle/checkbox item to the popup. The callback gets called
2151     whenever it gets toggled, with a boolean indicating its new value as its
2152     first argument.
2153 root 1.76
2154     =cut
2155    
2156 root 1.48 sub add_toggle {
2157 root 1.133 my ($self, $text, $value, $cb) = @_;
2158 root 1.48
2159 root 1.49 my $item; $item = {
2160     type => "button",
2161     text => " $text",
2162     value => $value,
2163 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
2164 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
2165 root 1.49 };
2166    
2167     $self->add_item ($item);
2168 root 1.45 }
2169    
2170 root 1.76 =item $popup->show
2171    
2172     Displays the popup (which is initially hidden).
2173    
2174     =cut
2175    
2176 root 1.45 sub show {
2177     my ($self) = @_;
2178    
2179     local $urxvt::popup::self = $self;
2180    
2181 root 1.77 my $env = $self->{term}->env;
2182     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
2183     delete $env->{LC_ALL};
2184     $env->{LC_CTYPE} = $self->{term}->locale;
2185    
2186 root 1.164 my $term = urxvt::term->new (
2187     $env, "popup",
2188     "--perl-lib" => "", "--perl-ext-common" => "",
2189     "-pty-fd" => -1, "-sl" => 0,
2190     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
2191     "--transient-for" => $self->{term}->parent,
2192     "-display" => $self->{term}->display_id,
2193     "-pe" => "urxvt-popup",
2194     ) or die "unable to create popup window\n";
2195    
2196     unless (delete $term->{urxvt_popup_init_done}) {
2197     $term->ungrab;
2198     $term->destroy;
2199     die "unable to initialise popup window\n";
2200     }
2201 root 1.45 }
2202    
2203     sub DESTROY {
2204     my ($self) = @_;
2205    
2206 root 1.58 delete $self->{term}{_destroy}{$self};
2207 root 1.45 $self->{term}->ungrab;
2208     }
2209    
2210 root 1.78 =back
2211    
2212 root 1.113 =cut
2213    
2214     package urxvt::watcher;
2215    
2216 root 1.1 =head2 The C<urxvt::timer> Class
2217    
2218     This class implements timer watchers/events. Time is represented as a
2219     fractional number of seconds since the epoch. Example:
2220    
2221 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
2222 root 1.1 $term->{timer} = urxvt::timer
2223     ->new
2224 root 1.20 ->interval (1)
2225 root 1.1 ->cb (sub {
2226 root 1.20 $term->{overlay}->set (0, 0,
2227     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
2228 ayin 1.157 });
2229 root 1.1
2230 root 1.265 =over
2231 root 1.1
2232     =item $timer = new urxvt::timer
2233    
2234 root 1.20 Create a new timer object in started state. It is scheduled to fire
2235     immediately.
2236 root 1.1
2237     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
2238    
2239     Set the callback to be called when the timer triggers.
2240    
2241 root 1.179 =item $timer = $timer->set ($tstamp[, $interval])
2242 root 1.1
2243 root 1.179 Set the time the event is generated to $tstamp (and optionally specifies a
2244     new $interval).
2245 root 1.1
2246 root 1.20 =item $timer = $timer->interval ($interval)
2247    
2248 root 1.179 By default (and when C<$interval> is C<0>), the timer will automatically
2249 root 1.20 stop after it has fired once. If C<$interval> is non-zero, then the timer
2250     is automatically rescheduled at the given intervals.
2251    
2252 root 1.1 =item $timer = $timer->start
2253    
2254     Start the timer.
2255    
2256 root 1.179 =item $timer = $timer->start ($tstamp[, $interval])
2257 root 1.1
2258 root 1.179 Set the event trigger time to C<$tstamp> and start the timer. Optionally
2259     also replaces the interval.
2260 root 1.1
2261 root 1.179 =item $timer = $timer->after ($delay[, $interval])
2262 root 1.103
2263     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
2264    
2265 root 1.1 =item $timer = $timer->stop
2266    
2267     Stop the timer.
2268    
2269     =back
2270    
2271     =head2 The C<urxvt::iow> Class
2272    
2273     This class implements io watchers/events. Example:
2274    
2275     $term->{socket} = ...
2276     $term->{iow} = urxvt::iow
2277     ->new
2278     ->fd (fileno $term->{socket})
2279 root 1.159 ->events (urxvt::EV_READ)
2280 root 1.1 ->start
2281     ->cb (sub {
2282     my ($iow, $revents) = @_;
2283     # $revents must be 1 here, no need to check
2284     sysread $term->{socket}, my $buf, 8192
2285     or end-of-file;
2286     });
2287    
2288    
2289 root 1.265 =over
2290 root 1.1
2291     =item $iow = new urxvt::iow
2292    
2293     Create a new io watcher object in stopped state.
2294    
2295     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
2296    
2297     Set the callback to be called when io events are triggered. C<$reventmask>
2298     is a bitset as described in the C<events> method.
2299    
2300     =item $iow = $iow->fd ($fd)
2301    
2302 root 1.144 Set the file descriptor (not handle) to watch.
2303 root 1.1
2304     =item $iow = $iow->events ($eventmask)
2305    
2306 root 1.69 Set the event mask to watch. The only allowed values are
2307 root 1.159 C<urxvt::EV_READ> and C<urxvt::EV_WRITE>, which might be ORed
2308     together, or C<urxvt::EV_NONE>.
2309 root 1.1
2310     =item $iow = $iow->start
2311    
2312     Start watching for requested events on the given handle.
2313    
2314     =item $iow = $iow->stop
2315    
2316 root 1.144 Stop watching for events on the given file handle.
2317 root 1.1
2318     =back
2319    
2320 root 1.114 =head2 The C<urxvt::iw> Class
2321    
2322     This class implements idle watchers, that get called automatically when
2323     the process is idle. They should return as fast as possible, after doing
2324     some useful work.
2325    
2326 root 1.265 =over
2327 root 1.114
2328     =item $iw = new urxvt::iw
2329    
2330     Create a new idle watcher object in stopped state.
2331    
2332     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
2333    
2334     Set the callback to be called when the watcher triggers.
2335    
2336     =item $timer = $timer->start
2337    
2338     Start the watcher.
2339    
2340     =item $timer = $timer->stop
2341    
2342     Stop the watcher.
2343    
2344     =back
2345    
2346     =head2 The C<urxvt::pw> Class
2347    
2348     This class implements process watchers. They create an event whenever a
2349     process exits, after which they stop automatically.
2350    
2351     my $pid = fork;
2352     ...
2353     $term->{pw} = urxvt::pw
2354     ->new
2355     ->start ($pid)
2356     ->cb (sub {
2357     my ($pw, $exit_status) = @_;
2358     ...
2359 ayin 1.157 });
2360 root 1.114
2361 root 1.265 =over
2362 root 1.114
2363     =item $pw = new urxvt::pw
2364    
2365     Create a new process watcher in stopped state.
2366    
2367     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
2368    
2369     Set the callback to be called when the timer triggers.
2370    
2371     =item $pw = $timer->start ($pid)
2372    
2373 root 1.144 Tells the watcher to start watching for process C<$pid>.
2374 root 1.114
2375     =item $pw = $pw->stop
2376    
2377     Stop the watcher.
2378    
2379     =back
2380    
2381 root 1.4 =head1 ENVIRONMENT
2382    
2383     =head2 URXVT_PERL_VERBOSITY
2384    
2385     This variable controls the verbosity level of the perl extension. Higher
2386     numbers indicate more verbose output.
2387    
2388 root 1.265 =over
2389 root 1.4
2390 root 1.266 =item == 0 - fatal messages only
2391    
2392     =item >= 2 - general warnings (default level)
2393 root 1.4
2394 root 1.58 =item >= 3 - script loading and management
2395 root 1.4
2396 root 1.85 =item >=10 - all called hooks
2397    
2398 root 1.144 =item >=11 - hook return values
2399 root 1.4
2400     =back
2401    
2402 root 1.1 =head1 AUTHOR
2403    
2404 root 1.192 Marc Lehmann <schmorp@schmorp.de>
2405 root 1.1 http://software.schmorp.de/pkg/rxvt-unicode
2406    
2407     =cut
2408    
2409     1
2410 tpope 1.152
2411     # vim: sw=3: