2 Stimmen

Wie wird die Powershell-Tab-Erweiterung in psprovider unterstützt?

Ich implementiere einen Powershell PSProvider für einige interne hierarchische Daten. Alles funktioniert gut, ich kann durch den Baum mit üblichen cd/dir-Befehle navigieren, das einzige, was nicht funktioniert, ist Tab-Vervollständigung.

Ich kann sehen, dass Powershell die Funktion GetChildName() mit einem Sternchen im Pfad aufruft, wenn die Tabulatortaste gedrückt wird (wenn ich "dir c" eingebe und die Tabulatortaste drücke, wird die Funktion GetChildName() mehrmals mit der Zeichenfolge "c*" aufgerufen). Ich habe versucht, alle untergeordneten Namen des Ordners, der mit "c" beginnt, zurückzugeben, aber Powershell zeigt immer nur den ersten untergeordneten Namen an. Ich kann keine Dokumentation über dieses Verhalten finden, was übersehe ich?

0voto

JasonMArcher Punkte 13198

Sind Sie sicher, dass Sie nicht nur ein normales Verhalten sehen? Mit der Standard-Tabulatorerweiterung sehen Sie nur das erste Ergebnis. Wenn Sie weitere Male die Tabulatortaste drücken, wird die Liste der vom Anbieter zurückgegebenen Ergebnisse durchlaufen.

Es gibt einige Macken bei den Anbietern. Ich habe an einem gearbeitet, der das Projekt Script Provider verwendet. Ich habe Debugging-Code in alle meine Methoden eingefügt, um zu sehen, welche Methoden PowerShell wann und mit welchen Argumenten aufruft.

0voto

apetrovic Punkte 51

Ich fand, wo ist das Problem - Funktion GetChildName() im Anbieter sollte nicht versuchen, gegebenen Dateinamen zu erweitern, wenn Sternchen Teil des Namens ist; Die Funktion sollte Kind Name zurückgeben, wenn es eine genaue Übereinstimmung finden kann, oder base.GetChildName() in jedem anderen Fall aufrufen. Etwas wie dies:

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

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

    return ret;
}

BTW, fand ich, dass Standard-Tab-Erweiterung ist sehr verzeihend über Sachen, die von GetChildName() Funktion zurückgegeben werden können - auch wenn Rückgabewert haben Schrägstrich / Backslash in der vorne / hinten, Tab-Erweiterung wird funktionieren. Aber PowerTab, das populäre Tab-Erweiterungsmodul, ist viel wählerischer, was die Rückgabewerte angeht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X