Author: dylan
Date: 2004-05-28 16:38:21 -0400 (Fri, 28 May 2004)
New Revision: 181
Modified:
trunk/haver-client/lib/Haver/Client/Command.pm
Log:
added a resolve_command method.
Modified: trunk/haver-client/lib/Haver/Client/Command.pm
===================================================================
--- trunk/haver-client/lib/Haver/Client/Command.pm 2004-05-28 20:30:11 UTC
(rev 180)
+++ trunk/haver-client/lib/Haver/Client/Command.pm 2004-05-28 20:38:21 UTC
(rev 181)
@@ -37,6 +37,7 @@
$me->{alias} ||= {};
$me->{vars} ||= {};
$me->{command} ||= {};
+ $me->{command}{say} ||= 1;
}
@@ -44,6 +45,10 @@
my ($me, $s) = @_;
my ($cmd, $arg) = $me->parse($s);
+ $cmd = $me->resolve_command($cmd);
+ die "more than on possible meaning!" if not defined $cmd or ref $cmd;
+
+
if ($me->is_alias($cmd) and $cmd ne $me->{builtin_cmd}) {
my @lines = $me->eval_text($me->{alias}{$cmd}, $arg);
@@ -96,6 +101,30 @@
}
+sub resolve_command {
+ my ($me, $prefix) = @_;
+ my $len = length $prefix;
+ my %seen;
+ my @cmds = grep { not $seen{$_}++ } $me->commands, $me->aliases;
+ my @found;
+
+ return $prefix if exists $seen{$prefix};
+
+ foreach my $cmd (@cmds) {
+ if (substr($cmd, 0, $len) eq $prefix) {
+ push(@found, $cmd);
+ }
+ }
+
+ if (@found == 1) {
+ return $found[0];
+ } elsif (@found > 1) {
+ return [EMAIL PROTECTED];
+ } else {
+ return undef;
+ }
+}
+
# This is called when there is no args_$cmd function.
sub default_args {
my ($me, $cmd, $arg) = @_;