package Term::VT102::ZeroBased;
use strict;
use warnings;
use base 'Term::VT102';
our $VERSION = '1.02';
sub x { shift->SUPER::x(@_) - 1 }
sub y { shift->SUPER::y(@_) - 1 }
sub status {
my ($x, $y, @others) = shift->SUPER::status(@_);
return ($x - 1, $y - 1, @others);
}
sub row_attr {
my $self = shift;
my $row = @_ ? 1 + shift : undef;
my $start = @_ ? 1 + shift : undef;
my $end = @_ ? 1 + shift : undef;
$self->SUPER::row_attr($row, $start, $end, @_);
}
sub row_text {
my $self = shift;
my $row = @_ ? 1 + shift : undef;
my $start = @_ ? 1 + shift : undef;
my $end = @_ ? 1 + shift : undef;
$self->SUPER::row_text($row, $start, $end, @_);
}
sub row_plaintext {
my $self = shift;
my $row = @_ ? 1 + shift : undef;
my $start = @_ ? 1 + shift : undef;
my $end = @_ ? 1 + shift : undef;
$self->SUPER::row_plaintext($row, $start, $end, @_);
}
1;
__END__
=head1 NAME
Term::VT102::ZeroBased - Term::VT102 but with zero-based indices
=head1 SYNOPSIS
use Term::VT102::ZeroBased;
my $vt = Term::VT102::ZeroBased->new(cols => 80, rows => 24);
$vt->process("\e[H"); # move to top left
printf "(%d, %d)!\n", $vt->x, $vt->y; # (0, 0)!
=head1 DESCRIPTION
L<Term::VT102>, a module for terminal emulation, uses 1-based indices for
screen positions. I find this annoying. So this is a simple wrapper around
L<Term::VT102> that converts 1-based indices to 0-based indices.
Why, in particular, would you want this? Escape sequences use one-based
indices, so it makes perfect sense for L<Term::VT102> to use one-based
indices. But L<Curses> uses zero-based indices. And so do most other modules.
See L<Term::VT102> for the documentation on using these modules.
=head1 SEE ALSO
L<Term::VT102>
=head1 AUTHOR
Wrapper by Shawn M Moore, C<sartak@gmail.com>
L<Term::VT102> by Andrew Wood C<andrew.wood@ivarch.com>
=head1 COPYRIGHT AND LICENSE
Copyright 2007-2009 Shawn M Moore.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut