ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.258
Committed: Tue Sep 17 20:38:14 2019 UTC (4 years, 8 months ago) by root
Branch: MAIN
Changes since 1.257: +8 -1 lines
Log Message:
improved background extension and resource parsing

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.10 # create a file grab_test in $HOME:
10 root 1.1
11     sub on_sel_grab {
12     warn "you selected ", $_[0]->selection;
13 root 1.3 ()
14 root 1.1 }
15    
16 root 1.226 # start a urxvt using it:
17 root 1.10
18 root 1.226 urxvt --perl-lib $HOME -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     =over 4
76    
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     =over 4
127    
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     =over 4
154    
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     =over 4
428    
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     =over 4
468    
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     PrivMode_MouseAnyEvent, PrivMode_BracketPaste, PrivMode_ExtModeMouse,
529     PrivMode_ExtMouseRight, PrivMode_BlinkingCursor, PrivMode_mouse_report,
530     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     =over 4
547    
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 sf-exg 1.243 (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2),
735     @{ delete $TERM->{perl_ext_3} }
736 root 1.215 ) {
737 root 1.50 if ($_ eq "default") {
738 root 1.236
739 root 1.237 $ext_arg{$_} = []
740 root 1.248 for qw(selection option-popup selection-popup readline searchable-scrollback);
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     =over 4
864    
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     =over 4
1115    
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     urgentOnBell utmpInhibit visualBell
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     utmpInhibit visualBell
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     =over 4
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 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1728     C<0>, which displays the normal terminal contents. Lower values scroll
1729 root 1.12 this many lines into the scrollback buffer.
1730    
1731 root 1.14 =item $term->want_refresh
1732    
1733     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1734     compare the on-screen display with its stored representation. If they
1735     differ, it redraws the differences.
1736    
1737     Used after changing terminal contents to display them.
1738    
1739 sf-exg 1.253 =item $term->refresh_check
1740    
1741     Checks if a refresh has been requested and, if so, schedules one.
1742    
1743 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1744 root 1.12
1745 root 1.166 Returns the text of the entire row with number C<$row_number>. Row C<< $term->top_row >>
1746     is the topmost terminal line, row C<< $term->nrow-1 >> is the bottommost
1747     terminal line. Nothing will be returned if a nonexistent line
1748 root 1.24 is requested.
1749 root 1.12
1750 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1751     line, starting at column C<$start_col> (default C<0>), which is useful
1752 root 1.18 to replace only parts of a line. The font index in the rendition will
1753 root 1.13 automatically be updated.
1754 root 1.12
1755 root 1.124 C<$text> is in a special encoding: tabs and wide characters that use more
1756     than one cell when displayed are padded with C<$urxvt::NOCHAR> (chr 65535)
1757 root 1.121 characters. Characters with combining characters and other characters that
1758 ayin 1.162 do not fit into the normal text encoding will be replaced with characters
1759 root 1.121 in the private use area.
1760 root 1.12
1761     You have to obey this encoding when changing text. The advantage is
1762     that C<substr> and similar functions work on screen cells and not on
1763     characters.
1764    
1765     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1766     can be used to convert normal strings into this encoding and vice versa.
1767    
1768 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1769    
1770     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1771     bitsets. Rendition bitsets contain information about colour, font, font
1772     styles and similar information. See also C<< $term->ROW_t >>.
1773    
1774     When setting rendition, the font mask will be ignored.
1775 root 1.12
1776 root 1.18 See the section on RENDITION, above.
1777 root 1.13
1778     =item $length = $term->ROW_l ($row_number[, $new_length])
1779    
1780 root 1.24 Returns the number of screen cells that are in use ("the line
1781     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1782     line is joined with the following one.
1783    
1784     =item $bool = $term->is_longer ($row_number)
1785    
1786     Returns true if the row is part of a multiple-row logical "line" (i.e.
1787     joined with the following row), which means all characters are in use
1788     and it is continued on the next row (and possibly a continuation of the
1789     previous row(s)).
1790    
1791     =item $line = $term->line ($row_number)
1792    
1793     Create and return a new C<urxvt::line> object that stores information
1794     about the logical line that row C<$row_number> is part of. It supports the
1795     following methods:
1796 root 1.12
1797 root 1.24 =over 4
1798    
1799 root 1.35 =item $text = $line->t ([$new_text])
1800 root 1.24
1801 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1802 root 1.24
1803 root 1.35 =item $rend = $line->r ([$new_rend])
1804 root 1.24
1805 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1806 root 1.24
1807     =item $length = $line->l
1808    
1809     Returns the length of the line in cells, similar to C<ROW_l>.
1810    
1811     =item $rownum = $line->beg
1812    
1813     =item $rownum = $line->end
1814    
1815     Return the row number of the first/last row of the line, respectively.
1816    
1817     =item $offset = $line->offset_of ($row, $col)
1818    
1819     Returns the character offset of the given row|col pair within the logical
1820 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1821     offsets outside the string.
1822 root 1.24
1823     =item ($row, $col) = $line->coord_of ($offset)
1824    
1825     Translates a string offset into terminal coordinates again.
1826    
1827     =back
1828    
1829     =cut
1830    
1831 root 1.55 sub line {
1832 root 1.24 my ($self, $row) = @_;
1833    
1834     my $maxrow = $self->nrow - 1;
1835    
1836     my ($beg, $end) = ($row, $row);
1837    
1838     --$beg while $self->ROW_is_longer ($beg - 1);
1839     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1840    
1841     bless {
1842     term => $self,
1843     beg => $beg,
1844     end => $end,
1845 root 1.34 ncol => $self->ncol,
1846 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1847     }, urxvt::line::
1848     }
1849    
1850     sub urxvt::line::t {
1851     my ($self) = @_;
1852    
1853 root 1.227 if (@_ > 1) {
1854     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1855     for $self->{beg} .. $self->{end};
1856     }
1857 root 1.34
1858     defined wantarray &&
1859     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1860     0, $self->{len}
1861 root 1.24 }
1862    
1863     sub urxvt::line::r {
1864     my ($self) = @_;
1865    
1866 root 1.227 if (@_ > 1) {
1867     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1868     for $self->{beg} .. $self->{end};
1869     }
1870 root 1.34
1871     if (defined wantarray) {
1872     my $rend = [
1873     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1874     ];
1875     $#$rend = $self->{len} - 1;
1876     return $rend;
1877     }
1878    
1879     ()
1880 root 1.24 }
1881    
1882     sub urxvt::line::beg { $_[0]{beg} }
1883     sub urxvt::line::end { $_[0]{end} }
1884     sub urxvt::line::l { $_[0]{len} }
1885    
1886     sub urxvt::line::offset_of {
1887     my ($self, $row, $col) = @_;
1888    
1889 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1890 root 1.24 }
1891    
1892     sub urxvt::line::coord_of {
1893     my ($self, $offset) = @_;
1894    
1895     use integer;
1896    
1897     (
1898 root 1.34 $offset / $self->{ncol} + $self->{beg},
1899     $offset % $self->{ncol}
1900 root 1.24 )
1901     }
1902    
1903 root 1.12 =item $text = $term->special_encode $string
1904    
1905     Converts a perl string into the special encoding used by rxvt-unicode,
1906     where one character corresponds to one screen cell. See
1907     C<< $term->ROW_t >> for details.
1908    
1909     =item $string = $term->special_decode $text
1910    
1911 root 1.144 Converts rxvt-unicodes text representation into a perl string. See
1912 root 1.12 C<< $term->ROW_t >> for details.
1913 root 1.6
1914 root 1.131 =item $success = $term->grab_button ($button, $modifiermask[, $window = $term->vt])
1915    
1916     =item $term->ungrab_button ($button, $modifiermask[, $window = $term->vt])
1917 root 1.61
1918 root 1.131 Register/unregister a synchronous button grab. See the XGrabButton
1919     manpage.
1920 root 1.61
1921     =item $success = $term->grab ($eventtime[, $sync])
1922    
1923     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1924 root 1.144 synchronous (C<$sync> is true). Also remembers the grab timestamp.
1925 root 1.61
1926     =item $term->allow_events_async
1927    
1928     Calls XAllowEvents with AsyncBoth for the most recent grab.
1929    
1930     =item $term->allow_events_sync
1931    
1932     Calls XAllowEvents with SyncBoth for the most recent grab.
1933    
1934     =item $term->allow_events_replay
1935    
1936     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1937     recent grab.
1938    
1939     =item $term->ungrab
1940    
1941 sf-exg 1.182 Calls XUngrabPointer and XUngrabKeyboard for the most recent grab. Is called automatically on
1942 root 1.61 evaluation errors, as it is better to lose the grab in the error case as
1943     the session.
1944    
1945 root 1.119 =item $atom = $term->XInternAtom ($atom_name[, $only_if_exists])
1946    
1947     =item $atom_name = $term->XGetAtomName ($atom)
1948    
1949     =item @atoms = $term->XListProperties ($window)
1950    
1951     =item ($type,$format,$octets) = $term->XGetWindowProperty ($window, $property)
1952    
1953 root 1.168 =item $term->XChangeProperty ($window, $property, $type, $format, $octets)
1954 root 1.119
1955     =item $term->XDeleteProperty ($window, $property)
1956    
1957     =item $window = $term->DefaultRootWindow
1958    
1959     =item $term->XReparentWindow ($window, $parent, [$x, $y])
1960    
1961     =item $term->XMapWindow ($window)
1962    
1963     =item $term->XUnmapWindow ($window)
1964    
1965     =item $term->XMoveResizeWindow ($window, $x, $y, $width, $height)
1966    
1967     =item ($x, $y, $child_window) = $term->XTranslateCoordinates ($src, $dst, $x, $y)
1968    
1969     =item $term->XChangeInput ($window, $add_events[, $del_events])
1970    
1971 sf-exg 1.202 =item $keysym = $term->XStringToKeysym ($string)
1972    
1973     =item $string = $term->XKeysymToString ($keysym)
1974    
1975 root 1.119 Various X or X-related functions. The C<$term> object only serves as
1976     the source of the display, otherwise those functions map more-or-less
1977 sf-exg 1.182 directly onto the X functions of the same name.
1978 root 1.119
1979 root 1.1 =back
1980    
1981 root 1.55 =cut
1982    
1983     package urxvt::popup;
1984    
1985 root 1.45 =head2 The C<urxvt::popup> Class
1986    
1987     =over 4
1988    
1989     =cut
1990    
1991     sub add_item {
1992     my ($self, $item) = @_;
1993    
1994 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1995     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1996     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1997    
1998     $item->{render} ||= sub { $_[0]{text} };
1999    
2000 root 1.45 push @{ $self->{item} }, $item;
2001     }
2002    
2003 root 1.76 =item $popup->add_title ($title)
2004    
2005     Adds a non-clickable title to the popup.
2006    
2007     =cut
2008    
2009     sub add_title {
2010     my ($self, $title) = @_;
2011    
2012     $self->add_item ({
2013     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
2014     text => $title,
2015     activate => sub { },
2016     });
2017     }
2018    
2019     =item $popup->add_separator ([$sepchr])
2020    
2021     Creates a separator, optionally using the character given as C<$sepchr>.
2022    
2023     =cut
2024    
2025 root 1.53 sub add_separator {
2026     my ($self, $sep) = @_;
2027    
2028 root 1.67 $sep ||= "=";
2029 root 1.53
2030     $self->add_item ({
2031     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
2032     text => "",
2033 root 1.65 render => sub { $sep x $self->{term}->ncol },
2034 root 1.53 activate => sub { },
2035     });
2036     }
2037    
2038 root 1.76 =item $popup->add_button ($text, $cb)
2039    
2040     Adds a clickable button to the popup. C<$cb> is called whenever it is
2041     selected.
2042 root 1.53
2043 root 1.76 =cut
2044 root 1.53
2045 root 1.45 sub add_button {
2046     my ($self, $text, $cb) = @_;
2047    
2048 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
2049 root 1.48 }
2050    
2051 root 1.133 =item $popup->add_toggle ($text, $initial_value, $cb)
2052 root 1.76
2053 root 1.133 Adds a toggle/checkbox item to the popup. The callback gets called
2054     whenever it gets toggled, with a boolean indicating its new value as its
2055     first argument.
2056 root 1.76
2057     =cut
2058    
2059 root 1.48 sub add_toggle {
2060 root 1.133 my ($self, $text, $value, $cb) = @_;
2061 root 1.48
2062 root 1.49 my $item; $item = {
2063     type => "button",
2064     text => " $text",
2065     value => $value,
2066 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
2067 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
2068 root 1.49 };
2069    
2070     $self->add_item ($item);
2071 root 1.45 }
2072    
2073 root 1.76 =item $popup->show
2074    
2075     Displays the popup (which is initially hidden).
2076    
2077     =cut
2078    
2079 root 1.45 sub show {
2080     my ($self) = @_;
2081    
2082     local $urxvt::popup::self = $self;
2083    
2084 root 1.77 my $env = $self->{term}->env;
2085     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
2086     delete $env->{LC_ALL};
2087     $env->{LC_CTYPE} = $self->{term}->locale;
2088    
2089 root 1.164 my $term = urxvt::term->new (
2090     $env, "popup",
2091     "--perl-lib" => "", "--perl-ext-common" => "",
2092     "-pty-fd" => -1, "-sl" => 0,
2093     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
2094     "--transient-for" => $self->{term}->parent,
2095     "-display" => $self->{term}->display_id,
2096     "-pe" => "urxvt-popup",
2097     ) or die "unable to create popup window\n";
2098    
2099     unless (delete $term->{urxvt_popup_init_done}) {
2100     $term->ungrab;
2101     $term->destroy;
2102     die "unable to initialise popup window\n";
2103     }
2104 root 1.45 }
2105    
2106     sub DESTROY {
2107     my ($self) = @_;
2108    
2109 root 1.58 delete $self->{term}{_destroy}{$self};
2110 root 1.45 $self->{term}->ungrab;
2111     }
2112    
2113 root 1.78 =back
2114    
2115 root 1.113 =cut
2116    
2117     package urxvt::watcher;
2118    
2119 root 1.1 =head2 The C<urxvt::timer> Class
2120    
2121     This class implements timer watchers/events. Time is represented as a
2122     fractional number of seconds since the epoch. Example:
2123    
2124 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
2125 root 1.1 $term->{timer} = urxvt::timer
2126     ->new
2127 root 1.20 ->interval (1)
2128 root 1.1 ->cb (sub {
2129 root 1.20 $term->{overlay}->set (0, 0,
2130     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
2131 ayin 1.157 });
2132 root 1.1
2133     =over 4
2134    
2135     =item $timer = new urxvt::timer
2136    
2137 root 1.20 Create a new timer object in started state. It is scheduled to fire
2138     immediately.
2139 root 1.1
2140     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
2141    
2142     Set the callback to be called when the timer triggers.
2143    
2144 root 1.179 =item $timer = $timer->set ($tstamp[, $interval])
2145 root 1.1
2146 root 1.179 Set the time the event is generated to $tstamp (and optionally specifies a
2147     new $interval).
2148 root 1.1
2149 root 1.20 =item $timer = $timer->interval ($interval)
2150    
2151 root 1.179 By default (and when C<$interval> is C<0>), the timer will automatically
2152 root 1.20 stop after it has fired once. If C<$interval> is non-zero, then the timer
2153     is automatically rescheduled at the given intervals.
2154    
2155 root 1.1 =item $timer = $timer->start
2156    
2157     Start the timer.
2158    
2159 root 1.179 =item $timer = $timer->start ($tstamp[, $interval])
2160 root 1.1
2161 root 1.179 Set the event trigger time to C<$tstamp> and start the timer. Optionally
2162     also replaces the interval.
2163 root 1.1
2164 root 1.179 =item $timer = $timer->after ($delay[, $interval])
2165 root 1.103
2166     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
2167    
2168 root 1.1 =item $timer = $timer->stop
2169    
2170     Stop the timer.
2171    
2172     =back
2173    
2174     =head2 The C<urxvt::iow> Class
2175    
2176     This class implements io watchers/events. Example:
2177    
2178     $term->{socket} = ...
2179     $term->{iow} = urxvt::iow
2180     ->new
2181     ->fd (fileno $term->{socket})
2182 root 1.159 ->events (urxvt::EV_READ)
2183 root 1.1 ->start
2184     ->cb (sub {
2185     my ($iow, $revents) = @_;
2186     # $revents must be 1 here, no need to check
2187     sysread $term->{socket}, my $buf, 8192
2188     or end-of-file;
2189     });
2190    
2191    
2192     =over 4
2193    
2194     =item $iow = new urxvt::iow
2195    
2196     Create a new io watcher object in stopped state.
2197    
2198     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
2199    
2200     Set the callback to be called when io events are triggered. C<$reventmask>
2201     is a bitset as described in the C<events> method.
2202    
2203     =item $iow = $iow->fd ($fd)
2204    
2205 root 1.144 Set the file descriptor (not handle) to watch.
2206 root 1.1
2207     =item $iow = $iow->events ($eventmask)
2208    
2209 root 1.69 Set the event mask to watch. The only allowed values are
2210 root 1.159 C<urxvt::EV_READ> and C<urxvt::EV_WRITE>, which might be ORed
2211     together, or C<urxvt::EV_NONE>.
2212 root 1.1
2213     =item $iow = $iow->start
2214    
2215     Start watching for requested events on the given handle.
2216    
2217     =item $iow = $iow->stop
2218    
2219 root 1.144 Stop watching for events on the given file handle.
2220 root 1.1
2221     =back
2222    
2223 root 1.114 =head2 The C<urxvt::iw> Class
2224    
2225     This class implements idle watchers, that get called automatically when
2226     the process is idle. They should return as fast as possible, after doing
2227     some useful work.
2228    
2229     =over 4
2230    
2231     =item $iw = new urxvt::iw
2232    
2233     Create a new idle watcher object in stopped state.
2234    
2235     =item $iw = $iw->cb (sub { my ($iw) = @_; ... })
2236    
2237     Set the callback to be called when the watcher triggers.
2238    
2239     =item $timer = $timer->start
2240    
2241     Start the watcher.
2242    
2243     =item $timer = $timer->stop
2244    
2245     Stop the watcher.
2246    
2247     =back
2248    
2249     =head2 The C<urxvt::pw> Class
2250    
2251     This class implements process watchers. They create an event whenever a
2252     process exits, after which they stop automatically.
2253    
2254     my $pid = fork;
2255     ...
2256     $term->{pw} = urxvt::pw
2257     ->new
2258     ->start ($pid)
2259     ->cb (sub {
2260     my ($pw, $exit_status) = @_;
2261     ...
2262 ayin 1.157 });
2263 root 1.114
2264     =over 4
2265    
2266     =item $pw = new urxvt::pw
2267    
2268     Create a new process watcher in stopped state.
2269    
2270     =item $pw = $pw->cb (sub { my ($pw, $exit_status) = @_; ... })
2271    
2272     Set the callback to be called when the timer triggers.
2273    
2274     =item $pw = $timer->start ($pid)
2275    
2276 root 1.144 Tells the watcher to start watching for process C<$pid>.
2277 root 1.114
2278     =item $pw = $pw->stop
2279    
2280     Stop the watcher.
2281    
2282     =back
2283    
2284 root 1.4 =head1 ENVIRONMENT
2285    
2286     =head2 URXVT_PERL_VERBOSITY
2287    
2288     This variable controls the verbosity level of the perl extension. Higher
2289     numbers indicate more verbose output.
2290    
2291     =over 4
2292    
2293 root 1.58 =item == 0 - fatal messages
2294 root 1.4
2295 root 1.58 =item >= 3 - script loading and management
2296 root 1.4
2297 root 1.85 =item >=10 - all called hooks
2298    
2299 root 1.144 =item >=11 - hook return values
2300 root 1.4
2301     =back
2302    
2303 root 1.1 =head1 AUTHOR
2304    
2305 root 1.192 Marc Lehmann <schmorp@schmorp.de>
2306 root 1.1 http://software.schmorp.de/pkg/rxvt-unicode
2307    
2308     =cut
2309    
2310     1
2311 tpope 1.152
2312     # vim: sw=3: