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.23 by root, Tue Jan 3 19:42:53 2006 UTC vs.
Revision 1.25 by root, Tue Jan 3 21:08:39 2006 UTC

383 my $cb = $TERM->{_hook}[$htype] 383 my $cb = $TERM->{_hook}[$htype]
384 or return; 384 or return;
385 385
386 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")" 386 verbose 10, "$HOOKNAME[$htype] (" . (join ", ", $TERM, @_) . ")"
387 if $verbosity >= 10; 387 if $verbosity >= 10;
388
389 keys %$cb;
388 390
389 while (my ($pkg, $cb) = each %$cb) { 391 while (my ($pkg, $cb) = each %$cb) {
390 return 1 392 return 1
391 if $cb->( 393 if $cb->(
392 $TERM->{$pkg} ||= do { 394 $TERM->{$pkg} ||= do {
405 $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/ 407 $urxvt::term::proxy::AUTOLOAD =~ /:([^:]+)$/
406 or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable"; 408 or die "FATAL: \$AUTOLOAD '$urxvt::term::proxy::AUTOLOAD' unparsable";
407 409
408 eval qq{ 410 eval qq{
409 sub $urxvt::term::proxy::AUTOLOAD { 411 sub $urxvt::term::proxy::AUTOLOAD {
410 unshift \@_, shift->{term}; 412 my \$proxy = shift;
411 goto &urxvt::term::$1; 413 \$proxy->{term}->$1 (\@_)
412 } 414 }
413 1 415 1
414 } or die "FATAL: unable to compile method forwarder: $@"; 416 } or die "FATAL: unable to compile method forwarder: $@";
415 417
416 goto &$urxvt::term::proxy::AUTOLOAD; 418 goto &$urxvt::term::proxy::AUTOLOAD;
583=item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]]) 585=item $text = $term->ROW_t ($row_number[, $new_text[, $start_col]])
584 586
585Returns the text of the entire row with number C<$row_number>. Row C<0> 587Returns the text of the entire row with number C<$row_number>. Row C<0>
586is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost 588is the topmost terminal line, row C<< $term->$ncol-1 >> is the bottommost
587terminal line. The scrollback buffer starts at line C<-1> and extends to 589terminal line. The scrollback buffer starts at line C<-1> and extends to
588line C<< -$term->nsaved >>. 590line C<< -$term->nsaved >>. Nothing will be returned if a nonexistent line
591is requested.
589 592
590If C<$new_text> is specified, it will replace characters in the current 593If C<$new_text> is specified, it will replace characters in the current
591line, starting at column C<$start_col> (default C<0>), which is useful 594line, starting at column C<$start_col> (default C<0>), which is useful
592to replace only parts of a line. The font index in the rendition will 595to replace only parts of a line. The font index in the rendition will
593automatically be updated. 596automatically be updated.
615 618
616See the section on RENDITION, above. 619See the section on RENDITION, above.
617 620
618=item $length = $term->ROW_l ($row_number[, $new_length]) 621=item $length = $term->ROW_l ($row_number[, $new_length])
619 622
620Returns the number of screen cells that are in use ("the line length"). If 623Returns the number of screen cells that are in use ("the line
621it is C<-1>, then the line is part of a multiple-row logical "line", which 624length"). Unlike the urxvt core, this returns C<< $term->ncol >> if the
622means all characters are in use and it is continued on the next row. 625line is joined with the following one.
623 626
627=item $bool = $term->is_longer ($row_number)
628
629Returns true if the row is part of a multiple-row logical "line" (i.e.
630joined with the following row), which means all characters are in use
631and it is continued on the next row (and possibly a continuation of the
632previous row(s)).
633
634=item $line = $term->line ($row_number)
635
636Create and return a new C<urxvt::line> object that stores information
637about the logical line that row C<$row_number> is part of. It supports the
638following methods:
639
640=over 4
641
642=item $text = $line->t
643
644Returns the full text of the line, similar to C<ROW_t>
645
646=item $rend = $line->r
647
648Returns the full rendition array of the line, similar to C<ROW_r>
649
650=item $length = $line->l
651
652Returns the length of the line in cells, similar to C<ROW_l>.
653
654=item $rownum = $line->beg
655
656=item $rownum = $line->end
657
658Return the row number of the first/last row of the line, respectively.
659
660=item $offset = $line->offset_of ($row, $col)
661
662Returns the character offset of the given row|col pair within the logical
663line.
664
665=item ($row, $col) = $line->coord_of ($offset)
666
667Translates a string offset into terminal coordinates again.
668
669=back
670
671=cut
672
673sub urxvt::term::line {
674 my ($self, $row) = @_;
675
676 my $maxrow = $self->nrow - 1;
677
678 my ($beg, $end) = ($row, $row);
679
680 --$beg while $self->ROW_is_longer ($beg - 1);
681 ++$end while $self->ROW_is_longer ($end) && $end < $maxrow;
682
683 bless {
684 term => $self,
685 beg => $beg,
686 end => $end,
687 len => ($end - $beg) * $self->ncol + $self->ROW_l ($end),
688 }, urxvt::line::
689}
690
691sub urxvt::line::t {
692 my ($self) = @_;
693
694 substr +(join "", map $self->{term}->ROW_t ($_), $self->{beg} .. $self->{end}),
695 0, $self->{len}
696}
697
698sub urxvt::line::r {
699 my ($self) = @_;
700
701 my $rend = [
702 map @{ $self->{term}->ROW_r ($_) }, $self->{beg} .. $self->{end}
703 ];
704 $#$rend = $self->{len} - 1;
705 $rend
706}
707
708sub urxvt::line::beg { $_[0]{beg} }
709sub urxvt::line::end { $_[0]{end} }
710sub urxvt::line::l { $_[0]{len} }
711
712sub urxvt::line::offset_of {
713 my ($self, $row, $col) = @_;
714
715 ($row - $self->{beg}) * $self->{term}->ncol + $col
716}
717
718sub urxvt::line::coord_of {
719 my ($self, $offset) = @_;
720
721 use integer;
722
723 (
724 $offset / $self->{term}->ncol + $self->{beg},
725 $offset % $self->{term}->ncol
726 )
727}
728
729=item ($row, $col) = $line->coord_of ($offset)
624=item $text = $term->special_encode $string 730=item $text = $term->special_encode $string
625 731
626Converts a perl string into the special encoding used by rxvt-unicode, 732Converts a perl string into the special encoding used by rxvt-unicode,
627where one character corresponds to one screen cell. See 733where one character corresponds to one screen cell. See
628C<< $term->ROW_t >> for details. 734C<< $term->ROW_t >> for details.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines