ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.108
Committed: Thu Jan 19 09:47:15 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.107: +37 -15 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.17 =encoding utf8
2    
3 root 1.1 =head1 NAME
4    
5 root 1.11 @@RXVT_NAME@@perl - rxvt-unicode's embedded perl interpreter
6 root 1.1
7     =head1 SYNOPSIS
8    
9 root 1.10 # create a file grab_test in $HOME:
10 root 1.1
11     sub on_sel_grab {
12     warn "you selected ", $_[0]->selection;
13 root 1.3 ()
14 root 1.1 }
15    
16 root 1.10 # start a @@RXVT_NAME@@ using it:
17    
18     @@RXVT_NAME@@ --perl-lib $HOME -pe grab_test
19 root 1.1
20     =head1 DESCRIPTION
21    
22 root 1.44 Everytime a terminal object gets created, extension scripts specified via
23     the C<perl> resource are loaded and associated with it.
24 root 1.10
25     Scripts are compiled in a 'use strict' and 'use utf8' environment, and
26     thus must be encoded as UTF-8.
27 root 1.6
28     Each script will only ever be loaded once, even in @@RXVT_NAME@@d, where
29 root 1.16 scripts will be shared (but not enabled) for all terminals.
30 root 1.6
31 root 1.75 =head1 PREPACKAGED EXTENSIONS
32 root 1.15
33 root 1.75 This section describes the extensions delivered with this release. You can
34 root 1.15 find them in F<@@RXVT_LIBDIR@@/urxvt/perl/>.
35    
36     You can activate them like this:
37    
38     @@RXVT_NAME@@ -pe <extensionname>
39    
40     =over 4
41    
42 root 1.54 =item selection (enabled by default)
43 root 1.15
44 root 1.75 (More) intelligent selection. This extension tries to be more intelligent
45 root 1.87 when the user extends selections (double-click and further clicks). Right
46     now, it tries to select words, urls and complete shell-quoted
47     arguments, which is very convenient, too, if your F<ls> supports
48     C<--quoting-style=shell>.
49    
50     A double-click usually selects the word under the cursor, further clicks
51     will enlarge the selection.
52 root 1.22
53 root 1.88 The selection works by trying to match a number of regexes and displaying
54     them in increasing order of length. You can add your own regexes by
55     specifying resources of the form:
56    
57     URxvt.selection.pattern-0: perl-regex
58     URxvt.selection.pattern-1: perl-regex
59     ...
60    
61     The index number (0, 1...) must not have any holes, and each regex must
62     contain at least one pair of capturing parentheses, which will be used for
63     the match. For example, the followign adds a regex that matches everything
64     between two vertical bars:
65    
66     URxvt.selection.pattern-0: \\|([^|]+)\\|
67    
68     You can look at the source of the selection extension to see more
69     interesting uses, such as parsing a line from beginning to end.
70    
71 elmex 1.95 This extension also offers following bindable keyboard commands:
72 root 1.15
73     =over 4
74    
75     =item rot13
76    
77     Rot-13 the selection when activated. Used via keyboard trigger:
78    
79     URxvt.keysym.C-M-r: perl:selection:rot13
80    
81     =back
82    
83 root 1.54 =item option-popup (enabled by default)
84    
85 root 1.59 Binds a popup menu to Ctrl-Button2 that lets you toggle (some) options at
86 root 1.54 runtime.
87    
88 root 1.59 =item selection-popup (enabled by default)
89    
90     Binds a popup menu to Ctrl-Button3 that lets you convert the selection
91 root 1.75 text into various other formats/action (such as uri unescaping, perl
92     evalution, web-browser starting etc.), depending on content.
93 root 1.59
94 root 1.101 Other extensions can extend this popup menu by pushing a code reference onto
95     C<@urxvt::ext::selection_popup::hook>, that is called whenever the popup is displayed.
96    
97     It's sole argument is the popup menu, which can be modified. The selection
98     is in C<$_>, which can be used to decide wether to add something or not.
99     It should either return nothing or a string and a code reference. The
100     string will be used as button text and the code reference will be called
101     when the button gets activated and should transform C<$_>.
102    
103     The following will add an entry C<a to b> that transforms all C<a>s in
104     the selection to C<b>s, but only if the selection currently contains any
105     C<a>s:
106    
107     push urxvt::ext::selection_popup::hook, sub {
108     /a/ ? ("a to be" => sub { s/a/b/g }
109     : ()
110     };
111    
112 root 1.74 =item searchable-scrollback<hotkey> (enabled by default)
113 root 1.69
114 root 1.74 Adds regex search functionality to the scrollback buffer, triggered
115 root 1.87 by a hotkey (default: C<M-s>). While in search mode, normal terminal
116     input/output is suspended and a regex is displayed at the bottom of the
117     screen.
118    
119     Inputting characters appends them to the regex and continues incremental
120     search. C<BackSpace> removes a character from the regex, C<Up> and C<Down>
121     search upwards/downwards in the scrollback buffer, C<End> jumps to the
122     bottom. C<Escape> leaves search mode and returns to the point where search
123     was started, while C<Enter> or C<Return> stay at the current position and
124     additionally stores the first match in the current line into the primary
125     selection.
126 root 1.69
127 root 1.88 =item selection-autotransform
128    
129     This selection allows you to do automatic transforms on a selection
130     whenever a selection is made.
131    
132     It works by specifying perl snippets (most useful is a single C<s///>
133     operator) that modify C<$_> as resources:
134    
135     URxvt.selection-autotransform.0: transform
136     URxvt.selection-autotransform.1: transform
137     ...
138    
139     For example, the following will transform selections of the form
140 root 1.89 C<filename:number>, often seen in compiler messages, into C<vi +$filename
141     $word>:
142 root 1.88
143 root 1.93 URxvt.selection-autotransform.0: s/^([^:[:space:]]+):(\\d+):?$/vi +$2 \\Q$1\\E\\x0d/
144 root 1.88
145     And this example matches the same,but replaces it with vi-commands you can
146 root 1.89 paste directly into your (vi :) editor:
147 root 1.15
148 root 1.108 URxvt.selection-autotransform.0: s/^([^:[:space:]]+(\\d+):?$/:e \\Q$1\\E\\x0d:$2\\x0d/
149 root 1.20
150 root 1.90 Of course, this can be modified to suit your needs and your editor :)
151    
152 root 1.91 To expand the example above to typical perl error messages ("XXX at
153     FILENAME line YYY."), you need a slightly more elaborate solution:
154    
155 root 1.108 URxvt.selection.pattern-0: ( at .*? line \\d+[,.])
156     URxvt.selection-autotransform.0: s/^ at (.*?) line (\\d+)[,.]$/:e \\Q$1\E\\x0d:$2\\x0d/
157 root 1.91
158     The first line tells the selection code to treat the unchanging part of
159     every error message as a selection pattern, and the second line transforms
160     the message into vi commands to load the file.
161    
162 root 1.35 =item mark-urls
163    
164 root 1.79 Uses per-line display filtering (C<on_line_update>) to underline urls and
165 root 1.83 make them clickable. When middle-clicked, the program specified in the
166 root 1.87 resource C<urlLauncher> (default C<x-www-browser>) will be started with
167     the URL as first argument.
168 root 1.42
169 root 1.104 =item automove-background
170    
171     This is basically a one-line extension that dynamically changes the background pixmap offset
172     to the window position, in effect creating the same effect as pseudo transparency with
173     a custom pixmap. No scaling is supported in this mode. Exmaple:
174    
175     @@RXVT_NAME@@ -pixmap background.xpm -pe automove-background
176    
177 root 1.42 =item block-graphics-to-ascii
178    
179     A not very useful example of filtering all text output to the terminal,
180     by replacing all line-drawing characters (U+2500 .. U+259F) by a
181     similar-looking ascii character.
182 root 1.35
183 root 1.88 =item digital-clock
184    
185     Displays a digital clock using the built-in overlay.
186    
187 root 1.20 =item example-refresh-hooks
188    
189 root 1.15 Displays a very simple digital clock in the upper right corner of the
190     window. Illustrates overwriting the refresh callbacks to create your own
191     overlays or changes.
192    
193 elmex 1.97 =item selection-pastebin
194    
195 root 1.98 This is a little rarely useful extension that Uploads the selection as
196 root 1.99 textfile to a remote site (or does other things). (The implementation is
197     not currently secure for use in a multiuser environment as it writes to
198     F</tmp> directly.).
199 root 1.98
200     It listens to the C<selection-pastebin:remote-pastebin> keyboard command,
201     i.e.
202 elmex 1.97
203     URxvt.keysym.C-M-e: perl:selection-pastebin:remote-pastebin
204    
205 root 1.98 Pressing this combination runs a command with C<%> replaced by the name of
206     the textfile. This command can be set via a resource:
207    
208     URxvt.selection-pastebin.cmd: rsync -apP % ruth:/var/www/www.ta-sa.org/files/txt/.
209    
210     And the default is likely not useful to anybody but the few people around
211     here :)
212 elmex 1.97
213 root 1.98 The name of the textfile is the hex encoded md5 sum of the selection, so
214     the same content should lead to the same filename.
215 elmex 1.97
216 root 1.98 After a successful upload the selection will be replaced by the text given
217     in the C<selection-pastebin-url> resource (again, the % is the placeholder
218     for the filename):
219 elmex 1.97
220 root 1.98 URxvt.selection-pastebin.url: http://www.ta-sa.org/files/txt/%
221 elmex 1.97
222 root 1.15 =back
223    
224 root 1.75 =head1 API DOCUMENTATION
225    
226 root 1.6 =head2 General API Considerations
227    
228     All objects (such as terminals, time watchers etc.) are typical
229     reference-to-hash objects. The hash can be used to store anything you
230 root 1.7 like. All members starting with an underscore (such as C<_ptr> or
231 root 1.23 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
232 root 1.7 modified).
233 root 1.6
234     When objects are destroyed on the C++ side, the perl object hashes are
235     emptied, so its best to store related objects such as time watchers and
236     the like inside the terminal object so they get destroyed as soon as the
237     terminal is destroyed.
238    
239 root 1.33 Argument names also often indicate the type of a parameter. Here are some
240     hints on what they mean:
241    
242     =over 4
243    
244     =item $text
245    
246     Rxvt-unicodes special way of encoding text, where one "unicode" character
247 root 1.78 always represents one screen cell. See L<ROW_t> for a discussion of this format.
248 root 1.33
249     =item $string
250    
251     A perl text string, with an emphasis on I<text>. It can store all unicode
252     characters and is to be distinguished with text encoded in a specific
253     encoding (often locale-specific) and binary data.
254    
255     =item $octets
256    
257     Either binary data or - more common - a text string encoded in a
258     locale-specific way.
259    
260     =back
261    
262 root 1.69 =head2 Extension Objects
263    
264     Very perl extension is a perl class. A separate perl object is created
265     for each terminal and each extension and passed as the first parameter to
266     hooks. So extensions can use their C<$self> object without having to think
267     about other extensions, with the exception of methods and members that
268     begin with an underscore character C<_>: these are reserved for internal
269     use.
270    
271     Although it isn't a C<urxvt::term> object, you can call all methods of the
272     C<urxvt::term> class on this object.
273    
274     It has the following methods and data members:
275    
276     =over 4
277    
278     =item $urxvt_term = $self->{term}
279    
280     Returns the C<urxvt::term> object associated with this instance of the
281     extension. This member I<must not> be changed in any way.
282    
283     =item $self->enable ($hook_name => $cb, [$hook_name => $cb..])
284    
285     Dynamically enable the given hooks (named without the C<on_> prefix) for
286     this extension, replacing any previous hook. This is useful when you want
287     to overwrite time-critical hooks only temporarily.
288    
289     =item $self->disable ($hook_name[, $hook_name..])
290    
291     Dynamically disable the given hooks.
292    
293     =back
294    
295 root 1.1 =head2 Hooks
296    
297 root 1.43 The following subroutines can be declared in extension files, and will be
298 root 1.23 called whenever the relevant event happens.
299    
300 root 1.69 The first argument passed to them is an extension oject as described in
301     the in the C<Extension Objects> section.
302    
303     B<All> of these hooks must return a boolean value. If it is true, then the
304     event counts as being I<consumed>, and the invocation of other hooks is
305     skipped, and the relevant action might not be carried out by the C++ code.
306 root 1.1
307 root 1.69 I<< When in doubt, return a false value (preferably C<()>). >>
308 root 1.1
309     =over 4
310    
311     =item on_init $term
312    
313     Called after a new terminal object has been initialized, but before
314 root 1.36 windows are created or the command gets run. Most methods are unsafe to
315     call or deliver senseless data, as terminal size and other characteristics
316     have not yet been determined. You can safely query and change resources,
317     though.
318 root 1.1
319     =item on_reset $term
320    
321     Called after the screen is "reset" for any reason, such as resizing or
322     control sequences. Here is where you can react on changes to size-related
323     variables.
324    
325     =item on_start $term
326    
327     Called at the very end of initialisation of a new terminal, just before
328     returning to the mainloop.
329    
330 root 1.108 =item on_child_start $term, $pid
331    
332     Called just after the child process has been C<fork>ed.
333    
334     =item on_child_exit $term, $status
335    
336     Called just after the child process has exited. C<$status> is the status
337     from C<waitpid>.
338    
339 root 1.1 =item on_sel_make $term, $eventtime
340    
341     Called whenever a selection has been made by the user, but before the
342     selection text is copied, so changes to the beginning, end or type of the
343     selection will be honored.
344    
345     Returning a true value aborts selection making by urxvt, in which case you
346     have to make a selection yourself by calling C<< $term->selection_grab >>.
347    
348     =item on_sel_grab $term, $eventtime
349    
350     Called whenever a selection has been copied, but before the selection is
351     requested from the server. The selection text can be queried and changed
352     by calling C<< $term->selection >>.
353    
354     Returning a true value aborts selection grabbing. It will still be hilighted.
355    
356 root 1.22 =item on_sel_extend $term
357    
358     Called whenever the user tries to extend the selection (e.g. with a double
359     click) and is either supposed to return false (normal operation), or
360     should extend the selection itelf and return true to suppress the built-in
361 root 1.85 processing. This can happen multiple times, as long as the callback
362     returns true, it will be called on every further click by the user and is
363     supposed to enlarge the selection more and more, if possible.
364 root 1.22
365     See the F<selection> example extension.
366    
367 root 1.1 =item on_view_change $term, $offset
368    
369     Called whenever the view offset changes, i..e the user or program
370     scrolls. Offset C<0> means display the normal terminal, positive values
371     show this many lines of scrollback.
372    
373     =item on_scroll_back $term, $lines, $saved
374    
375     Called whenever lines scroll out of the terminal area into the scrollback
376     buffer. C<$lines> is the number of lines scrolled out and may be larger
377     than the scroll back buffer or the terminal.
378    
379     It is called before lines are scrolled out (so rows 0 .. min ($lines - 1,
380     $nrow - 1) represent the lines to be scrolled out). C<$saved> is the total
381     number of lines that will be in the scrollback buffer.
382    
383 root 1.28 =item on_osc_seq $term, $string
384    
385 root 1.29 Called whenever the B<ESC ] 777 ; string ST> command sequence (OSC =
386     operating system command) is processed. Cursor position and other state
387     information is up-to-date when this happens. For interoperability, the
388     string should start with the extension name and a colon, to distinguish
389     it from commands for other extensions, and this might be enforced in the
390     future.
391    
392     Be careful not ever to trust (in a security sense) the data you receive,
393     as its source can not easily be controleld (e-mail content, messages from
394     other users on the same system etc.).
395 root 1.28
396 root 1.33 =item on_add_lines $term, $string
397    
398     Called whenever text is about to be output, with the text as argument. You
399     can filter/change and output the text yourself by returning a true value
400     and calling C<< $term->scr_add_lines >> yourself. Please note that this
401     might be very slow, however, as your hook is called for B<all> text being
402     output.
403    
404 root 1.72 =item on_tt_write $term, $octets
405    
406     Called whenever some data is written to the tty/pty and can be used to
407     suppress or filter tty input.
408    
409 root 1.35 =item on_line_update $term, $row
410    
411     Called whenever a line was updated or changed. Can be used to filter
412     screen output (e.g. underline urls or other useless stuff). Only lines
413     that are being shown will be filtered, and, due to performance reasons,
414     not always immediately.
415    
416     The row number is always the topmost row of the line if the line spans
417     multiple rows.
418    
419     Please note that, if you change the line, then the hook might get called
420     later with the already-modified line (e.g. if unrelated parts change), so
421     you cannot just toggle rendition bits, but only set them.
422    
423 root 1.1 =item on_refresh_begin $term
424    
425     Called just before the screen gets redrawn. Can be used for overlay
426     or similar effects by modify terminal contents in refresh_begin, and
427     restoring them in refresh_end. The built-in overlay and selection display
428     code is run after this hook, and takes precedence.
429    
430     =item on_refresh_end $term
431    
432     Called just after the screen gets redrawn. See C<on_refresh_begin>.
433    
434 root 1.11 =item on_keyboard_command $term, $string
435    
436     Called whenever the user presses a key combination that has a
437     C<perl:string> action bound to it (see description of the B<keysym>
438     resource in the @@RXVT_NAME@@(1) manpage).
439    
440 root 1.92 =item on_x_event $term, $event
441    
442     Called on every X event received on the vt window (and possibly other
443     windows). Should only be used as a last resort. Most event structure
444     members are not passed.
445    
446 root 1.45 =item on_focus_in $term
447    
448     Called whenever the window gets the keyboard focus, before rxvt-unicode
449     does focus in processing.
450    
451     =item on_focus_out $term
452    
453     Called wheneever the window loses keyboard focus, before rxvt-unicode does
454     focus out processing.
455    
456 root 1.102 =item on_configure_notify $term, $event
457    
458 root 1.69 =item on_key_press $term, $event, $keysym, $octets
459 root 1.37
460 root 1.69 =item on_key_release $term, $event, $keysym
461 root 1.37
462     =item on_button_press $term, $event
463    
464     =item on_button_release $term, $event
465    
466     =item on_motion_notify $term, $event
467    
468 root 1.45 =item on_map_notify $term, $event
469    
470     =item on_unmap_notify $term, $event
471    
472 root 1.39 Called whenever the corresponding X event is received for the terminal If
473     the hook returns true, then the even will be ignored by rxvt-unicode.
474    
475     The event is a hash with most values as named by Xlib (see the XEvent
476     manpage), with the additional members C<row> and C<col>, which are the row
477     and column under the mouse cursor.
478 root 1.38
479     C<on_key_press> additionally receives the string rxvt-unicode would
480     output, if any, in locale-specific encoding.
481 root 1.37
482     subwindow.
483    
484 root 1.1 =back
485    
486 root 1.77 =cut
487    
488     package urxvt;
489    
490     use utf8;
491     use strict;
492     use Carp ();
493     use Scalar::Util ();
494     use List::Util ();
495    
496     our $VERSION = 1;
497     our $TERM;
498     our @HOOKNAME;
499     our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
500     our %OPTION;
501    
502     our $LIBDIR;
503     our $RESNAME;
504     our $RESCLASS;
505     our $RXVTNAME;
506    
507 root 1.23 =head2 Variables in the C<urxvt> Package
508    
509     =over 4
510    
511 root 1.75 =item $urxvt::LIBDIR
512    
513     The rxvt-unicode library directory, where, among other things, the perl
514     modules and scripts are stored.
515    
516     =item $urxvt::RESCLASS, $urxvt::RESCLASS
517    
518     The resource class and name rxvt-unicode uses to look up X resources.
519    
520     =item $urxvt::RXVTNAME
521    
522     The basename of the installed binaries, usually C<urxvt>.
523    
524 root 1.23 =item $urxvt::TERM
525    
526 root 1.43 The current terminal. This variable stores the current C<urxvt::term>
527     object, whenever a callback/hook is executing.
528 root 1.23
529     =back
530    
531 root 1.1 =head2 Functions in the C<urxvt> Package
532    
533     =over 4
534    
535     =item urxvt::fatal $errormessage
536    
537     Fatally aborts execution with the given error message. Avoid at all
538     costs! The only time this is acceptable is when the terminal process
539     starts up.
540    
541     =item urxvt::warn $string
542    
543 root 1.6 Calls C<rxvt_warn> with the given string which should not include a
544 root 1.1 newline. The module also overwrites the C<warn> builtin with a function
545     that calls this function.
546    
547     Using this function has the advantage that its output ends up in the
548     correct place, e.g. on stderr of the connecting urxvtc client.
549    
550 root 1.77 Messages have a size limit of 1023 bytes currently.
551    
552 root 1.1 =item $time = urxvt::NOW
553    
554     Returns the "current time" (as per the event loop).
555    
556 root 1.47 =item urxvt::CurrentTime
557    
558     =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
559     Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
560     Button4Mask, Button5Mask, AnyModifier
561    
562 root 1.92 =item urxvt::NoEventMask, KeyPressMask, KeyReleaseMask,
563     ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask,
564     PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask,
565     Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask,
566     KeymapStateMask, ExposureMask, VisibilityChangeMask, StructureNotifyMask,
567     ResizeRedirectMask, SubstructureNotifyMask, SubstructureRedirectMask,
568     FocusChangeMask, PropertyChangeMask, ColormapChangeMask, OwnerGrabButtonMask
569    
570     =item urxvt::KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify,
571     EnterNotify, LeaveNotify, FocusIn, FocusOut, KeymapNotify, Expose,
572     GraphicsExpose, NoExpose, VisibilityNotify, CreateNotify, DestroyNotify,
573     UnmapNotify, MapNotify, MapRequest, ReparentNotify, ConfigureNotify,
574     ConfigureRequest, GravityNotify, ResizeRequest, CirculateNotify,
575     CirculateRequest, PropertyNotify, SelectionClear, SelectionRequest,
576     SelectionNotify, ColormapNotify, ClientMessage, MappingNotify
577    
578 root 1.55 Various constants for use in X calls and event processing.
579 root 1.47
580 root 1.21 =back
581    
582 root 1.18 =head2 RENDITION
583    
584     Rendition bitsets contain information about colour, font, font styles and
585     similar information for each screen cell.
586    
587     The following "macros" deal with changes in rendition sets. You should
588     never just create a bitset, you should always modify an existing one,
589     as they contain important information required for correct operation of
590     rxvt-unicode.
591    
592     =over 4
593    
594     =item $rend = urxvt::DEFAULT_RSTYLE
595    
596     Returns the default rendition, as used when the terminal is starting up or
597     being reset. Useful as a base to start when creating renditions.
598    
599     =item $rend = urxvt::OVERLAY_RSTYLE
600    
601     Return the rendition mask used for overlays by default.
602    
603     =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
604    
605     Return the bit that enabled bold, italic, blink, reverse-video and
606 root 1.19 underline, respectively. To enable such a style, just logically OR it into
607     the bitset.
608 root 1.18
609     =item $foreground = urxvt::GET_BASEFG $rend
610    
611     =item $background = urxvt::GET_BASEBG $rend
612    
613     Return the foreground/background colour index, respectively.
614    
615 root 1.75 =item $rend = urxvt::SET_FGCOLOR $rend, $new_colour
616 root 1.18
617 root 1.75 =item $rend = urxvt::SET_BGCOLOR $rend, $new_colour
618 root 1.18
619     Replace the foreground/background colour in the rendition mask with the
620     specified one.
621    
622 root 1.75 =item $value = urxvt::GET_CUSTOM $rend
623 root 1.19
624     Return the "custom" value: Every rendition has 5 bits for use by
625     extensions. They can be set and changed as you like and are initially
626     zero.
627    
628 root 1.75 =item $rend = urxvt::SET_CUSTOM $rend, $new_value
629 root 1.19
630     Change the custom value.
631    
632 root 1.18 =back
633    
634 root 1.1 =cut
635    
636     BEGIN {
637     # overwrite perl's warn
638     *CORE::GLOBAL::warn = sub {
639     my $msg = join "", @_;
640     $msg .= "\n"
641     unless $msg =~ /\n$/;
642     urxvt::warn ($msg);
643     };
644     }
645    
646 root 1.7 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
647 root 1.1
648     sub verbose {
649     my ($level, $msg) = @_;
650 root 1.8 warn "$msg\n" if $level <= $verbosity;
651 root 1.1 }
652    
653 root 1.44 my %extension_pkg;
654 root 1.1
655     # load a single script into its own package, once only
656 root 1.44 sub extension_package($) {
657 root 1.1 my ($path) = @_;
658    
659 root 1.100 no strict 'refs';
660    
661 root 1.44 $extension_pkg{$path} ||= do {
662 root 1.100 $path =~ /([^\/\\]+)$/;
663     my $pkg = $1;
664     $pkg =~ s/[^[:word:]]/_/g;
665     $pkg = "urxvt::ext::$pkg";
666 root 1.8
667 root 1.44 verbose 3, "loading extension '$path' into package '$pkg'";
668 root 1.1
669     open my $fh, "<:raw", $path
670     or die "$path: $!";
671    
672 root 1.100 @{"$pkg\::ISA"} = urxvt::term::extension::;
673    
674 root 1.96 my $source =
675 root 1.69 "package $pkg; use strict; use utf8;\n"
676     . "#line 1 \"$path\"\n{\n"
677     . (do { local $/; <$fh> })
678     . "\n};\n1";
679 root 1.8
680 root 1.69 eval $source
681     or die "$path: $@";
682 root 1.1
683     $pkg
684 root 1.7 }
685 root 1.1 }
686    
687 root 1.31 our $retval; # return value for urxvt
688    
689 root 1.8 # called by the rxvt core
690     sub invoke {
691 root 1.23 local $TERM = shift;
692 root 1.8 my $htype = shift;
693 root 1.6
694 root 1.8 if ($htype == 0) { # INIT
695 root 1.23 my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
696 root 1.49
697 root 1.68 my %ext_arg;
698 root 1.6
699 root 1.50 for (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
700     if ($_ eq "default") {
701 root 1.69 $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback);
702 root 1.51 } elsif (/^-(.*)$/) {
703 root 1.68 delete $ext_arg{$1};
704     } elsif (/^([^<]+)<(.*)>$/) {
705     push @{ $ext_arg{$1} }, $2;
706 root 1.49 } else {
707 root 1.68 $ext_arg{$_} ||= [];
708 root 1.50 }
709     }
710 root 1.6
711 root 1.68 while (my ($ext, $argv) = each %ext_arg) {
712 root 1.50 my @files = grep -f $_, map "$_/$ext", @dirs;
713    
714     if (@files) {
715 root 1.68 $TERM->register_package (extension_package $files[0], $argv);
716 root 1.50 } else {
717     warn "perl extension '$ext' not found in perl library search path\n";
718 root 1.8 }
719     }
720 root 1.55
721     eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
722     warn $@ if $@;
723 root 1.31 }
724    
725     $retval = undef;
726 root 1.6
727 root 1.31 if (my $cb = $TERM->{_hook}[$htype]) {
728     verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
729     if $verbosity >= 10;
730    
731     keys %$cb;
732    
733     while (my ($pkg, $cb) = each %$cb) {
734 root 1.68 $retval = eval { $cb->($TERM->{_pkg}{$pkg}, @_) }
735     and last;
736    
737 root 1.58 if ($@) {
738     $TERM->ungrab; # better to lose the grab than the session
739     warn $@;
740     }
741 root 1.31 }
742 root 1.85
743     verbose 11, "$HOOKNAME[$htype] returning <$retval>"
744     if $verbosity >= 11;
745 root 1.31 }
746    
747     if ($htype == 1) { # DESTROY
748     # clear package objects
749     %$_ = () for values %{ $TERM->{_pkg} };
750 root 1.25
751 root 1.31 # clear package
752     %$TERM = ();
753 root 1.7 }
754    
755 root 1.31 $retval
756 root 1.7 }
757 root 1.1
758 root 1.71 # urxvt::term::extension
759 root 1.55
760 root 1.71 package urxvt::term::extension;
761 root 1.69
762     sub enable {
763     my ($self, %hook) = @_;
764     my $pkg = $self->{_pkg};
765    
766     while (my ($name, $cb) = each %hook) {
767     my $htype = $HOOKTYPE{uc $name};
768     defined $htype
769     or Carp::croak "unsupported hook type '$name'";
770    
771 root 1.92 $self->set_should_invoke ($htype, +1)
772     unless exists $self->{term}{_hook}[$htype]{$pkg};
773 root 1.69
774     $self->{term}{_hook}[$htype]{$pkg} = $cb;
775     }
776     }
777    
778     sub disable {
779     my ($self, @hook) = @_;
780     my $pkg = $self->{_pkg};
781    
782     for my $name (@hook) {
783     my $htype = $HOOKTYPE{uc $name};
784     defined $htype
785     or Carp::croak "unsupported hook type '$name'";
786    
787 root 1.92 $self->set_should_invoke ($htype, -1)
788     if delete $self->{term}{_hook}[$htype]{$pkg};
789 root 1.69 }
790     }
791    
792     our $AUTOLOAD;
793    
794     sub AUTOLOAD {
795     $AUTOLOAD =~ /:([^:]+)$/
796     or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
797 root 1.23
798     eval qq{
799 root 1.69 sub $AUTOLOAD {
800 root 1.24 my \$proxy = shift;
801     \$proxy->{term}->$1 (\@_)
802 root 1.23 }
803     1
804     } or die "FATAL: unable to compile method forwarder: $@";
805    
806 root 1.69 goto &$AUTOLOAD;
807 root 1.23 }
808    
809 root 1.69 sub DESTROY {
810 root 1.58 # nop
811     }
812    
813 root 1.55 # urxvt::destroy_hook
814    
815 root 1.45 sub urxvt::destroy_hook::DESTROY {
816     ${$_[0]}->();
817     }
818    
819     sub urxvt::destroy_hook(&) {
820     bless \shift, urxvt::destroy_hook::
821     }
822    
823 root 1.56 package urxvt::anyevent;
824    
825     =head2 The C<urxvt::anyevent> Class
826    
827     The sole purpose of this class is to deliver an interface to the
828     C<AnyEvent> module - any module using it will work inside urxvt without
829 root 1.75 further programming. The only exception is that you cannot wait on
830     condition variables, but non-blocking condvar use is ok. What this means
831     is that you cannot use blocking APIs, but the non-blocking variant should
832     work.
833 root 1.55
834 root 1.56 =cut
835 root 1.55
836     our $VERSION = 1;
837    
838     $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
839     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
840    
841     sub timer {
842     my ($class, %arg) = @_;
843    
844     my $cb = $arg{cb};
845    
846     urxvt::timer
847     ->new
848     ->start (urxvt::NOW + $arg{after})
849     ->cb (sub {
850     $_[0]->stop; # need to cancel manually
851     $cb->();
852     })
853     }
854    
855     sub io {
856     my ($class, %arg) = @_;
857    
858     my $cb = $arg{cb};
859    
860     bless [$arg{fh}, urxvt::iow
861     ->new
862     ->fd (fileno $arg{fh})
863     ->events (($arg{poll} =~ /r/ ? 1 : 0)
864     | ($arg{poll} =~ /w/ ? 2 : 0))
865     ->start
866     ->cb (sub {
867     $cb->(($_[1] & 1 ? 'r' : '')
868     . ($_[1] & 2 ? 'w' : ''));
869     })],
870     urxvt::anyevent::
871     }
872    
873     sub DESTROY {
874     $_[0][1]->stop;
875     }
876    
877     sub condvar {
878     bless \my $flag, urxvt::anyevent::condvar::
879     }
880    
881     sub urxvt::anyevent::condvar::broadcast {
882     ${$_[0]}++;
883     }
884    
885     sub urxvt::anyevent::condvar::wait {
886     unless (${$_[0]}) {
887 root 1.69 Carp::croak "AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API";
888 root 1.55 }
889     }
890    
891     package urxvt::term;
892    
893 root 1.1 =head2 The C<urxvt::term> Class
894    
895     =over 4
896    
897 root 1.68 =cut
898    
899     # find on_xxx subs in the package and register them
900     # as hooks
901     sub register_package {
902     my ($self, $pkg, $argv) = @_;
903    
904 root 1.69 my $proxy = bless {
905     _pkg => $pkg,
906     argv => $argv,
907     }, $pkg;
908     Scalar::Util::weaken ($proxy->{term} = $self);
909 root 1.68
910     $self->{_pkg}{$pkg} = $proxy;
911    
912 root 1.69 for my $name (@HOOKNAME) {
913     if (my $ref = $pkg->can ("on_" . lc $name)) {
914     $proxy->enable ($name => $ref);
915     }
916 root 1.68 }
917     }
918    
919 root 1.77 =item $term = new urxvt::term $envhashref, $rxvtname, [arg...]
920    
921     Creates a new terminal, very similar as if you had started it with system
922 root 1.78 C<$rxvtname, arg...>. C<$envhashref> must be a reference to a C<%ENV>-like
923     hash which defines the environment of the new terminal.
924 root 1.77
925     Croaks (and probably outputs an error message) if the new instance
926     couldn't be created. Returns C<undef> if the new instance didn't
927     initialise perl, and the terminal object otherwise. The C<init> and
928     C<start> hooks will be called during this call.
929    
930     =cut
931    
932     sub new {
933     my ($class, $env, @args) = @_;
934    
935     _new ([ map "$_=$env->{$_}", keys %$env ], @args);
936     }
937    
938 root 1.36 =item $term->destroy
939    
940 root 1.75 Destroy the terminal object (close the window, free resources
941     etc.). Please note that @@RXVT_NAME@@ will not exit as long as any event
942     watchers (timers, io watchers) are still active.
943 root 1.36
944 root 1.108 =item $term->exec_async ($cmd[, @args])
945    
946     Works like the combination of the C<fork>/C<exec> builtins, which executes
947     ("starts") programs in the background. This function takes care of setting
948     the user environment before exec'ing the command (e.g. C<PATH>) and should
949     be preferred over explicit calls to C<exec> or C<system>.
950    
951     Returns the pid of the subprocess or C<undef> on error.
952    
953     =cut
954    
955     sub exec_async {
956     my $self = shift;
957    
958     my $pid = fork;
959    
960     return $pid
961     if !defined $pid or $pid;
962    
963     %ENV = %{ $self->env };
964    
965     exec @_;
966     urxvt::_exit 255;
967     }
968    
969 root 1.49 =item $isset = $term->option ($optval[, $set])
970    
971     Returns true if the option specified by C<$optval> is enabled, and
972     optionally change it. All option values are stored by name in the hash
973     C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
974    
975     Here is a a likely non-exhaustive list of option names, please see the
976     source file F</src/optinc.h> to see the actual list:
977    
978     borderLess console cursorBlink cursorUnderline hold iconic insecure
979     intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
980 root 1.105 override-redirect pastableTabs pointerBlank reverseVideo scrollBar
981     scrollBar_floating scrollBar_right scrollTtyKeypress scrollTtyOutput
982     scrollWithBuffer secondaryScreen secondaryScroll skipBuiltinGlyphs
983     transparent tripleclickwords utmpInhibit visualBell
984 root 1.49
985 root 1.4 =item $value = $term->resource ($name[, $newval])
986    
987     Returns the current resource value associated with a given name and
988     optionally sets a new value. Setting values is most useful in the C<init>
989     hook. Unset resources are returned and accepted as C<undef>.
990    
991     The new value must be properly encoded to a suitable character encoding
992     before passing it to this method. Similarly, the returned value may need
993     to be converted from the used encoding to text.
994    
995     Resource names are as defined in F<src/rsinc.h>. Colours can be specified
996     as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
997     likely change).
998    
999     Please note that resource strings will currently only be freed when the
1000     terminal is destroyed, so changing options frequently will eat memory.
1001    
1002 root 1.5 Here is a a likely non-exhaustive list of resource names, not all of which
1003 root 1.49 are supported in every build, please see the source file F</src/rsinc.h>
1004     to see the actual list:
1005 root 1.5
1006     answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
1007     borderLess color cursorBlink cursorUnderline cutchars delete_key
1008     display_name embed ext_bwidth fade font geometry hold iconName
1009     imFont imLocale inputMethod insecure int_bwidth intensityStyles
1010 root 1.105 italicFont jumpScroll lineSpace loginShell mapAlert meta8 modifier
1011     mouseWheelScrollPage name override_redirect pastableTabs path perl_eval
1012     perl_ext_1 perl_ext_2 perl_lib pointerBlank pointerBlankDelay
1013     preeditType print_pipe pty_fd reverseVideo saveLines scrollBar
1014     scrollBar_align scrollBar_floating scrollBar_right scrollBar_thickness
1015     scrollTtyKeypress scrollTtyOutput scrollWithBuffer scrollstyle
1016     secondaryScreen secondaryScroll selectstyle shade term_name title
1017     transient_for transparent transparent_all tripleclickwords utmpInhibit
1018     visualBell
1019 root 1.5
1020 root 1.4 =cut
1021    
1022 root 1.55 sub resource($$;$) {
1023 root 1.4 my ($self, $name) = (shift, shift);
1024     unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
1025 root 1.45 &urxvt::term::_resource
1026 root 1.4 }
1027    
1028 root 1.79 =item $value = $term->x_resource ($pattern)
1029    
1030     Returns the X-Resource for the given pattern, excluding the program or
1031     class name, i.e. C<< $term->x_resource ("boldFont") >> should return the
1032     same value as used by this instance of rxvt-unicode. Returns C<undef> if no
1033     resource with that pattern exists.
1034    
1035     This method should only be called during the C<on_start> hook, as there is
1036     only one resource database per display, and later invocations might return
1037     the wrong resources.
1038    
1039 root 1.69 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
1040    
1041     Adds a keymap translation exactly as specified via a resource. See the
1042     C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
1043    
1044 root 1.33 =item $rend = $term->rstyle ([$new_rstyle])
1045 root 1.32
1046 root 1.33 Return and optionally change the current rendition. Text that is output by
1047     the terminal application will use this style.
1048 root 1.32
1049     =item ($row, $col) = $term->screen_cur ([$row, $col])
1050    
1051     Return the current coordinates of the text cursor position and optionally
1052     set it (which is usually bad as applications don't expect that).
1053    
1054 root 1.1 =item ($row, $col) = $term->selection_mark ([$row, $col])
1055    
1056     =item ($row, $col) = $term->selection_beg ([$row, $col])
1057    
1058     =item ($row, $col) = $term->selection_end ([$row, $col])
1059    
1060     Return the current values of the selection mark, begin or end positions,
1061     and optionally set them to new values.
1062    
1063 root 1.86 =item $term->selection_make ($eventtime[, $rectangular])
1064    
1065     Tries to make a selection as set by C<selection_beg> and
1066     C<selection_end>. If C<$rectangular> is true (default: false), a
1067     rectangular selection will be made. This is the prefered function to make
1068     a selection.
1069    
1070 root 1.1 =item $success = $term->selection_grab ($eventtime)
1071    
1072 root 1.86 Try to request the primary selection text from the server (for example, as
1073     set by the next method). No visual feedback will be given. This function
1074     is mostly useful from within C<on_sel_grab> hooks.
1075 root 1.1
1076     =item $oldtext = $term->selection ([$newtext])
1077    
1078     Return the current selection text and optionally replace it by C<$newtext>.
1079    
1080 root 1.69 =item $term->overlay_simple ($x, $y, $text)
1081    
1082     Create a simple multi-line overlay box. See the next method for details.
1083    
1084     =cut
1085    
1086     sub overlay_simple {
1087     my ($self, $x, $y, $text) = @_;
1088    
1089     my @lines = split /\n/, $text;
1090    
1091     my $w = List::Util::max map $self->strwidth ($_), @lines;
1092    
1093     my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
1094     $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
1095    
1096     $overlay
1097     }
1098 root 1.1
1099 root 1.20 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
1100 root 1.1
1101     Create a new (empty) overlay at the given position with the given
1102 root 1.20 width/height. C<$rstyle> defines the initial rendition style
1103     (default: C<OVERLAY_RSTYLE>).
1104 root 1.1
1105 root 1.20 If C<$border> is C<2> (default), then a decorative border will be put
1106     around the box.
1107 root 1.1
1108 root 1.20 If either C<$x> or C<$y> is negative, then this is counted from the
1109     right/bottom side, respectively.
1110 root 1.1
1111 root 1.20 This method returns an urxvt::overlay object. The overlay will be visible
1112     as long as the perl object is referenced.
1113 root 1.1
1114 root 1.22 The methods currently supported on C<urxvt::overlay> objects are:
1115    
1116     =over 4
1117 root 1.1
1118 root 1.20 =item $overlay->set ($x, $y, $text, $rend)
1119 root 1.1
1120 root 1.20 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
1121     text in rxvt-unicode's special encoding and an array of rendition values
1122     at a specific position inside the overlay.
1123 root 1.1
1124 root 1.22 =item $overlay->hide
1125    
1126     If visible, hide the overlay, but do not destroy it.
1127    
1128     =item $overlay->show
1129    
1130     If hidden, display the overlay again.
1131    
1132     =back
1133    
1134 root 1.45 =item $popup = $term->popup ($event)
1135    
1136     Creates a new C<urxvt::popup> object that implements a popup menu. The
1137     C<$event> I<must> be the event causing the menu to pop up (a button event,
1138     currently).
1139    
1140     =cut
1141    
1142 root 1.55 sub popup {
1143 root 1.45 my ($self, $event) = @_;
1144    
1145     $self->grab ($event->{time}, 1)
1146     or return;
1147    
1148     my $popup = bless {
1149     term => $self,
1150     event => $event,
1151     }, urxvt::popup::;
1152    
1153     Scalar::Util::weaken $popup->{term};
1154    
1155     $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
1156     Scalar::Util::weaken $self->{_destroy}{$popup};
1157    
1158     $popup
1159     }
1160    
1161 root 1.40 =item $cellwidth = $term->strwidth ($string)
1162 root 1.6
1163     Returns the number of screen-cells this string would need. Correctly
1164     accounts for wide and combining characters.
1165    
1166 root 1.40 =item $octets = $term->locale_encode ($string)
1167 root 1.6
1168     Convert the given text string into the corresponding locale encoding.
1169    
1170 root 1.40 =item $string = $term->locale_decode ($octets)
1171 root 1.6
1172     Convert the given locale-encoded octets into a perl string.
1173    
1174 root 1.70 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
1175    
1176     XORs the rendition values in the given span with the provided value
1177 root 1.86 (default: C<RS_RVid>), which I<MUST NOT> contain font styles. Useful in
1178     refresh hooks to provide effects similar to the selection.
1179 root 1.70
1180     =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
1181    
1182     Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
1183     whitespace will additionally be xored with the C<$rstyle2>, which defaults
1184     to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
1185 root 1.86 it instead. Both styles I<MUST NOT> contain font styles.
1186 root 1.70
1187 root 1.69 =item $term->scr_bell
1188    
1189     Ring the bell!
1190    
1191 root 1.33 =item $term->scr_add_lines ($string)
1192    
1193     Write the given text string to the screen, as if output by the application
1194     running inside the terminal. It may not contain command sequences (escape
1195     codes), but is free to use line feeds, carriage returns and tabs. The
1196     string is a normal text string, not in locale-dependent encoding.
1197    
1198     Normally its not a good idea to use this function, as programs might be
1199     confused by changes in cursor position or scrolling. Its useful inside a
1200     C<on_add_lines> hook, though.
1201    
1202 root 1.36 =item $term->cmd_parse ($octets)
1203    
1204     Similar to C<scr_add_lines>, but the argument must be in the
1205     locale-specific encoding of the terminal and can contain command sequences
1206     (escape codes) that will be interpreted.
1207    
1208 root 1.6 =item $term->tt_write ($octets)
1209    
1210     Write the octets given in C<$data> to the tty (i.e. as program input). To
1211 root 1.12 pass characters instead of octets, you should convert your strings first
1212     to the locale-specific encoding using C<< $term->locale_encode >>.
1213    
1214 root 1.69 =item $old_events = $term->pty_ev_events ([$new_events])
1215    
1216     Replaces the event mask of the pty watcher by the given event mask. Can
1217     be used to suppress input and output handling to the pty/tty. See the
1218     description of C<< urxvt::timer->events >>. Make sure to always restore
1219     the previous value.
1220    
1221 root 1.40 =item $windowid = $term->parent
1222    
1223     Return the window id of the toplevel window.
1224    
1225     =item $windowid = $term->vt
1226    
1227     Return the window id of the terminal window.
1228    
1229 root 1.92 =item $term->vt_emask_add ($x_event_mask)
1230    
1231     Adds the specified events to the vt event mask. Useful e.g. when you want
1232     to receive pointer events all the times:
1233    
1234     $term->vt_emask_add (urxvt::PointerMotionMask);
1235    
1236 root 1.32 =item $window_width = $term->width
1237    
1238     =item $window_height = $term->height
1239    
1240     =item $font_width = $term->fwidth
1241    
1242     =item $font_height = $term->fheight
1243    
1244     =item $font_ascent = $term->fbase
1245    
1246     =item $terminal_rows = $term->nrow
1247    
1248     =item $terminal_columns = $term->ncol
1249    
1250     =item $has_focus = $term->focus
1251    
1252     =item $is_mapped = $term->mapped
1253 root 1.13
1254 root 1.32 =item $max_scrollback = $term->saveLines
1255 root 1.13
1256 root 1.32 =item $nrow_plus_saveLines = $term->total_rows
1257 root 1.13
1258 root 1.94 =item $topmost_scrollback_row = $term->top_row
1259 root 1.12
1260 root 1.32 Return various integers describing terminal characteristics.
1261 root 1.12
1262 root 1.77 =item $x_display = $term->display_id
1263    
1264     Return the DISPLAY used by rxvt-unicode.
1265    
1266 root 1.66 =item $lc_ctype = $term->locale
1267    
1268     Returns the LC_CTYPE category string used by this rxvt-unicode.
1269    
1270 root 1.77 =item $env = $term->env
1271    
1272     Returns a copy of the environment in effect for the terminal as a hashref
1273     similar to C<\%ENV>.
1274    
1275     =cut
1276 root 1.66
1277 root 1.77 sub env {
1278     if (my $env = $_[0]->_env) {
1279     +{ map /^([^=]+)(?:=(.*))?$/s && ($1 => $2), @$env }
1280     } else {
1281     +{ %ENV }
1282     }
1283     }
1284 root 1.66
1285 root 1.47 =item $modifiermask = $term->ModLevel3Mask
1286    
1287     =item $modifiermask = $term->ModMetaMask
1288    
1289     =item $modifiermask = $term->ModNumLockMask
1290    
1291     Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1292     AltGr), the meta key (often Alt) and the num lock key, if applicable.
1293    
1294 root 1.12 =item $view_start = $term->view_start ([$newvalue])
1295    
1296 root 1.94 Returns the row number of the topmost displayed line. Maximum value is
1297     C<0>, which displays the normal terminal contents. Lower values scroll
1298 root 1.12 this many lines into the scrollback buffer.
1299    
1300 root 1.14 =item $term->want_refresh
1301    
1302     Requests a screen refresh. At the next opportunity, rxvt-unicode will
1303     compare the on-screen display with its stored representation. If they
1304     differ, it redraws the differences.
1305    
1306     Used after changing terminal contents to display them.
1307    
1308 root 1.13 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1309 root 1.12
1310     Returns the text of the entire row with number C<$row_number>. Row C<0>
1311     is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1312     terminal line. The scrollback buffer starts at line C<-1> and extends to
1313 root 1.24 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1314     is requested.
1315 root 1.12
1316 root 1.13 If C<$new_text> is specified, it will replace characters in the current
1317     line, starting at column C<$start_col> (default C<0>), which is useful
1318 root 1.18 to replace only parts of a line. The font index in the rendition will
1319 root 1.13 automatically be updated.
1320 root 1.12
1321     C<$text> is in a special encoding: tabs and wide characters that use more
1322     than one cell when displayed are padded with urxvt::NOCHAR characters
1323     (C<chr 65535>). Characters with combining characters and other characters
1324     that do not fit into the normal tetx encoding will be replaced with
1325     characters in the private use area.
1326    
1327     You have to obey this encoding when changing text. The advantage is
1328     that C<substr> and similar functions work on screen cells and not on
1329     characters.
1330    
1331     The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1332     can be used to convert normal strings into this encoding and vice versa.
1333    
1334 root 1.13 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1335    
1336     Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1337     bitsets. Rendition bitsets contain information about colour, font, font
1338     styles and similar information. See also C<< $term->ROW_t >>.
1339    
1340     When setting rendition, the font mask will be ignored.
1341 root 1.12
1342 root 1.18 See the section on RENDITION, above.
1343 root 1.13
1344     =item $length = $term->ROW_l ($row_number[, $new_length])
1345    
1346 root 1.24 Returns the number of screen cells that are in use ("the line
1347     length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1348     line is joined with the following one.
1349    
1350     =item $bool = $term->is_longer ($row_number)
1351    
1352     Returns true if the row is part of a multiple-row logical "line" (i.e.
1353     joined with the following row), which means all characters are in use
1354     and it is continued on the next row (and possibly a continuation of the
1355     previous row(s)).
1356    
1357     =item $line = $term->line ($row_number)
1358    
1359     Create and return a new C<urxvt::line> object that stores information
1360     about the logical line that row C<$row_number> is part of. It supports the
1361     following methods:
1362 root 1.12
1363 root 1.24 =over 4
1364    
1365 root 1.35 =item $text = $line->t ([$new_text])
1366 root 1.24
1367 root 1.35 Returns or replaces the full text of the line, similar to C<ROW_t>
1368 root 1.24
1369 root 1.35 =item $rend = $line->r ([$new_rend])
1370 root 1.24
1371 root 1.35 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1372 root 1.24
1373     =item $length = $line->l
1374    
1375     Returns the length of the line in cells, similar to C<ROW_l>.
1376    
1377     =item $rownum = $line->beg
1378    
1379     =item $rownum = $line->end
1380    
1381     Return the row number of the first/last row of the line, respectively.
1382    
1383     =item $offset = $line->offset_of ($row, $col)
1384    
1385     Returns the character offset of the given row|col pair within the logical
1386 root 1.85 line. Works for rows outside the line, too, and returns corresponding
1387     offsets outside the string.
1388 root 1.24
1389     =item ($row, $col) = $line->coord_of ($offset)
1390    
1391     Translates a string offset into terminal coordinates again.
1392    
1393     =back
1394    
1395     =cut
1396    
1397 root 1.55 sub line {
1398 root 1.24 my ($self, $row) = @_;
1399    
1400     my $maxrow = $self->nrow - 1;
1401    
1402     my ($beg, $end) = ($row, $row);
1403    
1404     --$beg while $self->ROW_is_longer ($beg - 1);
1405     ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1406    
1407     bless {
1408     term => $self,
1409     beg => $beg,
1410     end => $end,
1411 root 1.34 ncol => $self->ncol,
1412 root 1.24 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1413     }, urxvt::line::
1414     }
1415    
1416     sub urxvt::line::t {
1417     my ($self) = @_;
1418    
1419 root 1.34 if (@_ > 1)
1420     {
1421     $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1422     for $self->{beg} .. $self->{end};
1423     }
1424    
1425     defined wantarray &&
1426     substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1427     0, $self->{len}
1428 root 1.24 }
1429    
1430     sub urxvt::line::r {
1431     my ($self) = @_;
1432    
1433 root 1.34 if (@_ > 1)
1434     {
1435     $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1436     for $self->{beg} .. $self->{end};
1437     }
1438    
1439     if (defined wantarray) {
1440     my $rend = [
1441     map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1442     ];
1443     $#$rend = $self->{len} - 1;
1444     return $rend;
1445     }
1446    
1447     ()
1448 root 1.24 }
1449    
1450     sub urxvt::line::beg { $_[0]{beg} }
1451     sub urxvt::line::end { $_[0]{end} }
1452     sub urxvt::line::l { $_[0]{len} }
1453    
1454     sub urxvt::line::offset_of {
1455     my ($self, $row, $col) = @_;
1456    
1457 root 1.34 ($row - $self->{beg}) * $self->{ncol} + $col
1458 root 1.24 }
1459    
1460     sub urxvt::line::coord_of {
1461     my ($self, $offset) = @_;
1462    
1463     use integer;
1464    
1465     (
1466 root 1.34 $offset / $self->{ncol} + $self->{beg},
1467     $offset % $self->{ncol}
1468 root 1.24 )
1469     }
1470    
1471 root 1.12 =item $text = $term->special_encode $string
1472    
1473     Converts a perl string into the special encoding used by rxvt-unicode,
1474     where one character corresponds to one screen cell. See
1475     C<< $term->ROW_t >> for details.
1476    
1477     =item $string = $term->special_decode $text
1478    
1479     Converts rxvt-unicodes text reprsentation into a perl string. See
1480     C<< $term->ROW_t >> for details.
1481 root 1.6
1482 root 1.61 =item $success = $term->grab_button ($button, $modifiermask)
1483    
1484 root 1.64 Registers a synchronous button grab. See the XGrabButton manpage.
1485 root 1.61
1486     =item $success = $term->grab ($eventtime[, $sync])
1487    
1488     Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1489     synchronous (C<$sync> is true). Also remembers the grab timestampe.
1490    
1491     =item $term->allow_events_async
1492    
1493     Calls XAllowEvents with AsyncBoth for the most recent grab.
1494    
1495     =item $term->allow_events_sync
1496    
1497     Calls XAllowEvents with SyncBoth for the most recent grab.
1498    
1499     =item $term->allow_events_replay
1500    
1501     Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1502     recent grab.
1503    
1504     =item $term->ungrab
1505    
1506     Calls XUngrab for the most recent grab. Is called automatically on
1507     evaluation errors, as it is better to lose the grab in the error case as
1508     the session.
1509    
1510 root 1.1 =back
1511    
1512 root 1.55 =cut
1513    
1514     package urxvt::popup;
1515    
1516 root 1.45 =head2 The C<urxvt::popup> Class
1517    
1518     =over 4
1519    
1520     =cut
1521    
1522     sub add_item {
1523     my ($self, $item) = @_;
1524    
1525 root 1.53 $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1526     $item->{rend}{hover} = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1527     $item->{rend}{active} = "\x1b[m" unless exists $item->{rend}{active};
1528    
1529     $item->{render} ||= sub { $_[0]{text} };
1530    
1531 root 1.45 push @{ $self->{item} }, $item;
1532     }
1533    
1534 root 1.76 =item $popup->add_title ($title)
1535    
1536     Adds a non-clickable title to the popup.
1537    
1538     =cut
1539    
1540     sub add_title {
1541     my ($self, $title) = @_;
1542    
1543     $self->add_item ({
1544     rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1545     text => $title,
1546     activate => sub { },
1547     });
1548     }
1549    
1550     =item $popup->add_separator ([$sepchr])
1551    
1552     Creates a separator, optionally using the character given as C<$sepchr>.
1553    
1554     =cut
1555    
1556 root 1.53 sub add_separator {
1557     my ($self, $sep) = @_;
1558    
1559 root 1.67 $sep ||= "=";
1560 root 1.53
1561     $self->add_item ({
1562     rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1563     text => "",
1564 root 1.65 render => sub { $sep x $self->{term}->ncol },
1565 root 1.53 activate => sub { },
1566     });
1567     }
1568    
1569 root 1.76 =item $popup->add_button ($text, $cb)
1570    
1571     Adds a clickable button to the popup. C<$cb> is called whenever it is
1572     selected.
1573 root 1.53
1574 root 1.76 =cut
1575 root 1.53
1576 root 1.45 sub add_button {
1577     my ($self, $text, $cb) = @_;
1578    
1579 root 1.64 $self->add_item ({ type => "button", text => $text, activate => $cb});
1580 root 1.48 }
1581    
1582 root 1.76 =item $popup->add_toggle ($text, $cb, $initial_value)
1583    
1584     Adds a toggle/checkbox item to the popup. Teh callback gets called
1585     whenever it gets toggled, with a boolean indicating its value as its first
1586     argument.
1587    
1588     =cut
1589    
1590 root 1.48 sub add_toggle {
1591     my ($self, $text, $cb, $value) = @_;
1592    
1593 root 1.49 my $item; $item = {
1594     type => "button",
1595     text => " $text",
1596     value => $value,
1597 root 1.58 render => sub { ($_[0]{value} ? "* " : " ") . $text },
1598 root 1.76 activate => sub { $cb->($_[1]{value} = !$_[1]{value}); },
1599 root 1.49 };
1600    
1601     $self->add_item ($item);
1602 root 1.45 }
1603    
1604 root 1.76 =item $popup->show
1605    
1606     Displays the popup (which is initially hidden).
1607    
1608     =cut
1609    
1610 root 1.45 sub show {
1611     my ($self) = @_;
1612    
1613     local $urxvt::popup::self = $self;
1614    
1615 root 1.77 my $env = $self->{term}->env;
1616     # we can't hope to reproduce the locale algorithm, so nuke LC_ALL and set LC_CTYPE.
1617     delete $env->{LC_ALL};
1618     $env->{LC_CTYPE} = $self->{term}->locale;
1619    
1620 root 1.103 urxvt::term->new ($env, "popup",
1621 root 1.105 "--perl-lib" => "", "--perl-ext-common" => "",
1622 root 1.106 "-pty-fd" => -1, "-sl" => 0,
1623     "-b" => 1, "-bd" => "grey80", "-bl", "-override-redirect",
1624 root 1.77 "--transient-for" => $self->{term}->parent,
1625     "-display" => $self->{term}->display_id,
1626     "-pe" => "urxvt-popup")
1627 root 1.45 or die "unable to create popup window\n";
1628     }
1629    
1630     sub DESTROY {
1631     my ($self) = @_;
1632    
1633 root 1.58 delete $self->{term}{_destroy}{$self};
1634 root 1.45 $self->{term}->ungrab;
1635     }
1636    
1637 root 1.78 =back
1638    
1639 root 1.1 =head2 The C<urxvt::timer> Class
1640    
1641     This class implements timer watchers/events. Time is represented as a
1642     fractional number of seconds since the epoch. Example:
1643    
1644 root 1.20 $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1645 root 1.1 $term->{timer} = urxvt::timer
1646     ->new
1647 root 1.20 ->interval (1)
1648 root 1.1 ->cb (sub {
1649 root 1.20 $term->{overlay}->set (0, 0,
1650     sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1651     });
1652 root 1.1
1653     =over 4
1654    
1655     =item $timer = new urxvt::timer
1656    
1657 root 1.20 Create a new timer object in started state. It is scheduled to fire
1658     immediately.
1659 root 1.1
1660     =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1661    
1662     Set the callback to be called when the timer triggers.
1663    
1664     =item $tstamp = $timer->at
1665    
1666     Return the time this watcher will fire next.
1667    
1668     =item $timer = $timer->set ($tstamp)
1669    
1670     Set the time the event is generated to $tstamp.
1671    
1672 root 1.20 =item $timer = $timer->interval ($interval)
1673    
1674     Normally (and when C<$interval> is C<0>), the timer will automatically
1675     stop after it has fired once. If C<$interval> is non-zero, then the timer
1676     is automatically rescheduled at the given intervals.
1677    
1678 root 1.1 =item $timer = $timer->start
1679    
1680     Start the timer.
1681    
1682     =item $timer = $timer->start ($tstamp)
1683    
1684     Set the event trigger time to C<$tstamp> and start the timer.
1685    
1686 root 1.103 =item $timer = $timer->after ($delay)
1687    
1688     Like C<start>, but sets the expiry timer to c<urxvt::NOW + $delay>.
1689    
1690 root 1.1 =item $timer = $timer->stop
1691    
1692     Stop the timer.
1693    
1694     =back
1695    
1696     =head2 The C<urxvt::iow> Class
1697    
1698     This class implements io watchers/events. Example:
1699    
1700     $term->{socket} = ...
1701     $term->{iow} = urxvt::iow
1702     ->new
1703     ->fd (fileno $term->{socket})
1704 root 1.69 ->events (urxvt::EVENT_READ)
1705 root 1.1 ->start
1706     ->cb (sub {
1707     my ($iow, $revents) = @_;
1708     # $revents must be 1 here, no need to check
1709     sysread $term->{socket}, my $buf, 8192
1710     or end-of-file;
1711     });
1712    
1713    
1714     =over 4
1715    
1716     =item $iow = new urxvt::iow
1717    
1718     Create a new io watcher object in stopped state.
1719    
1720     =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1721    
1722     Set the callback to be called when io events are triggered. C<$reventmask>
1723     is a bitset as described in the C<events> method.
1724    
1725     =item $iow = $iow->fd ($fd)
1726    
1727     Set the filedescriptor (not handle) to watch.
1728    
1729     =item $iow = $iow->events ($eventmask)
1730    
1731 root 1.69 Set the event mask to watch. The only allowed values are
1732     C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
1733     together, or C<urxvt::EVENT_NONE>.
1734 root 1.1
1735     =item $iow = $iow->start
1736    
1737     Start watching for requested events on the given handle.
1738    
1739     =item $iow = $iow->stop
1740    
1741     Stop watching for events on the given filehandle.
1742    
1743     =back
1744    
1745 root 1.4 =head1 ENVIRONMENT
1746    
1747     =head2 URXVT_PERL_VERBOSITY
1748    
1749     This variable controls the verbosity level of the perl extension. Higher
1750     numbers indicate more verbose output.
1751    
1752     =over 4
1753    
1754 root 1.58 =item == 0 - fatal messages
1755 root 1.4
1756 root 1.58 =item >= 3 - script loading and management
1757 root 1.4
1758 root 1.85 =item >=10 - all called hooks
1759    
1760     =item >=11 - hook reutrn values
1761 root 1.4
1762     =back
1763    
1764 root 1.1 =head1 AUTHOR
1765    
1766     Marc Lehmann <pcg@goof.com>
1767     http://software.schmorp.de/pkg/rxvt-unicode
1768    
1769     =cut
1770    
1771     1