ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.265
Committed: Sat Jul 24 09:48:43 2021 UTC (2 years, 10 months ago) by root
Branch: MAIN
Changes since 1.264: +16 -16 lines
Log Message:
remove =over identation

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