diff options
-rw-r--r-- | bin/te | 3 | ||||
-rw-r--r-- | lib/Language/TECO.pm | 5 | ||||
-rw-r--r-- | lib/Language/TECO/Buffer.pm | 6 |
3 files changed, 11 insertions, 3 deletions
@@ -33,8 +33,9 @@ COMMAND: while (1) { print "\n"; ReadMode 3; local $SIG{INT} = sub { die "Execution interrupted" }; - eval { $te->execute($command) }; + my $result = eval { $te->execute($command) }; print "? $@\n" if $@; + print $result if defined $result; ReadMode 4; last KEY; } diff --git a/lib/Language/TECO.pm b/lib/Language/TECO.pm index 7d2d63e..4aee5a3 100644 --- a/lib/Language/TECO.pm +++ b/lib/Language/TECO.pm @@ -90,6 +90,7 @@ sub push_cmd { sub execute { my $self = shift; $self->{command} = shift; + my $ret = ''; while ($self->{command}) { $_ = substr($self->{command}, 0, 1, ''); @@ -215,11 +216,13 @@ sub execute { $self->num(1); } my $num = $self->num; - $self->{buffer}->print($self->{buffer}->get_line_offset($num)); + $ret .= $self->{buffer}->print($self->{buffer}->get_line_offset($num)); } }); } } + + return $ret; } =head1 NAME diff --git a/lib/Language/TECO/Buffer.pm b/lib/Language/TECO/Buffer.pm index 66440f9..7ba2923 100644 --- a/lib/Language/TECO/Buffer.pm +++ b/lib/Language/TECO/Buffer.pm @@ -15,11 +15,13 @@ sub set { my $pointer = shift; die 'Pointer off page' if $pointer < 0 || $pointer > length $self->{buffer}; $self->{pointer} = $pointer; + return; } sub offset { my $self = shift; $self->set($self->{pointer} + shift); + return; } sub insert { @@ -27,6 +29,7 @@ sub insert { my $text = shift; substr($self->{buffer}, $self->{pointer}, 0) = $text; $self->offset(length $text); + return; } sub delete { @@ -48,6 +51,7 @@ sub delete { die "Pointer off page" if $self->{pointer} + $length > length $self->{buffer}; substr($self->{buffer}, $self->{pointer}, $length) = ''; + return; } sub endpos { length shift->{buffer} } @@ -57,7 +61,7 @@ sub curpos { shift->{pointer} } sub print { my $self = shift; my ($start, $end) = @_; - print substr $self->{buffer}, $start, $end - $start; + return substr $self->{buffer}, $start, $end - $start; } sub get_line_offset { |