2

いくつかの内部階層データにPowershellPSProviderを実装しています。すべてが正常に機能します。通常のcd/dirコマンドを使用してツリーをナビゲートできますが、機能しないのはタブ補完だけです。

私が見ることができるのは、Tabが押されたときにPowershellがパスにアスタリスクを付けて関数GetChildName()を呼び出すことです(「dirc」と入力してTabキーを押すと、GetChildName()関数は文字列「c*」で数回呼び出されます)。「c」で始まるフォルダーからすべての子の名前を返そうとしましたが、Powershellでは常に最初の子の名前だけが前面に表示されます。この動作に関するドキュメントが見つかりません。何が欠けていますか?

4

2 に答える 2

0

どこに問題があるのか​​ わかりました-アスタリスクが名前の一部である場合、プロバイダの関数 GetChildName() は指定されたファイル名を展開しようとすべきではありません。この関数は、完全に一致するものを見つけた場合は子の名前を返す必要があり、それ以外の場合は base.GetChildName() を呼び出す必要があります。このようなもの:

protected override string GetChildName(string path) {
    string name = SomeFunctionThatTriesToFindExactMatchForGivenPath(path);

    if(string.IsNullOrEmpty( ret ) )
        ret = base.GetChildName( path );

    return ret;
}

ところで、デフォルトのタブ展開は GetChildName() 関数から返される可能性があるものについて非常に寛容であることがわかりました-戻り値の前後にスラッシュ/バックスラッシュが含まれていても、タブ展開は機能します。しかし、よく使われるタブ拡張モジュールである PowerTab は、戻り値に関してはかなりうるさいです。

于 2011-07-28T11:21:18.937 に答える
0

正常な動作を確認しているだけではありませんか? デフォルトのタブ展開では、最初の結果のみが表示されます。タブをさらに数回押すと、プロバイダーから返された結果のリストが循環します。

プロバイダーにはいくつかの癖があります。私は、スクリプト プロバイダー プロジェクトを使用して 1 つに取り組んできました。すべてのメソッドにデバッグ コードを挿入して、PowerShell が呼び出しているメソッド、いつ、どの引数を使用しているかを確認しました。

于 2011-06-24T18:32:49.613 に答える