4

CLIツールを実装するためにPerlのTerm::Shellパッケージを使用しています。それではコマンドパートのタブ補完を行うことができません。

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] 

上記のコマンドは期待される出力を与えません..それは私にタブを与えるだけです。

4

3 に答える 3

6

Term::ReadLine::GnuまたはTerm::ReadLine::Perlがインストールされていることを確認してください。

于 2009-07-23T11:33:57.987 に答える
2

あなたのサンプルは私のために働きます。「show」とその引数の両方が完了します。

「show」と入力した後は、何も完了する必要はありません。すでに完全なコマンドです。最初の引数を完成させるには、少なくとも最初の文字を提供する必要があります。そのため、show の直後に <TAB> を入力すると、完了したい引数の最初の文字を入力する必要がある場所にしか移動できません。<TAB> を 2 回続けて押すと、利用可能な補完が表示されます。

私が奇妙に感じた唯一のことは、完了する引数が 1 つしかない場合それは自動的に完了しないということです。最初の文字を提供する必要があります。少し奇妙ですが、おそらく実装者による単なる見落としです。

于 2009-07-23T11:05:05.673 に答える
0

まず、「コメントを追加」ボタンが表示されないので、回答として投稿します。

私はこの方法を試しました:

sample> sh"TAB"

sample>show w"TAB"

何も機能しませんでした。

環境と関係あるの?または、他の何か?

于 2009-07-23T11:31:42.377 に答える