*** empty log message ***
[dana/urxvt.git] / src / urxvt.pm
1 =encoding utf8
2
3 =head1 NAME
4
5 @@RXVT_NAME@@perl - rxvt-unicode's embedded perl interpreter
6
7 =head1 SYNOPSIS
8
9    # create a file grab_test in $HOME:
10
11    sub on_sel_grab {
12       warn "you selected ", $_[0]->selection;
13       ()
14    }
15
16    # start a @@RXVT_NAME@@ using it:
17
18    @@RXVT_NAME@@ --perl-lib $HOME -pe grab_test
19
20 =head1 DESCRIPTION
21
22 Everytime a terminal object gets created, extension scripts specified via
23 the C<perl> resource are loaded and associated with it.
24
25 Scripts are compiled in a 'use strict' and 'use utf8' environment, and
26 thus must be encoded as UTF-8.
27
28 Each script will only ever be loaded once, even in @@RXVT_NAME@@d, where
29 scripts will be shared (but not enabled) for all terminals.
30
31 =head2 Prepackaged Extensions
32
33 This section describes the extensiosn delivered with this version. You can
34 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 =item selection (enabled by default)
43
44 Intelligent selection. This extension tries to be more intelligent when
45 the user extends selections (double-click). Right now, it tries to select
46 urls and complete shell-quoted arguments, which is very convenient, too,
47 if your F<ls> supports C<--quoting-style=shell>.
48
49 It also offers the following bindable event:
50
51 =over 4
52
53 =item rot13
54
55 Rot-13 the selection when activated. Used via keyboard trigger:
56
57    URxvt.keysym.C-M-r: perl:selection:rot13
58
59 =back
60
61 =item option-popup (enabled by default)
62
63 Binds a popup menu to Ctrl-Button2 that lets you toggle (some) options at
64 runtime.
65
66 =item selection-popup (enabled by default)
67
68 Binds a popup menu to Ctrl-Button3 that lets you convert the selection
69 text into various other formats/action.
70
71 =item searchable-scrollback (enabled by default)
72
73 Adds regex search functionality to the scrollback buffer, triggered by a
74 hotkey (default: C<M-s>). When in search mode, terminal input/output is
75 suspended, C</> starts an incremental regex search, C<n> searches further,
76 C<p> jumps to the previous match. C<enter> leaves search mode at the
77 current position and C<escape> returns to the original position.
78
79 =item digital-clock
80
81 Displays a digital clock using the built-in overlay.
82
83 =item mark-urls
84
85 Uses per-line display filtering (C<on_line_update>) to underline urls.
86
87 =item block-graphics-to-ascii
88
89 A not very useful example of filtering all text output to the terminal,
90 by replacing all line-drawing characters (U+2500 .. U+259F) by a
91 similar-looking ascii character.
92
93 =item example-refresh-hooks
94
95 Displays a very simple digital clock in the upper right corner of the
96 window. Illustrates overwriting the refresh callbacks to create your own
97 overlays or changes.
98
99 =back
100
101 =head2 General API Considerations
102
103 All objects (such as terminals, time watchers etc.) are typical
104 reference-to-hash objects. The hash can be used to store anything you
105 like. All members starting with an underscore (such as C<_ptr> or
106 C<_hook>) are reserved for internal uses and B<MUST NOT> be accessed or
107 modified).
108
109 When objects are destroyed on the C++ side, the perl object hashes are
110 emptied, so its best to store related objects such as time watchers and
111 the like inside the terminal object so they get destroyed as soon as the
112 terminal is destroyed.
113
114 Argument names also often indicate the type of a parameter. Here are some
115 hints on what they mean:
116
117 =over 4
118
119 =item $text
120
121 Rxvt-unicodes special way of encoding text, where one "unicode" character
122 always represents one screen cell. See L<row_t> for a discussion of this format.
123
124 =item $string
125
126 A perl text string, with an emphasis on I<text>. It can store all unicode
127 characters and is to be distinguished with text encoded in a specific
128 encoding (often locale-specific) and binary data.
129
130 =item $octets
131
132 Either binary data or - more common - a text string encoded in a
133 locale-specific way.
134
135 =back
136
137 =head2 Extension Objects
138
139 Very perl extension is a perl class. A separate perl object is created
140 for each terminal and each extension and passed as the first parameter to
141 hooks. So extensions can use their C<$self> object without having to think
142 about other extensions, with the exception of methods and members that
143 begin with an underscore character C<_>: these are reserved for internal
144 use.
145
146 Although it isn't a C<urxvt::term> object, you can call all methods of the
147 C<urxvt::term> class on this object.
148
149 It has the following methods and data members:
150
151 =over 4
152
153 =item $urxvt_term = $self->{term}
154
155 Returns the C<urxvt::term> object associated with this instance of the
156 extension. This member I<must not> be changed in any way.
157
158 =item $self->enable ($hook_name => $cb, [$hook_name => $cb..])
159
160 Dynamically enable the given hooks (named without the C<on_> prefix) for
161 this extension, replacing any previous hook. This is useful when you want
162 to overwrite time-critical hooks only temporarily.
163
164 =item $self->disable ($hook_name[, $hook_name..])
165
166 Dynamically disable the given hooks.
167
168 =back
169
170 =head2 Hooks
171
172 The following subroutines can be declared in extension files, and will be
173 called whenever the relevant event happens.
174
175 The first argument passed to them is an extension oject as described in
176 the in the C<Extension Objects> section.
177
178 B<All> of these hooks must return a boolean value. If it is true, then the
179 event counts as being I<consumed>, and the invocation of other hooks is
180 skipped, and the relevant action might not be carried out by the C++ code.
181
182 I<< When in doubt, return a false value (preferably C<()>). >>
183
184 =over 4
185
186 =item on_init $term
187
188 Called after a new terminal object has been initialized, but before
189 windows are created or the command gets run. Most methods are unsafe to
190 call or deliver senseless data, as terminal size and other characteristics
191 have not yet been determined. You can safely query and change resources,
192 though.
193
194 =item on_reset $term
195
196 Called after the screen is "reset" for any reason, such as resizing or
197 control sequences. Here is where you can react on changes to size-related
198 variables.
199
200 =item on_start $term
201
202 Called at the very end of initialisation of a new terminal, just before
203 returning to the mainloop.
204
205 =item on_sel_make $term, $eventtime
206
207 Called whenever a selection has been made by the user, but before the
208 selection text is copied, so changes to the beginning, end or type of the
209 selection will be honored.
210
211 Returning a true value aborts selection making by urxvt, in which case you
212 have to make a selection yourself by calling C<< $term->selection_grab >>.
213
214 =item on_sel_grab $term, $eventtime
215
216 Called whenever a selection has been copied, but before the selection is
217 requested from the server.  The selection text can be queried and changed
218 by calling C<< $term->selection >>.
219
220 Returning a true value aborts selection grabbing. It will still be hilighted.
221
222 =item on_sel_extend $term
223
224 Called whenever the user tries to extend the selection (e.g. with a double
225 click) and is either supposed to return false (normal operation), or
226 should extend the selection itelf and return true to suppress the built-in
227 processing.
228
229 See the F<selection> example extension.
230
231 =item on_view_change $term, $offset
232
233 Called whenever the view offset changes, i..e the user or program
234 scrolls. Offset C<0> means display the normal terminal, positive values
235 show this many lines of scrollback.
236
237 =item on_scroll_back $term, $lines, $saved
238
239 Called whenever lines scroll out of the terminal area into the scrollback
240 buffer. C<$lines> is the number of lines scrolled out and may be larger
241 than the scroll back buffer or the terminal.
242
243 It is called before lines are scrolled out (so rows 0 .. min ($lines - 1,
244 $nrow - 1) represent the lines to be scrolled out). C<$saved> is the total
245 number of lines that will be in the scrollback buffer.
246
247 =item on_osc_seq $term, $string
248
249 Called whenever the B<ESC ] 777 ; string ST> command sequence (OSC =
250 operating system command) is processed. Cursor position and other state
251 information is up-to-date when this happens. For interoperability, the
252 string should start with the extension name and a colon, to distinguish
253 it from commands for other extensions, and this might be enforced in the
254 future.
255
256 Be careful not ever to trust (in a security sense) the data you receive,
257 as its source can not easily be controleld (e-mail content, messages from
258 other users on the same system etc.).
259
260 =item on_add_lines $term, $string
261
262 Called whenever text is about to be output, with the text as argument. You
263 can filter/change and output the text yourself by returning a true value
264 and calling C<< $term->scr_add_lines >> yourself. Please note that this
265 might be very slow, however, as your hook is called for B<all> text being
266 output.
267
268 =item on_tt_write $term, $octets
269
270 Called whenever some data is written to the tty/pty and can be used to
271 suppress or filter tty input.
272
273 =item on_line_update $term, $row
274
275 Called whenever a line was updated or changed. Can be used to filter
276 screen output (e.g. underline urls or other useless stuff). Only lines
277 that are being shown will be filtered, and, due to performance reasons,
278 not always immediately.
279
280 The row number is always the topmost row of the line if the line spans
281 multiple rows.
282
283 Please note that, if you change the line, then the hook might get called
284 later with the already-modified line (e.g. if unrelated parts change), so
285 you cannot just toggle rendition bits, but only set them.
286
287 =item on_refresh_begin $term
288
289 Called just before the screen gets redrawn. Can be used for overlay
290 or similar effects by modify terminal contents in refresh_begin, and
291 restoring them in refresh_end. The built-in overlay and selection display
292 code is run after this hook, and takes precedence.
293
294 =item on_refresh_end $term
295
296 Called just after the screen gets redrawn. See C<on_refresh_begin>.
297
298 =item on_keyboard_command $term, $string
299
300 Called whenever the user presses a key combination that has a
301 C<perl:string> action bound to it (see description of the B<keysym>
302 resource in the @@RXVT_NAME@@(1) manpage).
303
304 =item on_focus_in $term
305
306 Called whenever the window gets the keyboard focus, before rxvt-unicode
307 does focus in processing.
308
309 =item on_focus_out $term
310
311 Called wheneever the window loses keyboard focus, before rxvt-unicode does
312 focus out processing.
313
314 =item on_key_press $term, $event, $keysym, $octets
315
316 =item on_key_release $term, $event, $keysym
317
318 =item on_button_press $term, $event
319
320 =item on_button_release $term, $event
321
322 =item on_motion_notify $term, $event
323
324 =item on_map_notify $term, $event
325
326 =item on_unmap_notify $term, $event
327
328 Called whenever the corresponding X event is received for the terminal If
329 the hook returns true, then the even will be ignored by rxvt-unicode.
330
331 The event is a hash with most values as named by Xlib (see the XEvent
332 manpage), with the additional members C<row> and C<col>, which are the row
333 and column under the mouse cursor.
334
335 C<on_key_press> additionally receives the string rxvt-unicode would
336 output, if any, in locale-specific encoding.
337
338 subwindow.
339
340 =back
341
342 =head2 Variables in the C<urxvt> Package
343
344 =over 4
345
346 =item $urxvt::TERM
347
348 The current terminal. This variable stores the current C<urxvt::term>
349 object, whenever a callback/hook is executing.
350
351 =back
352
353 =head2 Functions in the C<urxvt> Package
354
355 =over 4
356
357 =item $term = new urxvt [arg...]
358
359 Creates a new terminal, very similar as if you had started it with
360 C<system $binfile, arg...>. Croaks (and probably outputs an error message)
361 if the new instance couldn't be created.  Returns C<undef> if the new
362 instance didn't initialise perl, and the terminal object otherwise. The
363 C<init> and C<start> hooks will be called during the call.
364
365 =item urxvt::fatal $errormessage
366
367 Fatally aborts execution with the given error message. Avoid at all
368 costs! The only time this is acceptable is when the terminal process
369 starts up.
370
371 =item urxvt::warn $string
372
373 Calls C<rxvt_warn> with the given string which should not include a
374 newline. The module also overwrites the C<warn> builtin with a function
375 that calls this function.
376
377 Using this function has the advantage that its output ends up in the
378 correct place, e.g. on stderr of the connecting urxvtc client.
379
380 =item $is_safe = urxvt::safe
381
382 Returns true when it is safe to do potentially unsafe things, such as
383 evaluating perl code specified by the user. This is true when urxvt was
384 started setuid or setgid.
385
386 =item $time = urxvt::NOW
387
388 Returns the "current time" (as per the event loop).
389
390 =item urxvt::CurrentTime
391
392 =item urxvt::ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
393 Mod3Mask, Mod4Mask, Mod5Mask, Button1Mask, Button2Mask, Button3Mask,
394 Button4Mask, Button5Mask, AnyModifier
395
396 Various constants for use in X calls and event processing.
397
398 =back
399
400 =head2 RENDITION
401
402 Rendition bitsets contain information about colour, font, font styles and
403 similar information for each screen cell.
404
405 The following "macros" deal with changes in rendition sets. You should
406 never just create a bitset, you should always modify an existing one,
407 as they contain important information required for correct operation of
408 rxvt-unicode.
409
410 =over 4
411
412 =item $rend = urxvt::DEFAULT_RSTYLE
413
414 Returns the default rendition, as used when the terminal is starting up or
415 being reset. Useful as a base to start when creating renditions.
416
417 =item $rend = urxvt::OVERLAY_RSTYLE
418
419 Return the rendition mask used for overlays by default.
420
421 =item $rendbit = urxvt::RS_Bold, RS_Italic, RS_Blink, RS_RVid, RS_Uline
422
423 Return the bit that enabled bold, italic, blink, reverse-video and
424 underline, respectively. To enable such a style, just logically OR it into
425 the bitset.
426
427 =item $foreground = urxvt::GET_BASEFG $rend
428
429 =item $background = urxvt::GET_BASEBG $rend
430
431 Return the foreground/background colour index, respectively.
432
433 =item $rend = urxvt::SET_FGCOLOR ($rend, $new_colour)
434
435 =item $rend = urxvt::SET_BGCOLOR ($rend, $new_colour)
436
437 Replace the foreground/background colour in the rendition mask with the
438 specified one.
439
440 =item $value = urxvt::GET_CUSTOM ($rend)
441
442 Return the "custom" value: Every rendition has 5 bits for use by
443 extensions. They can be set and changed as you like and are initially
444 zero.
445
446 =item $rend = urxvt::SET_CUSTOM ($rend, $new_value)
447
448 Change the custom value.
449
450 =back
451
452 =cut
453
454 package urxvt;
455
456 use utf8;
457 use strict;
458 use Carp ();
459 use Scalar::Util ();
460 use List::Util ();
461
462 our $VERSION = 1;
463 our $TERM;
464 our @HOOKNAME;
465 our %HOOKTYPE = map +($HOOKNAME[$_] => $_), 0..$#HOOKNAME;
466 our %OPTION;
467 our $LIBDIR;
468
469 BEGIN {
470    urxvt->bootstrap;
471
472    # overwrite perl's warn
473    *CORE::GLOBAL::warn = sub {
474       my $msg = join "", @_;
475       $msg .= "\n"
476          unless $msg =~ /\n$/;
477       urxvt::warn ($msg);
478    };
479
480    delete $ENV{IFS};
481    delete $ENV{CDPATH};
482    delete $ENV{BASH_ENV};
483    $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin:/opt/sbin";
484 }
485
486 my @hook_count;
487 my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
488
489 sub verbose {
490    my ($level, $msg) = @_;
491    warn "$msg\n" if $level <= $verbosity;
492 }
493
494 my $extension_pkg = "extension0000";
495 my %extension_pkg;
496
497 # load a single script into its own package, once only
498 sub extension_package($) {
499    my ($path) = @_;
500
501    $extension_pkg{$path} ||= do {
502       my $pkg = "urxvt::" . ($extension_pkg++);
503
504       verbose 3, "loading extension '$path' into package '$pkg'";
505
506       open my $fh, "<:raw", $path
507          or die "$path: $!";
508
509       my $source = untaint
510          "package $pkg; use strict; use utf8;\n"
511          . "use base urxvt::term::extension::;\n"
512          . "#line 1 \"$path\"\n{\n"
513          . (do { local $/; <$fh> })
514          . "\n};\n1";
515
516       eval $source
517          or die "$path: $@";
518
519       $pkg
520    }
521 }
522
523 our $retval; # return value for urxvt
524
525 # called by the rxvt core
526 sub invoke {
527    local $TERM = shift;
528    my $htype = shift;
529
530    if ($htype == 0) { # INIT
531       my @dirs = ((split /:/, $TERM->resource ("perl_lib")), "$LIBDIR/perl");
532       
533       my %ext_arg;
534
535       for (map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) {
536          if ($_ eq "default") {
537             $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback);
538          } elsif (/^-(.*)$/) {
539             delete $ext_arg{$1};
540          } elsif (/^([^<]+)<(.*)>$/) {
541             push @{ $ext_arg{$1} }, $2;
542          } else {
543             $ext_arg{$_} ||= [];
544          }
545       }
546
547       while (my ($ext, $argv) = each %ext_arg) {
548          my @files = grep -f $_, map "$_/$ext", @dirs;
549
550          if (@files) {
551             $TERM->register_package (extension_package $files[0], $argv);
552          } else {
553             warn "perl extension '$ext' not found in perl library search path\n";
554          }
555       }
556
557       eval "#line 1 \"--perl-eval resource/argument\"\n" . $TERM->resource ("perl_eval");
558       warn $@ if $@;
559    }
560
561    $retval = undef;
562
563    if (my $cb = $TERM->{_hook}[$htype]) {
564       verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
565          if $verbosity >= 10;
566
567       keys %$cb;
568
569       while (my ($pkg, $cb) = each %$cb) {
570          $retval = eval { $cb->($TERM->{_pkg}{$pkg}, @_) }
571             and last;
572
573          if ($@) {
574             $TERM->ungrab; # better to lose the grab than the session
575             warn $@;
576          }
577       }
578    }
579
580    if ($htype == 1) { # DESTROY
581       if (my $hook = delete $TERM->{_hook}) {
582          for my $htype (0..$#$hook) {
583             $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} }
584                or set_should_invoke $htype, 0;
585          }
586       }
587
588       # clear package objects
589       %$_ = () for values %{ $TERM->{_pkg} };
590
591       # clear package
592       %$TERM = ();
593    }
594
595    $retval
596 }
597
598 # urxvt::term::extension
599
600 package urxvt::term::extension;
601
602 sub enable {
603    my ($self, %hook) = @_;
604    my $pkg = $self->{_pkg};
605
606    while (my ($name, $cb) = each %hook) {
607       my $htype = $HOOKTYPE{uc $name};
608       defined $htype
609          or Carp::croak "unsupported hook type '$name'";
610
611       unless (exists $self->{term}{_hook}[$htype]{$pkg}) {
612          $hook_count[$htype]++
613             or urxvt::set_should_invoke $htype, 1;
614       }
615
616       $self->{term}{_hook}[$htype]{$pkg} = $cb;
617    }
618 }
619
620 sub disable {
621    my ($self, @hook) = @_;
622    my $pkg = $self->{_pkg};
623
624    for my $name (@hook) {
625       my $htype = $HOOKTYPE{uc $name};
626       defined $htype
627          or Carp::croak "unsupported hook type '$name'";
628
629       if (delete $self->{term}{_hook}[$htype]{$pkg}) {
630          --$hook_count[$htype]
631             or urxvt::set_should_invoke $htype, 0;
632       }
633    }
634 }
635
636 our $AUTOLOAD;
637
638 sub AUTOLOAD {
639    $AUTOLOAD =~ /:([^:]+)$/
640       or die "FATAL: \$AUTOLOAD '$AUTOLOAD' unparsable";
641
642    eval qq{
643       sub $AUTOLOAD {
644          my \$proxy = shift;
645          \$proxy->{term}->$1 (\@_)
646       }
647       1
648    } or die "FATAL: unable to compile method forwarder: $@";
649
650    goto &$AUTOLOAD;
651 }
652
653 sub DESTROY {
654    # nop
655 }
656
657 # urxvt::destroy_hook
658
659 sub urxvt::destroy_hook::DESTROY {
660    ${$_[0]}->();
661 }
662
663 sub urxvt::destroy_hook(&) {
664    bless \shift, urxvt::destroy_hook::
665 }
666
667 package urxvt::anyevent;
668
669 =head2 The C<urxvt::anyevent> Class
670
671 The sole purpose of this class is to deliver an interface to the
672 C<AnyEvent> module - any module using it will work inside urxvt without
673 further work. The only exception is that you cannot wait on condition
674 variables, but non-blocking condvar use is ok. What this means is that you
675 cannot use blocking APIs, but the non-blocking variant should work.
676
677 =cut
678
679 our $VERSION = 1;
680
681 $INC{"urxvt/anyevent.pm"} = 1; # mark us as there
682 push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
683
684 sub timer {
685    my ($class, %arg) = @_;
686
687    my $cb = $arg{cb};
688
689    urxvt::timer
690       ->new
691       ->start (urxvt::NOW + $arg{after})
692       ->cb (sub {
693         $_[0]->stop; # need to cancel manually
694         $cb->();
695       })
696 }
697
698 sub io {
699    my ($class, %arg) = @_;
700
701    my $cb = $arg{cb};
702
703    bless [$arg{fh}, urxvt::iow
704              ->new
705              ->fd (fileno $arg{fh})
706              ->events (($arg{poll} =~ /r/ ? 1 : 0)
707                      | ($arg{poll} =~ /w/ ? 2 : 0))
708              ->start
709              ->cb (sub {
710                 $cb->(($_[1] & 1 ? 'r' : '')
711                     . ($_[1] & 2 ? 'w' : ''));
712              })],
713          urxvt::anyevent::
714 }
715
716 sub DESTROY {
717    $_[0][1]->stop;
718 }
719
720 sub condvar {
721    bless \my $flag, urxvt::anyevent::condvar::
722 }
723
724 sub urxvt::anyevent::condvar::broadcast {
725    ${$_[0]}++;
726 }
727
728 sub urxvt::anyevent::condvar::wait {
729    unless (${$_[0]}) {
730       Carp::croak "AnyEvent->condvar blocking wait unsupported in urxvt, use a non-blocking API";
731    }
732 }
733
734 package urxvt::term;
735
736 =head2 The C<urxvt::term> Class
737
738 =over 4
739
740 =cut
741
742 # find on_xxx subs in the package and register them
743 # as hooks
744 sub register_package {
745    my ($self, $pkg, $argv) = @_;
746
747    my $proxy = bless {
748       _pkg => $pkg,
749       argv => $argv,
750    }, $pkg;
751    Scalar::Util::weaken ($proxy->{term} = $self);
752
753    $self->{_pkg}{$pkg} = $proxy;
754
755    for my $name (@HOOKNAME) {
756       if (my $ref = $pkg->can ("on_" . lc $name)) {
757          $proxy->enable ($name => $ref);
758       }
759    }
760 }
761
762 =item $term->destroy
763
764 Destroy the terminal object (close the window, free resources etc.).
765
766 =item $isset = $term->option ($optval[, $set])
767
768 Returns true if the option specified by C<$optval> is enabled, and
769 optionally change it. All option values are stored by name in the hash
770 C<%urxvt::OPTION>. Options not enabled in this binary are not in the hash.
771
772 Here is a a likely non-exhaustive list of option names, please see the
773 source file F</src/optinc.h> to see the actual list:
774
775  borderLess console cursorBlink cursorUnderline hold iconic insecure
776  intensityStyles jumpScroll loginShell mapAlert meta8 mouseWheelScrollPage
777  pastableTabs pointerBlank reverseVideo scrollBar scrollBar_floating
778  scrollBar_right scrollTtyKeypress scrollTtyOutput scrollWithBuffer
779  secondaryScreen secondaryScroll skipBuiltinGlyphs transparent
780  tripleclickwords utmpInhibit visualBell
781
782 =item $value = $term->resource ($name[, $newval])
783
784 Returns the current resource value associated with a given name and
785 optionally sets a new value. Setting values is most useful in the C<init>
786 hook. Unset resources are returned and accepted as C<undef>.
787
788 The new value must be properly encoded to a suitable character encoding
789 before passing it to this method. Similarly, the returned value may need
790 to be converted from the used encoding to text.
791
792 Resource names are as defined in F<src/rsinc.h>. Colours can be specified
793 as resource names of the form C<< color+<index> >>, e.g. C<color+5>. (will
794 likely change).
795
796 Please note that resource strings will currently only be freed when the
797 terminal is destroyed, so changing options frequently will eat memory.
798
799 Here is a a likely non-exhaustive list of resource names, not all of which
800 are supported in every build, please see the source file F</src/rsinc.h>
801 to see the actual list:
802
803   answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
804   borderLess color cursorBlink cursorUnderline cutchars delete_key
805   display_name embed ext_bwidth fade font geometry hold iconName
806   imFont imLocale inputMethod insecure int_bwidth intensityStyles
807   italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 modifier
808   mouseWheelScrollPage name pastableTabs path perl_eval perl_ext_1 perl_ext_2
809   perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd
810   reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating
811   scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput
812   scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle
813   shade term_name title transparent transparent_all tripleclickwords
814   utmpInhibit visualBell
815
816 =cut
817
818 sub resource($$;$) {
819    my ($self, $name) = (shift, shift);
820    unshift @_, $self, $name, ($name =~ s/\s*\+\s*(\d+)$// ? $1 : 0);
821    &urxvt::term::_resource
822 }
823
824 =item $success = $term->parse_keysym ($keysym_spec, $command_string)
825
826 Adds a keymap translation exactly as specified via a resource. See the
827 C<keysym> resource in the @@RXVT_NAME@@(1) manpage.
828
829 =item $rend = $term->rstyle ([$new_rstyle])
830
831 Return and optionally change the current rendition. Text that is output by
832 the terminal application will use this style.
833
834 =item ($row, $col) = $term->screen_cur ([$row, $col])
835
836 Return the current coordinates of the text cursor position and optionally
837 set it (which is usually bad as applications don't expect that).
838
839 =item ($row, $col) = $term->selection_mark ([$row, $col])
840
841 =item ($row, $col) = $term->selection_beg ([$row, $col])
842
843 =item ($row, $col) = $term->selection_end ([$row, $col])
844
845 Return the current values of the selection mark, begin or end positions,
846 and optionally set them to new values.
847
848 =item $success = $term->selection_grab ($eventtime)
849
850 Try to request the primary selection from the server (for example, as set
851 by the next method).
852
853 =item $oldtext = $term->selection ([$newtext])
854
855 Return the current selection text and optionally replace it by C<$newtext>.
856
857 =item $term->overlay_simple ($x, $y, $text)
858
859 Create a simple multi-line overlay box. See the next method for details.
860
861 =cut
862
863 sub overlay_simple {
864    my ($self, $x, $y, $text) = @_;
865
866    my @lines = split /\n/, $text;
867
868    my $w = List::Util::max map $self->strwidth ($_), @lines;
869
870    my $overlay = $self->overlay ($x, $y, $w, scalar @lines);
871    $overlay->set (0, $_, $lines[$_]) for 0.. $#lines;
872
873    $overlay
874 }
875
876 =item $term->overlay ($x, $y, $width, $height[, $rstyle[, $border]])
877
878 Create a new (empty) overlay at the given position with the given
879 width/height. C<$rstyle> defines the initial rendition style
880 (default: C<OVERLAY_RSTYLE>).
881
882 If C<$border> is C<2> (default), then a decorative border will be put
883 around the box.
884
885 If either C<$x> or C<$y> is negative, then this is counted from the
886 right/bottom side, respectively.
887
888 This method returns an urxvt::overlay object. The overlay will be visible
889 as long as the perl object is referenced.
890
891 The methods currently supported on C<urxvt::overlay> objects are:
892
893 =over 4
894
895 =item $overlay->set ($x, $y, $text, $rend)
896
897 Similar to C<< $term->ROW_t >> and C<< $term->ROW_r >> in that it puts
898 text in rxvt-unicode's special encoding and an array of rendition values
899 at a specific position inside the overlay.
900
901 =item $overlay->hide
902
903 If visible, hide the overlay, but do not destroy it.
904
905 =item $overlay->show
906
907 If hidden, display the overlay again.
908
909 =back
910
911 =item $popup = $term->popup ($event)
912
913 Creates a new C<urxvt::popup> object that implements a popup menu. The
914 C<$event> I<must> be the event causing the menu to pop up (a button event,
915 currently).
916
917 =cut
918
919 sub popup {
920    my ($self, $event) = @_;
921
922    $self->grab ($event->{time}, 1)
923       or return;
924
925    my $popup = bless {
926       term  => $self,
927       event => $event,
928    }, urxvt::popup::;
929
930    Scalar::Util::weaken $popup->{term};
931
932    $self->{_destroy}{$popup} = urxvt::destroy_hook { $popup->{popup}->destroy };
933    Scalar::Util::weaken $self->{_destroy}{$popup};
934
935    $popup
936 }
937
938 =item $cellwidth = $term->strwidth ($string)
939
940 Returns the number of screen-cells this string would need. Correctly
941 accounts for wide and combining characters.
942
943 =item $octets = $term->locale_encode ($string)
944
945 Convert the given text string into the corresponding locale encoding.
946
947 =item $string = $term->locale_decode ($octets)
948
949 Convert the given locale-encoded octets into a perl string.
950
951 =item $term->scr_xor_span ($beg_row, $beg_col, $end_row, $end_col[, $rstyle])
952
953 XORs the rendition values in the given span with the provided value
954 (default: C<RS_RVid>). Useful in refresh hooks to provide effects similar
955 to the selection.
956
957 =item $term->scr_xor_rect ($beg_row, $beg_col, $end_row, $end_col[, $rstyle1[, $rstyle2]])
958
959 Similar to C<scr_xor_span>, but xors a rectangle instead. Trailing
960 whitespace will additionally be xored with the C<$rstyle2>, which defaults
961 to C<RS_RVid | RS_Uline>, which removes reverse video again and underlines
962 it instead.
963
964 =item $term->scr_bell
965
966 Ring the bell!
967
968 =item $term->scr_add_lines ($string)
969
970 Write the given text string to the screen, as if output by the application
971 running inside the terminal. It may not contain command sequences (escape
972 codes), but is free to use line feeds, carriage returns and tabs. The
973 string is a normal text string, not in locale-dependent encoding.
974
975 Normally its not a good idea to use this function, as programs might be
976 confused by changes in cursor position or scrolling. Its useful inside a
977 C<on_add_lines> hook, though.
978
979 =item $term->cmd_parse ($octets)
980
981 Similar to C<scr_add_lines>, but the argument must be in the
982 locale-specific encoding of the terminal and can contain command sequences
983 (escape codes) that will be interpreted.
984
985 =item $term->tt_write ($octets)
986
987 Write the octets given in C<$data> to the tty (i.e. as program input). To
988 pass characters instead of octets, you should convert your strings first
989 to the locale-specific encoding using C<< $term->locale_encode >>.
990
991 =item $old_events = $term->pty_ev_events ([$new_events])
992
993 Replaces the event mask of the pty watcher by the given event mask. Can
994 be used to suppress input and output handling to the pty/tty. See the
995 description of C<< urxvt::timer->events >>. Make sure to always restore
996 the previous value.
997
998 =item $windowid = $term->parent
999
1000 Return the window id of the toplevel window.
1001
1002 =item $windowid = $term->vt
1003
1004 Return the window id of the terminal window.
1005
1006 =item $window_width = $term->width
1007
1008 =item $window_height = $term->height
1009
1010 =item $font_width = $term->fwidth
1011
1012 =item $font_height = $term->fheight
1013
1014 =item $font_ascent = $term->fbase
1015
1016 =item $terminal_rows = $term->nrow
1017
1018 =item $terminal_columns = $term->ncol
1019
1020 =item $has_focus = $term->focus
1021
1022 =item $is_mapped = $term->mapped
1023
1024 =item $max_scrollback = $term->saveLines
1025
1026 =item $nrow_plus_saveLines = $term->total_rows
1027
1028 =item $lines_in_scrollback = $term->nsaved
1029
1030 Return various integers describing terminal characteristics.
1031
1032 =item $lc_ctype = $term->locale
1033
1034 Returns the LC_CTYPE category string used by this rxvt-unicode.
1035
1036 =item $x_display = $term->display_id
1037
1038 Return the DISPLAY used by rxvt-unicode.
1039
1040 =item $modifiermask = $term->ModLevel3Mask
1041
1042 =item $modifiermask = $term->ModMetaMask
1043
1044 =item $modifiermask = $term->ModNumLockMask
1045
1046 Return the modifier masks corresponding to the "ISO Level 3 Shift" (often
1047 AltGr), the meta key (often Alt) and the num lock key, if applicable.
1048
1049 =item $view_start = $term->view_start ([$newvalue])
1050
1051 Returns the negative row number of the topmost line. Minimum value is
1052 C<0>, which displays the normal terminal contents. Larger values scroll
1053 this many lines into the scrollback buffer.
1054
1055 =item $term->want_refresh
1056
1057 Requests a screen refresh. At the next opportunity, rxvt-unicode will
1058 compare the on-screen display with its stored representation. If they
1059 differ, it redraws the differences.
1060
1061 Used after changing terminal contents to display them.
1062
1063 =item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
1064
1065 Returns the text of the entire row with number C<$row_number>. Row C<0>
1066 is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
1067 terminal line. The scrollback buffer starts at line C<-1> and extends to
1068 line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
1069 is requested.
1070
1071 If C<$new_text> is specified, it will replace characters in the current
1072 line, starting at column C<$start_col> (default C<0>), which is useful
1073 to replace only parts of a line. The font index in the rendition will
1074 automatically be updated.
1075
1076 C<$text> is in a special encoding: tabs and wide characters that use more
1077 than one cell when displayed are padded with urxvt::NOCHAR characters
1078 (C<chr 65535>). Characters with combining characters and other characters
1079 that do not fit into the normal tetx encoding will be replaced with
1080 characters in the private use area.
1081
1082 You have to obey this encoding when changing text. The advantage is
1083 that C<substr> and similar functions work on screen cells and not on
1084 characters.
1085
1086 The methods C<< $term->special_encode >> and C<< $term->special_decode >>
1087 can be used to convert normal strings into this encoding and vice versa.
1088
1089 =item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
1090
1091 Like C<< $term->ROW_t >>, but returns an arrayref with rendition
1092 bitsets. Rendition bitsets contain information about colour, font, font
1093 styles and similar information. See also C<< $term->ROW_t >>.
1094
1095 When setting rendition, the font mask will be ignored.
1096
1097 See the section on RENDITION, above.
1098
1099 =item $length = $term->ROW_l ($row_number[, $new_length])
1100
1101 Returns the number of screen cells that are in use ("the line
1102 length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
1103 line is joined with the following one.
1104
1105 =item $bool = $term->is_longer ($row_number)
1106
1107 Returns true if the row is part of a multiple-row logical "line" (i.e.
1108 joined with the following row), which means all characters are in use
1109 and it is continued on the next row (and possibly a continuation of the
1110 previous row(s)).
1111
1112 =item $line = $term->line ($row_number)
1113
1114 Create and return a new C<urxvt::line> object that stores information
1115 about the logical line that row C<$row_number> is part of. It supports the
1116 following methods:
1117
1118 =over 4
1119
1120 =item $text = $line->t ([$new_text])
1121
1122 Returns or replaces the full text of the line, similar to C<ROW_t>
1123
1124 =item $rend = $line->r ([$new_rend])
1125
1126 Returns or replaces the full rendition array of the line, similar to C<ROW_r>
1127
1128 =item $length = $line->l
1129
1130 Returns the length of the line in cells, similar to C<ROW_l>.
1131
1132 =item $rownum = $line->beg
1133
1134 =item $rownum = $line->end
1135
1136 Return the row number of the first/last row of the line, respectively.
1137
1138 =item $offset = $line->offset_of ($row, $col)
1139
1140 Returns the character offset of the given row|col pair within the logical
1141 line.
1142
1143 =item ($row, $col) = $line->coord_of ($offset)
1144
1145 Translates a string offset into terminal coordinates again.
1146
1147 =back
1148
1149 =cut
1150
1151 sub line {
1152    my ($self, $row) = @_;
1153
1154    my $maxrow = $self->nrow - 1;
1155
1156    my ($beg, $end) = ($row, $row);
1157
1158    --$beg while $self->ROW_is_longer ($beg - 1);
1159    ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
1160
1161    bless {
1162       term => $self,
1163       beg  => $beg,
1164       end  => $end,
1165       ncol => $self->ncol,
1166       len  => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
1167    }, urxvt::line::
1168 }
1169
1170 sub urxvt::line::t {
1171    my ($self) = @_;
1172
1173    if (@_ > 1)
1174      {
1175        $self->{term}->ROW_t ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1176           for $self->{beg} .. $self->{end};
1177      }
1178
1179    defined wantarray &&
1180       substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
1181              0, $self->{len}
1182 }
1183
1184 sub urxvt::line::r {
1185    my ($self) = @_;
1186
1187    if (@_ > 1)
1188      {
1189        $self->{term}->ROW_r ($_, $_[1], 0, ($_ - $self->{beg}) * $self->{ncol}, $self->{ncol})
1190           for $self->{beg} .. $self->{end};
1191      }
1192
1193    if (defined wantarray) {
1194       my $rend = [
1195          map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
1196       ];
1197       $#$rend = $self->{len} - 1;
1198       return $rend;
1199    }
1200
1201    ()
1202 }
1203
1204 sub urxvt::line::beg { $_[0]{beg} }
1205 sub urxvt::line::end { $_[0]{end} }
1206 sub urxvt::line::l   { $_[0]{len} }
1207
1208 sub urxvt::line::offset_of {
1209    my ($self, $row, $col) = @_;
1210
1211    ($row - $self->{beg}) * $self->{ncol} + $col
1212 }
1213
1214 sub urxvt::line::coord_of {
1215    my ($self, $offset) = @_;
1216
1217    use integer;
1218
1219    (
1220       $offset / $self->{ncol} + $self->{beg},
1221       $offset % $self->{ncol}
1222    )
1223 }
1224
1225 =item $text = $term->special_encode $string
1226
1227 Converts a perl string into the special encoding used by rxvt-unicode,
1228 where one character corresponds to one screen cell. See
1229 C<< $term->ROW_t >> for details.
1230
1231 =item $string = $term->special_decode $text
1232
1233 Converts rxvt-unicodes text reprsentation into a perl string. See
1234 C<< $term->ROW_t >> for details.
1235
1236 =item $success = $term->grab_button ($button, $modifiermask)
1237
1238 Registers a synchronous button grab. See the XGrabButton manpage.
1239
1240 =item $success = $term->grab ($eventtime[, $sync])
1241
1242 Calls XGrabPointer and XGrabKeyboard in asynchronous (default) or
1243 synchronous (C<$sync> is true). Also remembers the grab timestampe.
1244
1245 =item $term->allow_events_async
1246
1247 Calls XAllowEvents with AsyncBoth for the most recent grab.
1248
1249 =item $term->allow_events_sync
1250
1251 Calls XAllowEvents with SyncBoth for the most recent grab.
1252
1253 =item $term->allow_events_replay
1254
1255 Calls XAllowEvents with both ReplayPointer and ReplayKeyboard for the most
1256 recent grab.
1257
1258 =item $term->ungrab
1259
1260 Calls XUngrab for the most recent grab. Is called automatically on
1261 evaluation errors, as it is better to lose the grab in the error case as
1262 the session.
1263
1264 =back
1265
1266 =cut
1267
1268 package urxvt::popup;
1269
1270 =head2 The C<urxvt::popup> Class
1271
1272 =over 4
1273
1274 =cut
1275
1276 sub add_item {
1277    my ($self, $item) = @_;
1278
1279    $item->{rend}{normal} = "\x1b[0;30;47m" unless exists $item->{rend}{normal};
1280    $item->{rend}{hover}  = "\x1b[0;30;46m" unless exists $item->{rend}{hover};
1281    $item->{rend}{active} = "\x1b[m"        unless exists $item->{rend}{active};
1282
1283    $item->{render} ||= sub { $_[0]{text} };
1284
1285    push @{ $self->{item} }, $item;
1286 }
1287
1288 sub add_separator {
1289    my ($self, $sep) = @_;
1290
1291    $sep ||= "=";
1292
1293    $self->add_item ({
1294       rend => { normal => "\x1b[0;30;47m", hover => "\x1b[0;30;47m", active => "\x1b[0;30;47m" },
1295       text => "",
1296       render => sub { $sep x $self->{term}->ncol },
1297       activate => sub { },
1298    });
1299 }
1300
1301 sub add_title {
1302    my ($self, $title) = @_;
1303
1304    $self->add_item ({
1305       rend => { normal => "\x1b[38;5;11;44m", hover => "\x1b[38;5;11;44m", active => "\x1b[38;5;11;44m" },
1306       text => $title,
1307       activate => sub { },
1308    });
1309 }
1310
1311 sub add_button {
1312    my ($self, $text, $cb) = @_;
1313
1314    $self->add_item ({ type => "button", text => $text, activate => $cb});
1315 }
1316
1317 sub add_toggle {
1318    my ($self, $text, $cb, $value) = @_;
1319
1320    my $item; $item = {
1321       type => "button",
1322       text => "  $text",
1323       value => $value,
1324       render => sub { ($_[0]{value} ? "* " : "  ") . $text },
1325       activate => sub { $cb->($_[0]{value} = !$_[0]{value}); },
1326    };
1327
1328    $self->add_item ($item);
1329 }
1330
1331 sub show {
1332    my ($self) = @_;
1333
1334    local $urxvt::popup::self = $self;
1335
1336    local $ENV{LC_ALL} = $self->{term}->locale;
1337
1338    urxvt->new ("--perl-lib" => "", "--perl-ext-common" => "", "-pty-fd" => -1, "-sl" => 0, "-b" => 0,
1339                "--transient-for" => $self->{term}->parent,
1340                "-display" => $self->{term}->display_id,
1341                "-pe" => "urxvt-popup")
1342       or die "unable to create popup window\n";
1343 }
1344
1345 sub DESTROY {
1346    my ($self) = @_;
1347
1348    delete $self->{term}{_destroy}{$self};
1349    $self->{term}->ungrab;
1350 }
1351
1352 =head2 The C<urxvt::timer> Class
1353
1354 This class implements timer watchers/events. Time is represented as a
1355 fractional number of seconds since the epoch. Example:
1356
1357    $term->{overlay} = $term->overlay (-1, 0, 8, 1, urxvt::OVERLAY_RSTYLE, 0);
1358    $term->{timer} = urxvt::timer
1359                     ->new
1360                     ->interval (1)
1361                     ->cb (sub {
1362                        $term->{overlay}->set (0, 0,
1363                           sprintf "%2d:%02d:%02d", (localtime urxvt::NOW)[2,1,0]);
1364                     });                                                                                                                                      
1365
1366 =over 4
1367
1368 =item $timer = new urxvt::timer
1369
1370 Create a new timer object in started state. It is scheduled to fire
1371 immediately.
1372
1373 =item $timer = $timer->cb (sub { my ($timer) = @_; ... })
1374
1375 Set the callback to be called when the timer triggers.
1376
1377 =item $tstamp = $timer->at
1378
1379 Return the time this watcher will fire next.
1380
1381 =item $timer = $timer->set ($tstamp)
1382
1383 Set the time the event is generated to $tstamp.
1384
1385 =item $timer = $timer->interval ($interval)
1386
1387 Normally (and when C<$interval> is C<0>), the timer will automatically
1388 stop after it has fired once. If C<$interval> is non-zero, then the timer
1389 is automatically rescheduled at the given intervals.
1390
1391 =item $timer = $timer->start
1392
1393 Start the timer.
1394
1395 =item $timer = $timer->start ($tstamp)
1396
1397 Set the event trigger time to C<$tstamp> and start the timer.
1398
1399 =item $timer = $timer->stop
1400
1401 Stop the timer.
1402
1403 =back
1404
1405 =head2 The C<urxvt::iow> Class
1406
1407 This class implements io watchers/events. Example:
1408
1409   $term->{socket} = ...
1410   $term->{iow} = urxvt::iow
1411                  ->new
1412                  ->fd (fileno $term->{socket})
1413                  ->events (urxvt::EVENT_READ)
1414                  ->start
1415                  ->cb (sub {
1416                    my ($iow, $revents) = @_;
1417                    # $revents must be 1 here, no need to check
1418                    sysread $term->{socket}, my $buf, 8192
1419                       or end-of-file;
1420                  });
1421
1422
1423 =over 4
1424
1425 =item $iow = new urxvt::iow
1426
1427 Create a new io watcher object in stopped state.
1428
1429 =item $iow = $iow->cb (sub { my ($iow, $reventmask) = @_; ... })
1430
1431 Set the callback to be called when io events are triggered. C<$reventmask>
1432 is a bitset as described in the C<events> method.
1433
1434 =item $iow = $iow->fd ($fd)
1435
1436 Set the filedescriptor (not handle) to watch.
1437
1438 =item $iow = $iow->events ($eventmask)
1439
1440 Set the event mask to watch. The only allowed values are
1441 C<urxvt::EVENT_READ> and C<urxvt::EVENT_WRITE>, which might be ORed
1442 together, or C<urxvt::EVENT_NONE>.
1443
1444 =item $iow = $iow->start
1445
1446 Start watching for requested events on the given handle.
1447
1448 =item $iow = $iow->stop
1449
1450 Stop watching for events on the given filehandle.
1451
1452 =back
1453
1454 =head1 ENVIRONMENT
1455
1456 =head2 URXVT_PERL_VERBOSITY
1457
1458 This variable controls the verbosity level of the perl extension. Higher
1459 numbers indicate more verbose output.
1460
1461 =over 4
1462
1463 =item == 0 - fatal messages
1464
1465 =item >= 3 - script loading and management
1466
1467 =item >=10 - all events received
1468
1469 =back
1470
1471 =head1 AUTHOR
1472
1473  Marc Lehmann <pcg@goof.com>
1474  http://software.schmorp.de/pkg/rxvt-unicode
1475
1476 =cut
1477
1478 1