ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
Revision: 1.74
Committed: Tue Jan 10 04:26:54 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.73: +9 -6 lines
Log Message:
*** empty log message ***

File Contents

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