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.6 by root, Mon Jan 2 18:20:23 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
36like. The only reserved member is C<_ptr>, which must not be changed. 70like. All members starting with an underscore (such as C<_ptr> or
71C<_hook>) are reserved for internal uses and must not be accessed or
72modified).
37 73
38When objects are destroyed on the C++ side, the perl object hashes are 74When objects are destroyed on the C++ side, the perl object hashes are
39emptied, so its best to store related objects such as time watchers and 75emptied, so its best to store related objects such as time watchers and
40the like inside the terminal object so they get destroyed as soon as the 76the like inside the terminal object so they get destroyed as soon as the
41terminal is destroyed. 77terminal is destroyed.
124code is run after this hook, and takes precedence. 160code is run after this hook, and takes precedence.
125 161
126=item on_refresh_end $term 162=item on_refresh_end $term
127 163
128Called 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).
129 171
130=back 172=back
131 173
132=head2 Functions in the C<urxvt> Package 174=head2 Functions in the C<urxvt> Package
133 175
172 unless $msg =~ /\n$/; 214 unless $msg =~ /\n$/;
173 urxvt::warn ($msg); 215 urxvt::warn ($msg);
174 }; 216 };
175} 217}
176 218
219my @hook_count;
177my $verbosity = $ENV{URXVT_PERL_VERBOSITY} || 10; 220my $verbosity = $ENV{URXVT_PERL_VERBOSITY};
178 221
179sub verbose { 222sub verbose {
180 my ($level, $msg) = @_; 223 my ($level, $msg) = @_;
181 warn "$msg\n"; #d# 224 warn "$msg\n" if $level <= $verbosity;
182} 225}
183 226
184my @invoke_cb; 227# find on_xxx subs in the package and register them
228# as hooks
229sub register_package($) {
230 my ($pkg) = @_;
231
232 for my $htype (0.. $#HOOKNAME) {
233 my $name = $HOOKNAME[$htype];
234
235 my $ref = $pkg->can ("on_" . lc $name)
236 or next;
237
238 $term->{_hook}[$htype]{$ref*1} = $ref;
239 $hook_count[$htype]++
240 or set_should_invoke $htype, 1;
241 }
242}
243
244my $script_pkg = "script0000";
245my %script_pkg;
246
247# load a single script into its own package, once only
248sub script_package($) {
249 my ($path) = @_;
250
251 $script_pkg{$path} ||= do {
252 my $pkg = "urxvt::" . ($script_pkg++);
253
254 verbose 3, "loading script '$path' into package '$pkg'";
255
256 open my $fh, "<:raw", $path
257 or die "$path: $!";
258
259 my $source = "package $pkg; use strict; use utf8;\n"
260 . "#line 1 \"$path\"\n{\n"
261 . (do { local $/; <$fh> })
262 . "\n};\n1";
263
264 eval $source or die "$path: $@";
265
266 $pkg
267 }
268}
185 269
186# called by the rxvt core 270# called by the rxvt core
187sub invoke { 271sub invoke {
188 local $term = shift; 272 local $term = shift;
189 my $htype = shift; 273 my $htype = shift;
190 274
191 my $cb = $invoke_cb[$htype]; 275 if ($htype == 0) { # INIT
276 my @dirs = ((split /:/, $term->resource ("perl_lib")), "$LIBDIR/perl");
277
278 for my $ext (split /:/, $term->resource ("perl_ext")) {
279 my @files = grep -f $_, map "$_/$ext", @dirs;
280
281 if (@files) {
282 register_package script_package $files[0];
283 } else {
284 warn "perl extension '$ext' not found in perl library search path\n";
285 }
286 }
287
288 } elsif ($htype == 1) { # DESTROY
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]
298 or return;
192 299
193 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $term, @_) . ")" 300 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $term, @_) . ")"
194 if $verbosity >= 10; 301 if $verbosity >= 10;
195 302
196 while (my ($k, $v) = each %$cb) { 303 while (my ($k, $v) = each %$cb) {
197 return 1 if $v->($term, @_); 304 return 1 if $v->($term, @_);
198 } 305 }
199 306
200 0 307 0
201} 308}
202
203# find on_xxx subs in the package and register them
204# as hooks
205sub register_package($) {
206 my ($pkg) = @_;
207
208 for my $hook (0.. $#HOOKNAME) {
209 my $name = $HOOKNAME[$hook];
210
211 my $ref = $pkg->can ("on_" . lc $name)
212 or next;
213
214 $invoke_cb[$hook]{$ref*1} = $ref;
215 set_should_invoke $hook, 1;
216 }
217}
218
219my $script_pkg = "script0000";
220my %script_pkg;
221
222# load a single script into its own package, once only
223sub load_script($) {
224 my ($path) = @_;
225
226 $script_pkg{$path} ||= do {
227 my $pkg = $script_pkg++;
228 verbose 3, "loading script '$path' into package '$pkg'";
229
230 open my $fh, "<:raw", $path
231 or die "$path: $!";
232
233 eval "package $pkg; use strict; use utf8;\n"
234 . "#line 1 \"$path\"\n"
235 . do { local $/; <$fh> }
236 or die "$path: $@";
237
238 register_package $pkg;
239
240 $pkg
241 };
242}
243
244sub load_scripts($) {
245 my ($dir) = @_;
246
247 verbose 3, "loading scripts from '$dir'";
248
249 load_script $_
250 for grep -f $_,
251 <$dir/perl-ext/*>;
252}
253
254sub on_init {
255 my ($term) = @_;
256
257 my $libdir = $term->resource ("perl_lib");
258
259 load_scripts $libdir
260 if defined $libdir;
261}
262
263register_package __PACKAGE__;
264load_scripts $LIBDIR;
265 309
266=back 310=back
267 311
268=head2 The C<urxvt::term> Class 312=head2 The C<urxvt::term> Class
269 313
292 336
293 answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont 337 answerbackstring backgroundPixmap backspace_key boldFont boldItalicFont
294 borderLess color cursorBlink cursorUnderline cutchars delete_key 338 borderLess color cursorBlink cursorUnderline cutchars delete_key
295 display_name embed ext_bwidth fade font geometry hold iconName 339 display_name embed ext_bwidth fade font geometry hold iconName
296 imFont imLocale inputMethod insecure int_bwidth intensityStyles 340 imFont imLocale inputMethod insecure int_bwidth intensityStyles
297 italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 341 italicFont jumpScroll lineSpace loginShell mapAlert menu meta8 modifier
298 modifier mouseWheelScrollPage name pastableTabs path perl perl_eval 342 mouseWheelScrollPage name pastableTabs path perl_eval perl_ext
299 perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd 343 perl_lib pointerBlank pointerBlankDelay preeditType print_pipe pty_fd
300 reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating 344 reverseVideo saveLines scrollBar scrollBar_align scrollBar_floating
301 scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput 345 scrollBar_right scrollBar_thickness scrollTtyKeypress scrollTtyOutput
302 scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle 346 scrollWithBuffer scrollstyle secondaryScreen secondaryScroll selectstyle
303 shade term_name title transparent transparent_all tripleclickwords 347 shade term_name title transparent transparent_all tripleclickwords
383Convert the given locale-encoded octets into a perl string. 427Convert the given locale-encoded octets into a perl string.
384 428
385=item $term->tt_write ($octets) 429=item $term->tt_write ($octets)
386 430
387Write 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
388pass characters instead of octets, you should convetr you strings first to 432pass characters instead of octets, you should convert your strings first
389the locale-specific encoding using C<< $term->locale_encode >>. 433to the locale-specific encoding using C<< $term->locale_encode >>.
390 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
391=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
392 534
393=head2 The C<urxvt::timer> Class 535=head2 The C<urxvt::timer> Class
394 536
395This class implements timer watchers/events. Time is represented as a 537This class implements timer watchers/events. Time is represented as a
396fractional 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