summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjluehrs2 <jluehrs2@uiuc.edu>2008-05-22 00:19:59 -0500
committerjluehrs2 <jluehrs2@uiuc.edu>2008-05-22 00:19:59 -0500
commitc854f6ad447a5a21e0b3c739bdfbf307c2f2a184 (patch)
treeb1f5c2b3315e0fafc0392c1d2342d8caf97c4f24
parent1bae28e66cf4f57f359798c8e0e252cb7d7e60c9 (diff)
downloadlanguage-teco-c854f6ad447a5a21e0b3c739bdfbf307c2f2a184.tar.gz
language-teco-c854f6ad447a5a21e0b3c739bdfbf307c2f2a184.zip
implement the 't' command, or try, at least
-rw-r--r--lib/Language/TECO.pm25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/Language/TECO.pm b/lib/Language/TECO.pm
index 587d641..9c39886 100644
--- a/lib/Language/TECO.pm
+++ b/lib/Language/TECO.pm
@@ -175,6 +175,31 @@ sub execute {
$self->push_cmd('c');
redo;
}
+ elsif (/t/i) {
+ $self->cmd(sub {
+ my $self = shift;
+ if (defined $self->{n2}) {
+ $self->{buffer}->print(($self->num));
+ }
+ else {
+ my $num = $self->num;
+ if ($num > 0) {
+ my $regex = "(?:.*\n){$num}";
+ pos $self->{buffer}->{buffer} = $self->{buffer}->{pointer};
+ $self->{buffer}->{buffer} =~ /$regex/g;
+ $self->{buffer}->print($self->{buffer}->{pointer},
+ $+[0]);
+ }
+ else {
+ my $rev = reverse $self->{buffer}->{buffer};
+ my $regex = ".*?(?:\n.*?){$num}(?=\n|\$)";
+ pos $rev = length($self->{buffer}->{buffer}) - $self->{buffer}->{pointer};
+ $rev =~ /$regex/sg;
+ $self->{buffer}->print(length($self->{buffer}->{buffer}) - $+[0], $self->{buffer}->{pointer});
+ }
+ }
+ });
+ }
}
}