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) = @_;


Reply via email to