ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/urxvt.pm
(Generate patch)

Comparing rxvt-unicode/src/urxvt.pm (file contents):
Revision 1.7 by root, Mon Jan 2 19:05:05 2006 UTC vs.
Revision 1.16 by root, Tue Jan 3 01:41:06 2006 UTC

1=head1 NAME 1=head1 NAME
2 2
3rxvtperl - rxvt-unicode's embedded perl interpreter 3@@RXVT_NAME@@perl - rxvt-unicode's embedded perl interpreter
4 4
5=head1 SYNOPSIS 5=head1 SYNOPSIS
6 6
7* Put your scripts into F<@@RXVT_LIBDIR@@/urxvt/perl-ext/>, they will be loaded automatically. 7 # create a file grab_test in $HOME:
8
9* Scripts are evaluated in a 'use strict' and 'use utf8' environment, and
10thus must be encoded as UTF-8.
11 8
12 sub on_sel_grab { 9 sub on_sel_grab {
13 warn "you selected ", $_[0]->selection; 10 warn "you selected ", $_[0]->selection;
14 () 11 ()
15 } 12 }
16 13
17 1 14 # start a @@RXVT_NAME@@ using it:
15
16 @@RXVT_NAME@@ --perl-lib $HOME -pe grab_test
18 17
19=head1 DESCRIPTION 18=head1 DESCRIPTION
20 19
21On startup, @@RXVT_NAME@@ will scan F<@@RXVT_LIBDIR@@/urxvt/perl-ext/> 20Everytime a terminal object gets created, scripts specified via the
22for files and will load them. Everytime a terminal object gets created, 21C<perl> resource are loaded and associated with it.
23the directory specified by the C<perl-lib> resource will be additionally 22
24scanned. 23Scripts are compiled in a 'use strict' and 'use utf8' environment, and
24thus must be encoded as UTF-8.
25 25
26Each script will only ever be loaded once, even in @@RXVT_NAME@@d, where 26Each script will only ever be loaded once, even in @@RXVT_NAME@@d, where
27scripts will be shared for all terminals. 27scripts will be shared (but not enabled) for all terminals.
28 28
29Hooks in scripts specified by C<perl-lib> will only be called for the 29=head1 PACKAGED EXTENSIONS
30terminals created with that specific option value. 30
31This section describes the extensiosn delivered with this version. You can
32find them in F<@@RXVT_LIBDIR@@/urxvt/perl/>.
33
34You can activate them like this:
35
36 @@RXVT_NAME@@ -pe <extensionname>
37
38=over 4
39
40=item selection
41
42Miscellaneous selection modifications.
43
44=over 4
45
46=item rot13
47
48Rot-13 the selection when activated. Used via keyboard trigger:
49
50 URxvt.keysym.C-M-r: perl:selection:rot13
51
52=back
53
54=item digital-clock
55
56Displays a very simple digital clock in the upper right corner of the
57window. Illustrates overwriting the refresh callbacks to create your own
58overlays or changes.
59
60=item simple-overlay-clock
61
62Displays a digital clock using the built-in overlay (colorful, useless).
63
64=back
31 65
32=head2 General API Considerations 66=head2 General API Considerations
33 67
34All objects (such as terminals, time watchers etc.) are typical 68All objects (such as terminals, time watchers etc.) are typical
35reference-to-hash objects. The hash can be used to store anything you 69reference-to-hash objects. The hash can be used to store anything you
126code is run after this hook, and takes precedence. 160code is run after this hook, and takes precedence.
127 161
128=item on_refresh_end $term 162=item on_refresh_end $term
129 163
130Called just after the screen gets redrawn. See C<on_refresh_begin>. 164Called just after the screen gets redrawn. See C<on_refresh_begin>.
165
166=item on_keyboard_command $term, $string
167
168Called whenever the user presses a key combination that has a
169C<perl:string> action bound to it (see description of the B<keysym>
170resource in the @@RXVT_NAME@@(1) manpage).
131 171
132=back 172=back
133 173
134=head2 Functions in the C<urxvt> Package 174=head2 Functions in the C<urxvt> Package
135 175
174 unless $msg =~ /\n$/; 214 unless $msg =~ /\n$/;
175 urxvt::warn ($msg); 215 urxvt::warn ($msg);
176 }; 216 };
177} 217}
178 218
219my @hook_count;
179my $verbosity = $ENV{URXVT_PERL_VERBOSITY}; 220my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
180 221
181sub verbose { 222sub verbose {
182 my ($level, $msg) = @_; 223 my ($level, $msg) = @_;
183 warn "$msg\n" if $level < $verbosity; 224 warn "$msg\n" if $level <= $verbosity;
184}
185
186my %hook_global;
187my @hook_count;
188
189# called by the rxvt core
190sub invoke {
191 local $term = shift;
192 my $htype = shift;
193
194 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $term, @_) . ")"
195 if $verbosity >= 10;
196
197 for my $cb ($hook_global{_hook}[$htype], $term->{_hook}[$htype]) {
198 $cb or next;
199
200 while (my ($k, $v) = each %$cb) {
201 return 1 if $v->($term, @_);
202 }
203 }
204
205 0
206} 225}
207 226
208# find on_xxx subs in the package and register them 227# find on_xxx subs in the package and register them
209# as hooks 228# as hooks
210sub register_package($) { 229sub register_package($) {
228# load a single script into its own package, once only 247# load a single script into its own package, once only
229sub script_package($) { 248sub script_package($) {
230 my ($path) = @_; 249 my ($path) = @_;
231 250
232 $script_pkg{$path} ||= do { 251 $script_pkg{$path} ||= do {
233 my $pkg = $script_pkg++; 252 my $pkg = "urxvt::" . ($script_pkg++);
253
234 verbose 3, "loading script '$path' into package '$pkg'"; 254 verbose 3, "loading script '$path' into package '$pkg'";
235 255
236 open my $fh, "<:raw", $path 256 open my $fh, "<:raw", $path
237 or die "$path: $!"; 257 or die "$path: $!";
238 258
239 eval "package $pkg; use strict; use utf8;\n" 259 my $source = "package $pkg; use strict; use utf8;\n"
240 . "#line 1 \"$path\"\n" 260 . "#line 1 \"$path\"\n{\n"
241 . do { local $/; <$fh> } 261 . (do { local $/; <$fh> })
262 . "\n};\n1";
263
242 or die "$path: $@"; 264 eval $source or die "$path: $@";
243 265
244 $pkg 266 $pkg
245 } 267 }
246} 268}
247 269
248sub load_scripts($) { 270# called by the rxvt core
249 my ($dir) = @_; 271sub invoke {
272 local $term = shift;
273 my $htype = shift;
250 274
251 verbose 3, "loading scripts from '$dir'"; 275 if ($htype == 0) { # INIT
276 my @dirs = ((split /:/, $term->resource ("perl_lib")), "$LIBDIR/perl");
252 277
278 for my $ext (split /:/, $term->resource ("perl_ext")) {
279 my @files = grep -f $_, map "$_/$ext", @dirs;
280
281 if (@files) {
253 register_package script_package $_ 282 register_package script_package $files[0];
254 for grep -f $_, 283 } else {
255 <$dir/*>; 284 warn "perl extension '$ext' not found in perl library search path\n";
256} 285 }
286 }
257 287
258sub on_init { 288 } elsif ($htype == 1) { # DESTROY
259 my ($term) = @_;
260
261 my $libdir = $term->resource ("perl_lib");
262
263 load_scripts $libdir
264 if defined $libdir;
265}
266
267sub on_destroy {
268 my ($term) = @_;
269
270 my $hook = $term->{_hook} 289 if (my $hook = $term->{_hook}) {
290 for my $htype (0..$#$hook) {
291 $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} }
292 or set_should_invoke $htype, 0;
293 }
294 }
295 }
296
297 my $cb = $term->{_hook}[$htype]
271 or return; 298 or return;
272 299
273 for my $htype (0..$#$hook) { 300 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $term, @_) . ")"
274 $hook_count[$htype] -= scalar keys %{ $hook->[$htype] || {} } 301 if $verbosity >= 10;
275 or set_should_invoke $htype, 0; 302
303 while (my ($k, $v) = each %$cb) {
304 return 1 if $v->($term, @_);
276 } 305 }
277}
278 306
279{ 307 0
280 local $term = \%hook_global;
281
282 register_package __PACKAGE__;
283 load_scripts "$LIBDIR/perl-ext";
284} 308}
285 309
286=back 310=back
287 311
288=head2 The C<urxvt::term> Class 312=head2 The C<urxvt::term> Class
312 336
313 answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont 337 answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
314 borderLess color cursorBlink cursorUnderline cutchars delete_key 338 borderLess color cursorBlink cursorUnderline cutchars delete_key
315 display_name embed ext_bwidth fade font geometry hold iconName 339 display_name embed ext_bwidth fade font geometry hold iconName
316 imFont imLocale inputMethod insecure int_bwidth intensityStyles 340 imFont imLocale inputMethod insecure int_bwidth intensityStyles
317 italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 341 italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 modifier
318 modifier mouseWheelScrollPage name pastableTabs path perl perl_eval 342 mouseWheelScrollPage name pastableTabs path perl_eval perl_ext
319 perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd 343 perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd
320 reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating 344 reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating
321 scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput 345 scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput
322 scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle 346 scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle
323 shade term_name title transparent transparent_all tripleclickwords 347 shade term_name title transparent transparent_all tripleclickwords
403Convert the given locale-encoded octets into a perl string. 427Convert the given locale-encoded octets into a perl string.
404 428
405=item $term->tt_write ($octets) 429=item $term->tt_write ($octets)
406 430
407Write the octets given in C<$data> to the tty (i.e. as program input). To 431Write the octets given in C<$data> to the tty (i.e. as program input). To
408pass characters instead of octets, you should convetr you strings first to 432pass characters instead of octets, you should convert your strings first
409the locale-specific encoding using C<< $term->locale_encode >>. 433to the locale-specific encoding using C<< $term->locale_encode >>.
410 434
435=item $nrow = $term->nrow
436
437=item $ncol = $term->ncol
438
439Return the number of rows/columns of the terminal window (i.e. as
440specified by C<-geometry>, excluding any scrollback).
441
442=item $nsaved = $term->nsaved
443
444Returns the number of lines in the scrollback buffer.
445
446=item $view_start = $term->view_start ([$newvalue])
447
448Returns the negative row number of the topmost line. Minimum value is
449C<0>, which displays the normal terminal contents. Larger values scroll
450this many lines into the scrollback buffer.
451
452=item $term->want_refresh
453
454Requests a screen refresh. At the next opportunity, rxvt-unicode will
455compare the on-screen display with its stored representation. If they
456differ, it redraws the differences.
457
458Used after changing terminal contents to display them.
459
460=item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
461
462Returns the text of the entire row with number C<$row_number>. Row C<0>
463is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
464terminal line. The scrollback buffer starts at line C<-1> and extends to
465line C<< -$term->nsaved >>.
466
467If C<$new_text> is specified, it will replace characters in the current
468line, starting at column C<$start_col> (default C<0>), which is useful
469to replace only parts of a line. The font iindex in the rendition will
470automatically be updated.
471
472C<$text> is in a special encoding: tabs and wide characters that use more
473than one cell when displayed are padded with urxvt::NOCHAR characters
474(C<chr 65535>). Characters with combining characters and other characters
475that do not fit into the normal tetx encoding will be replaced with
476characters in the private use area.
477
478You have to obey this encoding when changing text. The advantage is
479that C<substr> and similar functions work on screen cells and not on
480characters.
481
482The methods C<< $term->special_encode >> and C<< $term->special_decode >>
483can be used to convert normal strings into this encoding and vice versa.
484
485=item $rend = $term->ROW_r ($row_number[, $new_rend[, $start_col]])
486
487Like C<< $term->ROW_t >>, but returns an arrayref with rendition
488bitsets. Rendition bitsets contain information about colour, font, font
489styles and similar information. See also C<< $term->ROW_t >>.
490
491When setting rendition, the font mask will be ignored.
492
493See the section on RENDITION, below.
494
495=item $length = $term->ROW_l ($row_number[, $new_length])
496
497Returns the number of screen cells that are in use ("the line length"). If
498it is C<-1>, then the line is part of a multiple-row logical "line", which
499means all characters are in use and it is continued on the next row.
500
501=item $text = $term->special_encode $string
502
503Converts a perl string into the special encoding used by rxvt-unicode,
504where one character corresponds to one screen cell. See
505C<< $term->ROW_t >> for details.
506
507=item $string = $term->special_decode $text
508
509Converts rxvt-unicodes text reprsentation into a perl string. See
510C<< $term->ROW_t >> for details.
511
411=back 512=back
513
514=head2 RENDITION
515
516Rendition bitsets contain information about colour, font, font styles and
517similar information for each screen cell.
518
519The following "macros" deal with changes in rendition sets. You should
520never just create a bitset, you should always modify an existing one,
521as they contain important information required for correct operation of
522rxvt-unicode.
523
524=over 4
525
526=item $rend = urxvt::DEFAULT_RSTYLE
527
528Returns the default rendition, as used when the terminal is starting up or
529being reset. Useful as a base
530
531=back
532
533=cut
412 534
413=head2 The C<urxvt::timer> Class 535=head2 The C<urxvt::timer> Class
414 536
415This class implements timer watchers/events. Time is represented as a 537This class implements timer watchers/events. Time is represented as a
416fractional number of seconds since the epoch. Example: 538fractional number of seconds since the epoch. Example:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines