From a776c55b160c99e1c507c0c08227b692cfe1b31a Mon Sep 17 00:00:00 2001 From: jluehrs2 Date: Thu, 22 May 2008 15:41:42 -0500 Subject: make execute return anything that would be printed to stdout, rather than printing it directly --- bin/te | 3 ++- lib/Language/TECO.pm | 5 ++++- lib/Language/TECO/Buffer.pm | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/bin/te b/bin/te index d9a8489..d50aed4 100644 --- a/bin/te +++ b/bin/te @@ -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 { -- cgit v1.2.3