2011-06-18 23 views
2

我正在爲某些內部分層數據實施Powershell PSProvider。一切工作正常,我可以通過常用的cd/dir命令瀏覽樹,唯一不起作用的是製表符完成。如何在psprovider中支持powershell標籤擴展?

我能看到的是當按下Tab時,Powershell在路徑中調用帶有星號的函數GetChildName()(如果鍵入「dir c」並按下Tab,GetChildName()函數將與字符串「c * 「,幾次)。我嘗試從以「c」開頭的文件夾中返回所有子名稱,但Powershell始終只顯示前面的第一個子名稱。我找不到有關此行爲的任何文檔,我錯過了什麼?

回答

0

你確定你不只是看到正常的行爲?使用默認的Tab Expansion,您只會看到第一個結果。額外按下標籤頁將循環顯示提供者返回的結果列表。

供應商有一些怪癖。我一直在使用Script Provider項目工作。我將調試代碼放在我的所有方法中,以查看哪些PowerShell正在調用,何時以及如何使用哪些參數。

0

我發現問題在哪裏 - 如果星號是名稱的一部分,提供者中的GetChildName()函數不應該嘗試擴展給定的文件名;該函數應該返回子名稱,如果它可以找到完全匹配的,或者在任何其他情況下調用base.GetChildName()。事情是這樣的:

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

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

    return ret; 
} 

BTW,我發現默認選項卡擴展是非常寬容有關,可以從GetChildName(返回的東西)功能 - 即使返回值有前/後,選項卡擴展斜線/反斜線將工作。但是,熱門標籤擴展模塊PowerTab對返回值更挑剔。