使用comp_*
樣式處理程序,人們只能匹配一個完成對最後一個不完整的單詞。幸運的是,您可以通過覆蓋下面的catch_comp函數來獲得所需的結果;它可以讓抗全命令行一場比賽:
my %completion_tree = (
stack => { under => [],
over => [qw(flow sample junk)] }
);
sub catch_comp {
my $o = shift;
my ($cmd, $word, $line, $start) = @_;
my $completed = substr $line, 0, $start;
$completed =~ s/^\s*//;
my $tree = \%completion_tree;
foreach (split m'\s+', $completed) {
last if ref($tree) ne 'HASH';
$tree = $tree->{$_};
}
my @completions;
$_ = ref($tree);
@completions = @$tree if /ARRAY/;
@completions = keys %$tree if /HASH/;
@completions = ($tree)if /SCALAR/;
return $o->completions($word, [@completions]);
}
好吧,現在我已經看了Term :: Shell,我注意到你需要寫'sub comp_stack`。我錯了嗎?你的`comp_stack`中有什麼? – 2009-07-24 13:13:26