如何在Perl的Term :: Shell中完成选项卡的完成?

时间:2009-07-23 06:34:42

标签: perl tab-completion

我在Perl中使用Term::Shell包来实现CLI工具。我无法使用它完成命令部分的选项卡。

comp_CMD() - 这是由Term :: Shell提供的API,用于实现选项卡完成。 这对我没有帮助。有谁知道如何使这项工作?

示例代码:

#!/usr/bin/env perl
package Sample;
use base qw(Term::Shell);

sub prompt_str { "Sample\>" };

sub comp_show
{
    my $o = shift;
    my $word = shift;
    $o->completions($word, [qw(all work and no play is no fun at)]);
}

sub run_show
{
        print "run show\n";
}

package main;
Sample->new->cmdloop;

这是该计划的一部分:

Sample>show[TAB] 

上面的命令没有给出预期的输出..它只给了我一个标签。

3 个答案:

答案 0 :(得分:6)

确保您已安装Term::ReadLine::GnuTerm::ReadLine::Perl

答案 1 :(得分:2)

你的样本适合我。 “show”及其论点都已完成。

输入“show”后,没有什么可以完成的,它已经是一个完整的命令。为了完成第一个参数,你必须至少提供它的第一个字母;所以输入< TAB>在演出结束后,您只能到达必须输入要完成的参数的第一个字母的位置。如果你点击< TAB>连续两次,您将看到可用的完成情况。

我发现奇怪的是,如果只有一个单个可能的参数要完成,它就不会自动完成。你仍然需要提供第一个字母。这有点奇怪,但也许只是实施者的疏忽。

答案 2 :(得分:0)

首先,我没有收到“添加评论”按钮..所以我发帖作为答案。

我试过这种方式:

sample> sh"TAB"

sample>show w"TAB"

没有任何效果。

它与环境有什么关系吗?或其他什么?