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