Как поддержать расширение вкладки powershell в psprovider? - PullRequest
2 голосов
/ 19 июня 2011

Я использую Powershell PSProvider для некоторых внутренних иерархических данных.Все работает нормально, я могу перемещаться по дереву с помощью обычных команд cd / dir, единственное, что не работает - это завершение табуляции.

Что я вижу, так это то, что Powershell вызывает функцию GetChildName () со звездочкой в ​​пути при нажатии клавиши Tab (если я наберу «dir c» и нажму Tab, функция GetChildName () будет вызываться со строкой »с * ", несколько раз).Я попытался вернуть все дочерние имена из папки, которая начинается с «c», но Powershell всегда отображает только первое дочернее имя спереди.Я не могу найти никаких документов об этом поведении, что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

Я обнаружил, в чем проблема - функция 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, популярный модуль расширения вкладок, гораздо более требователен к возвращаемым значениям.

0 голосов
/ 24 июня 2011

Вы уверены, что не просто видите нормальное поведение? С расширением вкладки по умолчанию вы увидите только первый результат. Нажатие на вкладку дополнительное время будет циклически перебирать список возвращенных результатов от провайдера.

Есть некоторые причуды с провайдерами. Я работал над одним с использованием проекта Script Provider. Я добавил отладочный код во все мои методы, чтобы увидеть, какие из них вызывал PowerShell, когда и с какими аргументами.

...