2009-07-23 7 views
4

私は、CLIツールを実装するためにPerlでTerm::Shellパッケージを使用しています。私はそれでコマンド部のタブ補完を行うことができません。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] 

上記のコマンドのdoesntが期待される出力を与える...それはちょうど私のタブを提供します。

+1

作業を試行したサンプルコードを投稿してください。 – Inshallah

+0

答えを削除し、サンプルコードを質問に追加してください。また、サンプルコードの各行を4つのスペースでインデントして、コードブロックとして表示させてください。 – Inshallah

+1

@Anandan:あなたのコードで書式を整理しようとしましたが、Inshallaは正しいです。回答を削除し、質問の一部としてコードを投稿してください。編集ボタンを使用して、コードをコードとして適切にフォーマットするのに役立ちます。 – Telemachus

答えて

2

あなたのサンプルが私に適しています。 "ショー"とその議論が完了します。

「show」と入力すると、これ以上完了することはありません。すでに完全なコマンドです。最初の引数を取得するには、少なくとも最初の文字を指定する必要があります。したがって、表示の直後に<TAB>と入力すると、完了したい引数の最初の文字を入力しなければならない場所に移動できます。 <TAB>を2回連続して実行すると、使用可能な補完が表示されます。

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

+0

ここに同じ:sh [タブ]が表示に拡大 – Cebjyre

0

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

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

sample> sh"TAB" 

sample>show w"TAB" 

何も働きました。

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

+0

あなた自身の答えを編集できるはずです。 –

+0

コメントをするには、少なくとも50ポイントのrepが必要です。 –

関連する問題